ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:212.34KB ,
资源ID:18127501      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18127501.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(黑白棋课程设计报告Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

黑白棋课程设计报告Word文档格式.docx

1、经过对此项目进行详细调查研究,初拟系统实现报告,对游戏开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。2.2实现的功能游戏有88的棋盘,分别由两人执黑子和白子轮流下棋,最后子多方为胜方。游戏中只要用自己的两个棋子夹住对方的棋子,便能使对方的棋子全部变色,变成自己的棋子颜色。到一方或双方都无子可下的时候,统计各方得分,保留棋子最多者就是胜者。2.3层次划分我们将本游戏设计主要划分三个层次:第一、设计游戏的基本框架、拟实现功能、各主要模块的划分、已经每期程序设计的进度划分。第二、游戏的编写、测试以及修改,这是在整个项目中最难的一部分,我们详细的讨论了组员中

2、个人的所长,详细的划分的各组员的任务,由全组成员共同完成。第三、报告的撰写以及对程序进行最后的修改和完善,这也是整个项目中最后一个也是最重要的一部分。2.4功能实现的可行性黑白棋游戏是在一个8*8的网格中进行,而数组属于构造体类型,数组时具有相同数据类型的变量序列。可以用一个二维数从而实现游戏的走棋,落棋,判断棋盘的变化等。游戏的开发部同于基于C语言的其他程序的开发,由于游戏本身的目的在于缓解压力,所以基于C语言设计的游戏需要一个良好的游戏界面,给游戏者轻松和愉快的感觉。而C语言提供了多种的图形函数,所以设计一个良好的界面是可行的。因为我们的游戏是采用“人人对战”的模式,所以在游戏中是由两个游

3、戏者进行轮流下棋,整个游戏过程中需要在两位游戏者之间不停的转换,在C语言ifelse,switchcase、等分支语句可以完成该转换。在每次落棋后,都需要根据相同的规则判断棋盘的变化,显然这些可以用C语言提供的whilefor等循环语句来实现这个功能。而游戏结果的输出,虽然C语言本身不提供输出语句,但是C语言的标准库函数中提供了一些输出、输入函数,综合应用这些输入、输出函数就可以实现上述内容。2.5经济上的可行性本系统在技术上采用Microsoft Visual C+ 6.0,技术上开发难度大,但其可操作实用性强,方便用户使用,界面友好。社会上同时也方便了其它软件编程人员,对其它软件的编程有借

4、鉴的作用。在经济上服务于游戏爱好者的人,使用成本低,使用效率高,节省了开支。第三章 总体设计3.1 主要功能黑白棋游戏是一个深爱人们喜爱的游戏,通常是人机对弈,本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。3.2 各个模块 棋盘设计 人人对战 棋盘变化 分数处理 成绩输出 结果输出3.3 模块之间连接 黑白棋游戏由棋盘设计、人人对战、棋盘变化、分数处理、成绩输出和程序的结果输出六个模块组成。 模块之间的连接关系是:首先初始化棋盘界面,游戏开始由棋手选择下子的位置,程序判断下

5、子后的棋盘变化,并计算双方棋子数量,再把分数输出显示,游戏结束后输出最终得分及胜利方。3.4 文字思路分析 从程序界面看,这是一个二维平面图,所以应想到数据的表示用二维数组,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、黑棋和白棋。这样给数组元素的取值设定为0、1、2,其中0代表空格,1代表白色棋子,2黑色棋子。 这样程序的主要工作是接收棋手按键操作,一旦接收到回车键,说明棋手摆子。 先判断是不是有效为止,也就是能不能包围住对方的棋子,若能,将这些被包围住的对方棋子都变成自己的棋子。然后对当前棋盘中黑白棋个数进行统计并输出结果。 如果没有这样的位置可

6、以落子,则要停步,让对方走棋,重复上述步骤,直到游戏结束。 若要终止,可以按Esc键退出。3.5模糊思路流程图 第四章 详细设计4.1棋盘界面设计4.1.1 画棋盘将背景颜色设置为蓝色,从坐标(100,100)开始每隔40单位用白色线条画一条水平线,一条垂直线,构成棋盘。使用fillelipse(int x,int y,int xradius,int yradius)函数,以x和y为圆心,画圆代表棋子。再使用setfillstyle函数设置填充模式和填充颜色。再在棋盘上分别画2个白棋和两个黑棋,做为初始棋子,计算棋子改变后的分数,最后输出开始分数。(如右图1-1)4.1.2 设置棋子颜色因为整

7、个下棋过程是由两个棋手交替下棋完成,因此整个过程中棋盘在不停的变化,所以为了判断棋手和棋盘的变化设置了整形变量t,根据t的价来判断填充的棋子的颜色,t的值为1的时候填充白棋,t的值为2的时候填充黑棋。(如下图1-2)4.2 恢复原来格子的状态由于棋手的走棋的时候,棋子总是先出现在棋盘的左上角,棋手通过移动光标后棋子的初始位置要恢复原本的蓝色棋盘,在经过的路程上显示当前棋子会覆盖原本的棋盘状态,所以棋子一旦走过,就应该得恢复原先的状态,是空格的依然为空,是棋子的依然为原先棋子,因此每次移动棋子都必须判断原来的状态,每次移动后都必须恢复成原来的状态。如下图(1-3)4.3 人人对战人人对战过程主要

8、是接受棋手的按键消息,其处理过程如下:1、按Esc键程序可以随时结束。2、按上下左右光标键,则改变棋子移动的坐标值。3、按回车键后判断:(1)如落子的位子已经有棋作则无效,继续压键。(2)如落子的位置是空格,可以将棋子落入格内,调用函数QpChange()判断是否引起棋盘的变化,函数值为1有变化,为0没变化。如果棋盘有变化,说明将包围的对方棋子吃掉,统计当前分数,如果棋盘没有变化,则说明落子的位置无法对方的棋子也视为无效棋,可以继续寻找合适的位置,但开始统计其落子次数cc,一旦尝试次数超过当前的棋盘的空格数,则说明他无棋可走,则放弃此步,让对方下棋。(3)如果棋子变化后,格子以占满64格或一方

9、棋子为0,则游戏结束,显示胜利方信息。按任意键程序结束。重复上述步骤,直到游戏结束。如上图(1-4)4.4 判断棋盘变化当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方的棋子,如果是,则改变棋盘,也就是棋盘上黑白棋子的个数要发生变化。从当前位置开始,用循环语句判断右边是否有一个或连续多个对方的棋子,遇到自己的棋子或空格则结束循环,如果循环结束不是遇到空白,且列坐标小于8,则说明这些位置是被自己包围的对方棋子,将它们吃掉,也就是改变为自己的棋子,如果有棋子发生变化,给棋盘变化标志yes赋值为1,同样的方法向左、上、下等8个方向进行判断,并做相应的变化。如果所有的方向都判断过,并且没有引

10、起棋盘的变化,则棋盘变化标志值yes赋值为0,返回yes,结束本函数。如下图(1-5)4.5 处理分数根据当前数组元素的值判断分数,如果是白棋,则白棋子数加,否则,黑棋子数累加。(如右图1-6)4.6 输出成绩利用设置实体填充模式填充矩形清除前次成绩,设计分数输出样式,分别判断分数为黑棋还是白旗分数,分别在输出各自分数的位置输出。(如下图1-7)4.7 输出结果根据白棋分数和黑棋分数的大小得出下棋的结果,输出赢着的信息。(如下图1-8)第五章 编码/*源程序*/#include graphics.h /*图形系统头文件*/#define LEFT 0x4b00 /*光标左键值*/#define

11、 RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /* ESC键值*/#define ENTER 0x1c0d /* 回车键值*/int a88=0,key,score1,score2;/*具体分数以及按键与存放棋子的变量*/char playone3,playtwo3;/*两个人的得分转换成字符串输出*/void playtoplay(void);/*人人对战函数*/void DrawQp(void);/*画棋盘函数*/void SetPlayCo

12、lor(int x);/*设置棋子第一次的颜色*/void MoveColor(int x,int y);/*恢复原来棋盘状态*/int QpChange(int x,int y,int z);/*判断棋盘的变化*/void DoScore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*/*主函数*/void main(void) int gd=DETECT,gr; initgraph(&gd,&gr,c:tc); /*初始化图形系统*/ DrawQp();/*画棋盘*/ playtoplay

13、();/*人人对战*/ getch(); closegraph();/*关闭图形系统*/void DrawQp()/*画棋盘*/ int i,j; score1=score2=0;/*棋手一开始得分都为0*/ setbkcolor(BLUE); for(i=100;i=64-score1-score2) /*如果尝试超过空格数则停步*/ MoveColor(x,y); continue;/*如果按键无效*/ DoScore();/*分数的改变*/ break;/*棋盘变化了,则轮对方走棋*/ else/*已经有棋子就继续按键*/ continue; else /*四个方向按键的判断*/ if(

14、key=LEFT&x120)/*左方向键*/ MoveColor(x,y); fillellipse(x,y,15,15); x-=40; if(key=RIGHT&x80)/*右方向键*/ x+=40; if(key=UP&120)/*上方向键*/ y-=40; if(key=DOWN&y400)/*下方向键*/ y+=40; if(key=ESC)/*结束游戏*/ if(score1+score2)=64|score1=0|score2=0)/*格子已经占满或一方棋子为0判断胜负*/ playWin();/*输出最后结果*/ t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/ cc

