五子棋.docx
- 文档编号:25044364
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:15
- 大小:173.03KB
五子棋.docx
《五子棋.docx》由会员分享,可在线阅读,更多相关《五子棋.docx(15页珍藏版)》请在冰豆网上搜索。
五子棋
福建工程学院计算机与信息科学系
实验报告
2012–2013学年第一学期任课老师:
聂明星
课程名称
结构程序化设计
班级
1201
座号
3120306110
姓名
何丽贞
实验题目
五子棋
实验时间
实验开始日期:
2012.10.21
报告提交日期:
2012.11.13
实验目的、要求
设计一个简单实用五子棋游戏程序。
(1)、输出游戏规则并由用户决定是否遵守并开局。
(2)、要求动态画出棋盘大小。
(3)、画棋子并确定其颜色。
(4)、玩家轮流下棋。
(5)、判断键盘输入哪个键按规则执行操作
(6)、判断谁先落棋。
(7)、判断赢家
实验步骤与内容
函数调用图
算法描述
#include
#include
#include
#defineEsc0x11b
#defineUP0x4800
#defineDOWN0x5000
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineSPACE0x3920
#defineN12
intscale,mult=30,radia=10;
intstartx=50,starty=100;
intglobalx,globaly;
inti,j;
inttheFirst;
intchess[N][N];
intwin=0;
voidMenu(void)
{
/*玩家游戏提醒,显示游戏规则,按上下左右键移动棋子,按空格键确定棋子落点,不能在棋盘外按空格键。
*/
chara;
printf("Playattentions:
\n\n");
printf("1.PressLeft.Right,Up,DownKeytomovePriece\n\n");
printf("2.PressSpacetoplacethePiece\n\n");
printf("3.DoNOTpressSpaceoutsideofthedraw_box\n\n");
printf("DoyouaccepttheabovePlayingattentions?
[Y/Other]:
");
scanf("%c",&a);
printf("\n");
if(a=='y'||a=='Y')
{
printf("inputmatrix:
");
scanf("%d",&scale);
printf("\n");
if(scale>=4&&scale<=12)
{
printf("whoisthefirsr:
1or2?
");
scanf("%d",&theFirst);
if(theFirst==1||theFirst==2)
{
globalx=20,globaly=50;
}
else
printf("error!
");
}
else
exit();
}
else
exit();
}
voidDrawBox(void)
{
/*画棋盘,确定背景色和棋盘色按用户输入大小画出棋盘*/
inti;
intx0,y0,x1,y1;
setbkcolor(BLUE);/*设置背景色为蓝色*/
/*画行*/
for(i=0;i<=scale;i++)
{
x0=startx;y0=starty+i*mult;
x1=startx+mult*scale;y1=starty+i*mult;
line(x0,y0,x1,y1);
}
/*画列*/
for(i=0;i<=scale;i++)
{
x0=startx+i*mult;y0=starty;
x1=startx+i*mult;y1=starty+mult*scale;
line(x0,y0,x1,y1);
}
}
voidDrawCircle(intx,inty,intcolor)
{
/*画棋子,确定棋子大小及颜色画出棋子。
*/
setcolor(color);
circle(x,y,radia);
}
voidMoveUp(void)
{
if(globaly>starty&&globalx { DrawCircle(globalx,globaly,BLUE);/*撤去棋子经过的痕迹*/ globaly-=mult; if(theFirst==1) DrawCircle(globalx,globaly,RED); else DrawCircle(globalx,globaly,WHITE); } else/*如果棋子在棋盘上,则执行下列程序,否则不执行*/ if(globalx>=startx&&globaly>starty&&chess[(globalx-50)/mult][(globaly-100)/mult-1]==0) { DrawCircle(globalx,globaly,BLUE); globaly-=mult; if(theFirst==1) DrawCircle(globalx,globaly,RED); else DrawCircle(globalx,globaly,WHITE); } } voidMoveDown(void) { if(globaly<(starty+mult*scale)&&globalx { DrawCircle(globalx,globaly,BLUE);/*撤去棋子经过的痕迹*/ globaly+=mult; if(theFirst==1) { DrawCircle(globalx,globaly,RED); } else { DrawCircle(globalx,globaly,WHITE); } } elseif(globaly<(starty+mult*scale)&&globalx>=startx&&chess[(globalx-50)/mult][(globaly-100)/mult+1]==0) { DrawCircle(globalx,globaly,BLUE); globaly+=mult; if(theFirst==1) DrawCircle(globalx,globaly,RED); else DrawCircle(globalx,globaly,WHITE); } } voidMoveLeft(void) { if(globaly { DrawCircle(globalx,globaly,BLUE);/*撤去棋子经过的痕迹*/ globalx-=mult; if(theFirst==1) DrawCircle(globalx,globaly,RED); else DrawCircle(globalx,globaly,WHITE); } else {if(globalx>startx&&globaly>=starty&&chess[(globalx-50)/mult][(globaly-100)/mult-1]==0) { DrawCircle(globalx,globaly,BLUE); globalx-=mult; if(theFirst==1) DrawCircle(globalx,globaly,RED); else DrawCircle(globalx,globaly,WHITE); } } } voidMoveRight(void) { if(globalx { DrawCircle(globalx,globaly,BLUE); globalx+=mult; if(theFirst==1) { DrawCircle(globalx,globaly,RED); } else { DrawCircle(globalx,globaly,WHITE); } } elseif(globalx { DrawCircle(globalx,globaly,BLUE); globalx+=mult; if(theFirst==1) { DrawCircle(globalx,globaly,RED); } else { DrawCircle(globalx,globaly,WHITE); } } } voidSpace(void) { if(globaly>=starty&&globalx>=startx) { if(theFirst==1) { theFirst++; DrawCircle(20,50,WHITE);/*画棋子*/ chess[(globalx-50)/mult][(globaly-100)/mult]=1; globalx=20,globaly=50; } else { theFirst--; DrawCircle(20,50,RED); chess[(globalx-50)/mult][(globaly-100)/mult]=2; globalx=20,globaly=50; } } JudgeWin(); } voidKeyAction(intkey) { /*判断键盘输入哪个键按规则执行操作,UP键上移,DOWN键下移,LEFT键左移,RIGHT键右移棋子,ESC键退出,SPACE键确定棋子落点。 */ switch(key) { caseUP: MoveUp(); break; caseDOWN: MoveDown(); break; caseLEFT: MoveLeft(); break; caseRIGHT: MoveRight(); break; default: break; } } intJudgeWin(intx,inty) { /*判断赢家,横向竖向斜向够5个相同颜色的棋子则为赢家。 */ for(i=0;i { for(j=0;j { if(((j+4) =0&& chess[i][j]==chess[i][j+1]&& chess[i][j+1]==chess[i][j+2]&& chess[i][j+2]==chess[i][j+3]&& chess[i][j+3]==chess[i][j+4])|| ((i+4) =0&& chess[i][j]==chess[i+1][j]&& chess[i+1][j]==chess[i+2][j]&& chess[i+2][j]==chess[i+3][j]&& chess[i+3][j]==chess[i+4][j])|| ((i+4) =0&& chess[i][j]==chess[i+1][j+1]&& chess[i+1][j+1]==chess[i+2][j+2]&& chess[i+2][j+2]==chess[i+3][j+3]&& chess[i+3][j+3]==chess[i+4][j+4])|| ((i+4) =0&& chess[i][j]==chess[i+1][j-1]&& chess[i+1][j-1]==chess[i+2][j-2]&& chess[i+2][j-2]==chess[i+3][j-3]&& chess[i+3][j-3]==chess[i+4][j-4])) if(chess[i][j]==1) win=1;/*如果当前棋为红棋,则红方获胜*/ elseif(chess[i][j]==2) win=2;/*否则白方获胜,退出当前循环*/ } if(win! =0) break; } if(win==1) { settextstyle(0,0,2); outtextxy(450,100,"REDwin! "); } elseif(win==2) { settextstyle(0,0,2); outtextxy(450,40,"WHITEwin! "); } } voidmain() { intgdriver=VGA,gmode=VGAHI;/*定义图形适配器*/ intkey; clrscr(); /*玩家游戏提醒,显示游戏规则,按上下左右键移动棋子,按空格键确定棋子落点,不能在棋盘外按空格键。 */ Menu(); initgraph(&gdriver,&gmode,"c: \\tc");/*图形初始化*/ /*画棋盘,确定背景色和棋盘色按用户输入大小画出棋盘*/ DrawBox(); /*棋盘初始化*/ for(i=1;i { for(j=1;j { chess[i][j]=0; } } /*红棋子先下*/ if(theFirst==1) DrawCircle(globalx,globaly,RED); else DrawCircle(globalx,globaly,WHITE); do { while(bioskey (1)==0); key=bioskey(0); KeyAction(key); /*根据白方或红方先手初始化棋子。 获取选手按键信息并根据上下左右键在棋盘内移动棋子。 空格键落子,并判断有无获胜,获胜则提示并退出程序。 */ } while(Esc! =key); closegraph();/*关闭图形*/ } 试验过程记录 记录试验中遇到的困难及解决方法; 棋子的上下左右定位不确定,且棋子走过的痕迹依旧留着,无法判断棋子的位置; 解决: 对初始棋子进行定位,并根据棋子和棋盘的大小进行调整。 实验结果记录以及与预期结果比较以及分析 记录每次实验结果以及分析情况 初始界面 游戏界面 总结以及心得体会 对于程序的编写还有待提高,五子棋的代码不够完善,还需更进。 。 。 指导老师评阅意见 指导老师: 年月日 填写内容时,可把表格扩大。 实验的源程序代码(要有注释)附在表后。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋
![提示](https://static.bdocx.com/images/bang_tan.gif)