文档详情

五子棋程序设计说明书

宝路
实名认证
店铺
DOC
102.76KB
约19页
文档ID:7692867
五子棋程序设计说明书_第1页
1/19

中北大学程序设计课程设计说明书学生姓名: 学 号:10051041 学 院: 信息与通信工程学院 专 业: 光电信息工程 题 目: 五子棋 指导教师: 职称: 2012 年 01 月 06 日(纪念我已经逝去的大学生活)2院: 信息与通信工程学院 专 业: 光电信息工程 学 生 姓 名: 学 号: 10051041 课程设计题目: 五子棋 起 迄 日 期:2011 年 12 月 24 日~2012 年 1 月 6 日 课程设计地点: 111420 指 导 教 师: 系 主 任: 下达任务书日期: 2011 年 12 月 25 日课 程 设 计 任 务 书1.设计目的:1 熟悉 C 语言程序设计的原理与方法;2 掌握 C 语言开发环境下程序的具体设计;3 掌握利用 C 语言分析解决具体问题。

2.设计内容和要求:3设计内容:用C语言设计一个五子棋游戏程序,允许游戏者自由选择棋子颜色,实现人人对战和人机对战,利用时间函数设置实现落子倒计时功能程序应该具有以下基本功能:1.显示欢迎界面2.玩家棋子可选,棋盘范围足够3.落子时间倒计时设计要求:1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚对程序其它部分也进行必要的注释3.对系统进行功能模块分析、画出总流程图和各模块流程图4.用户界面要求使用方便、简洁明了、美观大方、格式统一5.所有程序需在 Win-Tc 或 Microsoft Visual C++ 6.0 环境调试通过3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文) 、图纸、实物样品等〕:1) 课程设计说明书一份;2) 电子文档(说明书、设计程序)一份课 程 设 计 任 务 书4.主要参考文献:4谭浩强 《c 程序设计》 北京大学出版社 5.设计成果形式及要求:1)课程说明书打印,并装订;2)必要的程序流程图和程序附录6.工作计划及进度:2011 年 12 月 24 日~2011 年 12 月 26 日 下达设计任务书,学生熟悉设计内容; 2011 年 12 月 27 日~2011 年 12 月 29 日 查阅参考资料,确定基本设计方案;2011 年 12 月 29 日~2012 年 01 月 04 日 C 语言进行程序设计;2012 年 01 月 05 日~2012 年 01 月 06 日 完成设计报告;2012 年 01 月 06 日 答辩;系主任审查意见:签字: 年 月 日5目 录1、课程设计的背景及意义……………....062、设计的基本原理………………………063、设计的基本过程………………………084、设计的结果……………………………105、总结和结论…………………………….1161. 设计背景及意义我们的五子棋程序是在 Visual C++ 6.0 环境下运行的。

Visual C++ 6.0Microsoft Visual C++(简称 Visual C++、MSVC、VC++或 VC)微软公司的 C++开发工具,具有集成开发环境,可提供编辑 C 语言,C++以及 C++/CLI等编程语言VC++整合了便利的除错工具,特别是整合了微软视窗程式设计( Windows API)、三维动画 DirectX API,Microsoft .NET 框架目前最新的版本是 Microsoft Visual C++ 2010V isual C++ 6.0 集 成 了MFC6.0, 于 1998 发 行 发 行 至 今 一 直 被 广 泛 地 用 于 大 大 小 小 的 项 目 开 发 五 子 棋 是 一 种 两 人 对 弈 的 纯 策 略 型 棋 类 游 戏 , 是 起 源 于 中 国 古 代 的 传统 黑 白 棋 种 之 一 我们通过对《C 语言》以及对《大学计算机基础》的初步学习后,本学期末进行了课程程序设计,设计课题为“五子棋”我们小组由 6 人组成,通过分工与合作并在赵老师的耐心指导下共同完成了此程序设计2.设计的基本原理2.1 问题描述连珠(五子棋 )是有两个人在一盘棋上进行对抗的竞技运动。

