资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实践教学实践教学 大学大学 计算机与通信学院 2016 年春季学期 C C 程序设计程序设计 课程设计课程设计 题 目 五子棋游戏 专业班级 16 级物联网 1 班 姓 名 学 号 1616520147 指导教师 成 绩 摘摘 要要 五子棋是一种两人对弈或者人机对弈的纯策略型棋类游戏 应用 C 语言编写程序可以在 计算机上实现人机对弈五子棋功能 人机对弈五子棋程序由开始界面 棋盘 判断胜负和计 分等子程序构成 程序中应用了数组 全局变量 按键处理和图形编程等元素和语句 程序 通过棋盘和棋子图像生成 玩家移子与电脑判断分数高低而落子和判断胜负等功能的实现 在计算机上用 VC 6 0 实现了人机五子棋对弈 关键词关键词 C 语言 VC 6 0 目录目录 摘 要 I 第 1 章 序 言 1 1 1 设计背景 1 1 2 设计目的 1 第 2 章 需求分析 2 第 3 章 程序总体设计 3 3 1 程序总体框架图 3 3 2 程序流程图 4 第 4 章 程序详细设计 5 4 1 各类头文件及自定义函数 5 4 2 棋盘数组 5 4 3 开始界面函数 5 4 4 棋盘界面函数 5 4 5 胜负判断函数 6 4 6 得分判断函数 6 4 7 主函数 6 第 5 章 系统测试 7 5 1 开始界面测试 7 5 2 棋盘界面测试 8 5 3 玩家输赢界面测试 11 设计总结 13 参考文献 14 致 15 附录 源代码 16 第第 1 1 章章 序序 言言 1 11 1 设计背景设计背景 五子棋相传起源于四千多年前的尧帝时期 比围棋的历史还要悠久 可能早在 尧造围 棋 之前 民间就已有五子棋游戏 有关早期五子棋的文史资料与围棋有相似之处 因为古 代五子棋的棋具与围棋是完全相同的 在上古的神话传说中有 女娲造人 伏羲做棋 一说 增山海经 中记载 休舆之山有石焉 名曰帝台之棋 五色而文状鹑卵 善注引三国 淳 艺经 中曰 棋局 纵横各十七道 合二百八十九道 白黑棋子 各一百五十枚 这段虽没明讲是何种棋类 但至少知道远古就以漂亮的石头为棋子 因而规则简单的五子棋 也可能出自当时 并是用石子作棋子 亦有传说 五子棋最初流行于少数民族地区 以后渐 渐演变成围棋并在炎黄子后代中遍及开来 在古代 五子棋棋具虽然与围棋相类同 但是下 法却是完全不同的 正如 辞海 中所言 五子棋是 棋类游戏 棋具与围棋相同 两人对 局 轮流下子 先将五子连成一行者为胜 传统五子棋的棋具与围棋相同 棋子分为黑白两色 棋盘为 15 15 棋子放置于棋盘 线交叉点上 因为传统五子棋只能实现人人对战 而用计算机编程能够实现人机对战 一 个人的时候也能体验五子棋的乐趣 因此我们设计了一款人机对战的五子棋游戏 1 21 2 设计目的设计目的 五子棋游戏不仅能增强人们的抽象思维能力 逻辑推理能力 空间想象力 提高人们的 记忆力 心算能力等 而且深含哲理 有助于修身养性 五子棋既有现代休闲方式所特有的 特征 短 平 快 又有中国古典哲学所包含的高深学问 阴阳易理 它既有简单易学 的特点 为人民群众所喜闻乐见 又有深奥的技巧 既能组织举办群众性的比赛 活动 又 能组织举办高水平的国际性比赛 它的棋文化源渊流长 具有的神秘和西方的直观 它是中 西方文化的交融点 也是中西方文化交流的一个平台 自从计算机作为游戏对战平台以来 各种棋类游戏如雨后春笋般纷纷冒出 五子棋是一 种受大众广泛喜爱的游戏 其规则简单 变化多端 非常富有趣味性和消遣性 同时具有简 单易学 既动手又动脑的特点 同时也为锻炼自己的编程能力 第第 2 2 章章 需求分析需求分析 根据功能需求 将程序分为图形显示 玩家电脑走棋 胜负判断和电脑计分判断落子位 置四个模块 以下分析各模块的需求 图形显示模块图形显示模块 在给 vc 6 0 增加了 easyx 后使用了 include 图形库头 文件 程序开始运行时 给出五子棋游戏名称界面 游戏开始后要求生成 15 15 的棋盘图 像 给出窗口让玩家选择是否遵守游戏规则以及是否让电脑先落子 并在棋盘右方提示如何 落子 游戏进行过程中 要时显示棋盘上已落下的棋子 玩家为白旗 电脑为黑棋 分出胜 负后 在棋盘上方显示 你赢了按任意键继续 你输了按任意键继续 玩家控制模块玩家控制模块 程序开始时 需玩家确定遵守规则后 并且选择是否让电脑先落子 才 能开始游戏 游戏过程中 玩家通过鼠标点击棋盘选择落子 游戏结束时 玩家按任意键开 始新棋局 否则直接关掉程序窗口 胜负判断模块胜负判断模块 实时监测棋盘上棋子 一旦某一色棋子出现五子连线 终止游戏程序 在棋盘上方显示玩家输赢语句 电脑计分判断落子位置模块电脑计分判断落子位置模块 在能下棋的空位置中 假设电脑和玩家下在此处 分别算 出各个空位置的分数 并找出最大值 如果最大值是玩家下的 那么电脑就 抢 他的位置 即做到了 防守 如果最大值是电脑下的 那就让电脑在此处下 即做到了 进攻 第第 3 3 章章 程序总体设计程序总体设计 3 13 1 程序总体框图程序总体框图 五子棋游戏 开始界面模块 棋盘界面模块 判断输赢模块 计算得分模块 3 23 2 程序流程图程序流程图 第第 4 4 章章 程序详细设计程序详细设计 4 14 1 各类头文件及自定义函数各类头文件及自定义函数 include 图形库头文件 include 控制台输入输出 包含 getch 函数 include 时间函数 include 随机函数头文件 void start 开始界面 void chessboard 布置棋盘 int score int m int n int k 打分函数 int judge int m int n int k 设置判断输赢自定义函数 4 24 2 棋盘数组棋盘数组 int a 16 16 定义全局二维数组 作为虚拟棋盘 记录棋盘情况 0 代表空格 1 代表人下的棋 2 代表电脑下的棋 4 34 3 开始界面开始界面 start start 函数模块函数模块 initgraph 函数用于定义界面的宽度和长度 loadimage 用于加载电脑相应位置的图片 使其作为背景图片铺满界面 setbkmode 用于界面文字的背景颜色 settextcolor 用于定义文字的颜色 settextstyle 用于定义文字的风格 outtextxy 用于在指定坐标输出文字 4 44 4 棋盘界面棋盘界面 chessboard chessboard 函数函数 initgraph 函数用于定义界面的宽度和长度 Setbkcolor 函数用于定义背景颜色 通过 for 循环画 15 15 的棋盘界面 画棋盘线条用 lineh 函数 settextcolor 用于定义文字的颜色 settextstyle 用于定义文字的风格 outtextxy 用于在指定坐标输出文字 4 54 5 胜负判断胜负判断 judge judge 函数函数 定义 int 型函数 judge 通过判断横 竖 左斜 右斜有没有五子连成一线 来决定输赢 并且返回一个 int 类型的值 4 64 6 得分判断得分判断 score score 函数函数 定义 int 类型的自定义函数 score 在能下棋的空位置中 假设电脑和玩家 下在此处 分别算出各个空位置的分数 并找出最大值 如果最大值是玩家下 的 那么电脑就 抢 他的位置 即做到了 防守 如果最大值是电脑下的 那就让电脑在此处下 即做到了 进攻 通过这种方法实现了电脑下棋 也 是人机五子棋的精髓所在 4 74 7 主函数主函数 main main 通过 MOUSEMSG m 定义鼠标 依次调用开始界面函数 start 棋盘界面函数 chessboard 通过调用 HWND wnd GetHWnd 设置了两个问题窗口 是 否遵守游戏规则 是否让电脑先落子 使用 if 语句判断 如果玩家选择 了确定则执行下一步 进入游戏界面并开始游戏 游戏过程过 rand 函数让电 脑在棋盘中部随机落子 并且使用 setfillcolor BLACK 函数是电脑的棋子颜 色为黑色 使用 fillcircle 50 i 50 j 20 函数画棋子为半径是 20 的圆 同 样的方法使玩家的棋子颜色为白色 半径为 20 的圆 下去过程过 m GetMouseMsg 获取鼠标信息 并且使用 WN LBUTTONDOWN 表示获取的是鼠标 左键的信息 即玩家通过鼠标左键来下棋 在下棋过程中每一轮都重新调用得 分函数判断最值 使电脑落子落在最值上 最后调用判断输赢 judge 函数判 断玩家的输赢 如果玩家赢了 则在棋盘界面上方显示 你赢啦按任意键继续 如果玩家输了则显示 你输啦按任意键继续 第第 5 5 章章 系统测试系统测试 5 15 1 开始界面测试开始界面测试 设计计划 使用一五子棋图片作为背景 并在图片中间显示 五子棋游戏 并且在下方提示玩家 按任意键开始游戏 测试结果 如图 5 1 所示 图 5 1 5 25 2 棋盘界面测试棋盘界面测试 设计计划 以黄色作为棋盘底色 在棋盘左边画 15 15 的棋盘界面 在界 面的右侧显示五子棋游戏 并且在右上角显示游戏规则 在棋盘上单击鼠标 左键开始游戏 在界面的右下方显示制作团队 并且在开始游戏首先弹出 是否遵守游戏规则的选择窗口 玩家只有选择了确定才能进入游戏 玩家 进入游戏后弹出是否让电脑先下的选择窗口 当玩家选择了确定时 电脑首先 在棋盘落黑子 如果玩家选择了取消 则直接进入棋盘界面 由玩家选择地点 落子 测试结果 如图 5 2 5 3 所示 图 5 2 图 5 3 5 35 3 玩家输赢界面测试玩家输赢界面测试 测试计划 如果玩家赢了 则在棋盘上方显示 你赢了按任意键继续 如果玩家输了则在棋盘上方显示 你输了按任意键继续 测试结果 如图 5 4 5 5 所示 图 5 4 图 5 5 设计总结设计总结 通过对各子程序的设计与优化 本程序完成了人机对战五子棋软件的主体的设计与制作 基 本达到了使用五子棋软件的核心要求 最重要的是为了使界面更加的美观 找到了 easyx 成功的在 vc 6 0 中使用了 TC 编译器才有的 include 图形库头文件 而程序还 有一些不足之处 首先 程序的电脑计分模块存在不够智能的问题 其次 程序的界面过于 简陋 参考文献参考文献 1 颜晖 柳俊 C 语言程序设计实验与习题指导 第二版 M 高等教育 2012 3 2 谭浩强 C 语言程序设计 M 清华大学 2010 6 3 谭浩强 C 程序设计题解与上机指导 M 清华大学 2010 6 4 何钦铭 颜晖 C 语言程序设计 第 2 版 M 高等教育 2012 3 5 王连相 C C 程序设计上机指导与测试 第二版 M 中国铁道 2011 6 超 C 语言函数手册 M 机械工业 1999 7 传杰 C 语言的实际应用 M 科学技术 2000 致致 感两周以来两位老师尤其是朱老师以及各位同学的的帮助 使得我能够顺利完成此次 C 语言课程设计任务 使得我对结构化的程序设计思想有了进一步的理解 对 c 语言程序设计 有了更深的体会 最重要的是能培养好的代码风格 这对我来说受益匪浅 附录 源代码 附录 源代码 五子棋人机对战 电脑方设计思路 在能下棋的空位置中 假设电脑和玩家下在此处 分别算出各个空位置的分数 并 找出最大值 如果最大值是玩家下的 那么电脑就 抢 他的位置 即做到了 防守 如果最大值是电脑下的 那就让电脑在此处下 即做到了 进攻 include 图形库头文件 include 控制台输入输出 包含 getch 函数 include include 随机函数头文件 void start 开始界面 void chessboard 布置棋盘 int score int m int n int k 打分函数 int judge int m int n int k 设置判断输赢自定义函数 int a 16 16 定义全局二维数组 作为虚拟棋盘
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号