當前位置:首頁 » 編程語言 » 五子棋c語言代碼人機
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

五子棋c語言代碼人機

發布時間: 2022-11-25 12:57:12

⑴ 求c語言編寫的五子棋程序。

#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<bios.h>
#include<conio.h>

#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define SPACE 0x3920

#define BILI 20
#define JZ 4
#define JS 3
#define N 19

int box[N][N];
int step_x,step_y ;
int key ;
int flag=1 ;

void draw_box();
void draw_cicle(int x,int y,int color);
void change();
void judgewho(int x,int y);
void judgekey();
int judgeresult(int x,int y);
void attentoin();

void attention()
{
char ch ;
window(1,1,80,25);
textbackground(LIGHTBLUE);
textcolor(YELLOW);
clrscr();
gotoxy(15,2);
printf("游戲操作規則:");
gotoxy(15,4);
printf("Play Rules:");
gotoxy(15,6);
printf("1、按左右上下方向鍵移動棋子");
gotoxy(15,8);
printf("1. Press Left,Right,Up,Down Key to move Piece");
gotoxy(15,10);
printf("2、按空格確定落棋子");
gotoxy(15,12);
printf("2. Press Space to place the Piece");
gotoxy(15,14);
printf("3、禁止在棋盤外按空格");
gotoxy(15,16);
printf("3. DO NOT press Space outside of the chessboard");
gotoxy(15,18);
printf("你是否接受上述的游戲規則(Y/N)");
gotoxy(15,20);
printf("Do you accept the above Playing Rules? [Y/N]:");
while(1)
{
gotoxy(60,20);
ch=getche();
if(ch=='Y'||ch=='y')
break ;
else if(ch=='N'||ch=='n')
{
window(1,1,80,25);
textbackground(BLACK);
textcolor(LIGHTGRAY);
clrscr();
exit(0);
}
gotoxy(51,12);
printf(" ");
}
}
void draw_box()
{
int x1,x2,y1,y2 ;
setbkcolor(LIGHTBLUE);
setcolor(YELLOW);
gotoxy(7,2);
printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");
for(x1=1,y1=1,y2=18;x1<=18;x1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);
for(x1=1,y1=1,x2=18;y1<=18;y1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);
for(x1=1;x1<=18;x1++)
for(y1=1;y1<=18;y1++)
box[x1][y1]=0 ;
}

void draw_circle(int x,int y,int color)
{
setcolor(color);
setlinestyle(SOLID_LINE,0,1);
x=(x+JZ)*BILI ;
y=(y+JS)*BILI ;
circle(x,y,8);
}

