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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言五子棋源代码设计报告.docx

1、C语言五子棋源代码设计报告C语言程序设计综合实验设计报告题目: 五子棋 班级; 07电气(1)班 人数: 4人 小组成员: 时间: 1 课程设计报告1.1课题描述1.2需求分析1.3概要设计2源程序代码3详细设计1.课题设计报告1.1课题分析:游戏介绍:在一个18*18的方格中下棋,两个玩家,根据键盘上的上、下、左、右键及W、S、A、D来控制棋的走向,空格键及回车键表示确定棋子的落下位置,两个玩家为交替下棋,如果于其中任何一家下的五个棋子能够练成一线那么为胜者,游戏结束。 1 、五子棋是两个人之间进行的竞技活动,开始是由P1先下,把棋落在方框内,然后P2下,如此下棋直到一方在棋盘的横,竖 ,斜

2、将同色的五个棋子连成一条线,则此方获胜。游戏由玩家决定继续或结束。1.2需求分析(1)在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)画出棋盘的大小;(3)画棋子并确定棋子的大小;(4)判断键盘输入哪个键执行操作;(5)玩家P1先落棋;(6)玩家轮流下棋;(7)判断赢家。(8)由玩家决定是否继续新游戏。1.3 概要设计(1)功能模块2. 主流程图遇到的一个问题:图形一闪而过解决方法因为Win-TC的图形驱动程序EGAVGA.BGI文件安装路径为c:Win-TCprojectsint gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, c

3、:tc)改为initgraph(&gdriver, &gmode, c:Win-TCprojects)2程序代码#include #include stdio.h#include graphics.h/*定义1号玩家的操作键键码*/#define W 0x1177/*上移-W*/#define S 0x1f73/*下移-S*/#define A 0x1e61/*左移-A*/#define D 0x2064/*右移-D*/#define SP 0x3920/*落子-空格键*/*定义2号玩家的操作键键码*/ #define UP 0x4800/*上移-方向键up*/#define DOWN 0x5

4、000/*下移-方向键down*/#define LEFT 0x4b00/*左移-方向键left*/#define RIGHT 0x4d00/*右移-方向键right*/#define ENTER 0x1c0d/*落子-回车键Enter*/#define ESC 0x011b#define X (getx()-140)/20 /*将棋盘上光标所在点的横坐标X转化为0-18的数*/#define Y (gety()-70)/20 /*将棋盘上光标所在点的横坐标Y转化为0-18的数*/int k,w=DETECT,gmode,j,i;int a2020;void p1move(); /*定义函数*

5、/void p2move();void win(); p1win(); p2win(); yellow(); white(); black(); heqi(); welcome(); help(); csz(); qipang(); p1turn(); p2turn(); p1del(); p1turn()/*画左上角的白棋*/setcolor(7);setfillstyle(1,7);circle(60,110,9);floodfill(60,110,7); p1del() /*将左上角白棋檫去*/setfillstyle(1,14); floodfill(60,110,14); p2tur

6、n() /*画右上角的黑棋*/setcolor(0);setfillstyle(1,0);circle(578,115,9);floodfill(578,115,0);p2del() /*画右上角的黑棋*/setfillstyle(1,14); floodfill(578,115,14); white() /*在当前位置画白棋*/setcolor(7);setfillstyle(1,7);circle(getx(),gety(),9);floodfill(getx(),gety(),7); black() /*在当前位置画黑棋*/setcolor(0);setfillstyle(1,0);ci

