PyGame是一个Python的库,可以让你更易的写出一个游戏。它提供的性能包罗图片解决以及声响重放的性能,而且它们能很容易的整合进你的游戏里。
上面是五子棋的代码,我的了解都写正在正文里了(保举学习:Python视频教程)
import pygame # 导入pygame模块 print(pygame.ver) # 反省pygame的版本,反省pygame有无导入胜利 EMPTY = 0 BLACK = 1 WHITE = 2 # 界说三个常量函数,用来示意白棋,黑棋,和 空 black_color = [0, 0, 0] # 界说玄色(黑棋用,画棋盘) white_color = [255, 255, 255] # 界说红色(白棋用) # 界说棋盘这个类 class RenjuBoard(object): def __init__(self): # self._board = board = [[EMPTY] * 15 for _ in range(15)] # 将棋盘每个穿插点都看做列表的一个元素位,一共有15*15共225个元素 self._board = [[]] * 15 self.reset() #重置棋盘 def reset(self): for row in range(len(self._board)): self._board[row] = [EMPTY] * 15 #界说棋盘上的下棋函数,row示意行,col示意列,is_black示意判别以后点位该下黑棋,仍是白棋 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 # 给棋盘界说一个函数将本人正在screen下面画进去,应用pygame.draw()函数。而且趁便将下了的棋子也画进去 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, # 给棋盘加一个外框,使雅观 pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 3) # 正在棋盘上标出,天元和另外4个非凡点位 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轮回获得棋盘上一切穿插点的坐标 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 # 获得这个穿插点下的棋子的颜色,并将棋子画进去 pos = [40 * (col + 1), 40 * (row + 1)] # 画出棋子 pygame.draw.circle(screen, ccolor, pos, 18, 0) # 界说函数,传入以后棋盘上的棋子列表,输入后果,不论黑棋白棋胜,都是传回False,未出后果则为True def is_win(board): for n in range(15): # 判别垂直标的目的成功 flag = 0 # flag是一个标签,示意能否有延续以上五个相反颜色的棋子 for b in board._board: if b[n] == 1: flag += 1 if flag == 5: print('黑棋胜') return False else: # else示意此时不延续相反的棋子,标签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(): # 创立棋盘工具 board = RenjuBoard() # 用于判别是下黑棋仍是白棋 is_black = True # pygame初始化函数,固定写法 pygame.init() pygame.display.set_caption('五子棋') # 改题目 # pygame.display.set_mode()示意建设个窗口,左上角为坐标原点,往右为x正向,往下为y轴正向 screen = pygame.display.set_mode((640,640)) # 给窗口填充颜色,颜色用三原色数字列表示意 screen.fill([125,95,24]) board.draw(screen) # 给棋盘类发饬令,挪用draw()函数将棋盘画进去 pygame.display.flip() # 刷新窗口显示 running = True # while 主轮回的标签,以便跳出轮回 while running: # 遍历建设窗口后发作的一切事情,固定写法 for event in pygame.event.get(): # 依据事情的类型,进行判别 if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYUP: pass # pygame.MOUSEBUTTONDOWN示意鼠标的键被按下 elif event.type == pygame.MOUSEBUTTONDOWN and \ event.button == 1:# button示意鼠标左键 x, y = event.pos # 拿到鼠标以后正在窗口上的地位坐标 # 将鼠标的(x, y)窗口坐标,转化换为棋盘上的坐标 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() # 挪用判别输赢函数 if not is_win(board): #break running = False # 这里我有个bug没找到处理方法,就是判别出输赢后,应用break跳出事情遍历的for轮回,然而总是不克不及跳进去,招致输赢分进去了 #还能够持续下,这里我采纳判别输赢后就将running标签赋值为False,跳出主轮回,然而这样棋盘的窗口也没了。今天再找找bug正在哪 pygame.quit() if __name__ == '__main__': main()
更多Python相干技巧文章,请拜访Python教程栏目进行学习!
以上就是python怎样做游戏的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!