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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

黑白棋程序设计.docx

1、黑白棋程序设计课程设计任务书学院理学院专业统计学学生姓名班级学号课程设计题目黑白棋程序设计实践教学要求与任务:1、进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;2、针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。3、掌握C语言的编程技巧及程序设计的常用算法设计任务:本次设计主要实现黑白棋游戏的系统程序该程序主要实现与黑白棋有关的包括棋盘绘制,棋子绘制,双方执棋下子,统计双方分数,比较,输出输赢等一系列程序,实现在该程序中能够正常进行双方对弈的功能。工作计划与进度安排:第一天查阅资料; 第二、三天 程序设计 ;

2、第四天 程序调试 ;第五天 答辩指导教师: 201 年 月 日专业负责人: 201 年 月 日学院教学副院长: 201 年 月 日摘要程序设计语言类课程的指导思想是:使学生通过学习即高级编程语言的知识、编程技术和基本算法,又掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计6。 其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系统,借鉴于各种工具书,善于总结。定可以很好的效果。正是如此,使我们在这几

3、年中对语言学习有了很大提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。关键词: 掌握编程语言的知识 ;编程技术;基本算法思想和方法黑白棋4 42.1.用到的函数: 42.1.1main()主函数: 42.1.2DrawQp()画棋盘函数: 42.1.3MoveColor()恢复原来格子的状态 42.1.4playtoplay()人人对战函数 42.1.5QpChange()判断棋盘变化 42.1.6PrintScore()输出成绩 52.2.子函数

4、功能一览表 52.3. 主函数流程图 62.3.1棋盘绘制流程图 62.4.函数解析 72.4.1图形库文件 72.4.2图形初始化函数 72.4.3设置背景颜色 72.4.4画线 72.4.5设置填充模式和颜色 72.4.6方向操作 72.4.7落棋位置判断 82.4.8判断棋盘的变化和改变棋子的颜色 82.4.9 成绩输出 82.4.10输出成绩 82.4.11输出最后的胜利者结果 8u 2.5.源代码 9u 2.6运行结果 17u 2.7心得体会 17参考文献 18黑白棋2.1.用到的函数:2.1.1main()主函数:在主函数中,棋盘状态用数组a88,初值为0,表示空格。用图形系统画出

5、棋盘,调用playtoplay()人人对弈函数开始游戏,一旦游戏结束后,关闭图形系统,程序结束。2.1.2DrawQp()画棋盘函数:背景颜色设为蓝色,从坐标(100,100)开始每隔40个单位用白色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。SetPlayColor()设置棋子的颜色:函数的参数为整型变量t,根据t的值来设计填充棋子的当前颜色,值为1代表白棋,值为2代表黑棋。2.1.3MoveColor()恢复原来格子的状态因为棋子移动过程并

6、没有改变数组元素的值,所以可以根据数组元素的值判定原来的状态,如果值是1,就恢复白色棋子,值是2则恢复黑色棋子,否则恢复蓝色空格。2.1.4playtoplay()人人对战函数这是游戏进行的函数,主要是接收棋手的按键消息,按Esc键程序可以随时结束。按上下左右光标键,则改变棋子移动的坐标值。按回车键后判断。2.1.5QpChange()判断棋盘变化当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方棋子,如果是,则改变棋盘。如果所有方向都判断过,并且没有引起棋盘的变化,则棋盘变化标志值yes为0,返回yes,结束本函数。根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为

7、1,白棋棋子数累加;如果数组元素值为2,则黑棋棋子数累加。2.1.6PrintScore()输出成绩利用设置实体填充模式填充矩形条清除掉前次的成绩,再利用sprintf()函数将整数转换为字符串的形式,再利用outtextxy()函数将成绩输出。playWin()输出胜利者结果 根据分数值score1和score2的大小得出下棋的结果,输出赢者信息2.2.子函数功能一览表序号123456名称DrawQpSetPlayPlaytoplayMoveColorQpChangeDoScore功能绘制棋盘和初始棋子设置棋子第一次的颜色人人对战函数恢复原来棋盘状态判断棋盘的变化改变棋子的颜色处理分数备注在