在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方7在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜此时,算法结束 2.2 需求分析(1)输出棋盘界面(2)要求玩家选择棋子(3)玩家轮流下棋(4)判断键盘输入哪个键按规则执行操作(5)判断谁先落棋(6)判断赢家(7)输出结果界面2.3 流程图开始玩家选择棋子输出棋盘界面O 方先输入棋子坐标83 设计的基本过程玩家移动棋子刷新棋盘界面转换玩家判断棋子是否出界判断是否重子输出胜利界面刷新棋盘界面结束判断是否赢棋NNNYYY9char b[40][40];void show() //输出获胜图像//{int i=0,j=0; //i 为横坐标变量,j 为纵坐标变量 //for(i=0;i10&&i10&&j25&&j=6&&j=7&&j=8&&j=9&&j=10&&j=12&&j=14&&j=17&&j#includechar a[65][65];char b[40][40];void show() //输出获胜图像//{int i=0,j=0; //i 为横坐标变量,j 为纵坐标变量//for(i=0;i10&&i10&&j25&&j=6&&j=7&&j=8&&j=9&&j=10&&j=12&&j=14&&j=17&&j=1&&x=1&&y<=64){ if(a[x][y]==46) break;else {if(flag==1) m--; else n--;printf("此处有子,请继续移子");continue;}}else {if(flag==1) m--; else n--;printf("此处过界,请继续移子");}}if(flag==1) //在 a[][]的特定位置更新字符//a[x][y]='O';else a[x][y]='@';showcheckerboard(m,n); //更新棋盘//l=judge(x,y); //记录谁赢变量//if(l==1) return flag; }}void showcheckerboard(int x,int y) /*画出棋盘*/ //x,y 分别为 o 方下棋步数,@方下棋步数//{16int i,j,w=0; //i,j 为横纵坐标变量//printf("================================================================================================================\n");printf(" 0 方累计下棋步数:%d @方累计下棋步数:%d\n",x,y);printf("================================================================================================================\n");for(i=0;i<65;i++) //输出横纵坐标//printf("%2d",i);printf("\n");for(i=1;i<65;i++){for(j=0;j<65;j++){if(j==0){w+=1;printf("%2d",w);}else{printf("%2c",a[i][j]);}}printf("\n");}}int judge(int x,int y) /*判断各方向五子是否连成一线*/ //x,y 分别为横纵坐标//{ int i,b,c,d,e,z=1; //z 为标志变量,记录每个方向连棋个数//for(i=1;i<5;i++) //垂直向下数//{if(a[x][y+i]==a[x][y]) {z+=1;if(z==5){return(1);break;}}else break;}17for(i=1;i<5;i++) //垂直向上数//{if(a[x][y-i]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}e=z;z=1;for(i=1;i<5;i++) //水平向右数//{if(a[x+i][y]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}for(i=1;i<5;i++) //水平向左数//{if(a[x-i][y]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}b=z;z=1;for(i=1;i<5;i++) //向左下方数//{if(a[x-i][y+i]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}for(i=1;i<5;i++) //向右上方数//{18if(a[x+i][y-i]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}c=z;z=1;for(i=1;i<5;i++) //向左上方数//{if(a[x-i][y-i]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}for(i=1;i<5;i++) //向右下方数//{if(a[x+i][y+i]==a[x][y]){z+=1;if(z==5){return(1);break;}}else break;}d=z;if(e!=5&&b!=5&&c!=5&&d!=5) //判断某个方向五子连棋//{return(0);}}void main(){int x,y,flag,m=0,n=0,p=0; //flag 为哪方下棋的判断变量,m,n 为分别记录双方的步数//printf("================================================================================================================\n");printf("w 为上移动,a 为左移动,s 为下移动,d 为右移动,o 确定落棋子\n。

下载提示
相似文档
正为您匹配相似的精品文档