五子棋课程设计报告.docx

上传人:b****4 文档编号:5527086 上传时间:2023-05-08 格式:DOCX 页数:13 大小:21.85KB
下载 相关 举报
五子棋课程设计报告.docx_第1页
第1页 / 共13页
五子棋课程设计报告.docx_第2页
第2页 / 共13页
五子棋课程设计报告.docx_第3页
第3页 / 共13页
五子棋课程设计报告.docx_第4页
第4页 / 共13页
五子棋课程设计报告.docx_第5页
第5页 / 共13页
五子棋课程设计报告.docx_第6页
第6页 / 共13页
五子棋课程设计报告.docx_第7页
第7页 / 共13页
五子棋课程设计报告.docx_第8页
第8页 / 共13页
五子棋课程设计报告.docx_第9页
第9页 / 共13页
五子棋课程设计报告.docx_第10页
第10页 / 共13页
五子棋课程设计报告.docx_第11页
第11页 / 共13页
五子棋课程设计报告.docx_第12页
第12页 / 共13页
五子棋课程设计报告.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

五子棋课程设计报告.docx

《五子棋课程设计报告.docx》由会员分享,可在线阅读,更多相关《五子棋课程设计报告.docx(13页珍藏版)》请在冰点文库上搜索。

五子棋课程设计报告.docx

五子棋课程设计报告

--------六子棋

C语言课程设计

报告

 

目录

第一章导言

1.1概述………………………………………………2

1.2项目背景………………………………………………2

1.3开发人工作情况概述………………………………………………2

第二章项目概述

2.1软件系统需求分析………………………………………………

2.2软件运行环境………………………………………………3

2.3软件主要设计思想………………………………………………3

2.4软件功能模块说明………………………………………………4

2.5程序流程………………………………………………7

2.6系统数据库设计………………………………………………11

2.7系统功能函数简介………………………………………………12

2.8本软件存在的缺陷………………………………………………14

第三章用户使用手册

3.1六子棋游戏程序的功能说明…………………………………………15

3.2六子棋游戏程序的的性能明…………………………………………15

3.3六子棋游戏的运行说明…………………………………………15

3.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软件功能模块说明

胜负判断模块

 

界面及图形模块

棋子函数

人人对战模块

2号棋手

人机对战模块

电脑(智能体)

2.5程序流程

主函数流程图

初始化图形及数据

显示欢迎界面

选择(Y或N)

NY(或ENTER)

模式选择

选择(1或2)

12

人机对战

人人对战

主循环控制模块

 

结束

人人对战程序流程

人人对战

Step++Step值的奇偶来判断,初值为0

奇偶step++

2号棋手

1号棋手

下棋

移动棋子

下棋

移动棋子

判断胜负

判断胜负

交换棋手

显示胜负信息

否是是否

显示胜负信息

交换棋手

棋手下棋流程

Player1或player2

显示当前下棋的棋手

AD/ENTER/SPACEW/S/ESC

下移光标

上移光标

退出

下棋

右移光标

左移光标

判断当前有无棋子

有无

显示棋子

退出循环

改变棋型表相应值

判断胜负

是否

退出循环,交换棋手

结束

电脑下棋流程

 

2.6系统数据结构设计

定义二维数组chess【30】【30】//来存取棋盘上各个位置棋子信息

#defineLEFT0x4b00//控制棋子移动的方向键键值

#defineRIGHT0x4d00

#defineUP0x4800

#defineDOWN0x5000

#defineF10x3b00

#defineA0x1e61

#defineS0x1f73

#defineD0x2064

#defineW0x1177

#defineF20x3c00

#defineESC0X011b//退出键

#defineENTER0x1c0d//下棋键键值

#defineSPACE0x3920

 

#defineROW30//需要用到的相关定义

#defineCOLUMN30

#defineYES0x1579

#defineNO0x316e

#defineLEFTUP5

#defineRIGHTDOWN6

#defineLEFTDOWN7

#defineRIGHTUP8

#defineSIZE10

#defineFALSE0

#defineTRUE1

 

#defineCOMPUTER1//定义棋手

#definePLAYER12

#definePLAYER23

2.7系统功能函数简介

voidready();//初始界面,显示相关简介说明

voidinit_graph();初始化图形系统,单独写一个函数减少重复

voidinit_data();初始化数据,即用于存储棋型表的二维数组的值

voidChooseplay_with_who();模式选择界面,根据提示输入选择值,将可进入不同界面,开始不同游戏

voiddrawchessboard(intplay_with_who);

游戏界面,其中具有一个参数play_with_who,接收用户输入的输入值,函数会根据不同值显示不同界面

intjudgewin(intx,inty,intflag,intchess[30][30]);

判断胜负,参数X,Y是棋子所下位置坐标,flag用于接收下棋的棋手信息,chess【】【】是棋型表信息

voidShowchess(intx,inty,intflag);

在当前位置X,Y坐标处根据棋手flag画棋子

voidENDmessage(intplay_with_who,intflag);

结束画面,将显示胜负信息

voidGuangbiao(intx,inty);