void judgekey()
{
int i ;
int j ;
switch(key)
{
case LEFT :

if(step_x-1<0)
break ;
else
{
for(i=step_x-1,j=step_y;i>=1;i--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(i<1)break ;
step_x=i ;
judgewho(step_x,step_y);
break ;
}
case RIGHT :

if(step_x+1>18)
break ;
else
{
for(i=step_x+1,j=step_y;i<=18;i++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(i>18)break ;
step_x=i ;
judgewho(step_x,step_y);
break ;
}
case DOWN :

if((step_y+1)>18)
break ;
else
{
for(i=step_x,j=step_y+1;j<=18;j++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(j>18)break ;
step_y=j ;
judgewho(step_x,step_y);
break ;
}
case UP :

if((step_y-1)<0)
break ;
else
{
for(i=step_x,j=step_y-1;j>=1;j--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
}
if(j<1)break ;
step_y=j ;
judgewho(step_x,step_y);
break ;
}
case ESC :
break ;

case SPACE :
if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)
{
if(box[step_x][step_y]==0)
{
box[step_x][step_y]=flag ;
if(judgeresult(step_x,step_y)==1)
{
sound(1000);
delay(1000);
nosound();
gotoxy(30,4);
if(flag==1)
{
setbkcolor(BLUE);
cleardevice();
setviewport(100,100,540,380,1);
/*定義一個圖形窗口*/
setfillstyle(1,2);
/*綠色以實填充*/
setcolor(YELLOW);
rectangle(0,0,439,279);
floodfill(50,50,14);
setcolor(12);
settextstyle(1,0,5);
/*三重筆劃字體, 水平放?5倍*/
outtextxy(20,20,"The White Win !");
setcolor(15);
settextstyle(3,0,5);
/*無襯筆劃字體, 水平放大5倍*/
outtextxy(120,120,"The White Win !");
setcolor(14);
settextstyle(2,0,8);
getch();
closegraph();
exit(0);
}
if(flag==2)
{
setbkcolor(BLUE);
cleardevice();
setviewport(100,100,540,380,1);
/*定義一個圖形窗口*/
setfillstyle(1,2);
/*綠色以實填充*/
setcolor(YELLOW);
rectangle(0,0,439,279);
floodfill(50,50,14);
setcolor(12);
settextstyle(1,0,8);
/*三重筆劃字體, 水平放大8倍*/
outtextxy(20,20,"The Red Win !");
setcolor(15);
settextstyle(3,0,5);
/*無襯筆劃字體, 水平放大5倍*/
outtextxy(120,120,"The Red Win !");
setcolor(14);
settextstyle(2,0,8);
getch();
closegraph();
exit(0);
}
}
change();
break ;
}
}
else
break ;
}
}

void change()
{
if(flag==1)
flag=2 ;
else
flag=1 ;
}

void judgewho(int x,int y)
{
if(flag==1)
draw_circle(x,y,15);
if(flag==2)
draw_circle(x,y,4);
}

int judgeresult(int x,int y)
{
int j,k,n1,n2 ;
while(1)
{
n1=0 ;
n2=0 ;
/*水平向左數*/
for(j=x,k=y;j>=1;j--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*水平向右數*/
for(j=x,k=y;j<=18;j++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}

/*垂直向上數*/
n1=0 ;
n2=0 ;
for(j=x,k=y;k>=1;k--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*垂直向下數*/
for(j=x,k=y;k<=18;k++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}

/*向左上方數*/
n1=0 ;
n2=0 ;
for(j=x,k=y;j>=1,k>=1;j--,k--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*向右下方數*/
for(j=x,k=y;j<=18,k<=18;j++,k++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}

/*向右上方數*/
n1=0 ;
n2=0 ;
for(j=x,k=y;j<=18,k>=1;j++,k--)
{
if(box[j][k]==flag)
n1++;
else
break ;
}
/*向左下方數*/
for(j=x,k=y;j>=1,k<=18;j--,k++)
{
if(box[j][k]==flag)
n2++;
else
break ;
}
if(n1+n2-1>=5)
{
return(1);
break ;
}
return(0);
break ;
}
}

void main()
{
int gdriver=VGA,gmode=VGAHI;
clrscr();
attention();
initgraph(&gdriver,&gmode,"c:\\tc");
/* setwritemode(XOR_PUT);*/
flag=1 ;
draw_box();
do
{
step_x=0 ;
step_y=0 ;
/*draw_circle(step_x,step_y,8); */
judgewho(step_x-1,step_y-1);
do
{
while(bioskey(1)==0);
key=bioskey(0);
judgekey();
}
while(key!=SPACE&&key!=ESC);
}
while(key!=ESC);
closegraph();
}

⑵ 五子棋C語言代碼

五子棋C語言代碼如下:
#include <stdio.h>
#include <bios.h>
#include <ctype.h>
#include <conio.h>
#include <dos.h>
#define CROSSRU 0xbf /*右上角點*/
#define CROSSLU 0xda /*左上角點*/
#define CROSSLD 0xc0 /*左下角點*/
#define CROSSRD 0xd9 /*右下角點*/
#define CROSSL 0xc3 /*左邊*/
#define CROSSR 0xb4 /*右邊*/
#define CROSSU 0xc2 /*上邊*/
#define CROSSD 0xc1 /*下邊*/
#define CROSS 0xc5 /*十字交叉點*/

/*定義棋盤左上角點在屏幕上的位置*/
#define MAPXOFT 5
#define MAPYOFT 2

/*定義1號玩家的操作鍵鍵碼*/
#define PLAY1UP 0x1157/*上移--'W'*/
#define PLAY1DOWN 0x1f53/*下移--'S'*/
#define PLAY1LEFT 0x1e41/*左移--'A'*/
#define PLAY1RIGHT 0x2044/*右移--'D'*/
#define PLAY1DO 0x3920/*落子--空格鍵*/

/*定義2號玩家的操作鍵鍵碼*/
#define PLAY2UP 0x4800/*上移--方向鍵up*/
#define PLAY2DOWN 0x5000/*下移--方向鍵down*/
#define PLAY2LEFT 0x4b00/*左移--方向鍵left*/
#define PLAY2RIGHT 0x4d00/*右移--方向鍵right*/
#define PLAY2DO 0x1c0d/*落子--回車鍵Enter*/

/*若想在游戲中途退出, 可按 Esc 鍵*/
#define ESCAPE 0x011b

/*定義棋盤上交叉點的狀態, 即該點有無棋子 */
/*若有棋子, 還應能指出是哪個玩家的棋子 */
#define CHESSNULL 0 /*沒有棋子*/
#define CHESS1 'O'/*一號玩家的棋子*/
#define CHESS2 'X'/*二號玩家的棋子*/

/*定義按鍵類別*/
#define KEYEX99v 0/*退出鍵*/
#define KEYFALLCHESS 1/*落子鍵*/
#define KEYMOVECURSOR 2/*游標移動鍵*/
#define KEYINVALID 3/*無效鍵*/

/*定義符號常量: 真, 假 --- 真為1, 假為0 */
#define TRUE 1
#define FALSE 0

/**********************************************************/
/* 定義數據結構 */

/*棋盤交叉點坐標的數據結構*/
struct point
{
int x,y;
};

或者下面這個:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define N 15
#define B 7
#define STOP -10000
#define OK 1
#define NO 0
#define UP 328
#define DOWN 336
#define LEFT 331
#define RIGHT 333

int a[N+1][N+1];
int zx,zy;
int write=1,biaoji=0;
struct zn{
long sum;

int y;

int x;

}w[N+1][N+1],max,max1;

void cbar(int i,int x,int y,int r);
void map(int a[][]);
int getkey();
int key();
void zuobiao(int x,int y,int i);
int tu(int a[][],int write);
int wtu(int a[][],int write);
int neng(int a[][]);
int zh5(int y,int x,int a[][]);
long zzh5(int b[][],int i);
main()
{
int i,j;
int gdriver=DETECT;
int gmode;
initgraph(&gdriver,&gmode,"");
zx=(N+1)/2;
zy=(N+1)/2;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
a[i][j]=0;
map(a);
i=1;
while(i)
{
int k,n;
k=wtu(a,write);
if(k==STOP) goto end;
map(a);
n=neng(a);
if(n==STOP) goto end;
map(a);
}
end:
;
}

int neng(int a[N+1][N+1])

{
int i,j;
int k;
max.sum=-1;

for(i=0;i<=N;i++)
for(j=0;j<+N;j++)

{
w[i][j].sum=0;
w[i][j].x=i;
w[i][j].y=j;
}
for(i=1;i<=N-4;i++)
for(j=1;j<=N-4;j++)
{
k=zh5(i,j,a);
if(k==STOP) return (STOP);
}

for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{

if(max.sum<w[i][j].sum)
{

max.sum=w[i][j].sum;
max.y=i;
max.x=j;
}

else if(max.sum==w[i][j].sum)
{

if(((max.y-zy)*(max.y-zy)+(max.x-zx)*(max.x-zx))>((i-zy)*(i-zy)+(j-zx)*(j-zx)))
max.sum=w[i][j].sum;
max.y=i;
max.x=j;
}
}
if(a[max.y][max.x]==0)

{
a[max.y][max.x]=-1;
zy=max.y;
zx=max.x;
}

}

int zh5(int y,int x,int a[N+1][N+1])
{

int i,j;
int b[6][6];
long c[13];

long d[6][6];
long temp;
for(i=y;i<=y+4;i++)
for(j=x;j<=x+4;j++)
b[i+1-y][j+1-x]=a[i][j];
c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];
c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];
c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];
c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];
c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];
c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];
c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];
c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];
c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];
c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];
c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];
c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];

