c语言 五子棋游戏 代码 源代码 解释
C语言教程:简易五子棋程序
收集于网络
/* 纯用字符和数组编的五子棋,棋盘也是用字符画的。
编了1上午了,主要是算法跟按键比较烦,发现有bug-- 按键速度过快会产生延时显示,可能是算法不好。
操作:玩家1:a,s,w,d(方向)空格(落子)
玩家2:上、下、左、右回车(落子)
ESC:退出
编译测试环境:TC3.0
*/
#include
#include
#include
#include
#define CRRU 0xbf /*右上角点197*/
#define CRLU 0xda /*左上角点218*/
#define CRLD 0xc0 /*左下角点192*/
#define CRRD 0xd9 /*右下角点217*/
#define CRL 0xc3 /*左边195*/
#define CRR 0xb4 /*右边190*/
#define CRU 0xc2 /*上边194*/
#define CRD 0xc1 /*下边193*/
#define CR 0xc5 /*十字交叉点197*/
#define size 19
char a[size][size];
int i,j; //跟踪光标在数组中对应的位置
int x=10;
int y=3; //光标所在位的坐标
int side=1; //持子方1为玩家1,2为玩家2;
int CB=1; int CW=2; // 棋子图形
void inita() ;
void inits();
void pressco(int );
void pressct(int );
int judge(int);
int main(){
inita();
inits();
getch();
while(1){
int press=bioskey(0);
if(press==283)break;
if(side==1){
pressco(press);
if(side==2)if(judge(1)==1) {
gotoxy(1,1);
printf("the play1 win");break;}
}
if(side==2){
pressct(press);
if(side==1)if(judge(2)==1){
gotoxy(1,1);
printf("the play2 win");break;}
}
}
getch();
return 0;
}
void inita() //数组初始化;
{
a[0][0]=CRLU;
a[0][size-1]=CRRU;
a[size-1][0]=CRLD;
a[size-1][size-1]=CRRD;
for(int i=1;i { a[0][i]=CRU; a[size-1][i]=CRD; a[i][0]=CRL; a[i][size-1]=CRR; for(int j=1;j } return ; } void inits() //界面初始化 { for(int i=0;i gotoxy(x,y+i); for(int j=0;j } gotoxy(x,y); i=0;j=0; return ; } void pressco(int m){ switch(m){ case 7777: //A if(i>0) {i--;x--;gotoxy(x,y);} break; case 8051: //S if(j case 4471: //w if(j>0) {j--;y--;gotoxy(x,y);} break; case 8292: //D if(i case 14624: //空格 if(a[i][j]!=CB&&a[i][j]!=CW){a[i][j]=CB;putch(CB);gotoxy(x,y);side=2;}break; default: break; } return ; } void pressct(int m){ switch(m){ case 19200: //左 if(i>0) {i--;x--;gotoxy(x,y);} break; case 20480: //下 if(j case 18432: //上 if(j>0) {j--;y--;gotoxy(x,y);} break; case 19712: //右 if(i case 7181: //回车 if(a[i][j]!=CB&&a[i][j]!=CW){a[i][j]=CW;putch(CW);gotoxy(x,y);side=1;}break; default: break; } return ; } int judge(int pa) //判断是否胜利,胜利则返回1,否则返回0; // 其中i,j为当前的落子位; { int m; int sum=1; for(m=1;m<=i&&m<=j;m++) {if(a[i-m][j-m]!=pa) break;sum++;} for(m=1;m<(size-i)&&m<(size-j);m++) {if(a[i+m][j+m]!=pa) break;sum++;} if(sum>=5) return 1; else sum=1; for(m=1;m<=i;m++) {if(a[i-m][j]!=pa) break;sum++;} for(m=1;m<(size-j);m++) {if(a[i+m][j]!=pa) break;sum++;} if(sum>=5) return 1; else sum=1; for(m=1;m<=j;m++) {if(a[i][j-m]!=pa) break;sum++;} for(m=1;m<(size-j);m++) {if(a[i][j+m]!=pa) break;sum++;} if(sum>=5) return 1; else sum=1; for(m=1;m<=i&&m<(size-j);m++) {if(a[i-m][j+m]!=pa) break;sum++;} for(m=1;m<(size-i)&&m<=j;m++) {if(a[i+m][j-m]!=pa) break;sum++;} if(sum>=5) return 1; else return 0; 本文章来自https://www.360docs.net/doc/e11511040.html, 21视频教程网 C语言教程:简易五子棋程序_C语言程序设计教程原文链接:https://www.360docs.net/doc/e11511040.html,/html/96307.shtml