光标函数,会在传给它的坐标出显示一个闪动的光标

voidplayer1(intchess[30][30]);

1号棋手下棋控制函数,chess【】【】跟随记录棋盘上当前信息

voidplayer2(intchess[30][30]);

2号棋手下棋控制函数,chess【】【】跟随记录棋盘上当前信息

voidplayer(intchess[30][30]);

人机对战中,人这一方下棋控制函数

voidcomputer(intchess[30][30]);人机对战中智能体部分

intInitmouse();鼠标初始化函数

voidShowmouse();显示鼠标

voidHidemouse();隐藏鼠标

voidReadmouse(int*f,float*x,float*y);读取鼠标位置和状态

voidmouse(intchess[30][30],intstep);

voidopen_hzk();打开汉字库

voidget_hz(charincode[],charbytes[]);读取汉字

voiddishz(intx0,inty0,charcode[],intcolor);在X0,Y0处显示汉字

doublescore(intchess[ROW][COLUMN]);

电脑下棋中根据评分规则用于计算某点分数

doublescore_row(inti,intj,intchess[ROW][COLUMN]);

计算某点在横向上的分数

doublescore_column(inti,intj,intchess[ROW][COLUMN]);

计算某点在纵向上的分数

doublescore_diag_45(inti,intj,intchess[ROW][COLUMN]);

计算四十五度角方向上的分数

doublescore_diag_135(inti,intj,intchess[ROW][COLUMN]);

计算135度角方向上的分数

doubletotal_score(intwho_running,intchess[ROW][COLUMN]);

计算某个棋手的总分

2.8本游戏程序存在的缺陷

由于是初次开发如此大型的程序,没有任何经验,很多困难都是第一次遇到,就目前而言,一些基本的BUG已经排除,到目前为止,基本上没有发现影响程序主体功能的BUG。

另外,对于人工智能部分的设计由于我们水平实在有限,所以,电脑的智能程度并不高,这也是我们的一大遗憾。

在界面制作上有些简陋,不是很漂亮,操作上还不是很人性化,本应该做菜单,实现鼠标菜单操作,让游戏进行起来不方便,但由于一开始没准备设计这项,后来又时间不够,故有此缺憾,不过,我们经历课设还会找时间对其进行一定完善,不让自己留有遗憾。

第三章、用户使用手册

3.1六子棋游戏程序功能说明:

本六子棋游戏程序可以实现BorlandC环境下的简单智能控制的六子棋娱乐游戏,可以自动判断输赢,自动显示胜负信息,下棋中可以动态显示下棋顺序,在人机对战中电脑可以实现基本的智能判断,找到较佳的下棋位置与人对奕。

3.2六子棋游戏程序性能说明:

3本游戏程序具有基本智能,灵活性、方便等特点。

1基本智能

本游戏程序中,计算机可以自动显示下棋顺序,判断胜负,显示胜负信息,计算机也课实现与人对奕。

2.灵活性

本游戏程序可以DOS/WINDOWS9X/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语言知识的理解和掌握,极大丰富了我的知识,同时也大大锻炼了我的思维和面对困难解决困难的勇气及方法,另外也让我学会如何与人合作,协调工作,共同努力,这无疑是将来急切需要的一种能力。

总之,课设这个过程将成为一笔宝贵的人生财富,助我们不断成长,进步!

凡速飞:

作为本软件的总体构思和编制者,在本软件的设计过程我遇到了前所未有的困难,这些困难是我在之前的C语言学习过程中从来没有碰到的。

起初面对该课题,基本上是无从下手,面对这么多的知识,那些要用到,那些不会用到,基本上没什么概念,接到课题的头三个星期由于高级编程技术的缺乏,我们一组成员基本上都是在看书,其中想到了很多想法以及如何实现,但现在程序编完了以后,从头来看,得出的结论是:

想法和实现是有很大距离的。

很多想法实现起来有很大的困难,这些困难可能是由于自己以前基础知识的漏洞;可能是由于算法的不完善;可能是由于自己程序与组员的程序联接问题;还有可能是编译工具的使用不熟练…

通过本次的C语言课程设计,我最深的体会就是编程要有详细的计划,明确的方向和流程是多么的重要!

在之前的工作中,由于没有完善的总体设计,我们在程序设计过程中部入了很多误区,编程过程中有一段时间没有什么任何成果,我一度非常灰心丧气,甚至有几天有放弃的念头。

尽管编制软件的过程非常辛苦,但毕竟挺过来了。

跟某些牛叉的人相比,感觉我们的东西就像垃圾,但毕竟是自己的第一个软件作品,看着自己的成果,感到非常欣慰,也许实现方式比较龊,但按要求的基本功能都有了。

它是我从不懂到懂,亲手实践的结晶,对我来说具有非比寻常的意义。

通过这次C语言课程设计的学习,我收获很多,尤其是与他人合作的能力,在这合作项目中,由于分歧,我们小组一度发生严重争吵。

现在我学会了要更多的与人合作,要多与他人交流,才能完成一个好的项目。

 

第五章程序源代码

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2