100行python代码实现五子棋

您所在的位置:网站首页 打印五子棋棋盘python代码 100行python代码实现五子棋

100行python代码实现五子棋

2023-06-06 12:51| 来源: 网络整理| 查看: 265

100行python代码实现五子棋-教程 原创

zengmumu 2021-07-15 16:34:44 ©著作权

文章标签 列表 pygame 内存结构 wxpython ipad 文章分类 Python 后端开发

©著作权归作者所有:来自51CTO博客作者zengmumu的原创作品,请联系作者获取转载授权,否则将追究法律责任

五子棋是是一种两人对弈的纯策略型棋类游戏。

五子棋有两种玩法。玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。玩法二:自己形成五子连线就替换对方任意一枚棋子。被替换的棋子可以和对方交换棋子。最后以先出完所有棋子的一方为胜。

案例展示 100行python代码实现五子棋-教程_列表五子棋 pygame模块

游戏采用pygame模块需要先安装

pip install pygame 窗口启动 import pygame pygame.init() pygame.display.set_caption('五子棋-IT入门') # 改标题 # pygame.display.set_mode()表示建立个窗口,左上角为坐标原点,往右为x正向,往下为y轴正向 screen = pygame.display.set_mode((640,640)) 绘制棋子

需要说一下的是画棋子,因为没找到什么合适的棋子图片,所以只要自己来画棋子。我们用pygame.draw.circle

绘制棋盘 # 定义棋盘这个类 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,                              [h * 40,40], [h * 40, 600], 1)         # 给棋盘加一个外框,使美观         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) 全部代码 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,                              [h * 40,40], [h * 40, 600], 1)         # 给棋盘加一个外框,使美观         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  打赏 收藏 评论 分享 举报

上一篇:python通关-列表操作方法详解

下一篇:pip高阶玩法,让python模块安装飞起来



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3