设计背景、功能需求
学生已经掌握了海龟模块的基本使用,以及一些常用的函数,能否使用一款游戏让学生对该模块进行实践。结合海龟模块的屏幕时间,可以设计一个双人对战的井字棋游戏。该游戏需要具备以下功能:棋盘的初始化,通过鼠标点击的位置在棋盘对应的区域画一颗棋子,根据点击次数模拟两人对战的情况,判断输赢结果,重新开始等功能。
功能原理
本项目的界面使用的是Turtle模块实现的,使用Turtle模块的中的up、goto、down、fd等命令实现棋盘的初始化。Turtle模块的Screen对象绑定鼠标点击后的回调函数实现鼠标点击后需要完成的动作。通过x、y坐标将棋盘分为九个区域,只有鼠标点击的位置在棋盘区域棋盘上则会判断该区域是否存在棋子不存在则在该区域的中心画一颗棋子,反之不执行任何操作。将棋盘的映射到一个二维列表中,当棋盘每下一颗棋子就将该区域在二维列表对应下表的值改变。通过遍历该二维列表判断是否有存在三颗一样的棋子,存在则在棋盘上输出结果游戏结束。不存在三颗一样的棋子判断是否棋盘的每个区域都有棋子,如果都有棋子则在棋盘上显示伯仲之间,反之继续游戏。在游戏的图中可以通过重新开始,开始新一轮。
详细步骤
3.1界面介绍:界面有两个部分组成棋盘和重新开始的按钮如图3.1.1所示。
3.2 棋盘每个区域中心位置坐标分析,图3.1.1中的棋盘没根线的之间的距离为100,横线做最左边的x为-100,竖线最上边y为150,每个区域中心坐标如图3.2.1所示。根据鼠标点击棋盘的区域的坐标将鼠标点击的坐标转换成每个区域的中心坐标,为后面的棋盘到二维列表的映射做铺垫以及保证下的每颗棋子在每个区域的中心。
3.3棋盘区域中心坐标映射到二维列表中,如图3.3.1所示
3.4胜负判断方法:将井字棋的每个区域的坐标映射到二维列表中去,通过循环访问该列表的方法判断是否有人获胜。通过观察二维列表索引的变化情况可以发现具能取胜的情况有四种分别为横,竖,左斜,右斜四种情况,每种情况又分为棋手下的棋的正半段和负半段,正负段判断结束为当取的格子的棋子颜色和判断棋子的颜色不同则退出,相同就将该坐标添加到表中,正负半段判断完后,退出第二层循环
图3.2.1
图3.3.1
- 最新
- 最热
只看作者