黑白棋软件设计.docx
- 文档编号:3157273
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:12
- 大小:54.71KB
黑白棋软件设计.docx
《黑白棋软件设计.docx》由会员分享,可在线阅读,更多相关《黑白棋软件设计.docx(12页珍藏版)》请在冰豆网上搜索。
黑白棋软件设计
目录
一、任务书*************************************2
二、总体设计***********************************3
三、模块划分及功能*****************************3
四、算法说明***********************************3
五、流程图*************************************6
六、源程序清单*********************************7
七、程序测试***********************************16
八、结论、体会及建议***************************16
参考文献资料**********************************16
一.任务书
题目11:
黑白棋软件设计
功能:
实现双人对弈的黑白棋游戏
基本要求:
1.在屏幕上绘制8×8的棋盘,另外有计分区和黑白棋的走棋提示。
2.初始状态为在棋盘中央交叉点摆放黑白棋子各两枚。
同时显示各自积分,棋盘上有一个棋子计1分。
3.白棋先走,有提示,走棋的位置必须是以自己的棋子包围对方一个或多个棋子(从8个方向),被包围住的棋子变为自己的棋子。
若没有可以包围对方棋子位置时,则停走,由对方走棋。
4.当棋盘下满或一方棋子为0时,游戏结束,计分多者胜,屏幕给出显示。
按键或鼠标重新开始或退出游戏。
5.游戏过程中,按F1键可显示游戏规则。
相关知识:
图形绘制、键盘操作等
功能扩充:
1)加选手用时限制。
2)加音乐伴奏
3)加悔棋功能
4)扩大棋盘
二.总体设计
TURBO C提供了70多个图形函数,这些函数包括在图形库文件graphics.LIB中,他们被定义在graphics.h中。
在C语言中,提供了包括if……else,switch……case等分支语句,综合运用这些分支语句,可以完成两个棋手相互转化。
三.模块划分及功能
1.DrawQp绘制棋盘和初始棋子
在界面上绘制320*320的棋盘,并在棋盘中绘制8*8的格子,初始棋子
2.SetPlay设置棋子第一次的颜色先走棋者持白子,后走棋黑子,每次交替
3.Playtoplay人人对战函数
俩棋手交替走棋,定义键盘操作等
4.MoveColor恢复原来棋盘状态
棋子由初始位置到落子位置的路径不改变颜色
5.QpChange判断棋盘的变化
改变棋子的颜色
走棋后判断棋盘的变化情况,根据变化情况判断是否可以输出分数
6.DoScore处理分数
根据棋盘上旗子的多少进行分数的处理
四.算法说明
1.定义结构体变量,进行函数声名。
#include"graphics.h" /*图形系统头文件*/
#defineLEFT0x4b00 /*光标左键值*/
#defineRIGHT0x4d00/*光标右键值*/
#defineDOWN0x5000/*光标下键值*/
#defineUP0x4800/*光标上键值*/
#defineESC0x011b/*ESC键值*/
#defineENTER0x1c0d/*回车键值*/
inta[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/
charplayone[3],playtwo[3];/*两个人的得分转换成字符串输出*/
2.以下是函数声明:
voidplaytoplay(void);/*人人对战函数*/
voidDrawQp(void);/*画棋盘函数*/
voidSetPlayColor(intx);/*设置棋子第一次的颜色*/
voidMoveColor(intx,inty);/*恢复原来棋盘状态*/
intQpChange(intx,inty,intz);/*判断棋盘的变化*/
voidDoScore(void);/*处理分数*/
voidPrintScore(intn);/*输出成绩*/
voidplayWin(void);/*输出胜利者信息*/
3.For循环语句画棋盘
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);/*画水平线*/
line(i,100,i,420);/*画垂直线*/
}
4.二维数组定棋子
a[3][3]=a[4][4]=1;/*初始两个黑棋*/
a[3][4]=a[4][3]=2;/*初始两个白棋*/
5.while语句先判断,后执行
while
(1)/*具体一个棋手走棋的过程*/
{
PrintScore
(1);/*输出棋手1的成绩*/
PrintScore
(2);/*输出棋手2的成绩*/
SetPlayColor(t);/*t变量是用来判断棋手所执棋子的颜色*/
fillellipse(x,y,15,15);
key=bioskey(0);/*接收按键*/
if(key==ESC)/*跳出游戏*/
break;
else
if(key==ENTER)/*如果按键确定就可以跳出循环*/
{
if(y!
=80&&a[(x-120)/40][(y-120)/40]!
=1
&&a[(x-120)/40][(y-120)/40]!
=2)/*如果落子位置没有棋子*/
{
if(t%2==1)/*如果是棋手1移动*/
a[(x-120)/40][(y-120)/40]=1;
else/*否则棋手2移动*/
a[(x-120)/40][(y-120)/40]=2;
if(!
QpChange(x,y,t))/*落子后判断棋盘的变化*/
{
a[(x-120)/40][(y-120)/40]=0;/*恢复空格状态*/
cc++;/*开始统计尝试次数*/
if(cc>=64-score1-score2)/*如果尝试超过空格数则停步*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
break;
}
else
continue;/*如果按键无效*/
}
DoScore();/*分数的改变*/
break;/*棋盘变化了,则轮对方走棋*/
}
else/*已经有棋子就继续按键*/
continue;
}
6.部分if-else语句判断
if(t%2==1)
setfillstyle(SOLID_FILL,15);/*白色*/
else
setfillstyle(SOLID_FILL,8);/*灰色*/
五.流程图
六.源程序清单
#include"graphics.h"
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
#defineENTER0x1c0d
inta[8][8]={0},key,score1,score2;
charplayone[3],playtwo[3];
voidplaytoplay(void);
voidDrawQp(void);
voidSetPlayColor(intx);
voidMoveColor(intx,inty);
intQpChange(intx,inty,intz);
voidDoScore(void);
voidPrintScore(intn);
voidplayWin(void);
voidmain(void)
{
intgd=DETECT,gr;
initgraph(&gd,&gr,"c:
\\tc");
DrawQp();
playtoplay();
getch();
closegraph();
}
voidDrawQp()
{
inti,j;
score1=score2=0;
setbkcolor(BLUE);
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);
line(i,100,i,420);
}
setcolor(0);
setfillstyle(SOLID_FILL,15);
fillellipse(500,200,15,15);
setfillstyle(SOLID_FILL,8);
fillellipse(500,300,15,15);
a[3][3]=a[4][4]=1;
a[3][4]=a[4][3]=2;
setfillstyle(SOLID_FILL,WHITE);
fillellipse(120+3*40,120+3*40,15,15);
fillellipse(120+4*40,120+4*40,15,15);
setfillstyle(SOLID_FILL,8);
fillellipse(120+3*40,120+4*40,15,15);
fillellipse(120+4*40,120+3*40,15,15);
score1=score2=2;
DoScore();
}
voidplaytoplay()
{
intx,y,t=1,i,j,cc=0;
while
(1)
{
x=120,y=80;
while
(1)
{
PrintScore
(1);
PrintScore
(2);
SetPlayColor(t);
fillellipse(x,y,15,15);
key=bioskey(0);
if(key==ESC)
break;
else
if(key==ENTER)
{
if(y!
=80&&a[(x-120)/40][(y-120)/40]!
=1
&&a[(x-120)/40][(y-120)/40]!
=2)/
{
if(t%2==1)
a[(x-120)/40][(y-120)/40]=1;
else
a[(x-120)/40][(y-120)/40]=2;
if(!
QpChange(x,y,t))
{
a[(x-120)/40][(y-120)/40]=0;
cc++;
if(cc>=64-s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 白棋 软件设计
![提示](https://static.bdocx.com/images/bang_tan.gif)