logo资料库

python 五子棋.docx

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
一、课程目标与要求
二、程序总体分析
三、程序详细设计
四、设计中的技巧与体会
五、结论
参考文献:
附程序清单:
Python 程序设计课程大作业 ——题目:五子棋 18 专升本 1 班 黄佳雯 王靖雅 张嘉玥 学号: 08/26/46 2018/11/1
一、课程目标与要求 通过本次课程大作业的设计,使学生进一步掌握 Python 语言的使用,培养 程序设计的能力,完善 Python 语言的知识结构,为后续课程的学习打下良好的 基础。学生将本课程教授的内容与自身兴趣相结合,自选开发题目(内容题材不 限),要求最终提交的程序源码行数在 100 有效行以上(不设上限)。 大作用的考核采用答辩展示的方法,每位同学用 3 分钟将自己的设计演示介 绍给班级所有的同学,由每位同学进行排名,根据学生答辩排名赋分作为最终成 绩。(大作用报告中的大标题不要修改,内容统一采用汉字:宋体小四,字母: Times New Roman 小四,行间距 1.5 倍的格式) 二、程序总体分析 1、选择的原因 五子棋这个游戏从小就在我们生活中,我们平时都是用棋子下,但是我们没 有自己尝试过用 Python 设计出来,所以这是一个好机会来设计一款小游戏来玩, 娱乐身心。这个游戏虽小,但是可以让室友在闲暇之余,晚上娱乐之用。我们学 会了并使用了 python,也对它产生了极大的兴趣,受益匪浅。 2、程序模块图 1
3、程序设计目标与功能介绍 我们设计的是五子棋游戏,支持两人一个鼠标对下,黑方用黑子代替,白方 用白子代替,谁先下均可,落子无悔,下过的棋子对方点击后也不可更改。游戏 双方需遵循一次下一子的规则。 三、程序详细设计 程序流程图 2
四、设计中的技巧与体会 1、为了解决某个问题而发现的技巧 思考:如何判断一个点的价值 解决方案(可以利用多种方法进行比较或者尝试):在棋盘上,一个点有 四个方向,横竖左斜右斜。但电脑要在这里下棋时候,就会先判断在这四个方向 上的总价值是多少。 举个例子,点一在这里可以形成连五,那么价值就是 10000,点二只能形成 活四,那么这个点的价值就是 5000。所以电脑在判断完所有的点后,会选出一 个价值最大的点下。比如点一。 附.五子棋的一些术语:连五,活四,活三,活二,眠四,眠三,眠二 是否达到预期目标:是 2、碰到的某个错误而尝试的方法 思考: 解决方案(可以利用多种方法进行比较或者尝试): 反思: 3、设计完成后的体会 虽然是 python 的程序,期间也参考了很多其他的东西。通过这次程序设计 的过程,让我渐渐体会到了编程的博大精深。以及怎么学习编程语言,怎么使用 python 面向对象程序设计思想,怎样对问题进行解决和运用 Python,查找 Python 的使用都用了更进一步的理解。 对于 Python 中的引用,初始化类等,开始我并不是非常的理解,知道就这 么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真 正的药用 python 去做一个东西不理解它是不行的,而且期间这课设涉及到了 Python 中的绝大数知识点,如 Python 异常处理机制,Python 输入输出流,等等。 要应用这些东西更要求我们去好好理解 Python 的这些规则。由于我们才刚刚开 始接触这一门课程,所以编码中运用了一些比较低级的代码,所以对于我们自己 3
来说,可能较为容易理解。但是理解了 Python 的规则要把这个课设做好也不是 那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。我们在这方 面就遇到了不少问题。 自己的编程习惯要加以改正,不能看到题目就开始写代码,应该完整按照软 件设计步骤: 1. 概要设计,主要包括: 1)结构设计 2)接口设计 3)全局数据结构设计 4)过程设计 2. 详细设计 这样写出的程序才有可读性和可修改性。 总结这次课设,我们还是受益匪浅的。虽然界面也不是很美观,有点功能间 的连接也做的不是特别好,但是我们能认识到自己的不足,并且在跟同学的交流 中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。 五、结论 结论回答下面几个问题: 1、是否完成程序预期设计目标? 是,还是比较圆满的完成设计目标,虽然中间遇见一些问题,但是还是 通过组员一起努力而完成了。 2、达到了什么效果? 虽然是一个简单的小游戏,但是还是可以和室友一起来下盘五子棋来玩 玩。 看起来有点简陋,但是至少是一个完整的程序。 3、还有哪些可以改进的地方? 这个小游戏的棋子的样子,会有点简陋,没那么美观。还缺少几个 关键功能:悔棋,游戏计步器,游戏时间的限制。这些功能只有在学完时间类操 作后才能具体实现以后学了更多的东西以后,可以进行改造一下我们的棋子,让 4
下棋的环境也不一样。 参考文献: [1] 张若愚.Python 科学计算[M].北京:清华大学出版社,2012. [2] 李高超.基于 PYTHON 是网络管理系统的设计与实现[D].北京邮电大 学.2013 年. [3] 康计量.Python 语言的可视化编程环境的设计与实现[D].西安电子科技 大学.2012 年. [4] 高昂.Python 语言的拓展应用[J].程序员,2019. [5] 狄博;王晓丹.基于 Python 的面向对象程序设计课程教学[J];计算机科 学,2012 年. 附程序清单: import os """ """ 五子棋 初始化模块 下棋模块 残局载入模块 | 获取坐标点模块 检查获胜模块 def check_win(row, col, current_user, piece, gomoku_board): """ 检查当前玩家是否获胜 """ # 判断此次落子后,当前用户有没有获胜 # 1.判断当前落子点所在横线上有没有形成五连 index = col num = 0 # 相连的棋子数目 # 保持当前行不动,移动列 # 从当前棋子去数左边有多少个相连的相同颜色的棋子 while gomoku_board[row][index] == piece and index >= 1: # 图形和现在的是一样的说 5
明是连在一起的 index -= 1 num += 1 # 然后从当前棋子从左到右去数有多少个相同颜色的棋子 index = col while gomoku_board[row][index] == piece and index <= 15: index += 1 num += 1 num -= 1 # 当前落子点计算了两次 if num >= 5: print("恭喜玩家: {}, 获得胜利".format(current_user)) return True # 2.判断当前落子点所在竖线上有没有形成五连 index = row # 保持当前列不动,移动行 num = 0 while gomoku_board[index][col] == piece and index >= 1: index -= 1 num += 1 index = row while gomoku_board[index][col] == piece and index <= 15: index += 1 num += 1 num -= 1 # 当前落子点计算了两次 if num >= 5: print("恭喜玩家: {}, 获得胜利".format(current_user)) return True # 3.判断从左下到右上的对角线上有没有五连 # 先往右上走 x = row y = col num = 0 while gomoku_board[x][y] == piece and x >= 1 and y <= 15: x -= 1 y += 1 num += 1 # 再走左下 x = row 6
y = col while gomoku_board[x][y] == piece and x <= 15 and y >= 1: x += 1 y -= 1 num += 1 num -= 1 # 当前落子点计算了两次 if num >= 5: print("恭喜玩家: {}, 获得胜利".format(current_user)) return True # 4.判断从左上到右下的对角线上有没有五连 # 先往左上走 x = row y = col num = 0 while gomoku_board[x][y] == piece and x >= 1 and y >= 1: x -= 1 y -= 1 num += 1 # 再往右下走 x = row y = col while gomoku_board[x][y] == piece and x <= 15 and y <= 15: x += 1 y += 1 num += 1 num -= 1 # 当前落子点计算了两次 if num >= 5: print("恭喜玩家: {}, 获得胜利".format(current_user)) return True return False def get_point(current_player, gomoku_board): """ 从用户输入中获取一个合法坐标点,并对错误的输入进行提示 """ while True: point_str = input("当前玩家[{}], 请落子(输入横纵坐标表示落子, 输入 quit 保存 退出".format(current_player)) if point_str == 'quit': # 用户输入进来的以一个字符串 # 玩家退出 return None, None 7
分享到:
收藏