for(i=1;i<=12;i++)
{
switch(c[i])

{

case 5:biaoji=1;return(STOP);

case -5:biaoji=-1;return(STOP);

case -4:c[i]=100000;break;

case 4:c[i]=100000;break;

case -3:c[i]=150;break;

case 3:c[i]=150;break;

case -2:c[i]=120;break;

case 2:c[i]=100;break;

case -1:c[i]=1;break;

case 1:c[i]=1;break;

default: c[i]=0;

}

}

for(i=1;i<=12;i++)

{

if(c[i]==150)

c[i]+=zzh5(b,i);

}

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

d[i][j]=0;

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(i==j) d[i][j]+=c[11];

if((i+j)==6) d[i][j]+=c[12];

d[i][j]+=c[i]+c[j+5];

}

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(b[i][j]!=0)

d[i][j]=-2;

}

max1.sum=-1;

max1.y=0;

max1.x=0;

for(i=1;i<=5;i++)

for(j=1;j<=5;j++)

{

if(max1.sum<d[i][j])

{

max1.sum=d[i][j];

max1.y=i;

max1.x=j;

w[i+y-1][j+x-1].sum+=max1.sum;

}

else if(max1.sum==d[i][j])

{

if(((i+y-1-zy)*(i+y-1-zy)+(j+x-1-zx)*(j+x-1-zx))>((max1.y+y-1-zy)*(max1.y+y-1-zy)+(max1.x+x-1-zx)*(max1.x+x-1-zx)))

{

max1.sum=d[i][j];

max1.y=i;

max1.x=j;

}

}

}

}

long zzh5(int b[6][6],int n)

{

int i,j,k,l,m;

switch(n)

{

case 1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;

case 2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;

case 3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;

case 4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;

case 5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;

case 6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;

case 7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;

case 8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;

case 9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;

case 10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;

case 11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;

case 12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;

}

if((i==0&&j==1&&k==1&&l==1&&m==0))

return (900);

if((i==0&&j==-1&&k==-1&&l==-1&&m==0))

return(1000);

if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))

return(20);

if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))

return(20);

if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))

