c语言 五子棋游戏 代码 源代码 解释

c语言 五子棋游戏 代码 源代码 解释
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

相关主题
相关文档
最新文档