8、界面上绘制320*320的棋盘,并在棋盘中绘制8*8的格子,初始棋子先走棋者持白子,后走棋黑子,每次交替俩棋手交替走棋,定义键盘操作等棋子由初始位置到落子位置的路径不改变颜色走棋后判断棋盘的变化情况,根据变化情况判断是否可以输出分数根据棋盘上旗子的多少进行分数的处理2.3. 主函数流程图2.3.1棋盘绘制流程图2.4.函数解析2.4.1图形库文件#include graphics.h2.4.2图形初始化函数intgd=DETECT,gr图形初始化函数initgraph(&driver,&mode,“路径”)功能:装入图形驱动程序2.4.3设置背景颜色在本程序中,设置的的北京颜色为蓝色,setb

9、kcolor(BLUE),根据上述可知,此时,游戏界面的底色为蓝色。setcolor(0)将线的颜色设置为黑色,由此是为了取消圆形周围的东西。2.4.4画线在本程序中,使用上述源代码实现绘制棋盘的功能,也就是以40为一个步增,以(100,100)为起点,以(100,420)、(420,100)(420,420)为顶点画出棋盘,棋盘大下为320*320,由于步增是40,所以,棋盘上自然出现8*8的格子,由于画线的时候,没有定义线的颜色,所以线的颜色是默认的白色,所以最终出现了兰色的底面上以白色画格子的棋盘。2.4.5设置填充模式和颜色 在本程序中,棋子为半径为15的圆,颜色分别为代码为15和8的

10、深灰色和白色两种棋子,分别由两位旗手来使用。附表:颜色代号颜色号0115颜色黑色蓝色白色符号常量BLACKBLUEWHITE2.4.6方向操作在主程序前,使用宏定义将 UP、DOWN 、LEFT 、RIGHT,做了相应的定义,因此,在对战函数当中可以使用已经进行过定义的以上四个进行操作,每次移动后,在屏幕上显示的都是一个以15为半径的圆形。由于走棋时,每个格子不能重复落子,所以,需要判断棋手要落子处是不是 已经有了棋子2.4.7落棋位置判断走棋后,判断棋盘的变化情况,将棋子途径的地方恢复为空格状态,并且开始统计棋手的尝试次数,当一个棋手在一次走棋的过程中尝试的次数超过空格的个数的时候,取消该棋

11、手的本次走棋,改为下个旗手走棋,也就是跳出本次循环,进行下一次的循环。如果常识的次数没有超过空格的个数,而是落棋的位置无效,则旗手可以继续尝试,知道到达尝试次数。当某次走棋后,接受的按键的值为ESC的时候,则退出游戏,当落子后在判定棋盘的变化时,一方的棋子为0,或者是双方已经下满60手,则执行 playWin 函数,输出游戏的结果 。2.4.8判断棋盘的变化和改变棋子的颜色通过判断数aij的值来判断棋子的颜色,已经定义当aij=1的时候,棋子为白色,当aij=2的时候棋子为黑色,当aij的值不为1和2的时候,则此时恢复为背景2.4.9 成绩输出清空之前的成绩,aij=1/2?;Score2+;

12、Score1+;Score2+Score1+?黑色胜利,全部胜利=?白色胜利2.4.10输出成绩在统计完得分后,分别在(550,200)和(550,300)俩个地方输出参与游戏的俩个人的分数信息。2.4.11输出最后的胜利者结果黑子胜利,在(100,50)的位置上输出black win,白子获得胜利,在(100,50)的位置上输出“white win”,当出现得分相同的情况时,在(60,50)的位置上输出“you all win!”。u 2.5.源代码#include graphics.h #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOW

13、N 0x5000 #define UP 0x4800 #define ESC 0x011b #define ENTER 0x1c0d int a88=0,key,score1,score2;charplayone3,playtwo3;voidplaytoplay(void);void DrawQp(void);/*画棋盘函数*/voidSetPlayColor(int x);voidMoveColor(intx,int y);intQpChange(intx,inty,int z);/voidDoScore(void);voidPrintScore(int n);/voidplayWin(vo

14、id);/void main(void)intgd=DETECT,gr;initgraph(&gd,&gr,c:tc); DrawQp();playtoplay();/*人人对战*/getch();closegraph();voidDrawQp()inti,j; score1=score2=0;setbkcolor(BLUE);for(i=20;i=64-score1-score2) MoveColor(x,y);fillellipse(x,y,15,15);break; elsecontinue; DoScore();break; elsecontinue; elseif(key=LEFT&

15、x120) MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15); elseif(key=RIGHT&x80) MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t); x+=40;fillellipse(x,y,15,15); elseif(key=UP&y120) MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);