return(-60);

if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))

return(-60);

}

int wtu(int a[N+1][N+1],int write)

{

int i=1;

map(a);

zuobiao(zx,zy,1);

while(i)

{

int k;

k=tu(a,write);

if(k==OK) i=0;

if(k==STOP) return (STOP);

}

}

int getkey()

{

int key,lo,hi;

key=bioskey(0);

lo=key&0x00ff;

hi=(key&0xff00)>>8;

return((lo==0) ? hi+256:lo);

}

int key()

{

int k;

k=getkey();

switch(k)

{

case 27: return (STOP);

case 13:

case ' ': return (OK);

case 328: return (UP);

case 336: return (DOWN);

case 331: return (LEFT);

case 333: return (RIGHT);

default: return (NO);

}

}

void zuobiao(int x,int y,int i)

{

int r;

if(i!=0)

{

setcolor(GREEN);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

}

else

{

if(a[zy][zx]==1)

{

setcolor(8);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

}

else if(a[zy][zx]==-1)

{

setcolor(WHITE);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

}

else

{

setcolor(B);

for(r=1;r<=5;r++)

circle(75+25*x,25+25*y,r);

setcolor(RED); line(75+25*zx-5,25+25*zy,75+25*x+5,25+25*zy);

line(75+25*zx,25+25*zy-5,75+25*zx,25+25*zy+5);

}

}

}

int tu(int a[N+1][N+1],int write)

{

int k;

re:

k=key();

if(k==OK)

{

if(a[zy][zx]==0)

{

a[zy][zx]=write;

}

else

goto re;

}

if(k==STOP) return(STOP);

if(k==NO) goto re;

if(k==UP)

{

int i,j;

if(zy==1) j=zy;

else j=zy-1;

zuobiao(zx,zy,0);

zuobiao(zx,j,1);

zy=j;

goto re;

}

if(k==DOWN)

{

int i,j;

if(zy==N) j=zy;

else j=zy+1;

zuobiao(zx,zy,0);

zuobiao(zx,j,1);

zy=j;

goto re;

}

if(k==LEFT)

{

int i,j;

if(zx==1) i=zx;

else i=zx-1;

zuobiao(zx,zy,0);

zuobiao(i,zy,1);

zx=i;

goto re;

}

if(k==RIGHT)

{

int i,j;

if(zx==N) i=zx;

else i=zx+1;

zuobiao(zx,zy,0);

zuobiao(i,zy,1);

zx=i;

goto re;

}

}

void cbar(int i,int x,int y,int r)

{

if(i!=0)

{

if(i==1)

setcolor(8);

else if(i==-1)

setcolor(WHITE);

for(i=1;i<=r;i++)

{

circle(x,y,i);

}

}

}

void map(int a[N+1][N+1])

{

int i,j;

cleardevice();

setbkcolor(B);

setcolor(RED);

for(i=0;i<N;i++)

{

line(100,50+25*i,75+N*25,50+25*i);

line(100+25*i,50,100+25*i,25+N*25);

}

for(i=1;i<=N;i++)

for(j=1;j<=N;j++)

cbar(a[i][j],75+25*j,25+25*i,10);

}

⑶ C語言五子棋人機對戰

     對於初學C語言的同學,五子棋不可謂不是一個好的練習。我們不但要考慮玩家及電腦的落子,還要考慮棋盤是否已滿、是否有一方已經獲得勝利。因此我們要考慮好各種情況,設定好函數及循環

⑷ 五子棋C語言代碼,在VC++6.0環境下運行謝謝了!


本程序設計為人與人對弈,雙方有一方五子連成一線即為贏。設計一游戲變數(3到9之間),用來控制顯示面板的大小,即用戶可選擇生成3×3到9×9的棋盤。

