五子棋小游戏Word下载.docx

上传人:b****5 文档编号:21717621 上传时间:2023-01-31 格式:DOCX 页数:14 大小:18.77KB
下载 相关 举报
五子棋小游戏Word下载.docx_第1页
第1页 / 共14页
五子棋小游戏Word下载.docx_第2页
第2页 / 共14页
五子棋小游戏Word下载.docx_第3页
第3页 / 共14页
五子棋小游戏Word下载.docx_第4页
第4页 / 共14页
五子棋小游戏Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

五子棋小游戏Word下载.docx

《五子棋小游戏Word下载.docx》由会员分享,可在线阅读,更多相关《五子棋小游戏Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

五子棋小游戏Word下载.docx

/*显示棋子*/

voidGamePlay();

voidSetChess(intfocus);

/*设定棋子*/

voidMoveChess(intdir);

/*移动棋子*/

voidRefresh();

/*更新画面*/

voidCheckWin(introw,intcol);

/*判断输赢*/

voidmain()

{

intnumber;

intgd=DETECT,gm=0;

/*设置图形驱动器和图形模式,其分辨率是640*480,和gd=VGA,gm=VGAHI是同样效果*/

registerbgidriver(EGAVGA_driver);

/*注册BGI驱动后可以不需要.BGI文件的支持运行*/

clrscr();

/*清屏函数*/

number=PlayInfo();

if(number==1)

{

initgraph(&

gd,&

gm,"

"

);

/*从TEXT窗口进入界面*/

InitData();

DrawChessboard();

GamePlay();

closegraph();

/*关闭图形界面*/

return;

}

else/*如果输入的是N或n的话,就跳出TEXT窗口*/

getch();

}

intPlayInfo()/*在TEXT窗口上说明游戏规则*/

charanswer;

gotoxy(10,2);

/*在TEXT窗口上,根据设定的横纵坐标上打出游戏规则*/