16、 elseif(key=DOWN&y400) MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t); y+=40;fillellipse(x,y,15,15); if(key=ESC)break;if(score1+score2)=64|score1=0|score2=0) playWin();break; t=t%2+1; cc=0; /*endwhile*/voidSetPlayColor(int t)if(t%2=1)setfillstyle(SOLID_FILL,15);elsesetfillstyle(SOLID_FILL,8);

17、voidMoveColor(intx,int y)if(y100)setfillstyle(SOLID_FILL,BLUE);elseswitch(a(x-120)/40(y-120)/40) case 1:setfillstyle(SOLID_FILL,15);break;case 2:setfillstyle(SOLID_FILL,8);break;default:setfillstyle(SOLID_FILL,BLUE); intQpChange(intx,inty,int t)inti,j,k,kk,ii,jj,yes;yes=0; i=(x-120)/40; j=(y-120)/40

18、; SetPlayColor(t); if(j6)/*往右边*/ for(k=j+1;k8;k+)if(aik=aij|aik=0)break;if(aik!=0&k8) for(kk=j+1;kkk&k1) for(k=j-1;k=0;k-)if(aik=aij|!aik)break;if(aik!=0&k=0) for(kk=j-1;kkk&k=0;kk-) aikk=aij;fillellipse(120+i*40,120+kk*40,15,15); if(kk!=j-1)yes=1; if(i6) for(k=i+1;k8;k+)if(akj=aij|!akj)break;if(akj

19、!=0&k8) for(kk=i+1;kkk&k1) for(k=i-1;k=0;k-)if(akj=aij|!akj)break;if(akj!=0&k=0) for(kk=i-1;kkk&k=0;kk-) akkj=aij;fillellipse(120+kk*40,120+j*40,15,15); if(kk!=i-1)yes=1; if(i1&j=0&kk=0&kkk&k=0;ii-,jj+) aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i-1)yes=1; if(i1) for(k=i+1,kk=j-1;k=0;k

20、+,kk-)if(akkk=aij|!akkk)break;if(akkk!=0&k=0) for(ii=i+1,jj=j-1;iik&k1&j1) for(k=i-1,kk=j-1;k=0&kk=0;k-,kk-)if(akkk=aij|!akkk)break;if(akkk!=0&k=0&kk=0) for(ii=i-1,jj=j-1;iik&k=0;ii-,jj-) aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i-1)yes=1; if(i6&j6) for(k=i+1,kk=j+1;kk8&kk8;k+,kk+)if

21、(akkk=aij|!akkk)break;if(akkk!=0&kk8&k8) for(ii=i+1,jj=j+1;iik&k8;ii+,jj+) aiijj=aij;fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i+1)yes=1; return yes;voidDoScore()inti,j; score1=score2=0;for(i=0;i8;i+)for(j=0;jscore1)outtextxy(100,50,black win!);elseif(score28; return(key); u 2.6运行结果u 2.7心得体会在这次

22、课程设计中,我深深地感受到了C语言的博大精深,从中知道了好多之前不知的知识。比如,用C语言还可以制作出有图形化,有色彩的界面,之前都只是以为C语言制作出来的程序的运行界面是一片黑屏,没有什么有趣的东西,老想着那个黑屏下能做出什么方便用户操作的界面呢?但通过这次课程设计,我清楚地得到了答案,用C语言做出的程序是很实用的,运行效率是很高的。在这次课程设计中,我对程序做了一些扩展:A.采用类似图形化的界面,运用一些屏幕操作函数对程序运行界面进行一些美化,使程序运行时会出现欢迎界面,运行界面,退出界面,在运行界面中,有输入、输出窗口,还有菜单窗口、操作信息提示窗口、这些窗口在程序运行过程中的位置是固定的,使信息可以在相对应的窗口内进行输入、输出,改变了以往程序运行界面从上到下进行输入或输出信息的单一窗口界面形式。使程序运行时出现了多窗口。B.在程序中调用一个时间函数,使程序运行窗口的右上角显示出了当前的系统时间。在这次设计中,学到的知识很多,但要学知识也很多。在以后的学习中,我会努力地扩展C语言,加深对C语言的学习参考文献1 谭浩

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

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