五子棋C語言代碼如下:#include <stdio.h>#include <bios.h>#include <ctype.h>#include <conio.h>#include <dos.h>#define CROSSRU 0xbf /*右上角點*/#define CROSSLU 0xda /*左上角點*/#define CROSSLD 0xc0 /*左下角點*/#define CROSSRD 0xd9 /*右下角點*/#define CROSSL 0xc3 /*左邊*/#define CROSSR 0xb4 /*右邊*/#define CROSSU 0xc2 /*上邊*/#define CROSSD 0xc1 /*下邊*/#define CROSS 0xc5 /*十字交叉點*//*定義棋盤左上角點在屏幕上的位置*/#define MAPXOFT 5#define MAPYOFT 2/*定義1號玩家的操作鍵鍵碼*/#define PLAY1UP 0x1157/*上移--'W'*/#define PLAY1DOWN 0x1f53/*下移--'S'*/#define PLAY1LEFT 0x1e41/*左移--'A'*/#define PLAY1RIGHT 0x2044/*右移--'D'*/#define PLAY1DO 0x3920/*落子--空格鍵*//*定義2號玩家的操作鍵鍵碼*/#define PLAY2UP 0x4800/*上移--方向鍵up*/#define PLAY2DOWN 0x5000/*下移--方向鍵down*/#define PLAY2LEFT 0x4b00/*左移--方向鍵left*/#define PLAY2RIGHT 0x4d00/*右移--方向鍵right*/#define PLAY2DO 0x1c0d/*落子--回車鍵Enter*//*若想在游戲中途退出, 可按 Esc 鍵*/#define ESCAPE 0x011b/*定義棋盤上交叉點的狀態, 即該點有無棋子 *//*若有棋子, 還應能指出是哪個玩家的棋子 */#define CHESSNULL 0 /*沒有棋子*/#define CHESS1 'O'/*一號玩家的棋子*/#define CHESS2 'X'/*二號玩家的棋子*//*定義按鍵類別*/#define KEYEX99v 0/*退出鍵*/#define KEYFALLCHESS 1/*落子鍵*/#define KEYMOVECURSOR 2/*游標移動鍵*/#define KEYINVALID 3/*無效鍵*//*定義符號常量: 真, 假 --- 真為1, 假為0 */#define TRUE 1#define FALSE 0/**********************************************************//* 定義數據結構 *//*棋盤交叉點坐標的數據結構*/struct point{int x,y;};或者下面這個:#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#define N 15#define B 7#define STOP -10000#define OK 1#define NO 0#define UP 328#define DOWN 336#define LEFT 331#define RIGHT 333int a[N+1][N+1];int zx,zy;int write=1,biaoji=0;struct zn{long sum;int y;int x;}w[N+1][N+1],max,max1;void cbar(int i,int x,int y,int r);void map(int a[][]);int getkey();int key();void zuobiao(int x,int y,int i);int tu(int a[][],int write);int wtu(int a[][],int write);int neng(int a[][]);int zh5(int y,int x,int a[][]);long zzh5(int b[][],int i);main(){int i,j;int gdriver=DETECT;int gmode;initgraph(&gdriver,&gmode,"");zx=(N+1)/2;zy=(N+1)/2;for(i=1;i<=N;i++)for(j=1;j<=N;j++)a[i][j]=0;map(a);i=1;while(i){int k,n;k=wtu(a,write);if(k==STOP) goto end;map(a);n=neng(a);if(n==STOP) goto end;map(a);}end:;}int neng(int a[N+1][N+1]){int i,j;int k;max.sum=-1;for(i=0;i<=N;i++)for(j=0;j<+N;j++){w[i][j].sum=0;w[i][j].x=i;w[i][j].y=j;}for(i=1;i<=N-4;i++)for(j=1;j<=N-4;j++){k=zh5(i,j,a);if(k==STOP) return (STOP);}for(i=1;i<=N;i++)for(j=1;j<=N;j++){if(max.sum<w[i][j].sum){max.sum=w[i][j].sum;max.y=i;max.x=j;}else if(max.sum==w[i][j].sum){if(((max.y-zy)*(max.y-zy)+(max.x-zx)*(max.x-zx))>((i-zy)*(i-zy)+(j-zx)*(j-zx)))max.sum=w[i][j].sum;max.y=i;max.x=j;}}if(a[max.y][max.x]==0){a[max.y][max.x]=-1;zy=max.y;zx=max.x;}}int zh5(int y,int x,int a[N+1][N+1]){int i,j;int b[6][6];long c[13];long d[6][6];long temp;for(i=y;i<=y+4;i++)for(j=x;j<=x+4;j++)b[i+1-y][j+1-x]=a[i][j];c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];c[6]=b[1][1]+b[2][1]+b[3][1]+b[4][1]+b[5][1];c[7]=b[1][2]+b[2][2]+b[3][2]+b[4][2]+b[5][2];c[8]=b[1][3]+b[2][3]+b[3][3]+b[4][3]+b[5][3];c[9]=b[1][4]+b[2][4]+b[3][4]+b[4][4]+b[5][4];c[10]=b[1][5]+b[2][5]+b[3][5]+b[4][5]+b[5][5];c[11]=b[1][1]+b[2][2]+b[3][3]+b[4][4]+b[5][5];c[12]=b[1][5]+b[2][4]+b[3][3]+b[4][2]+b[5][1];for(i=1;i<=12;i++){switch(c[i]){case 5:biaoji=1;return(STOP);case -5:biaoji=-1;return(STOP);case -4:c[i]=100000;break;case 4:c[i]=100000;break;case -3:c[i]=150;break;case 3:c[i]=150;break;case -2:c[i]=120;break;case 2:c[i]=100;break;case -1:c[i]=1;break;case 1:c[i]=1;break;default: c[i]=0;}}for(i=1;i<=12;i++){if(c[i]==150)c[i]+=zzh5(b,i);}for(i=1;i<=5;i++)for(j=1;j<=5;j++)d[i][j]=0;for(i=1;i<=5;i++)for(j=1;j<=5;j++){if(i==j) d[i][j]+=c[11];if((i+j)==6) d[i][j]+=c[12];d[i][j]+=c[i]+c[j+5];}for(i=1;i<=5;i++)for(j=1;j<=5;j++){if(b[i][j]!=0)d[i][j]=-2;}max1.sum=-1;max1.y=0;max1.x=0;for(i=1;i<=5;i++)for(j=1;j<=5;j++){if(max1.sum<d[i][j]){max1.sum=d[i][j];max1.y=i;max1.x=j;w[i+y-1][j+x-1].sum+=max1.sum;}else if(max1.sum==d[i][j]){if(((i+y-1-zy)*(i+y-1-zy)+(j+x-1-zx)*(j+x-1-zx))>((max1.y+y-1-zy)*(max1.y+y-1-zy)+(max1.x+x-1-zx)*(max1.x+x-1-zx))){max1.sum=d[i][j];max1.y=i;max1.x=j;}}}}long zzh5(int b[6][6],int n){int i,j,k,l,m;switch(n){case 1:i=b[1][1];j=b[1][2];k=b[1][3];l=b[1][4];m=b[1][5];break;case 2:i=b[2][1];j=b[2][2];k=b[2][3];l=b[2][4];m=b[2][5];break;case 3:i=b[3][1];j=b[3][2];k=b[3][3];l=b[3][4];m=b[3][5];break;case 4:i=b[4][1];j=b[4][2];k=b[4][3];l=b[4][4];m=b[4][5];break;case 5:i=b[5][1];j=b[5][2];k=b[5][3];l=b[5][4];m=b[5][5];break;case 6:i=b[1][1];j=b[2][1];k=b[3][1];l=b[4][1];m=b[5][1];break;case 7:i=b[1][2];j=b[2][2];k=b[3][2];l=b[4][2];m=b[5][2];break;case 8:i=b[1][3];j=b[2][3];k=b[3][3];l=b[4][3];m=b[5][3];break;case 9:i=b[1][4];j=b[2][4];k=b[3][4];l=b[4][4];m=b[5][4];break;case 10:i=b[1][5];j=b[2][5];k=b[3][5];l=b[4][5];m=b[5][5];break;case 11:i=b[1][1];j=b[2][2];k=b[3][3];l=b[4][4];m=b[5][5];break;case 12:i=b[1][5];j=b[2][4];k=b[3][3];l=b[4][2];m=b[5][1];break;}if((i==0&&j==1&&k==1&&l==1&&m==0))return (900);if((i==0&&j==-1&&k==-1&&l==-1&&m==0))return(1000);if((i==0&&j==0&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==0&&m==0))return(20);if((i==0&&j==0&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==0&&m==0))return(20);if((i==-1&&j==1&&k==1&&l==1&&m==1)||(i==1&&j==-1&&k==1&&l==1&&m==1)||(i==1&&j==1&&k==-1&&l==1&&m==1)||(i==1&&j==1&&k==1&&l==-1&&m==1)||(i==1&&j==1&&k==1&&l==1&&m==-1))return(-60);if((i==1&&j==-1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==1&&k==-1&&l==-1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==1&&m==-1)||(i==-1&&j==-1&&k==-1&&l==-1&&m==1))return(-60);}int wtu(int a[N+1][N+1],int write){int i=1;map(a);zuobiao(zx,zy,1);while(i){int k;k=tu(a,write);if(k==OK) i=0;if(k==STOP) return (STOP);}}int getkey(){int key,lo,hi;key=bioskey(0);lo=key&0x00ff;hi=(key&0xff00)>>8;return((lo==0) ? hi+256:lo);}int key(){int k;k=getkey();switch(k){case 27: return (STOP);case 13:case ' ': return (OK);case 328: return (UP);case 336: return (DOWN);case 331: return (LEFT);case 333: return (RIGHT);default: return (NO);}}void zuobiao(int x,int y,int i){int r;if(i!=0){setcolor(GREEN);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);}else{if(a[zy][zx]==1){setcolor(8);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);}else if(a[zy][zx]==-1){setcolor(WHITE);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);}else{setcolor(B);for(r=1;r<=5;r++)circle(75+25*x,25+25*y,r);setcolor(RED); line(75+25*zx-5,25+25*zy,75+25*x+5,25+25*zy);line(75+25*zx,25+25*zy-5,75+25*zx,25+25*zy+5);}}}int tu(int a[N+1][N+1],int write){int k;re:k=key();if(k==OK){if(a[zy][zx]==0){a[zy][zx]=write;}elsegoto re;}if(k==STOP) return(STOP);if(k==NO) goto re;if(k==UP){int i,j;if(zy==1) j=zy;else j=zy-1;zuobiao(zx,zy,0);zuobiao(zx,j,1);zy=j;goto re;}if(k==DOWN){int i,j;if(zy==N) j=zy;else j=zy+1;zuobiao(zx,zy,0);zuobiao(zx,j,1);zy=j;goto re;}if(k==LEFT){int i,j;if(zx==1) i=zx;else i=zx-1;zuobiao(zx,zy,0);zuobiao(i,zy,1);zx=i;goto re;}if(k==RIGHT){int i,j;if(zx==N) i=zx;else i=zx+1;zuobiao(zx,zy,0);zuobiao(i,zy,1);zx=i;goto re;}}void cbar(int i,int x,int y,int r){if(i!=0){if(i==1)setcolor(8);else if(i==-1)setcolor(WHITE);for(i=1;i<=r;i++){circle(x,y,i);}}}void map(int a[N+1][N+1]){int i,j;cleardevice();setbkcolor(B);setcolor(RED);for(i=0;i<N;i++){line(100,50+25*i,75+N*25,50+25*i);line(100+25*i,50,100+25*i,25+N*25);}for(i=1;i<=N;i++)for(j=1;j<=N;j++)cbar(a[i][j],75+25*j,25+25*i,10);}