printf("

PlayRules:

gotoxy(10,6);

1:

PressLeft,Right,Up,DownKeytomovePiece!

gotoxy(10,10);

2:

PressEnterKeytoplacethePiece!

gotoxy(10,14);

3:

Don'

tpressthePieceutsideofthechessboard!

gotoxy(10,18);

Doyouaccepttheabovetheplayingrules?

[y/n]:

while

(1)

answer=getch();

if(answer=='

Y'

||answer=='

y'

return1;

elseif(answer=='

N'

n'

Becauseofdisagreementwiththerules,soyoucan'

tplaythegame!

return0;

voidInitData()/*初始化数据*/

intx,y;

x=getmaxx();

/*获得x轴的最大值*/

y=getmaxy();

/*获得y轴的最大值*/

MinX=(x-COL*SIZE)/2;

/*棋盘边框横坐标最小值*/

MaxX=MinX+COL*SIZE;

/*棋盘边框横坐标最大值*/

MinY=(y-ROW*SIZE)/2;

/*棋盘边框纵坐标最小值*/

MaxY=MinY+ROW*SIZE;

/*棋盘边框纵坐标最大值*/

CurRow=ROW/2,CurCol=COL/2;

/*给行列坐标变量赋直*/

CurX=MinX+CurCol*SIZE+SIZE/2;

/*棋子最初所在位置的横坐标*/

CurY=MinY+CurRow*SIZE+SIZE/2;

/*棋子最初所在位置的纵坐标*/

Radius=SIZE/2-3;

/*棋子半径*/

CurFocus=1;

/*黑1白2*/

voidDrawChessboard()/*画棋盘函数*/

inti,j,x,y;

setbkcolor(3);

/*设置背景颜色,3为青色*/

setfillstyle(SOLID_FILL,3);

/*背景颜色填充模式*/

bar(0,0,getmaxx(),MinY);

/*画一个矩形,并用淡灰色填充,用于覆盖checkwin的结果,相当于清屏的效果*/

setfillstyle(SOLID_FILL,7);

/*设置填充颜色,7为淡灰色*/

setcolor(11);

/*设置矩形边框的颜色*/

bar(MinX,MinY,MaxX,MaxY);

x=MinX,y=MinY;

for(i=0;

i<

=ROW;

i++,y+=SIZE)

line(MinX,y,MaxX,y);

/*画水平线*/

for(j=0;

j<

=COL;

j++,x+=SIZE)

line(x,MinY,x,MaxY);

/*画垂直线*/

/*设置文本颜色*/

settextstyle(0,0,1);

/*设置文本类型*/

settextjustify(1,1);

outtextxy(MinX-MinX/2,MinY+10,"

Player1"

/*显示文本*/

outtextxy(MaxX+MinX/2,MinY+10,"

Player2"

outtextxy(getmaxx()/2,MaxY+MinY/2,"

Esc:

ExitEnter:

SetF2:

Start"

voidShowChess(intflag)/*在棋盘上各棋手显示各棋手的棋子*/

intcolor,r=Radius;

if(flag==SET||flag==SHOW)/*画棋子*/

if(CurFocus==1)

color=1;

/*棋手1的棋子颜色*/

else

color=15;

/*棋手2的旗子颜色*/

color=7;

/*如果都不是棋手棋子的颜色的话,通过把棋子设置为背景颜色隐藏*/

if(flag==SET)

Map[CurRow][CurCol]=color;

/*置位数组值为当前颜色,即记录棋子的在棋盘的位置*/

CheckWin(CurRow,CurCol);

/*判断输赢;

每下完一个棋子,就进行判断有多少棋子相连*/

r-=2;

/*显示棋子时棋子半径值*/

setcolor(color);

/*当前棋子的边缘颜色*/

circle(CurX,CurY,r);

/*画棋子*/

setfillstyle(SOLID_FILL,color);

/*填充棋子*/

floodfill(CurX,CurY,color);

/*根据设定的颜色填满整个封闭图形*/

/*以下是用于:

在棋手名字下面显示当前下棋的棋手的棋子颜色*/

voidSetChess(intfocus)

intcolor1,color2;

staticx1,y1,x2,y2;

x1=MinX-MinX/2;

/*设定两棋手下面显示棋子所在的坐标*/

x2=MaxX+MinX/2;

y1=y2=MinY+40;

/*,以下是:

根据棋手标志设定棋子颜色*/

if(focus==1)/*棋子标志值为1时显示棋手1的颜色*/

color1=1;

/*当显示棋手1的时候,通过设置棋手2的棋子颜色与背景颜色(本程序中背景颜色值是3)相同,来隐藏棋手2的棋子*/

color2=3;

else/*否则显示棋手2的颜色*/

color1=3;

color2=15;

/*当显示棋手2的时候,通过设置棋手1的棋子颜色与背景颜色相同,来隐藏棋手1的棋子*/

setfillstyle(SOLID_FILL,color1);

/*填充棋盘左侧棋子颜色*/

setcolor(color1);

circle(x1,y1,Radius+2);

/*显示的棋子半径比正常的棋子半径大*/

floodfill(x1,y1,color1);

/*用规定的颜色填满整个封闭图形*/

setfillstyle(SOLID_FILL,color2);

/*填充棋盘右侧棋子颜色*/

setcolor(color2);

circle(x2,y2,Radius+2);

/*显示的棋子半径比棋盘上棋子半径大*/

floodfill(x2,y2,color2);

CurFocus=focus;

/*CurFocus是变化的参量*/

voidGamePlay()

intkey,Exit=FALSE;

/*起初FALSE的值为0*/

inti,j;

ShowChess(SHOW);

/*初始化棋手要下的棋子的位置*/

SetChess(CurFocus);

/*显示正在下棋的棋手的棋子颜色*/

while(!

Exit)/*循环扫描键盘输入*/

key=bioskey(0);

/*bioskey功能是直接使用BIOS服务的键盘接口,bioskey(0)返回下一个在键盘键入的值*/

switch(key)/*判断键盘输入*/

caseESC:

Exit=TRUE;

break;

caseENTER:

/*若此位置没有棋子则在此位置落子*/

/*并判断胜负,胜则显示胜者信息,否则提示该对手下棋*/

if(!

Map[CurRow][CurCol])

ShowChess(SET);

/*在此处落子*/

SetChess(CurFocus%2+1);

/*提示对手下棋*/

/*显示对手棋子颜色*/

caseF2:

/*按F2,重新开始一局游戏*/

/*重新初始化数据*/

ROW;

i++)/*清空棋盘*/

COL;

j++)

Map[i][j]=0;

/*重新画棋盘*/

/*在初始位置显示棋子*/

/*显示下棋一方的颜色提示信息*/

caseDOWN:

/*按方向键移动棋子*/

caseUP:

caseLEFT:

caseRIGHT:

MoveChess(key);

/*按照键盘输入移动棋子*/

voidMoveChess(intdirection)/*移动棋子*/

ShowChess(HIDE);

/*隐藏棋子*/

if(Map[CurRow][CurCol])

Refresh();

/*此位置有棋子时更新,即重新画出一个棋子*/

switch(direction)

CurCol--;

/*数组横向减一*/

CurX-=SIZE;

/*横坐标减一格*/

if(CurCol<

0)/*若移出棋盘从相反方向进入*/

CurCol+=COL;

CurX+=COL*SIZE;

CurCol++;

/*数组横向加一*/

CurX+=SIZE;

/*横坐标加一格*/

if(CurCol==COL)/*若移出棋盘从相反方向进入*/

CurCol-=COL;

CurX-=COL*SIZE;

CurRow++;

/*数组纵向加一*/

CurY+=SIZE;

/*纵坐标加一格*/

if(CurRow==ROW)/*若移出棋盘从相反方向进入*/

CurRow-=ROW;

CurY-=ROW*SIZE;

CurRow--;

/*数组纵向减一*/

CurY-=SIZE;

/*纵坐标减一格*/

if(CurRow<

CurRow+=ROW;

CurY+=ROW*SIZE;

/*在要下棋的棋手下显示棋子*/

voidRefresh()/*更新画面*/

intcolor=Map[CurRow][CurCol];

circle(CurX,CurY,Radius);

voidCheckWin(introw,intcol)/*判断是否有五子相连,即判断输赢*/

intcount,color=Map[row][col];

intwinner=0,x,y;

charMsgWin[50];

/*MsgWin[50]是用于存放CheckWin结果*/

count=GetNum(row,col,LEFT,color)+GetNum(row,col,RIGHT,color)-1;

/*统计水平方向相连的棋子数目*/

if(count>

=5)

winner=CurFocus;

/*五子相连则胜*/

winner)

count=GetNum(row,col,UP,color)+GetNum(row,col,DOWN,color)-1;

/*统计竖直方向相连棋子数目*/

count=GetNum(row,col,LU,color)+GetNum(row,col,RD,color)-1;

/*统计左对角线方向相连棋子数目*/

count=GetNum(row,col,LD,color)+GetNum(row,col,RU,color)-1;

/*统计右对角线方向相连棋子数目*/

if(winner)/*若当前棋手获胜,则输出相关信息*/

x=getmaxx()/2;

/*在棋盘上面输出文本信息*/

y=MinY-MinY/2;

setcolor(12);

/*设置文本颜色为12,即淡红色*/

settextstyle(0,0,3);

/*settextstyle(intfont,intdirection,intcharsize)charsize为字符大小

font值为0,表示8*8点阵字;

direction值为0,表示从左到右,charsize值为1表示

24*24点阵*/

if(CurFocus==1)/*判断哪方获胜并输出其名称*/

strcpy(MsgWin,"

/*将Player1复制到MsgWin*/

/*将Player2复制到MsgWin*/

strcat(MsgWin,"

Win"

/*显示文本win,strcat作用是将Win连接到MsgWin*/

outtextxy(x,y,MsgWin);

/*以下是:

从8个方向判断相连棋子数目,返回数目值*/

intGetNum(introw,intcol,intdir,intvalue)

intresult=0;

inti,j,chessNum=0;

switch(dir)

/*向左判断*/

for(i=col;

i>

=0;

i--)/*向左统计棋子个数,计算相连棋子数目*/

if(Map[row][i]==value)

chessNum++;

result=chessNum;

/*向右判断*/

i++)/*向右统计棋子个数,计算相连棋子数目*/

/*向下判断*/

for(i=row;

i++)/*向下方统计棋子个数,计算相连棋子数目*/

if(Map[i][col]==value)

/*向上判断*/

i--)/*向上统计棋子个数,计算相连棋子数目*/

if(Map[i][col]==value)

caseLU:

/*向左上方进行判断*/

for(i=row,j=col;

=0&

&

j>

i--,j--)/*向左上方统计棋子个数,计算相连棋子数目*/

if(Map[i][j]==value)

caseRD:

/*向右下方进行判断*/

ROW&

i++,j++)/*向右下方统计棋子个数,计算相连棋子数目*/

caseRU:

/*向右上方进行判断*/

i--,j++)/*向右上方统计棋子个数,计算相连棋子数目*/

if(Map[i][j]==value)

chessNum++;

caseLD:

/*向左下方进行判断*/

ROW&

i++,j--)/*向左下方统计棋子个数,计算相连棋子数目*/

returnresult;

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

当前位置:首页 > 工程科技 > 机械仪表

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

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