15、=0; /*计数值恢复为0*/ /*endwhile*/void SetPlayColor(int t)/*设置棋子颜色*/ if(t%2=1)/*白色*/*灰色*/void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/ if(y100)/*如果是从起点出发就恢复蓝色*/ setfillstyle(SOLID_FILL,BLUE); else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/ switch(a(x-120)/40(y-120)/40) case 1: setfillstyle(SOLID_FILL,15);break; /

16、*白色*/ case 2: setfillstyle(SOLID_FILL,8); /*黑色*/ default: setfillstyle(SOLID_FILL,BLUE); /*蓝色*/int QpChange(int x,int y,int t)/*判断棋盘的变化*/ int i,j,k,kk,ii,jj,yes; yes=0; i=(x-120)/40; /*计算数组元素的行下标*/ j=(y-120)/40; /*计算数组元素的列下标*/*设置棋子变化的颜色*/ /*开始往8个方向判断变化*/ if(j6)/*往右边*/ for(k=j+1;k8;k+) if(aik=aij|aik

17、=0)/*遇到自己的棋子或空格结束*/ if(aik!=0&8) for(kk=j+1;kk1)/*判断左边*/ for(k=j-1;k=0;k-) if(aik=aij|!aik)=0) for(kk=j-1;kkkk-) aikk=aij; fillellipse(120+i*40,120+kk*40,15,15);=j-1) yes=1; if(i1)/*判断上边*/ for(k=i-1; for(kk=i-1;=i-1)1&jii-,jj+) aiijj=aij; fillellipse(120+ii*40,120+jj*40,15,15); if(ii!6&j1)/*左下*/ for(k=i+1,kk=j-1;8&k+,kk-) if(akkk! for(ii=i+1,jj=j-1;iiii+,jj-)=i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1