⑸ 求五子棋C語言AI演算法(原創思路)

我有個簡單的思路: 先定義一條線上棋子的各種布局,比如初步定義長度為五個子 ◎◎◎◎● ◎◎●◎× ◎●◎×× ◎×◎×◎ 等等。白圈是自己的子,黑圈是對方的子,叉子是未走的格子。 程序里有個布局表,再定義各個布局的分數,比如連五最99分,連三30分等等。 ...

⑹ 求一個c語言編寫的五子棋游戲代碼

#include<ctype.h>

#include<stdio.h>
#include<dos.h> #include<conio.h> #include<ctype.h> #include<bios.h>
#define SHURU 1
#define FANGXIANG 2
#define WUXIAO 0
#define TUICHU 3
/************************ ****************************/

static int ii = 0, jj = 0, wanj ia = 1;
/************************ ****************************/

void hqp(int a[][20], int);
int anjian(char an);
int panan(int a[][20]);
void pingmu(void);
void guangbiaoyd(char an)
void jh(int a[][20]);
/************************ ****************************/

void main()
{
int a[20][20] = { 0 }, tuichu = 0, ying;
char an;
hqp(a, 0);
pingmu();
while (1)
{
ying = panan(a);
if (ying != 0)
hqp(a, ying);
an = getch();
switch (anjian(an))
{
case TUICHU:
clrscr();
tuichu = 1;
break;
case FANGXIANG:
guangbiaoy d(an);
break;
case SHURU:
switch (ying)
{
case 1:
hqp(a, 1);
tuichu = 1;
break;
case 2:
hqp(a, 2);
tuichu = 1;
break;
case 0:
jh(a);
break;
}
break;
case WUXIAO:
break;
}
hqp(a, 0);
pingmu();
if (tuichu == 1)
break;
}
} /************************ ****************************/

