欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          python怎么做游戲

          PyGame是一個(gè)Python的庫,能夠讓你更容易的寫出一個(gè)游戲。它提供的功能包括圖片處理和聲音重放的功能,并且它們能很容易的整合進(jìn)你的游戲里。

          python怎么做游戲

          下面是五子棋的代碼,我的理解都寫在注釋里了(推薦學(xué)習(xí):Python視頻教程)

          import pygame # 導(dǎo)入pygame模塊 print(pygame.ver) # 檢查pygame的版本,檢查pygame有沒有導(dǎo)入成功  EMPTY = 0 BLACK = 1 WHITE = 2 # 定義三個(gè)常量函數(shù),用來表示白棋,黑棋,以及 空  black_color = [0, 0, 0] # 定義黑色(黑棋用,畫棋盤) white_color = [255, 255, 255] # 定義白色(白棋用)  # 定義棋盤這個(gè)類 class RenjuBoard(object):    def __init__(self):     # self._board = board = [[EMPTY] * 15 for _ in range(15)]     # 將棋盤每一個(gè)交叉點(diǎn)都看作列表的一個(gè)元素位,一共有15*15共225個(gè)元素     self._board = [[]] * 15     self.reset()   #重置棋盤   def reset(self):     for row in range(len(self._board)):       self._board[row] = [EMPTY] * 15   #定義棋盤上的下棋函數(shù),row表示行,col表示列,is_black表示判斷當(dāng)前點(diǎn)位該下黑棋,還是白棋   def move(self, row, col, is_black):     if self._board[row][col] == EMPTY:       self._board[row][col] = BLACK if is_black else WHITE       return True     return False   # 給棋盤定義一個(gè)函數(shù)將自己在screen上面畫出來,使用pygame.draw()函數(shù)。并且順便將下了的棋子也畫出來   def draw(self, screen):     for h in range(1, 16):       pygame.draw.line(screen, black_color,                [40, h * 40], [600, h * 40], 1)       pygame.draw.line(screen, black_color,     # 給棋盤加一個(gè)外框,使美觀     pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 3)     # 在棋盤上標(biāo)出,天元以及另外4個(gè)特殊點(diǎn)位     pygame.draw.circle(screen, black_color, [320, 320], 5, 0)     pygame.draw.circle(screen, black_color, [160, 160], 3, 0)     pygame.draw.circle(screen, black_color, [160, 480], 3, 0)     pygame.draw.circle(screen, black_color, [480, 160], 3, 0)     pygame.draw.circle(screen, black_color, [480, 480], 3, 0)     #做2次for循環(huán)取得棋盤上所有交叉點(diǎn)的坐標(biāo)     for row in range(len(self._board)):       for col in range(len(self._board[row])):         # 將下在棋盤上的棋子畫出來         if self._board[row][col] != EMPTY:           ccolor = black_color              if self._board[row][col] == BLACK else white_color           # 取得這個(gè)交叉點(diǎn)下的棋子的顏色,并將棋子畫出來           pos = [40 * (col + 1), 40 * (row + 1)]           # 畫出棋子           pygame.draw.circle(screen, ccolor, pos, 18, 0)  # 定義函數(shù),傳入當(dāng)前棋盤上的棋子列表,輸出結(jié)果,不管黑棋白棋勝,都是傳回False,未出結(jié)果則為True def is_win(board):   for n in range(15):     # 判斷垂直方向勝利     flag = 0     # flag是一個(gè)標(biāo)簽,表示是否有連續(xù)以上五個(gè)相同顏色的棋子     for b in board._board:       if b[n] == 1:         flag += 1         if flag == 5:           print('黑棋勝')           return False       else:       # else表示此時(shí)沒有連續(xù)相同的棋子,標(biāo)簽flag重置為0         flag = 0      flag = 0     for b in board._board:       if b[n] == 2:         flag += 1         if flag == 5:           print('白棋勝')           return False       else:         flag = 0      # 判斷水平方向勝利     flag = 0     for b in board._board[n]:       if b == 1:         flag += 1         if flag == 5:           print('黑棋勝')           return False       else:         flag = 0      flag = 0     for b in board._board[n]:       if b == 2:         flag += 1         if flag == 5:           print('白棋勝')           return False       else:         flag = 0      # 判斷正斜方向勝利      for x in range(4, 25):       flag = 0       for i,b in enumerate(board._board):         if 14 >= x - i >= 0 and b[x - i] == 1:           flag += 1           if flag == 5:             print('黑棋勝')             return False         else:           flag = 0      for x in range(4, 25):       flag = 0       for i,b in enumerate(board._board):         if 14 >= x - i >= 0 and b[x - i] == 2:           flag += 1           if flag == 5:             print('白棋勝')             return False         else:           flag = 0      #判斷反斜方向勝利     for x in range(11, -11, -1):       flag = 0       for i,b in enumerate(board._board):         if 0 <= x + i <= 14 and b[x + i] == 1:           flag += 1           if flag == 5:             print('黑棋勝')             return False         else:           flag = 0      for x in range(11, -11, -1):       flag = 0       for i,b in enumerate(board._board):         if 0 <= x + i <= 14 and b[x + i] == 2:           flag += 1           if flag == 5:             print('白棋勝')             return False         else:           flag = 0    return True   def main():   # 創(chuàng)建棋盤對(duì)象   board = RenjuBoard()   # 用于判斷是下黑棋還是白棋   is_black = True   # pygame初始化函數(shù),固定寫法   pygame.init()   pygame.display.set_caption('五子棋') # 改標(biāo)題   # pygame.display.set_mode()表示建立個(gè)窗口,左上角為坐標(biāo)原點(diǎn),往右為x正向,往下為y軸正向   screen = pygame.display.set_mode((640,640))   # 給窗口填充顏色,顏色用三原色數(shù)字列表表示   screen.fill([125,95,24])   board.draw(screen) # 給棋盤類發(fā)命令,調(diào)用draw()函數(shù)將棋盤畫出來   pygame.display.flip() # 刷新窗口顯示    running = True   # while 主循環(huán)的標(biāo)簽,以便跳出循環(huán)   while running:     # 遍歷建立窗口后發(fā)生的所有事件,固定寫法     for event in pygame.event.get():       # 根據(jù)事件的類型,進(jìn)行判斷       if event.type == pygame.QUIT:         running = False        elif event.type == pygame.KEYUP:         pass       # pygame.MOUSEBUTTONDOWN表示鼠標(biāo)的鍵被按下       elif event.type == pygame.MOUSEBUTTONDOWN and            event.button == 1:# button表示鼠標(biāo)左鍵         x, y = event.pos # 拿到鼠標(biāo)當(dāng)前在窗口上的位置坐標(biāo)         # 將鼠標(biāo)的(x, y)窗口坐標(biāo),轉(zhuǎn)化換為棋盤上的坐標(biāo)         row = round((y - 40) / 40)            col = round((x - 40) / 40)         if board.move(row, col, is_black):           is_black = not is_black           screen.fill([125, 95, 24])           board.draw(screen)           pygame.display.flip()           # 調(diào)用判斷勝負(fù)函數(shù)           if not is_win(board):             #break           running = False # 這里我有個(gè)bug沒找到解決辦法,就是判斷出勝負(fù)后,使用break跳出事件遍歷的for循環(huán),但是老是不能跳出來,導(dǎo)致勝負(fù)分出來了 #還可以繼續(xù)下,這里我采用判斷勝負(fù)后就將running標(biāo)簽賦值為False,跳出主循環(huán),但是這樣棋盤的窗口也沒了。明天再找找bug在哪    pygame.quit()  if __name__ == '__main__':   main()

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)