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

上传人:b****6 文档编号:19314517 上传时间:2023-01-05 格式:DOCX 页数:27 大小:98.96KB
下载 相关 举报
C语言五子棋源代码设计报告Word下载.docx_第1页
第1页 / 共27页
C语言五子棋源代码设计报告Word下载.docx_第2页
第2页 / 共27页
C语言五子棋源代码设计报告Word下载.docx_第3页
第3页 / 共27页
C语言五子棋源代码设计报告Word下载.docx_第4页
第4页 / 共27页
C语言五子棋源代码设计报告Word下载.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

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

《C语言五子棋源代码设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《C语言五子棋源代码设计报告Word下载.docx(27页珍藏版)》请在冰豆网上搜索。

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

(1)功能模块

2.主流程图

遇到的一个问题:

图形一闪而过解决方法

因为Win-TC的图形驱动程序EGAVGA.BGI文件安装路径为c:

\\Win-TC\\projects

intgdriver=DETECT,gmode;

initgraph(&

gdriver,&

gmode,"

c:

\\tc"

)改为initgraph(&

\\Win-TC\\projects"

2程序代码

#include<

bios.h>

#include"

stdio.h"

graphics.h"

/*定义1号玩家的操作键键码*/

#defineW0x1177/*上移--'

W'

*/

#defineS0x1f73/*下移--'

S'

#defineA0x1e61/*左移--'

A'

#defineD0x2064/*右移--'

D'

#defineSP0x3920/*落子--空格键*/

/*定义2号玩家的操作键键码*/

#defineUP0x4800/*上移--方向键up*/

#defineDOWN0x5000/*下移--方向键down*/

#defineLEFT0x4b00/*左移--方向键left*/

#defineRIGHT0x4d00/*右移--方向键right*/

#defineENTER0x1c0d/*落子--回车键Enter*/

#defineESC0x011b

#defineX(getx()-140)/20/*将棋盘上光标所在点的横坐标X转化为0-18的数*/

#defineY(gety()-70)/20/*将棋盘上光标所在点的横坐标Y转化为0-18的数*/

intk,w=DETECT,gmode,j,i;

inta[20][20];

voidp1move();

/*定义函数*/

voidp2move();

voidwin();

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);

}

p2turn()/*画右上角的黑棋*/

setcolor(0);

setfillstyle(1,0);

circle(578,115,9);

floodfill(578,115,0);

}

p2del()/*画右上角的黑棋*/

floodfill(578,115,14);

white()/*在当前位置画白棋*/

circle(getx(),gety(),9);

floodfill(getx(),gety(),7);

black()/*在当前位置画黑棋*/

floodfill(getx(),gety(),0);

yellow()/*补棋盘的颜色*/

setcolor(6);

setfillstyle(1,6);

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);

setfillstyle(1,14);

bar(540,50,620,150);

bar(20,50,100,150);

for(k=0;

k<

19;

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,"

);

clearviewport();

setcolor(4);

settextstyle(0,0,6);