7、rcle(getx(),gety(),9);floodfill(getx(),gety(),0); yellow() /*补棋盘的颜色*/setcolor(6);setfillstyle(1,6);circle(getx(),gety(),9);floodfill(getx(),gety(),6);setcolor(15);line(getx()-9,gety(),getx()+9,gety();line(getx(),gety()+9,getx(),gety()-9);qipang() /*画棋盘*/ setfillstyle(1,6); bar(120,50,520,450); setfi

8、llstyle(1,14); bar(540,50,620,150); bar(20,50,100,150); for(k=0;k19;k+) moveto(140+20*k,70);linerel(0,360); moveto(140,70+20*k);linerel(360,0); moveto(240,170);setcolor(5); settextstyle(3,0,4); outtextxy(50,60,P1); outtextxy(560,60,P2); welcome() /*欢迎界面*/ initgraph(&w ,&gmode,c:Win-TCprojects) ;clea

9、rviewport(); setcolor(4); settextstyle(0,0,6); outtextxy(180,180,Welcome); settextstyle(0,0,2); outtextxy(280,440,press any key to begin);delay(1000) ; /*delay(00) ; delay(00) ; */ help() /*帮助界面*/ initgraph(&w ,&gmode,c:Win-TCprojects); clearviewport(); setcolor(4); settextstyle(0,0,2); outtextxy(80

10、,100,P1 move; W S A D ); outtextxy(80,120, set : space ); outtextxy(80,180,P2 move: up down left right ); outtextxy(80,200, set: Enter); outtextxy(80,280,Whoever is first to gather five );/*same color pieces in a line without any different color piece among them,then he win */ outtextxy(80,300,same

11、color pieces in a line without); outtextxy(80,320,any different color piece among ); outtextxy(80,340,them, then he win.); outtextxy(80,360,When you want to quit the game,); outtextxy(80,380,press Esc.); outtextxy(220,440,press any key to continue); while(bioskey(1)=0);p1win() /*玩家1获胜界面*/ initgraph(

12、&w ,&gmode,c:Win-TCprojects) ; clearviewport(); setcolor(4); settextstyle(0,0,6); outtextxy(180,180,P1 WIN); settextstyle(0,0,2); outtextxy(280,440,press any key to begin); while(bioskey(1)=0); main();p2win() /*玩家2获胜界面*/ clearviewport(); setcolor(4); settextstyle(0,0,6); outtextxy(180,180,P2 WIN); s

13、ettextstyle(0,0,2); outtextxy(280,440,press any key to begin); while(bioskey(0)!=0) main();heqi() /*和棋界面*/ clearviewport(); setcolor(4); settextstyle(0,0,6); outtextxy(180,180,tie); settextstyle(0,0,2); outtextxy(280,440,press any key to begin); while(bioskey(0)!=0) main();csz() /*将所在位置的AXY赋初值6*/for

14、(i=0;i19;i+) for(j=0;j19;j+) aij=6;void win() /*判断输赢*/int sum1,sum2,sum3,sum4,sum=0,n,i,j;for(i=X-4,j=Y-4,n=0;i=X,j=Y;i+,j+,n-=2)sum1=aiY+ai+1Y+ai+2Y+ai+3Y+ai+4Y;sum2=aij+ai+1j+1+ai+2j+2+ai+3j+3+ai+4j+4;sum3=aXj+aXj+1+aXj+2+aXj+3+aXj+4;sum4=aij+8+n+ai+1j+7+n+ai+2j+6+n+ai+3j+5+n+ai+4j+4+n;if(sum1=5|s

15、um2=5|sum3=5|sum4=5)p2win();if (sum1=0|sum2=0|sum3=0|sum4=0) p1win(); for(i=0;i18;i+)for(j=0;j18;j+)sum=sum+aij;if(sum181)heqi();void p1move() /*玩家1的移动*/switch(bioskey(0) case ESC: closegraph(); exit(0);/*如果按键为ESC就退出游戏*/ case SP:/*落子*/ if(aXY=6) p1del();p2turn();aXY=0;white();win(); p2move(); else p

16、1move(); case A: /*向左移*/ if(aXY=0) if(getx()=140) moveto(520,gety();moverel(-20,0);white(); else if(aXY=1) if(getx()=140) moveto(520,gety();black();moverel(-20,0);white(); else yellow();if(getx()=140) moveto(520,gety();moverel(-20,0);white(); p1move(); case D: /*向右移*/ if(aXY=0) if(getx()=500) moveto

17、(120,gety();moverel(20,0);white(); else if(aXY=1) if(getx()=500) moveto(120,gety();black();moverel(20,0);white(); else yellow();if(getx()=500) moveto(120,gety();moverel(20,0);white();p1move(); case W: /*向上移*/ if(aXY=0) if(gety()=70) moveto(getx(),450);moverel(0,-20);white(); else if(aXY=1) if(gety()

18、=70) moveto(getx(),450);black();moverel(0,-20);white(); else yellow();if(gety()=70) moveto(getx(),450);moverel(0,-20);white();p1move(); case S: /*向下移*/ if(aXY=0) if(gety()=430) moveto(getx(),50);moverel(0,20);white(); else if(aXY=1) if(gety()=430) moveto(getx(),50);black();moverel(0,20);white(); els

19、e yellow();if(gety()=430) moveto(getx(),50);moverel(0,20);white(); p1move(); default: p1move(); void p2move() /*玩家2的移动*/ switch(bioskey(0) /*如果按键为ESC就退出游戏*/ case ESC: closegraph(); exit(0); case ENTER: /*落子*/ if(aXY=6) p2del();p1turn();aXY=1;black();win();p1move(); else p2move(); case LEFT: /*向左移*/

20、if(aXY=1) if(getx()=140) moveto(520,gety();moverel(-20,0);black(); else if(aXY=0) if(getx()=140) moveto(520,gety();if(getx()=140) moveto(500,gety();white();moverel(-20,0);black(); else yellow();if(getx()=140) moveto(520,gety();moverel(-20,0);black(); p2move(); case RIGHT: /*向右移*/ if(aXY=1) if(getx()

21、=500) moveto(120,gety();moverel(20,0);black(); else if(aXY=0) if(getx()=500) moveto(120,gety();white();moverel(20,0);black(); else yellow();if(getx()=500) moveto(120,gety();moverel(20,0);black();p2move(); case UP: /*向上移*/ if(aXY=1) if(gety()=70) moveto(getx(),450);moverel(0,-20);black(); else if(aXY

22、=0) if(gety()=70) moveto(getx(),450);white();moverel(0,-20);black(); else yellow();if(gety()=70) moveto(getx(),450);moverel(0,-20);black();p2move(); case DOWN: /*向下移*/ if(aXY=1) if(gety()=430) moveto(getx(),50);moverel(0,20);black(); else if(aXY=0) if(gety()=430) moveto(getx(),50);white();moverel(0,

23、20);black(); else if(gety()=430) moveto(getx(),50); yellow();moverel(0,20);black();p2move(); default: p2move(); main() /*主函数*/ welcome(); /*调用欢迎界面*/ help(); /*调用帮助界面*/ initgraph(&w ,&gmode,c:Win-TCprojects) ; /*清屏*/ clearviewport(); csz(); qipang(); /*调用棋盘*/ p1move(); /*调用玩家1的移动*/ p2move(); getch();

24、 3详细设计1部分:以下是我负责的模块的函数,由于个人水平问题,我只负责画图部分。(1)画白棋棋子(white()setcolor(7);setfillstyle(1,7);circle(getx(),gety(),9);floodfill(getx(),gety(),7); (2)画黑棋棋子black()setcolor(0);setfillstyle(1,0);circle(getx(),gety(),9);floodfill(getx(),gety(),0);(3)补棋盘颜色 由于我们实现棋子在棋盘上移动的功能是用:某一色棋子覆盖棋盘上的点,当光标移动后,用白色圆圈将原本的棋子覆盖,再填

25、上与棋盘相同的颜色,最后用十字线条覆盖原本棋子所在的位置,然后再用棋子覆盖棋盘上新的点实现移动棋子和下棋的功能的,所以需要我编此函数。 yellow()setcolor(6);setfillstyle(1,6);circle(getx(),gety(),9);floodfill(getx(),gety(),6);setcolor(15);line(getx()-9,gety(),getx()+9,gety();line(getx(),gety()+9,getx(),gety()-9);(4)画棋盘这段函数的功能是画出棋盘及棋盘边左右上方的p1,p2字样。首先先画一块18*18的有色方块,然后利

26、用循环及相对坐标在方块上画出棋盘的竖线和横线,接着移出棋盘设置背景色,再设置字体颜色,最后再在棋盘的左右上方写上p1、p1。qipang() setfillstyle(1,6);bar(120,50,520,450); for(k=0;k19;k+) moveto(140+20*k,70);linerel(0,360); moveto(140,70+20*k);linerel(360,0); moveto(240,170); setbkcolor(14); setcolor(5); settextstyle(3,0,4); outtextxy(50,60,P1); outtextxy(560,

27、60,P2); 课设总结经过这次的选课,我最大的感觉就是遗憾,验证了一句话:书到用时方恨少啊!由于水平问题,我在这次的程序设计中承担的任务是画图。令人郁闷的任务。让我很后悔上学期没有把C学透,学好。虽然我考了99,但我自己知道,那是突击出来的结果,实际上我肚子里的东西没多少。还好,我的队友们水平都很不错,我们组才可以完成。其实我是有尝试负责判断胜负的部分,可是程序写出来了,却怎么改都不行。时间紧迫,其他3名组员毅然决定派给我另一个光荣而又神圣的任务画棋盘。至于画棋盘嘛,我的水平还够,完成得很快。但是我并没有因此而闲着,我还帮助其他组员出谋划策,检测程序的完整性,以及排错,我还是有发挥自己的余光

28、余热的,希望老师不要让我不过啊2部分void p1move() /*玩家1的移动*/switch(bioskey(0) case ESC: closegraph(); exit(0);/*如果按键为ESC就退出游戏*/ case SP:/*落子*/ if(aXY=6) p1del();p2turn();aXY=0;white();win(); p2move(); else p1move(); case A: /*向左移*/ if(aXY=0) if(getx()=140) moveto(520,gety();moverel(-20,0);white(); else if(aXY=1) if(getx()=140) moveto(520,gety();black();moverel(-20,0);white(); else yellow();if(getx()=140) moveto(520,gety();moverel(-20,0);white(); p1move(); case D: /*向右移*/ if(aXY=0) if(getx()=500) moveto(120,gety();moverel(20,0);white(); else if(aXY=1) if(getx()=500) moveto(120,gety();black();

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

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