




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
六子棋 2008年10月24日-六子棋C语言课程设计 报告 目录第一章 导言 1.1概述 21.2项目背景 2 1.3开发人工作情况概述 2 第二章 项目概述 2.1 软件系统需求分析 2.2软件运行环境 32.3软件主要设计思想 32.4软件功能模块说明 42.5程序流程 72.6系统数据库设计 112.7系统功能函数简介 122.8本软件存在的缺陷 14第三章 用户使用手册3.1六子棋游戏程序的功能说明 153.2六子棋游戏程序的的性能明 153.3六子棋游戏的运行说明 153.4用户操作说明 15第四章 课程设计心得体会 20第五章 系统源代码 22第一章 导言 1.1概述 本程序是一款棋类益智游戏程序,类似于五子棋游戏,是采用 C语言编写的可在WINDOWS 系统下运行的娱乐游戏平台。该程序面向广大棋类游戏的爱好者,能够提供方便,实现基本智能控制的游戏环境。本程序可以实现人人对战以及人机对战,用户可以根据需要自行选择,人机对战中电脑这方具有一定智能,具备对奕能力。在游戏人机对话接口上,人人对战,为方便双方棋手,采用键盘两边控制,一方是A,S,D,W,SPACE控制棋子移动及下棋,另一方是方向键及ENTER控制移动及下棋,双方都可通过ESC键退出游戏,人机对战中,棋手可用鼠标来操作,点击界面退出按钮终止游戏。游戏开始后,选择模式,可进入相应界面,左方显示30*30的棋盘,右方会有游戏相关操作说明,本游戏默认黑棋先手,六子连珠者胜,程序会提示当前下棋的棋手,结束时会显示对战双方胜负情况。1.2项目背景 项目名称:六子棋 项目发布:周纯杰,何顶新,周凯波,彭刚 指导老师:周纯杰,何顶新,周凯波,彭刚 项目开发人员:华中科技大学控制科学与工程系自动化0707班 凡速飞(组长),田绍宇参考资料:人工智能 马少平 朱晓燕 清华大学出版社标准C语言课程设计及应用周纯杰等 华中科技大学出版社 C高级实用程序设计 王士元. 北京: 清华大学出版社 C语言课程设计 陈清华, 朱红. 南京: 东南大学出版社 C语言程序设计 潭浩强. 北京: 清华大学出版社 C语言高级实例解析 汪晓平 清华大学出版社C语言游戏编程高级语言程序设计(C语言版) 刘加海 浙江大学出版社开发成果:六子棋游戏1.3开发人员工作情况概述:凡速飞:(组长)具体工作:编写开始界面,设计编写电脑下棋即人工智能部分的算法和代码,实现界面汉化,并建立工程,组装程序田绍宇:具体工作:整个游戏界面,包括模式选择,游戏进行,结束等界面程序,设计编写游戏主控模块,人人对战算法及最终代码,游戏胜负判定,写程序设计报告。第二章、项目概述2.1 软件系统需求分析 开始显示30*30的棋盘,通过模式选择实现人人对战及人机对战,六子连珠者胜,黑棋先手,要能动态显示下棋顺序,而且能自动判断输赢及显示胜负信息2.2软件运行环境 该程序是用C语言在BC下编写的,通过BC的工程化建立了一个工程文件,编译后生成了一个可执行的EXE文件,只要计算机具有BC,该文件可以在WINDOWS环境下点击运行。2.3 软件主要设计思想本游戏设计的是一款六子棋游戏,在设计中,我们最主要的是通过建立一个二维数组chess【30】【30】来代表记录棋盘上各点信息,通过宏定义将棋手定义成整型值,便于记录,例如:当在棋盘左上顶点处1号棋手下了一粒白子后,就将chess【0】【0】这个值记为2,这样就把下棋信息记录下来了,这就是所谓的棋型表,之后的判断胜负,棋手下棋都是通过搜索这个数组来作出相应判断和操作主控模块中,为实现交换棋手,通过一个中间值step来实现,设一个初值,为0,然后每个棋手下完后,进行step自增,这样通过选择判断,if(step%2=0),则2号棋手下棋,否则1号棋手下棋,主循环用while(1)不断循环判断执行为动态显示下棋顺序,是通过书写覆盖,再书写再覆盖来实现的判断胜负是用judgewin这个函数,再数组中搜索相邻的位置是否是己方棋子,是就用一个变量加一,否则退出,分别向八个方向搜索,一个方向上存在六子连珠就获胜。智能体中,为实现电脑智能判断,关键是要使电脑能够找到一个最佳位置,我们通过六子棋相关规则及下棋方法,设计一套评分规则,搜索棋型表中己方及对方各点,根据评分规则给各点评分,找到己方及对方分数最高的点,分别代表进攻及放手的最佳位置,然后比较这两点的分数,选择是进攻还是防守,实现对奕功能2.4 软件功能模块说明五子棋界面及画图函数模块主控模块人人对战模块块人机对战模块胜负判断模块 界面及图形模块界面及图形模块欢迎界面设计函数模式选择界面游戏进行界面结束界面棋子函数人人对战模块人人对战模块1号棋手2号棋手人机对战模块人机对战模块棋手电脑(智能体)2.5程序流程主函数流程图 初始化图形及数据 显示欢迎界面 选择(Y或N) N Y(或ENTER)模式选择 选择(1或2) 1 2 人机对战人人对战主循环控制模块结束人人对战程序流程人人对战 Step+ Step值的奇偶来判断,初值为0 奇 偶 step+2号棋手1号棋手下棋移动棋子下棋移动棋子判断胜负判断胜负 交换棋手显示胜负信息 否 是 是 否显示胜负信息交换棋手 棋手下棋流程Player1或player2显示当前下棋的棋手 A D/ ENTER/SPACE W/ S/ ESC下移光标上移光标退出下棋右移光标左移光标判断当前有无棋子 有 无显示棋子退出循环改变棋型表相应值判断胜负 是 否退出循环,交换棋手结束 电脑下棋流程2.6系统数据结构设计定义二维数组chess【30】【30】/来存取棋盘上各个位置棋子信息#define LEFT 0x4b00 /控制棋子移动的方向键键值#define RIGHT 0x4d00#define UP 0x4800#define DOWN 0x5000#define F1 0x3b00#define A 0x1e61#define S 0x1f73#define D 0x2064#define W 0x1177#define F2 0x3c00#define ESC 0X011b /退出键#define ENTER 0x1c0d /下棋键键值#define SPACE 0x3920#define ROW 30 /需要用到的相关定义#define COLUMN 30#define YES 0x1579#define NO 0x316e#define LEFTUP 5#define RIGHTDOWN 6#define LEFTDOWN 7#define RIGHTUP 8#define SIZE 10#define FALSE 0#define TRUE 1#define COMPUTER 1 /定义棋手#define PLAYER1 2#define PLAYER2 32.7系统功能函数简介void ready();/初始界面,显示相关简介说明void init_graph();初始化图形系统,单独写一个函数减少重复void init_data();初始化数据,即用于存储棋型表的二维数组的值void Chooseplay_with_who();模式选择界面,根据提示输入选择值,将可进入不同界面,开始不同游戏void drawchessboard(int play_with_who);游戏界面,其中具有一个参数play_with_who,接收用户输入的输入值,函数会根据不同值显示不同界面int judgewin(int x,int y,int flag,int chess3030);判断胜负,参数X,Y是棋子所下位置坐标,flag用于接收下棋的棋手信息,chess【】【】是棋型表信息void Showchess(int x,int y,int flag);在当前位置X,Y坐标处根据棋手flag画棋子void ENDmessage(int play_with_who,int flag);结束画面,将显示胜负信息void Guangbiao(int x, int y);光标函数,会在传给它的坐标出显示一个闪动的光标void player1(int chess3030);1号棋手下棋控制函数,chess【】【】跟随记录棋盘上当前信息void player2(int chess3030);2号棋手下棋控制函数,chess【】【】跟随记录棋盘上当前信息void player(int chess3030);人机对战中,人这一方下棋控制函数void computer(int chess3030); 人机对战中智能体部分int Initmouse();鼠标初始化函数void Showmouse();显示鼠标void Hidemouse();隐藏鼠标void Readmouse(int *f,float*x,float *y);读取鼠标位置和状态void mouse(int chess3030,int step);void open_hzk();打开汉字库void get_hz(char incode,char bytes);读取汉字void dishz(int x0,int y0,char code,int color);在X0,Y0处显示汉字double score(int chessROWCOLUMN);电脑下棋中根据评分规则用于计算某点分数double score_row(int i,int j,int chessROWCOLUMN);计算某点在横向上的分数double score_column(int i,int j,int chessROWCOLUMN);计算某点在纵向上的分数double score_diag_45(int i,int j,int chessROWCOLUMN);计算四十五度角方向上的分数double score_diag_135(int i,int j,int chessROWCOLUMN);计算135度角方向上的分数double total_score(int who_running,int chessROWCOLUMN);计算某个棋手的总分2.8本游戏程序存在的缺陷由于是初次开发如此大型的程序,没有任何经验,很多困难都是第一次遇到,就目前而言,一些基本的BUG已经排除,到目前为止,基本上没有发现影响程序主体功能的BUG。另外,对于人工智能部分的设计由于我们水平实在有限,所以,电脑的智能程度并不高,这也是我们的一大遗憾。在界面制作上有些简陋,不是很漂亮,操作上还不是很人性化,本应该做菜单,实现鼠标菜单操作,让游戏进行起来不方便,但由于一开始没准备设计这项,后来又时间不够,故有此缺憾,不过,我们经历课设还会找时间对其进行一定完善,不让自己留有遗憾。第三章、用户使用手册3.1六子棋游戏程序功能说明:本六子棋游戏程序可以实现Borland C环境下的简单智能控制的六子棋娱乐游戏,可以自动判断输赢,自动显示胜负信息,下棋中可以动态显示下棋顺序,在人机对战中电脑可以实现基本的智能判断,找到较佳的下棋位置与人对奕。 3.2六子棋游戏程序性能说明:3本游戏程序具有基本智能,灵活性、方便等特点。1基本智能 本游戏程序中,计算机可以自动显示下棋顺序,判断胜负,显示胜负信息,计算机也课实现与人对奕。2.灵活性 本游戏程序可以DOS/WINDOWS 9X/ME/2000/XP等操作系统下顺利运行,不会由于操作系统的不同而出现运行上冲突的问题,有极高的适应性。3.方便 本游戏程序通过键盘两边操作,实现棋手对立操作,避免交叉,而且键盘操作方便,光标移动显示当前位置,人机对战中,实现鼠标控制,操作更便利3.3六子棋游戏程序运行说明:本游戏程序无需安装,点击BC编译生成的EXE文件即可执行3.4用户操作说明:开始进入欢迎界面,按Y或ENTER进入,按N退出,进入后,显示模式选择,选择不同模式和不同对手对奕。在人人对战中,黑棋方先行,按方向键控制光标移动,找到位置后,按ENTER键下棋,然后轮到白棋方下,白棋方用A,S,D,W控制光标移动,找到位置后按SPACE下棋,下棋中不必自行判断胜负,电脑会判断并最终显示,双方都可以通过按ESC键强行退出游戏在人机对战中,己方为黑棋,己方先手,通过鼠标下棋,点击退出按钮可以退出第四章、课程设计心得体会田绍宇: 这次C语言课程设计自第三周开始到第八周结束,历时六周,在这六周中,我和我的合作人冥思苦想,刻苦钻研,克服一个又一个困难,虽然这个过程十分艰难,但我们充分进入,享受,经历着这样一个过程,从中学到了不少东西。 刚开始,我们实在是无从下手,一个刚刚学会编写简单C语言题实现简单功能的人突然面对这样一个结构复杂,技术困难,工程庞杂的程序设计项目,实在不知如何是好。 幸好,我们谨尊老师的指导,首先完成目标设定及工作计划,分配好任务,迈出了课设的第一步。然后,我们着手学习相关知识,包括C绘图,文件操作,动画,键盘控制,鼠标操作,五子棋算法,人工智能博弈搜索算法(极大极小搜索算法),汉化等等知识,然后开始算法设计,这个工作十分艰难和耗时,期间我们多次向人请教,并咨询老师,获得了极大帮助,在此向他们表打由衷的感激之情。之后,我们开始了代码的编写。在这之中,最困难的是调试,解决一个又一个BUG,最终,我们的作品呈现在我们面前,不禁教我感慨万千。 经历此次课设,充分加深了我对C语言知识的理解和掌握,极大丰富了我的知识,同时也大大锻炼了我的思维和面对困难解决困难的勇气及方法,另外也让我学会如何与人合作,协调工作,共同努力,这无疑是将来急切需要的一种能力。总之,课设这个过程将成为一笔宝贵的人生财富,助我们不断成长,进步!凡速飞:作为本软件的总体构思和编制者,在本软件的设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 耳部肿瘤课堂
- 好奇产品培训体系构建
- 瞄准新质生产力
- 听了郝红英老师孩子心里发展敏感期与家庭教育的心得体会模版
- 奥康客户关系管理体系构建
- 办公室行政管理
- 技术岗位工作总结模版
- 大学生职业规划大赛《视觉传达设计专业》生涯发展展示
- 大学生职业规划大赛《人力资源管理专业》生涯发展展示
- 细胞治疗产品开发与应用
- 推销实战技巧与客户优秀服务技巧
- 福建新费用定额交底材料
- 器质性精神障碍患者的护理
- 趣味英语课件完整版
- 大学武术智慧树知到答案章节测试2023年浙江大学
- 前列腺增生症患者围手术期的护理
- 五防系统调试报告
- 日语综合教程第六册 单词表
- 市委政研室主任关于如何写稿子的讲话
- 在建项目雨季施工(防汛)安全隐患排查表
- 《广东省普通高中学生档案》模板
评论
0/150
提交评论