void hqp(int a[][20], int)
{
int i, j;
clrscr();
if (y != 0)
{
textcolor(RED);
printf("WAN JIA %d SHENG LI! ! ! ! ! \n", y);
}
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
switch (a[i][j])
{
case 1:
textcolor(YELLOW) putch('X');
break;
case 2:
textcolor(BLUE);
putch('0');
break;
case 0:
textcolor(GREEN);
if (j == 0)
{
if (i == 0)
{
putch(0xda);
break;
}
if (i == 19)
{
putch(0xc0);
break;
}
putch(0xc3);
break;
}
if (j == 19)
{
if (i == 0)
{
putch(0xbf);
break;
}
if (i == 19)
{
putch(0xd9);
break;
}
putch(0xb4);
break;
}
if (i == 0 && j != 0 && j != 19)
{
putch(0xc2);
break;
}
if (i == 19 && j != 0 && j != 19)
{
putch(0xc1);
break;
}
putch(0xc5);
break;
}
}
printf("\n");
}
} /************************ **************************** *************/

int anjian(char an)
{
if (an == 32 || an == 13)
return (SHURU);
else if (an == 'a' || an == 'w' || an == 's' || an == 'd' || an == 'j'
|| an == 'i' || an == 'k' || an == 'l')
return (FANGXIANG);
else if (an == 27)
return (TUICHU);
else
return (WUXIAO);
} /************************ **************************** **************/