outtextxy(180,180,"

Welcome"

settextstyle(0,0,2);

outtextxy(280,440,"

pressanykeytobegin"

delay(1000);

/*delay(00);

delay(00);

*/

help()/*帮助界面*/

initgraph(&

clearviewport();

outtextxy(80,100,"

P1move;

'

WSAD'

"

outtextxy(80,120,"

set:

space"

outtextxy(80,180,"

P2move:

updownleftright"

outtextxy(80,200,"

set:

Enter"

outtextxy(80,280,"

Whoeverisfirsttogatherfive"

/*samecolorpiecesinalinewithoutanydifferentcolorpieceamongthem,thenhewin*/

outtextxy(80,300,"

samecolorpiecesinalinewithout"

outtextxy(80,320,"

anydifferentcolorpieceamong"

outtextxy(80,340,"

them,thenhewin."

outtextxy(80,360,"

Whenyouwanttoquitthegame,"

outtextxy(80,380,"

pressEsc."

outtextxy(220,440,"

pressanykeytocontinue"

while(bioskey

(1)==0);

p1win()/*玩家1获胜界面*/

P1WIN"

main();

p2win()/*玩家2获胜界面*/

P2WIN"

while(bioskey(0)!

=0)main();

heqi()/*和棋界面*/

tie"

csz()/*将所在位置的A[X][Y]赋初值6*/

for(i=0;

i<

i++)

for(j=0;

j<

j++)

{a[i][j]=6;

voidwin()/*判断输赢*/

{intsum1,sum2,sum3,sum4,sum=0,n,i,j;

for(i=X-4,j=Y-4,n=0;

=X,j<

=Y;

i++,j++,n-=2)

{sum1=a[i][Y]+a[i+1][Y]+a[i+2][Y]+a[i+3][Y]+a[i+4][Y];

sum2=a[i][j]+a[i+1][j+1]+a[i+2][j+2]+a[i+3][j+3]+a[i+4][j+4];

sum3=a[X][j]+a[X][j+1]+a[X][j+2]+a[X][j+3]+a[X][j+4];

sum4=a[i][j+8+n]+a[i+1][j+7+n]+a[i+2][j+6+n]+a[i+3][j+5+n]+a[i+4][j+4+n];

if(sum1==5||sum2==5||sum3==5||sum4==5)

p2win();

if(sum1==0||sum2==0||sum3==0||sum4==0)

for(i=0;

18;

for(j=0;

sum=sum+a[i][j];

if(sum<

181)

heqi();

voidp1move()/*玩家1的移动*/

switch(bioskey(0))

caseESC:

{closegraph();

exit(0);

}/*如果按键为ESC就退出游戏*/

caseSP:

/*落子*/

if(a[X][Y]==6){p1del();

p2turn();

a[X][Y]=0;

white();

win();

p2move();

elsep1move();

caseA:

/*向左移*/

if(a[X][Y]==0)

{if(getx()==140)moveto(520,gety());

moverel(-20,0);

elseif(a[X][Y]==1)

black();

else

{yellow();

if(getx()==140)moveto(520,gety());

}p1move();

caseD:

/*向右移*/

if(a[X][Y]==0){if(getx()==500)moveto(120,gety());

moverel(20,0);

elseif(a[X][Y]==1){if(getx()==500)moveto(120,gety());

else{yellow();

if(getx()==500)moveto(120,gety());

}p1move();

caseW:

/*向上移*/

if(a[X][Y]==0){if(gety()==70)moveto(getx(),450);

moverel(0,-20);

elseif(a[X][Y]==1){if(gety()==70)moveto(getx(),450);

if(gety()==70)moveto(getx(),450);

caseS:

/*向下移*/

if(a[X][Y]==0){if(gety()==430)moveto(getx(),50);

moverel(0,20);

elseif(a[X][Y]==1){if(gety()==430)moveto(getx(),50);

if(gety()==430)moveto(getx(),50);

}p1move();

default:

p1move();

}}

voidp2move()/*玩家2的移动*/

switch(bioskey(0))/*如果按键为ESC就退出游戏*/

{

caseENTER:

/*落子*/

if(a[X][Y]==6){p2del();

p1turn();

a[X][Y]=1;

p1move();

elsep2move();

caseLEFT:

if(a[X][Y]==1){if(getx()==140)moveto(520,gety());

elseif(a[X][Y]==0){if(getx()==140)moveto(520,gety());

if(getx()==140)moveto(500,gety());

}p2move();

caseRIGHT:

if(a[X][Y]==1){if(getx()==500)moveto(120,gety());

elseif(a[X][Y]==0){if(getx()==500)moveto(120,gety());

}p2move();

caseUP:

if(a[X][Y]==1){if(gety()==70)moveto(getx(),450);

elseif(a[X][Y]==0){if(gety()==70)moveto(getx(),450);

caseDOWN:

if(a[X][Y]==1){if(gety()==430)moveto(getx(),50);

elseif(a[X][Y]==0){if(gety()==430)moveto(getx(),50);

else{if(gety()==430)moveto(getx(),50);

main()/*主函数*/

{welcome();

/*调用欢迎界面*/

/*调用帮助界面*/

/*清屏*/

/*调用棋盘*/

/*调用玩家1的移动*/

getch();

1部分:

以下是我负责的模块的函数,由于个人水平问题,我只负责画图部分。

(1)画白棋棋子

(white()

(2)画黑棋棋子

black()

(3)补棋盘颜色

由于我们实现棋子在棋盘上移动的功能是用:

某一色棋子覆盖棋盘上的点,当光标移动后,用白色圆圈将原本的棋子覆盖,再填上与棋盘相同的颜色,最后用十字线条覆盖原本棋子所在的位置,然后再用棋子覆盖棋盘上新的点实现移动棋子和下棋的功能的,所以需要我编此函数。

yellow()

(4)画棋盘

这段函数的功能是画出棋盘及棋盘边左右上方的p1,p2字样。

首先先画一块18*18的有色方块,然后利用循环及相对坐标在方块上画出棋盘的竖线和横线,接着移出棋盘设置背景色,再设置字体颜色,最后再在棋盘的左右上方写上p1、p1。

qipang()

bar(120,50,520,450);

setbkcolor(14);

setcolor(5);

课设总结

经过这次的选课,我最大的感觉就是遗憾,验证了一句话:

书到用时方恨少啊!

由于水平问题,我在这次的程序设计中承担的任务是画图。

令人郁闷的任务。

让我很后悔上学期没有把C学透,学好。

虽然我考了99,但我自己知道,那是突击出来的结果,实际上我肚子里的东西没多少。

还好,我的队友们水平都很不错,我们组才可以完成。

其实我是有尝试负责判断胜负的部分,可是程序写出来了,却怎么改都不行。

时间紧迫,其他3名组员毅然决定派给我另一个光荣而又神圣的任务——画棋盘。

至于画棋盘嘛,我的水平还够,完成得很快。

但是我并没有因此而闲着,我还帮助其他组员出谋划策,检测程序的完整性,以及排错,我还是有发挥自己的余光余热的,希望老师不要让我不过啊

2部分

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

当前位置:首页 > 经管营销 > 企业管理

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

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