麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python版大富翁源代碼分享

2020-02-15 23:44:15
字體:
來源:轉載
供稿:網友

本文實例為大家分享了python版大富翁游戲的具體代碼,供大家參考,具體內容如下

# -*- coding: utf-8 -*-  # code by: 物網141 王璞劼Khalil# name:   理工大富翁beta2.0# describe: 基于python的一個2D大富翁游戲'''1.游戲地圖為自己使用各種網絡素材制作; 各種按鈕和選項,小圖標等也是使用PS制作。2.聲音效果主要為背景音樂和幾種游戲中音效;3.游戲設定了兩個類:玩家和建筑 玩家的參數和方法都在代碼中給出; 具體有:移動方法、位置判斷方法、  購買房屋方法、添加小房子方法、 事件判斷方法。4.玩家在大富翁的主要操作是投擲骰子,由隨機函數 進行判定然后進行移動,進行位置判斷,然后開始 進行相關的判定。5.游戲中的按鍵有:是、否、和結束回合; 每個按鍵由沒按下與按下兩種狀態的圖片組成, 這個設計花費了一定時間。 還有 開始游戲 和 扔骰子 的兩個明暗按鈕, 由pygame優化后的一個函數實現。6.玩家的位置與電腦重疊時會將雙方的位置進行一定 偏移,防止進行覆蓋,分不清自己的位置。7.游戲基礎功能有移動,購買房子,在已經購買的房子下 搭建新的小房子增加過路費,被收費,判斷勝負的基礎 功能,此外還加入了幸運事件:  財神 - 免收費一次  衰神 - 雙倍被收費一次  破壞神 - 直接破壞一個建筑 無論敵我  土地神 - 強占對面建筑 這四項功能在位置處于左上角和右下角的時候會被觸發, 添加了很多游戲樂趣哦~~~ ^_^8.游戲基于python的一個模塊pygame實現,給我提供了很 多快樂的時光,謝謝老師的閱覽與郭寧同學的協助答辯 :)''' #####################準備工作################## # 初始化各種模塊import pygameimport randomimport sys # 定義類class Player():  def __init__(self, image ,name , isPlayer):    self.name = name    self.money = 10000    self.isGoingToMove = False     self.movable = True    self.image = image    self.position = 0     self.temp_position = False    self.dice_value = 0    self.locatedBuilding = 0    self.showText = []    self.isPlayer = isPlayer    self.ownedBuildings = []    self.isShowText = False    self.soundPlayList = 0    self.caishen = 0    self.shuaishen = 0    self.tudishen = 0    self.pohuaishen = 0        def judgePosition(self,buildings): # 位置判斷 返回值是所在位置的建筑    for each in buildings:      for every in each.location:        if self.position == every:          return each                      # 當使用元組時 當元組中只有一個元素時 發現該元素不可迭代       # 出現錯誤 換成列表后解決      '''       try:        for every in each.location:          if self.position == every:            print(each.name)      except:        if self.position == every:          print(each.name)      '''        def buyaBuilding(self,isPressYes):  # 購買方法    if isPressYes and self.locatedBuilding.owner != self.name:      self.locatedBuilding.owner = self.name      self.locatedBuilding.wasBought = True      self.ownedBuildings.append(self.locatedBuilding)      self.money -= self.locatedBuilding.price      self.showText = [self.name + '購買了' + self.locatedBuilding.name + '!']      self.soundPlayList = 1      return True    else:      return False                 def addaHouse(self,isPressYes): # 在建筑物上添加一個房子    try:      if isPressYes and self.locatedBuilding.owner == self.name:        self.locatedBuilding.builtRoom += 1        self.money -= self.locatedBuilding.payment        self.showText = [self.name + '在' + self.locatedBuilding.name + '上!','蓋了一座房子!',/                '有%d' % self.locatedBuilding.builtRoom + '個房子了!',/                "它的過路費是%d" % (self.locatedBuilding.payment * /                        (self.locatedBuilding.builtRoom + 1)) ]        self.soundPlayList = 2        return True      else:        return False    except:      pass    def move(self,buildings,allplayers):  # 移動方法 返回值是所在的建筑位置    self.dice_value = random.randint(1,6)    self.position += self.dice_value    if self.position >= 16:      self.position -= 16    self.locatedBuilding = self.judgePosition(buildings)    self.isShowText = True    return self.eventInPosition(allplayers)      def eventInPosition(self,allplayers):    # 判斷在建筑位置應該發生的事件        building = self.locatedBuilding    if building.name != '空地':      if self.locatedBuilding.wasBought == False: # 未購買的時候顯示建筑的數據!        if self.isPlayer == True:          textLine0 = self.name +'扔出了' + '%d'% self.dice_value + '點!'          textLine1 = self.name +'來到了' + building.name + '!'          textLine2 = '購買價格:%d' % building.price          textLine3 = '過路收費:%d' % building.payment          textLine4 = '是否購買?'          self.showText = [textLine0,textLine1,textLine2,textLine3,textLine4]          return True        else :          self.addaHouse(not self.buyaBuilding(True))                  # ----- 動畫 -------        # ----- 是否購買 ------      elif building.owner == self.name: # 路過自己的房子開始加蓋建筑!        if self.pohuaishen == 1:          textLine0 = self.name + '破壞神附體!'          textLine1 = '摧毀了自己的房子!'          building.owner = 'no'          building.wasBought = False          self.showText = [textLine0,textLine1]          self.pohuaishen = 0        else:          if self.isPlayer == True:            textLine0 = self.name + '扔出了' + '%d'% self.dice_value + '點!'            textLine1 = '來到了ta的'+ self.locatedBuilding.name +'!'            textLine2 = '可以加蓋小房子!'             textLine3 = '加蓋收費:%d' % building.payment            textLine4 = '是否加蓋?'            self.showText = [textLine0,textLine1,textLine2,textLine3,textLine4]            return True          # ----- 動畫-------          else:            self.addaHouse(True)      else:        for each in allplayers: # 被收費!          if self.locatedBuilding.owner == each.name and each.name != self.name:            if self.caishen == 1:              textLine0 = self.name + '財神附體!'              textLine1 = '免除過路費%d!' % (building.payment * (building.builtRoom + 1))              self.showText = [textLine0,textLine1]              self.caishen = 0            else:              if self.tudishen == 1:                textLine0 = self.name + '土地神附體!'                textLine1 = '強占土地!'                textLine2 = building.name + '現在屬于'+ self.name                self.locatedBuilding.owner = self.name                self.showText = [textLine0,textLine1,textLine2]                self.tudishen = 0              else:                if self.pohuaishen == 1:                  textLine0 = self.name + '破壞神附體!'                  textLine1 = '摧毀了對手的房子!'                  building.owner = 'no'                  building.wasBought = False                  self.showText = [textLine0,textLine1]                  self.pohuaishen = 0                  else:                  textLine0 = self.name + '扔出了' + '%d'% self.dice_value + '點!'                  textLine1 = self.name+ '來到了'+ each.name+'的:'                   textLine2 = building.name + ',被收費!'                  if self.shuaishen == 1:                    textLine3 = '過路收費:%d*2!' % (building.payment * (building.builtRoom + 1)*2)                    self.shuaishen = 0                  else:                    textLine3 = '過路收費:%d' % (building.payment * (building.builtRoom + 1))                  textLine4 = '哦!'+ self.name +'好倒霉!'                  self.showText = [textLine0,textLine1,textLine2,textLine3,textLine4]                  # 收費!                  self.money -= building.payment * (building.builtRoom + 1)                  each.money += building.payment * (building.builtRoom + 1)                  self.soundPlayList = 3                  # ----- 動畫-------                else:      # 發現不能處理在空地上的情況 于是使用 try & except 來解決!然后加入了幸運事件功能!      # 后來發現 try except 弊端太大 找不到錯誤的根源 換為if else嵌套。。      whichone = self.dice_value % 4      if whichone == 0:        self.caishen = 1        textLine2 = '遇到了財神!'        textLine3 = '免一次過路費!'      if whichone == 1:        self.shuaishen = 1        textLine2 = '遇到了衰神!'        textLine3 = '過路費加倍一次!'      if whichone == 2:        self.tudishen = 1        textLine2 = '遇到了土地神!'        textLine3 = '強占一次房子!'      if whichone == 3:        self.pohuaishen = 1        textLine3 = '摧毀路過的房子!'        textLine2 = '遇到了破壞神!'      textLine0 = self.name +'扔出了' +'%d'% self.dice_value + '點!'      textLine1 = '來到了運氣地點!'      self.showText = [textLine0,textLine1,textLine2,textLine3]       class Building():              # 好像所有功能都在Player類里實現了=_=  def __init__(self,name,price,payment,location):    self.name = name    self.price = price    self.payment = payment    self.location = location    self.wasBought = False        # 是否被購買    self.builtRoom = 0          # 小房子建造的數目    self.owner = 'no' # 帶透明度的繪圖方法 by turtle 2333def blit_alpha(target,source,location,opacity):  x = location[0]  y = location[1]  temp = pygame.Surface((source.get_width(),source.get_height())).convert()  temp.blit(target , (-x , -y))  temp.blit(source,(0,0))  temp.set_alpha(opacity)  target.blit(temp,location) ########################主函數#########################    def main():  pygame.init()  clock = pygame.time.Clock()    # 初始化屏幕  size = (1270,768)  screen = pygame.display.set_mode(size)  pygame.display.set_caption("理工大大富翁 - made by 王璞劼")    # 讀取字體以及有關數據  textColorInMessageBox = (141,146,152)  white = (255,255,255)  black = (0,0,0)  red = (255,0,0)  font = pygame.font.Font('resource//font//myfont.ttf',30)      # 讀取資源  backgroud = pygame.image.load("resource//pic//GameMap.png")  chess = pygame.image.load("resource//pic//chess.png")  chess_com = pygame.image.load("resource//pic//chess1.png")  bigdice_image = pygame.image.load("resource//pic//dice.png").convert_alpha()  dice_1 = pygame.image.load("resource//pic//dice_1.png")  dice_2 = pygame.image.load("resource//pic//dice_2.png")  dice_3 = pygame.image.load("resource//pic//dice_3.png")  dice_4 = pygame.image.load("resource//pic//dice_4.png")  dice_5 = pygame.image.load("resource//pic//dice_5.png")  dice_6 = pygame.image.load("resource//pic//dice_6.png")  dices = [dice_1,dice_2,dice_3,dice_4,dice_5,dice_6]  yes = pygame.image.load("resource//pic//yes.png")  yes2 = pygame.image.load("resource//pic//yes2.png")  no = pygame.image.load("resource//pic//no.png")  no2 = pygame.image.load("resource//pic//no2.png")  GameStart = pygame.image.load("resource//pic//GameStart.png")  StartGameButton = pygame.image.load("resource//pic//StartGameButton.png").convert_alpha()  turnover = pygame.image.load("resource//pic//turnover.png")  turnover2 = pygame.image.load("resource//pic//turnover2.png")  shuaishen = pygame.image.load("resource//pic//shuaishen.png").convert_alpha()  tudishen = pygame.image.load("resource//pic//tudishen.png").convert_alpha()  caishen = pygame.image.load("resource//pic//caishen.png").convert_alpha()  pohuaishen = pygame.image.load("resource//pic//pohuaishen.png").convert_alpha()    rollDiceSound = pygame.mixer.Sound("resource//sound//rolldicesound.wav")  bgm = pygame.mixer.music.load("resource//sound//bgm.ogg")  throwcoin = pygame.mixer.Sound("resource//sound//throwcoin.wav")  moneysound = pygame.mixer.Sound("resource//sound//moneysound.wav")  aiyo = pygame.mixer.Sound("resource//sound//aiyo.wav")  didong = pygame.mixer.Sound("resource//sound//didong.wav")    # PlayList 在對象中設置應該播放的聲音  playList = [moneysound ,throwcoin ,aiyo]    # 各種Surface的rect   bigdice_rect = bigdice_image.get_rect()  bigdice_rect.left , bigdice_rect.top = 50 , 600  yes_rect = yes.get_rect()  yes_rect.left , yes_rect.top = 500,438   no_rect = no.get_rect()  no_rect.left , no_rect.top = 630,438  button_rect = StartGameButton.get_rect()  button_rect.left , button_rect.top = 1003,30  turnover_rect = turnover.get_rect()  turnover_rect.left , turnover_rect.top = 1035,613    # 實例化對象  players = []  computers = []  allplayers = []  player_1 = Player(chess , '玩家' , True )  player_com1 = Player(chess_com , '電腦' , False )  players.append(player_1)  computers.append(player_com1)  allplayers.append(player_1)  allplayers.append(player_com1)    presentPlayer = player_com1    # 初始化建筑物數據  gate = Building('大門',1000,200,[1,2])  fountain = Building('噴泉',2000,400,[3,4])  path = Building('小道',800,160,[5])  library = Building('圖書館',2000,400,[6,7])  kongdi1 = Building('空地',0,0,[8])  classroomTen = Building('教十',1200,240,[9,10])  classroomNine = Building('教九',1200,240,[11,12])  resOne = Building('三餐廳',800,160,[13])  resTwo = Building('二餐廳',800,160,[14])  resThree = Building('一餐廳',800,160,[15])  kongdi2 = Building('空地',0,0,[0])    buildings = [gate,fountain,path,library,classroomNine,/         classroomTen,resOne,resThree,resTwo,kongdi1,kongdi2]        # 坐標數據 同時處理坐標數據 使之合適  MapXYvalue = [(435.5,231.5),(509.5,231.5),(588.5,231.5),(675.5,231.5),(758.5,231.5),/         (758.5,317.0),(758.5,405.5),(758.5,484.5),(758.5,558.5),(679.5,558.5),/         (601.5,558.5),(518.5,556.5),(435.5,556.5),(435.5,479.5),(435.5,399.0),/         (435.5,315.5)         ]    MapChessPosition_Player = []  MapChessPosition_Com = []  MapChessPosition_Original = []  MapChessPosition_Payment = []    MapMessageBoxPosition = (474.1 , 276.9)  YesNoMessageBoxPosition = [(500,438) , (630,438)]  StartGameButtonPosition = (1003,30)  TurnOvwrButtonPosition = (1035,613)            # 調整位置  for i in range(0,16):    MapChessPosition_Original.append((MapXYvalue[i][0]-50,MapXYvalue[i][1]-80))    MapChessPosition_Player.append((MapXYvalue[i][0]-70,MapXYvalue[i][1]-60))    MapChessPosition_Com.append((MapXYvalue[i][0]-30,MapXYvalue[i][1]-100))    MapChessPosition_Payment.append((MapXYvalue[i][0]-30,MapXYvalue[i][1]-15))      # 循環時所用的一些變量     running = True  image_alpha = 255  button_alpha = 255  half_alpha = 30  showdice = True  showYes2 = False  showNo2 = False  showYes_No = False  pressYes = False  whetherYes_NoJudge = False  gameStarted = False  showButton2 = False    # 播放背景音樂  pygame.mixer.music.play(100)  #################進入游戲循環!########################      # 循環開始!   while running:    if not gameStarted:      for event in pygame.event.get():        if event.type == pygame.QUIT:          sys.exit()                # 明暗觸發 鼠標位置判斷         if event.type == pygame.MOUSEMOTION:          if button_rect.collidepoint(event.pos):            button_alpha = 255            else:            button_alpha = 120                     if event.type == pygame.MOUSEBUTTONDOWN:                     if button_rect.collidepoint(event.pos): # 按下按鈕            didong.play()                       gameStarted = True             screen.blit(GameStart , (0,0))          blit_alpha(screen, StartGameButton, StartGameButtonPosition, button_alpha)                if gameStarted:          for event in pygame.event.get():        if event.type == pygame.QUIT:          sys.exit()                # 明暗觸發 鼠標位置判斷        if event.type == pygame.MOUSEMOTION:          if bigdice_rect.collidepoint(event.pos):            image_alpha = 255            else:            image_alpha = 190                            if event.type == pygame.MOUSEBUTTONDOWN:                    if bigdice_rect.collidepoint(event.pos): # 按骰子            if presentPlayer != player_1:              rollDiceSound.play(1, 2000)              pygame.time.delay(2000)              showYes_No = player_1.move(buildings,allplayers)              whetherYes_NoJudge = showYes_No              presentPlayer = player_1            else:              presentPlayer.showText = ['還沒到你的回合!']                      if turnover_rect.collidepoint(event.pos): # 按回合結束            showButton2 = True            if presentPlayer != player_com1:              showYes_No = player_com1.move(buildings,allplayers)              presentPlayer = player_com1            else:              presentPlayer.showText = ['還沒到你的回合!']                        else:            showButton2 = False                      # 不顯示Yes_No的時候不能點擊它們!          if whetherYes_NoJudge == True:             if yes_rect.collidepoint(event.pos): # 按是否              showYes2 = True                          if no_rect.collidepoint(event.pos): # 按是否              showNo2 = True                   if event.type == pygame.MOUSEBUTTONUP:                    if turnover_rect.collidepoint(event.pos): # 按回合結束            showButton2 = False                    if yes_rect.collidepoint(event.pos): # 按是否            showYes2 = False            showYes_No = False            # 只有在可以判定的時候才能算按下了是 同時將判斷條件置為空            if whetherYes_NoJudge == True:              pressYes = True              whetherYes_NoJudge = False                                      if no_rect.collidepoint(event.pos): # 按是否            showNo2 = False            pressYes = False            showYes_No = False                   whetherYes_NoJudge = False                  # 測試事件選項            if event.type == pygame.KEYDOWN:          if event.key == pygame.K_w:            showYes_No = player_1.move(buildings,allplayers)            whetherYes_NoJudge = showYes_No            presentPlayer = player_1          if event.key == pygame.K_q:            showYes_No = player_com1.move(buildings,allplayers)            presentPlayer = player_com1                  '''for each in allplayers:        if each.isGoingToMove == True and each.movable == True :          showYes_No = each.move(buildings,allplayers)          each.movable = False          each.isGoingToMove = False'''      '''      allisready = True            for each in allplayers:        if each.movable == True:          allisready = False            if allisready:        for each in allplayers:          each.movable = True      '''                    # 購買房屋!!!!!!!!            if presentPlayer.buyaBuilding(pressYes) == True:        pressYes = False              if presentPlayer.addaHouse(pressYes) == True:        pressYes = False                  #########################################################################            screen.blit( backgroud , (0,0) )      blit_alpha(screen, bigdice_image, (50, 600), image_alpha)                  textPosition = [MapMessageBoxPosition[0],MapMessageBoxPosition[1]]            # 打印信息      for each in presentPlayer.showText:        text = font.render(each, True, white, textColorInMessageBox)        screen.blit(text,textPosition)        textPosition[1] += 30            # 播放行動聲音      if presentPlayer.soundPlayList != 0:        playList[presentPlayer.soundPlayList - 1].play()        presentPlayer.soundPlayList = 0              # 在位置上顯示過路費            for i in range(1,8):        for each in buildings:          for every in each.location:            if i == every:              if each.owner == presentPlayer.name:                text = font.render('%d' % (each.payment * (each.builtRoom + 1))/                          , True, red)              elif each.owner == 'no':                text = font.render('%d' % (each.payment * (each.builtRoom + 1))/                          , True, white)              elif each.owner != presentPlayer.name and each.owner != 'no':                text = font.render('%d' % (each.payment * (each.builtRoom + 1))/                          , True, black)              screen.blit(text,MapChessPosition_Payment[i])            for i in range(9,16):        for each in buildings:          for every in each.location:            if i == every:              if each.owner == presentPlayer.name:                text = font.render('%d' % (each.payment * (each.builtRoom + 1))/                          , True, red)              elif each.owner == 'no':                text = font.render('%d' % (each.payment * (each.builtRoom + 1))/                          , True, white)              elif each.owner != presentPlayer.name and each.owner != 'no':                text = font.render('%d' % (each.payment * (each.builtRoom + 1))/                          , True, black)              screen.blit(text,MapChessPosition_Payment[i])                              # 打印金錢數和幸運狀態            money_1 = font.render(player_1.name +'金錢:%d' % player_1.money, True, black, white)      screen.blit(money_1,(0,0))            if player_1.pohuaishen == True:        screen.blit(pohuaishen,(0,30))      else:        blit_alpha(screen, pohuaishen, (0, 30), half_alpha)              if player_1.caishen == True:        screen.blit(caishen,(55,30))      else:        blit_alpha(screen, caishen, (55, 30), half_alpha)            if player_1.shuaishen == True:        screen.blit(shuaishen,(110,30))      else:        blit_alpha(screen, shuaishen, (110, 30), half_alpha)            if player_1.tudishen == True:        screen.blit(tudishen,(165,30))      else:        blit_alpha(screen, tudishen, (165, 30), half_alpha)                money_2 = font.render(player_com1.name +'金錢:%d' % player_com1.money, True, black, white)      screen.blit(money_2,(1000,0))          if player_com1.pohuaishen == True:        screen.blit(pohuaishen,(1000,30))      else:        blit_alpha(screen, pohuaishen, (1000, 30), half_alpha)          if player_com1.caishen == True:        screen.blit(caishen,(1055,30))      else:        blit_alpha(screen, caishen, (1055, 30), half_alpha)            if player_com1.shuaishen == True:        screen.blit(shuaishen,(1110,30))      else:        blit_alpha(screen, shuaishen, (1110, 30), half_alpha)              if player_com1.tudishen == True:        screen.blit(tudishen,(1165,30))      else:        blit_alpha(screen, tudishen, (1165, 30), half_alpha)                      # 放置扔出來的骰子      if player_1.dice_value != 0 and showdice:        screen.blit(dices[player_1.dice_value - 1],(70,450))                # 放置回合結束按鈕      if showButton2:        screen.blit(turnover2,TurnOvwrButtonPosition)      else:        screen.blit(turnover,TurnOvwrButtonPosition)            # 放置是否按鈕      if showYes_No == True:        screen.blit(yes , YesNoMessageBoxPosition[0])        screen.blit(no , YesNoMessageBoxPosition[1])                if showYes2 == True:          screen.blit(yes2 , YesNoMessageBoxPosition[0])                  if showNo2 == True:          screen.blit(no2 , YesNoMessageBoxPosition[1])                                 # 放置玩家與電腦的位置 如果重合則挪位      for each in players:        for every in computers:          if each.position == every.position:            screen.blit(each.image,MapChessPosition_Player[each.position])            screen.blit(every.image,MapChessPosition_Com[every.position])            each.temp_position = True            every.temp_position = True                  for each in players:        if each.temp_position == False:          screen.blit(each.image,MapChessPosition_Original[each.position])          each.temp_position = True        each.temp_position = not each.temp_position                       for every in computers:        if every.temp_position == False:          screen.blit(every.image,MapChessPosition_Original[every.position])          every.temp_position = True        every.temp_position = not every.temp_position                        # 輸贏判斷      for each in allplayers:        if each.money <= 0:          font = pygame.font.Font('resource//font//myfont.ttf',200)          loseText = font.render(each.name +'輸了!', True, red)          screen.fill(black)          screen.blit(loseText,(100,100))          font = pygame.font.Font('resource//font//myfont.ttf',30)                pygame.time.delay(3000)                # 畫面運行        pygame.display.flip()    clock.tick(60)       # 刷新率         # 雙擊打開運行      if __name__ == "__main__":  main()                
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: www.狠狠插.com | 91精品观看91久久久久久国产 | 一本在线高清码电影 | 色播视频在线播放 | 国产精品一品二区三区四区18 | 日本免费一区二区三区四区 | 日韩欧美电影一区二区三区 | 曰本三级日本三级日本三级 | 奶子吧naiziba.cc免费午夜片在线观看 | 欧美视频在线一区二区三区 | 欧美成人精品 | 特色一级黄色片 | 欧美xxxx精品另类 | 萌白酱福利视频在线网站 | 欧美日韩手机在线观看 | 99riav国产在线观看 | 国产精品爆操 | 国产免费传媒av片在线 | 国产一区二区午夜 | 亚洲精品a级 | 999插插插| 国产九色在线观看 | 毛片视频免费观看 | 超碰97人 | 99麻豆久久久国产精品免费 | 免看黄大片aa | 久久精品一区二区三区国产主播 | 欧美成人毛片 | 国产免费一区二区三区最新不卡 | 国产免费一区视频 | 久久精热| 在线播放h| 国产精品久久久久久久av | 免费黄色大片在线观看 | 免费国产一级淫片 | 香蕉视频网站在线观看 | 77成人影院 | 亚洲视频在线观看免费 | 久久精品成人免费国产片桃视频 | 神秘电影91 | 亚洲第一成人久久网站 |