int panan(int a[][20])
{
int i, j;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 15; j++)
{
if (a[i][j] == 1 && a[i][j + 1] = = 1 && a[i][j + 2] == 1
&& a[i][j + 3] = = 1 && a[i][j + 4] == 1)
return (1);
else if (a[i][j] == 2 && a[i][j + 1] = = 2 && a[i][j + 2] == 2
&& a[i][j + 3] = = 2 && a[i][j + 4] == 2)
return (2);
}
}
for (i = 0; i < 15; i++)
{
for (j = 0; j < 20; j++)
{
if (a[i][j] == 1 && a[i + 1][j] = = 1 && a[i + 2][j] == 1
&& a[i + 3][j] = = 1 && a[i + 4][j] == 1)
return (1);
else if (a[i][j] == 2 && a[i + 1][j] = = 2 && a[i + 2][j] == 2
&& a[i + 3][j] = = 2 && a[i + 4][j] == 2)
return (2);
}
}
for (i = 0; i < 15; i++)
{
for (j = 0; j < 15; j++)
{
if (a[i][j] == 1 && a[i + 1][j + 1] == 1 && a[i + 2][j + 2] == 1
&& a[i + 3][j + 3] == 1 && a[i + 4][j + 4] == 1)
return (1);
else if (a[i][j] == 2 && a[i + 1][j + 1] == 2
&& a[i + 2][j + 2] == 2 && a[i + 3][j + 3] == 2
&& a[i + 4][j + 4] == 2)
return (2);
}
}
for (i = 4; i < 20; i++)
{
for (j = 4; j < 20; j++)
{
if (a[i][j] == 1 && a[i - 1][j - 1] == 1 && a[i - 2][j - 2] == 1
&& a[i - 3][j - 3] == 1 && a[i - 4][j - 4] == 1)
return (1);
else if (a[i][j] == 2 && a[i - 1][j - 1] == 2
&& a[i - 2][j - 2] == 2 && a[i - 3][j - 3] == 2
&& a[i - 4][j - 4] == 2)
return (2);
}
}
return (0);
}

/************************ **************************** **********************/

void pingmu(void)
{
int i, j;
char *Msg[] = {
"Wan Jia1 an jian:", " shang:

" xia:

" zuo:

" you:

" fang zi: space", "", "Wan Jia2 an jian:", " shang:

" xia:

" zuo:

" you:

" fang zi: ENTER", "tui chu:", " ESC\n", NULL,
};
i = 0;
textcolor(RED);
while (Msg[i] != NULL)
{
gotoxy(25, 3 + i);
cputs(Msg[i]);
i++;
}
gotoxy(25, 20);
printf("\nqing wan jia %d chu ru:", wanjia);
gotoxy(jj + 1, ii + 1);
} /************************ **************************** ******************/

void guangbiaoyd(char an)
{
if (wanjia == 1)
{
switch (an)
{
case 'a':
jj--;
break;
case 'd':
jj++;
break;
case 'w':
ii--;
break;
case 's':
ii++;
break;
}
}
else
{
switch (an)
{
case 'j':
jj--;
break;
case 'l':
jj++;
break;
case 'i':
ii--;
break;
case 'k':
ii++;
break;
}
}
if (ii < 0)
ii++;
if (ii > 19)
ii--;
if (jj < 0)
jj++;
if (jj > 19)
jj--;
gotoxy(ii + 1, jj + 1);
} /************************ **************************** *******************/

void jh(int a[][20])
{
int k = 0;
if (wanjia == 1 && a[ii][jj] == 0 && k == 0)
{
a[ii][jj] = 1;
wanjia = 2;
k = 1;
}
else
{
if (a[ii][jj] ==0&& k == 0)
{
a[ii][jj] = 2;
wanjia = 1;
}
}
}
祝你愉快!

⑺ 求一原創的c語言五子棋代碼(會查重),要求人機對戰,輸入坐標對戰即可,不需用滑鼠點擊,最好有禁手。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//棋盤初始化函數
//Chessboard棋盤數組,ln=棋盤大小,成功返回Chessboard,不成功NULL
void init_Chessboard(char Chessboard[][7], int ln)
{
if ((Chessboard != NULL) && (ln>0)){
int i = 0, j = 0;
for (i = 0; i<ln; ++i){
for (j = 0; j<ln; ++j){
Chessboard[i][j] = '\t';
}
}
// return Chessboard;
}
// return NULL;
}
//未完待續

⑻ c語言五子棋人機對戰的代碼

首先設2維數組模擬棋盤,棋盤每個位置設權值,代表當前適合下的一個價值
然後根據下面的表,給值,每下一步判斷一次
棋型名稱 棋型模式 估值
活四 ?AAAA? 300000
死四A AAAA? 2500
死四B AAA?A 3000
死四C AA?AA 2600
活三 ??AAA?? 3000
死三A AAA?? 500
死三B ?A?AA? 800
死三C A??AA 600
死三D A?A?A 550
活二 ???AA??? 650
死二A AA??? 150
死二B ??A?A?? 250
死二C ?A??A? 200

代碼挺長的,沒什麼看的意義,自己琢磨一下這個就寫了
不懂得繼續問