C语言编写的黑白棋游戏源代码
温柔似野鬼°
900次浏览
2021年01月18日 14:44
最佳经验
本文由作者推荐
粮票收藏价格-政审材料范文
课程设计说明书
No.
1
C
语言编写的黑白棋游戏源代码
/*3.3.4
源程序
*/
#include
图形系统头文件
*/
#define LEFT 0x4b00 /*
光标左键值
*/
#define RIGHT 0x4d00 /*
光标右键值
*/
#define DOWN 0x5000 /*
光标下键值
*/
#define UP 0x4800 /*
光标上键值
*/
#define ESC 0x011b /* ESC
键值
*/
#define ENTER 0x1c0d /*
回车键值
*/
int a[8][8]={0},key,score1,scor e2;/*
具体分数以及按键与存放棋子的变量
*/
char playone[3],playtwo[3];/*
两个人的得分转换成字符串输出
*/
void playtoplay(void);/*
人人对战函数
*/
void DrawQp(void);/*
画棋盘函数
*/
void SetPlayColor(int x);/*
设置棋子第一次的颜色
*/
void MoveColor(int x,int y);/*
恢复原来棋盘状态
*/
int QpChange(int x,int y,int z);/*
判断棋盘的变化
*/
void DoScore(void);/*
处理分数
*/
void PrintScore(int n);/*
输出成绩
*/
void playWin(void);/*
输出胜利者信息
*/
/******
主函数
*********/
void main(void)
{
int gd=DETECT,gr;
initgraph(&gd,&gr,
初始化图形系统
*/
DrawQp();/*
画棋盘
*/
playtoplay();/*
人人对战
*/
getch();
closegraph();/*
关闭图形系统
*/
}
void DrawQp()/*
画棋盘
*/
{
int i,j;
score1=score2=0;/*
棋手一开始得分都为
0*/
setbkcolor(BLUE);
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);/*
画水平线
*/
line(i,100,i,420); /*
画垂直线
*/
}
setcolor(0);/*
取消圆周围的一圈东西
*/
##
大
学
课程设计说明书
No.
2
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();/*
输出开始分数
*/
}
void playtoplay()/*
人人对战
*/
{
int x,y,t=1,i,j,cc=0;
while(1)/*
换棋手走棋
*/
{
x=120,y=80;/*
每次棋子一开始出来的坐标,x
为行坐标
,y
为列坐标
*/
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;
##
大
学
课程设计说明书
No.
3
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;
}
else /*
四个方向按键的判断
*/
if(key==LEFT&&x>120)/*
左方向键
*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x-=40;
fillellipse(x,y,15,15);
}
else
if(key==RIGHT&&x<400&&y>80)/*
右方向键
*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x+=40;
fillellipse(x,y,15,15);
}
else
if(key==UP&&y>120)/*
上方向键
*/
{
##
大
学
课程设计说明书
No.
4
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y-=40;
fillellipse(x,y,15,15);
}
else
if(key==DOWN&&y<400)/*
下方向键
*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y+=40;
fillellipse(x,y,15,15);
}
}
if(key==ESC)/*
结束游戏
*/
break;
if((score1+score2)==64||score1==0 ||score2==0)/*
格子已经占满或一方棋子
为
0
判断胜负
*/
{
playWin();/*
输出最后结果
*/
break;
}
t=t%2+1; /*
一方走后,改变棋子颜色即轮对方走
*/
cc=0; /*
计数值恢复为
0*/
} /*endwhile*/
}
void SetPlayColor(int t)/*
设置棋子颜色
*/
{
if(t%2==1)
setfillstyle(SOLID_FILL,15);/*
白色
*/
else
setfillstyle(SOLID_FILL,8);/*
灰色
*/
}
void MoveColor(int x,int y)/*
走了一步后恢复原来格子的状态
*/
{
if(y<100)/*
如果是从起点出发就恢复蓝色
*/
setfillstyle(SOLID_FILL,BLUE);
else/*
其他 情况如果是
1
就恢复白色棋子
,2
恢复黑色棋子
,
或恢复蓝 色棋盘
*/
##
大
学