版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程设计之五子棋报告学院:计算机科学学院班级:计算机科学与技术2班姓名:雷燕李莉王永学号:02250219一:课程设计的目的对的熟悉及使用tourbc,对的运行程序对的的分析和应用所学的内容重要是培养团体合作的意识二:课程设计的准备需要查阅tourbc的使用,tourbc的运行环境根据所要设计的项目,确定详细的实现过程与成果根据所需求的代码来查阅所调用的函数的使用三:课程设计的开始1.游戏的概述五子棋是来源于古代中国的老式的黑白棋种之一。五子棋不仅能增强思维能力,提高智力,并且富含哲理,有助于修身养性。五子棋来源于古代中国,发展日本,风行于欧洲,可以说五子棋是中西文化的交流点,是古今哲学的结晶。为了丰富顾客的生活娱乐,特此开发五子棋程序。2.游戏的预处理3.游戏的设计目的灵活的操作,可以自动判断胜败系统采用良好的人机对话模式,界面设计美观友好系统运行稳定,安全可靠4.游戏的运行环境只能在windowxp或windows035.游戏的整体框架本棋盘棋的颜色分为红色和白色,哪种棋子先满足下列任意一种条件即为获胜,条件如下:水平方向五个棋子无间断相连。垂直方向五个棋子无间断相连。斜方向五个棋子无间断相连。游戏的主流程图如下:代码如下:voidmain(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,""); /*图形界面初始化*/start(); /*调用start()*/key=bioskey(0); /*接受键盘按键*/if(key==ESC) /*按ESC退出游戏*/exit(0);else{ attention();cleardevice();flag=1; /*设置flag初始值*/chessboard(); /*画棋盘*/do{chessx=1;chessy=1;if(flag==1) /*判断flag值来确定要画的棋子的颜色*/draw_circle(chessx,chessy,WHITE);elsedraw_circle(chessx,chessy,RED);do{while(bioskey(1)==0);key=bioskey(0); /*接受键盘按键*/play(); /*调用play函数,进行五子棋游戏*/}while(key!=SPACE&&key!=ESC); /*当为ESC或空格时退出循环*/}while(key!=ESC);closegraph(); /*退出图形界面*/}}6.游戏界面设计设计的目的:友好,大方用到的关键函数是:bioskey()函数:bioskey()是直接使用bios服务接口函数原型:intbioskey(intcmd)initgraph()函数initgraph()函数的功能是初始化图形系统函数原型:voidfarinitgraph(intfar*graphdriver,intfar*graphmode,charfar*pathodriver);setbakcolor()函数closegraph()函数outtextxy()函数settextstyle()函数setcolor()函数getch()函数其实现代码如下:开始函数:voidstart() /*与否开始游戏*/{settextstyle(4,0,5);outtextxy(80,240,"GAMESTART!");settextstyle(3,0,3);outtextxy(120,340,"ESC-exit/pressanykeytocontinue");}画棋盘:voidchessboard() /*画棋盘*/{inti,j;setbkcolor(3);cleardevice(); /*清屏*/for(i=40;i<=440;i=i+20) /*设置起始点120,终止点400,表格宽度40*/for(j=40;j<=440;j++){putpixel(i,j,8); /*画点*/putpixel(j,i,8);}setcolor(8);setlinestyle(1,0,1);rectangle(32,32,448,448);}画棋子:voiddraw_circle(intx,inty,intcolor) /*画棋子*/{setcolor(color); /*设置绘制颜色*/setlinestyle(SOLID_LINE,0,1); /*设置绘制的样式*/x=(x+2)*20; /*设置横坐标*/y=(y+2)*20; /*设置纵坐标*/circle(x,y,8); /*绘制圆*/ setfillstyle(1,color); floodfill(x,y,color);}画点:voiddraw_pixel(intx,inty,intcolor) /*画点,棋走过所留下的点*/{ intj,k;x=(x+2)*20;y=(y+2)*20;{for(j=x-8;j<=x+8;j++) putpixel(j,y,color); /*画点*/ for(k=y-8;k<=y+8;k++) putpixel(x,k,color); /*画点*/}}7.游戏的玩法总体流程:下面以向左走为例:实现的游戏界面如下:详细实现代码如下:voidplay() /*五子棋游戏过程*/{inti;intj;switch(key){caseLEFT:if(chessx-1<0) /*判断向左走与否出了棋盘*/break;else{for(i=chessx-1,j=chessy;i>=1;i--)if(chess[i][j]==0){draw_circle(chessx,chessy,3); /*清除棋子走过留下的痕迹*/draw_pixel(chessx,chessy,8);break;}if(i<1)break;chessx=i;if(flag==1) /*判断flag值来确定要画的棋子的颜色*/draw_circle(chessx,chessy,WHITE);elsedraw_circle(chessx,chessy,RED);}break;caseRIGHT:if(chessx+1>19) /*判断向右走与否出了棋盘*/break;else{for(i=chessx+1,j=chessy;i<=19;i++)if(chess[i][j]==0){draw_circle(chessx,chessy,3); /*清除棋子走过留下的痕迹*/draw_pixel(chessx,chessy,8);break;}if(i>19)break;chessx=i;if(flag==1) /*判断flag值来确定要画的棋子的颜色*/draw_circle(chessx,chessy,WHITE);elsedraw_circle(chessx,chessy,RED);}break;caseDOWN:if((chessy+1)>19) /*判断向下走与否出了棋盘*/break;else{for(i=chessx,j=chessy+1;j<=19;j++)if(chess[i][j]==0){draw_circle(chessx,chessy,3); /*清除棋子走过留下的痕迹*/draw_pixel(chessx,chessy,8);break;}if(j>19)break;chessy=j;if(flag==1) /*判断flag值来确定要画的棋子的颜色*/draw_circle(chessx,chessy,WHITE);elsedraw_circle(chessx,chessy,RED);}break;caseUP:if(chessy-1<0) /*判断向上走与否出了棋盘*/break;else{for(i=chessx,j=chessy-1;j>=1;j--)if(chess[i][j]==0){draw_circle(chessx,chessy,3); /*清除棋子走过留下的痕迹*/draw_pixel(chessx,chessy,8);break;}if(j<1)break;chessy=j;if(flag==1) /*判断flag值来确定要画的棋子的颜色*/draw_circle(chessx,chessy,WHITE);elsedraw_circle(chessx,chessy,RED);}break;caseESC: /*按〈ESC〉退出游戏*/break;caseSPACE:if(chessx>=1&&chessx<=19&&chessy>=1&&chessy<=19)/*判断棋子与否在棋盘范围内*/{if(chess[chessx][chessy]==0) /*判断该位置上与否有棋*/{/*若无棋则在该位置存入指定的棋子的flag值*/chess[chessx][chessy]=flag;if(result(chessx,chessy)==1) /*判断下完该棋子游戏与否结束*/{if(flag==1) /*假如flag是1则白棋赢*/{cleardevice();settextstyle(4,0,9);outtextxy(80,200,"WHITEWin!");getch();closegraph();exit(0);}if(flag==2) /*假如flag是2则红棋赢*/{cleardevice();settextstyle(4,0,9);outtextxy(80,200,"RedWin!");getch();closegraph();exit(0);}}/*若按下空格后游戏未结束则将棋的颜色变化*/if(flag==1) flag=2;elseflag=1;break;}}elsebreak;}}8.游戏的胜败判断及成果在游戏中会判断游戏的胜败成果,这里从八个方向进行判断,这八个方向分别是左上,左下,右上,右下,水平,垂直上,垂直下。虽然是一种点的八个方向,不过确实两两一组的四条直线:把它们合计起来,假如超过或等于5,则阐明具有该颜色一方获胜。实现代码:intresult(intx,inty) /*判断两种颜色的棋在不一样方向的个数与否抵达5个*/{intj,k,n1,n2;while(1){/*左上方*/n1=0;n2=0;for(j=x,k=y;j>=1&&k>=1;j--,k--){if(chess[j][k]==flag)n1++; /*累加左上方的棋子数*/elsebreak;}/*右下方*/for(j=x,k=y;j<=19&&k<=19;j++,k++){if(chess[j][k]==flag)n2++; /*累加右下方的棋子数*/elsebreak;}if(n1+n2-1>=5) /*左上方和右下方的棋子累加不小于等于5*/return(1); /*返回1*//*右上方*/n1=0;n2=0;for(j=x,k=y;j<=19&&k>=1;j++,k--){if(chess[j][k]==flag)n1++; /*累加右上方的棋子数*/elsebreak;}/*左下方*/for(j=x,k=y;j>=1&&k<=19;j--,k++){if(chess[j][k]==flag)n2++; /*累加左下方的棋子数*/elsebreak;}if(n1+n2-1>=5) /*左下方和右上方的棋子累加不小于等于5*/return(1); /*返回1*/n1=0;n2=0;/*水平向左*/for(j=x,k=y;j>=1;j--){if(chess[j][k]==flag)n1++; /*累加水平左的棋子数*/elsebreak;}/*水平向右*/for(j=x,k=y;j<=19;j++){if(chess[j][k]==flag)n2++; /*累加水平右的棋子数*/elsebreak;}if(n1+n2-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贾科梅蒂课件
- 2026年房地产法律风险的行业标准与监测机制
- 2026春招:行政主管面试题及答案
- 2026年直流配电系统在建筑中的应用
- 2026春招:五粮液试题及答案
- 货运安全培训计划大纲课件
- 互联网医疗支付解决方案
- 医疗卫生事业发展与展望
- 2026年海南体育职业技术学院高职单招职业适应性测试备考题库有答案解析
- 2026年汉中职业技术学院高职单招职业适应性测试参考题库有答案解析
- 钢结构波形梁护栏技术说明书
- 新能源车电池性能检测报告范本
- 2025年春新沪粤版物理八年级下册全册教案
- 2025年上海市嘉定区高考生物二模试卷
- 量子医学课件
- 2025年秋闽教版小学英语五年级上册(期末)综合词汇句子专项训练题及答案
- 大学消防风险评估报告
- GB/T 46127-2025机用套筒扳手传动附件
- 骨科骨筋膜室综合征护理查房
- 中建项目经理工程体系培训
- 医院科教科长述职报告
评论
0/150
提交评论