版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中北大学程序设计课程设计说明书学生:学 号:10051041 学 院: 信息与通信工程学院 专 业: 光电信息工程 题 目: 五子棋 指导教师: 职称: 2012 年 01月 06 日(纪念我已经逝去的大学生活)院: 信息与通信工程学院 专 业: 光电信息工程 学 生 姓 名:学 号: 10051041 课程设计题目:五子棋 起 迄 日 期:2011年12月 24日2012年1月6日 课程设计地点: 111420 指 导 教 师:系 主 任:下达任务书日期: 2011 年12 月25日课 程 设 计 任 务 书1设计目的:1 熟悉C语言程序设计的原理与方法;2 掌握C语言开发环境下程序的具体设
2、计;3 掌握利用C语言分析解决具体问题。2设计容和要求:设计容:用C语言设计一个五子棋游戏程序,允许游戏者自由选择棋子颜色,实现人人对战和人机对战,利用时间函数设置实现落子倒计时功能程序应该具有以下基本功能:1显示欢迎界面。2玩家棋子可选,棋盘围足够。3落子时间倒计时。设计要求:1不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。3对系统进行功能模块分析、画出总流程图和各模块流程图。4用户界面要求使用方便、简洁明了、美观大方、格式统一。5所有程序需在Win-Tc 或Microsoft Visual C+ 6.0 环境调试通过。3设计工
3、作任务与工作量的要求包括课程设计计算说明书(论文)、图纸、实物样品等:1) 课程设计说明书一份;2) 电子文档(说明书、设计程序)一份课 程 设 计 任 务 书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年0
4、1月06日 答辩;系主任审查意见:签字:年月日目 录1、课程设计的背景与意义.062、设计的基本原理063、设计的基本过程084、设计的结果105、总结和结论.111. 设计背景与意义我们的五子棋程序是在Visual C+ 6.0环境下运行的。 Visual C+ 6.0 Microsoft Visual C+(简称Visual C+、MSVC、VC+或VC)微软公司的C+开发工具,具有集成开发环境,可提供编辑C语言,C+以与C+/CLI等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Micr
5、osoft .NET框架。目前最新的版本是Microsoft Visual C+ 2010。Visual C+ 6.0集成了MFC6.0,于1998发行。发行至今一直被广泛地用于大大小小的项目开发。五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。我们通过对C语言以与对大学计算机基础的初步学习后,本学期末进行了课程程序设计,设计课题为“五子棋”。我们小组由6人组成,通过分工与合作并在老师的耐心指导下共同完成了此程序设计。2.设计的基本原理2.1问题描述连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一
6、点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。此时,算法结束。2.2需求分析(1)输出棋盘界面(2)要求玩家选择棋子(3)玩家轮流下棋(4)判断键盘输入哪个键按规则执行操作(5)判断谁先落棋(6)判断赢家(7)输出结果界面2.3流程图开始玩家选择棋子输出棋盘界面O方先输入棋子坐标刷新棋盘界面转换玩家玩家移动棋子YYYNNN结束判断是否赢棋判断是否重子判断棋子是否出界刷新棋盘界面输出胜利界面3设计的基本过程char b4040;void show() /输出获胜图像/ int i=0,j=0; /i为横坐标变量,
7、j为纵坐标变量/for(i=0;i<40;i+) /对图像数组赋初值/ for(j=0;j<40;j+) bij=46;for(i=0;i<40;i+) /对图像数组特定点赋值/for(j=0;j<40;j+)if(i>10&&i<16)if(j>10&&j<16|j>25&&j<31)bij='O'else if(i=21)if(j>=6&&j<=35)bij='O'elseif(i=22)if(j>=7&&am
8、p;j<=34)bij='O'elseif(i=23)if(j>=8&&j<=33)bij='O'elseif(i=24)if(j>=9&&j<=31)bij='O' elseif(i=25)if(j>=10&&j<=30)bij='O' elseif(i=26)if(j>=12&&j<=28)bij='O'elseif(i=27)if(j>=14&&j<=26)bij=
9、'O'elseif(i=28)if(j>=17&&j<=23)bij='O'for(i=0;i<40;i+) /输出图像数组/for(j=0;j<40;j+)printf("%c",bij);printf("n");详细说明:Show函数的目的是输出获胜界面,调用全局变量b(目的是为图像分配存储空间),i为横坐标变量,j为纵坐标变量,接下来的两个for是把b初始化为“.”,再接下来的双for是为塑形:限定行间距为10<i<16,再限定列间距为10<j<16或2
10、5<j<31,用判断语句来塑造图形“双眼”;当i=21时,限定6<=j<=25,当i=22,23,24,25,26,27时同理,用判断语句来塑造“嘴”,最后用双for语句来输出图形。4设计结果玩家获胜显示界面截图5总结与结论1 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.回顾起此次课程程序设计,至今我仍感慨颇多,从选题到定稿,从理论到实践,在整整两星期的日子里,学到很多很多的的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论
11、与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中难免会遇到过各种各样的问题,同时在设计的过程中也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,把以前所学过的知识重新温故。这次课程设计顺利完成了,在设计中遇到了很多编程问题,最后在宇老师的辛勤指导下,终于游逆而解。同时,在宇老师的身上我学得到很多实用的知识,我表示感!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感!附录负责人设计容Viod judge()函数的设计与程序的调试Viod j
12、udge()函数的设计与程序的调试Void move()函数的设计与课程设计说明书的排版制作 Int playing()函数的设计与程序的调试Void showcheckerboard()函数设计与相关操作Void show()函数的设计与程序的调试程序源代码:#include<stdio.h>#include<string.h>char a6565;char b4040;void show() /输出获胜图像/ int i=0,j=0; /i为横坐标变量,j为纵坐标变量/for(i=0;i<40;i+) /对图像数组赋初值/ for(j=0;j<40;j+
13、) bij=46;for(i=0;i<40;i+) /对图像数组特定点赋值/for(j=0;j<40;j+)if(i>10&&i<16)if(j>10&&j<16|j>25&&j<31)bij='O'else if(i=21)if(j>=6&&j<=35)bij='O'elseif(i=22)if(j>=7&&j<=34)bij='O'elseif(i=23)if(j>=8&&
14、;j<=33)bij='O'elseif(i=24)if(j>=9&&j<=31)bij='O' elseif(i=25)if(j>=10&&j<=30)bij='O' elseif(i=26)if(j>=12&&j<=28)bij='O'elseif(i=27)if(j>=14&&j<=26)bij='O'elseif(i=28)if(j>=17&&j<=23)bij=
15、'O'for(i=0;i<40;i+) /输出图像数组/for(j=0;j<40;j+)printf("%c",bij);printf("n");void move(int *x,int *y) /*移动棋子的方向*/ /x为上一步棋子横坐标,y为上一步棋子纵坐标/char b40; /为记录棋子将要移动的步伐/int i,z,flag=1; /z为某一步的中间变量,flag为标志变量/gets(b); /输入要移动的步伐/for(i=0;i<40;i+)z=bi; /把b的某一步传递给z/switch(z) /判断移动
16、棋子方向/case 119: *x=*x-1;break; /w键控制棋子上移/case 97: *y=*y-1;break; /a键控制棋子左移/case 115: *x=*x+1;break; /s键控制棋子下移/case 100: *y=*y+1;break; /d键控制棋子右移/case 111: flag=0;break; /o键确定落子/if(flag=0) break; /判断某步是否移动完成/int playing() /*开始下棋*/ int flag=1,i=0,x=0,y=0,k,l,n=0,m=1; /flag为记录哪方下棋的标志变量,x,y为a的横纵坐标,m,n分别记
17、录o方,方的积累步数/int *p1=&x,*p2=&y; int judge (int x,int y); /本函数所用子函数的声明/void move(int *p1,int *p2);void showcheckerboard(int x,int y); printf("O方先输入首子坐标:"); scanf("%d %d",&x,&y); /输入首坐标/axy='O' /首坐标的棋盘位置画棋子/showcheckerboard(m,n); /输出更新后的棋盘/for(i=0;i<2000;i+
18、) /改变玩家/if(flag=1)flag=0;elseflag=1;for(k=0;k<2000;k+) /玩家落子并判断下的棋子是否过界或此处是否有子/if(flag=1)printf("O方下棋n");m+;elseprintf("方下棋n");n+; move(p1,p2);if(x>=1&&x<=64&&y>=1&&y<=64) if(axy=46) break; else if(flag=1) m-; else n-; printf("此处有子,请继续移
19、子"); continue;else if(flag=1) m-; else n-;printf("此处过界,请继续移子");if(flag=1) /在a的特定位置更新字符/axy='O'else axy=''showcheckerboard(m,n); /更新棋盘/l=judge(x,y); /记录谁赢变量/ if(l=1) return flag; void showcheckerboard(int x,int y) /*画出棋盘*/ /x,y分别为o方下棋步数,方下棋步数/int i,j,w=0; /i,j为横纵坐标变量/pr
20、intf("=n");printf(" 0方累计下棋步数:%d 方累计下棋步数:%dn",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);elseprintf("%2c",aij);printf("n");i
21、nt judge(int x,int y) /*判断各方向五子是否连成一线*/ /x,y分别为横纵坐标/ int i,b,c,d,e,z=1; /z为标志变量,记录每个方向连棋个数/for(i=1;i<5;i+) /垂直向下数/if(axy+i=axy) z+=1;if(z=5)return(1);break;else break;for(i=1;i<5;i+) /垂直向上数/if(axy-i=axy)z+=1;if(z=5)return(1);break;else break;e=z;z=1; for(i=1;i<5;i+) /水平向右数/if(ax+iy=axy)z+=1;if(z=5)return(1);break;else break; for(i=1;i<5;i+) /水平向左数/if(ax-iy=axy)z+=1;if(z=5)return(1);break;else break; b=z;z=1;for(i=1;i<5;i+) /向左下方数/if(ax-iy+i=axy)z+=1;if(z=5)return(1);break;else break; for(i=1;i<5;i+) /向右上方数/if(ax+iy-i=ax
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖北神农架圣邦文旅发展有限公司招聘16人笔试历年难易错考点试卷带答案解析2套试卷
- 2025年上半年山东铁投集团校园招聘社会公开招聘165人笔试参考题库附带答案详解
- 2025安徽蚌埠靓淮河水利投资集团有限公司所属企业招聘9人笔试历年备考题库附带答案详解
- 2025四川眉山丹棱产业投资集团有限公司招聘工作人员18人笔试历年难易错考点试卷带答案解析
- 2025中国广电校园招聘13人笔试参考题库附带答案详解
- 2026校招:中国2026校招:北京同仁堂集团笔试题及答案
- 2026校招:永兴特种材料科技公司笔试题及答案
- 医技三基三严模考试题(附参考答案)
- 医院医院感染知识考试试题(医技类)附答案
- 护理学导论试题与答案解析
- 收心归位聚合力 实干奋进创未来总经理在2026年春节复工全体员工大会上的致辞
- 2025-2026学年北京市通州区高三(上)期末语文试卷
- 涉密文件销毁设备选型与管理
- 拆除电气施工方案
- 2024年上海市专科层次自主招生考试职业适应性测试真题
- 儿童静脉血栓栓塞症抗凝药物治疗专家共识(2025)解读
- 静学系列主题班会课件:自习的“静”成长的“劲”
- 《立体裁剪》课件-3.原型立体裁剪
- 邮政竞聘笔试试题及答案
- (零模)苏州市2026届高三年级期初阳光调研试卷 生物试卷(含答案)
- 房屋市政工程生产安全重大事故隐患判定标准试题及答案
评论
0/150
提交评论