使用python实现控制台版的五子棋游戏; 游戏规则: 1.分两位棋手对战,默认*棋手先下;当按照提示输入坐标(A1),并按回车键<Enter>即可在棋盘上显示下的棋(*); 2.自动切换到o棋手下棋,当按照提示输入坐标(C1),并按回车键<Enter>即可在棋盘上显示下的棋(o); 3.轮流切换棋手下棋,当那方先形成5子连线者获胜(横、竖、斜、反斜四个方向)。 游戏运行界面如下:
工具/原料
Sublime Text
Git
新建类
1、 根据游戏需要,新建类“Settings”,用来定义一些必须的基本属性和初始值: 1.number设置棋盘格数; 2.game_active为True则开始游戏,False则结束; 3.chess_player值1为*棋手,-1为o棋手; 4.win_number用来累计下棋步数。
2、 新建类“Checkerboard”,主要是利用二维列表(数组)存放棋盘数据,棋子位置都用“-”表示,代码如下图:
业务逻辑函数
1、 文件“game_functions.py”存放跟游戏有关的所有业务逻辑函数(分析重点代码),代洁船诼抨码如下图: 1.函数printed_board用来打印棋盘,包括标题、横竖参考坐标等: 1)使用“\033[显示方式;前景色;背景色m”设置打印字体和背景色格式,使页面美观;使用“\033[0m”可关闭属性,前面设置的格式不影响下面的数据; 2)print默认换行,使用end=''设置不换行; 2.函数win_condition用来判断是否5子连线,参数line_checkerboard分别为当前下棋子四个方向的数组,只要有一个方向存在连续5个元素的5-1==4(x or y)则判断5子连线;连线成功则打印获胜方并设置游戏结束; 3.函数check_stats用来循环四个方向,获取当前下子四个方向的数据,并把值line_checkerboard传给函数win_condition;该函数判断情况比较多,特别是斜线和反斜线,可用实际坐标替换上去理解; 4.函数check_input用来校验输入数据情况: 1)当空输入时(len(inputStr) == 0),按回车键提示“请输入坐标(例如A1)!”; 2)当输入exit(inputStr == 'exit'),按回车键退出程序; 3)第二位非数字情况(not inputStr[1].isdigit()),按回车键提示“您输入的坐标不正确,请重新输入(例如A1)!”; 4)当前面校验通过,获取输入的数据转化为下标(i, j),坐标未溢出且未有棋子,则在该坐标显示棋子; 5.函数update_board用来切换棋手,并更新棋盘信息。
主函数
1、 主函数用来初始化程序,并同步更新程序的信息,代码如下图(分析重点代码): 1.namedtuple创建类似于元组的数据类型,除了可以用索引访问,能够迭代,还能用属性名访问数据,后面就是利用属性进行访问; 2.设置“while ck_settings.game_active”让程序一直运行,持续更新棋盘信息; 3.gf.printed_board(checkerboard)用来打印棋盘信息; 4.gf.update_board(ck_settings, checkerboard, position)用来更新棋盘信息。
运行程序
1、 如下图环境下(gobang.py文件路径下),执行语句“python gobang.py”,则打印棋盘,并可对其操作游玩。