Turbo C 测试成功的五子棋源代码

合集下载

C语言实现五子棋小游戏源代码

C语言实现五子棋小游戏源代码
}
break;
case ESC:
break;
case SPACE:
if(chessx>=1&&chessx<=19&&chessy>=1&&chessy<=19)
{
if(chess[chessx][chessy]==0)
}
if(flag==2)
{
cleardevice();
setfont(36, 0, "宋体", 900, 900, 0, false, false, false);
outtextxy(80,200,"RED win!");
getch();
closegraph();
exit(0);
}
}
if(flag==1)
flag=2;
else
flag=1;
break;
}
void draw_pixel(int x,int y,int color)
{
x=(x+2)*20;
y=(y+2)*20;
{
putpixel(x+8,y,color);
putpixel(x,y-8,color);
putpixel(x+8,y+8,color);
{
chess[chessx][chessy]=flag;
if(result(chessx,chessy)==1)
{
if(flag==1)
{
cleardevice();
n1=0;
n2=0;

C语言五子棋游戏源代码

C语言五子棋游戏源代码

C语言五子棋游戏源代码标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]#define N 10void welcome();void initqipan();void showqi(int i);void save(int p);void panduan(int p);void heqi();void over();int zouqihang();int zouqilie();/******************结构体*****************/ struct zuobiao{int x[N*N];int y[N*N];}weizhi[N*N];/******************主函数*****************/ void main(){int p=0;welcome();initqipan();for(p=1;p<=N*N;p++){weizhi[p].x[p]=zouqihang();weizhi[p].y[p]=zouqilie();save(p);showqi(p);panduan(p);}if(p==N*N)heqi();over();}/******************建立棋盘*****************/ void initqipan(){int i,j;for(i=0;i<N;i++){printf("%d",i);printf(" ");}printf("\n");for(i=1;i<N;i++){for(j=0;j<N;j++){if(j==0)printf("%d",i);elseprintf("·");}printf("\n");}}/******************显示棋子*****************/ void showqi(int p){int i,j,k,m;int a[N*N],b[N*N];FILE *fp;fp=fopen("wuzi_list","rb");for(i=1;i<=N*N;i++){fread(&weizhi[i],sizeof(struct zuobiao),1,fp);a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}for(m=1;m<p;m++){while(weizhi[p].x[p]==a[m]&&weizhi[p].y[p]==b[m]) {printf("error!\n");weizhi[p].x[p]=zouqihang();weizhi[p].y[p]=zouqilie();m=1;}}for(i=0;i<N;i++){printf("%d",i);printf(" ");}printf("\n");for(i=1;i<N;i++){for(j=1;j<N;j++){if(j==1)printf("%d",i);for(k=1;k<=p;k++){if(i==weizhi[k].x[k]&&j==weizhi[k].y[k]) {if(k%2==1){printf("○");break;} else if(k%2==0){printf("●");break;} }}if(k>p)printf("·");else continue;}printf("\n");}}/******************走棋行*****************/ int zouqihang(){int x;printf("请输入要走棋子所在行数!\n");printf("x=");scanf("%d",&x);while(x>N-1||x<1){printf("error!\n");printf("请输入要走棋子所在行数!\n"); printf("x=");scanf("%d",&x);}return x;}/******************走棋列*****************/ int zouqilie(){int y;printf("请输入要走棋子所在列数!\n");printf("y=");scanf("%d",&y);while(y>N-1||y<1){printf("error!\n");printf("请输入要走棋子所在列数!\n"); printf("y=");scanf("%d",&y);}return y;}/******************文件保存*****************/ void save(int i){FILE *fp;fp=fopen("wuzi_list","wb");fwrite(&weizhi[i],sizeof(struct zuobiao),1,fp);}/****************判断输赢*******************/void panduan(int p){int i,j,k[8]={1,1,1,1,1,1,1,1,};int a[N*N],b[N*N];FILE *fp;fp=fopen("wuzi_list","rb");for(i=1;i<=p;i++){fread(&weizhi[i],sizeof(struct zuobiao),1,fp); a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}/*****************判断行******************/for(i=1;i<=p;i++){if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j])&&(b[i]==b[j]-1)){k[0]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-2)) {k[0]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-3)) {k[0]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-4)) {k[0]++;continue;}else if(k[0]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[0]==5)break;k[0]=1;}else if(k[0]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j])&&(b[i]==b[j]-1)) {k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-2)) {k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-3)) {k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-4)) {k[1]++;continue;}else if(k[1]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[1]==5)break;k[1]=1;}}/**********************判断列************************/ for(i=1;i<=p;i++){if(k[0]==5||k[1]==5)break;else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j])){k[2]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j])) {k[2]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j])) {k[2]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j])) {k[2]++;continue;}else if(k[2]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[2]==5)break;k[2]=1;}else if(k[2]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j])){k[3]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j])) {k[3]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j])) {k[3]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j])) {k[3]++;continue;}else if(k[3]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[3]==5)break;k[3]=1;}}/****************判断对角(左上-右下)******************/ for(i=1;i<=p;i++){if(k[0]==5||k[1]==5||k[2]==5||k[3]==5)break;else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j]-1)){k[4]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j]-2)) {k[4]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j]-3)) {k[4]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j]-4)) {k[4]++;continue;}else if(k[4]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[4]==5)break;k[4]=1;}else if(k[2]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j]-1)){k[5]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j]-2)) {k[5]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j]-3)) {k[5]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j]-4)) {k[5]++;continue;}else if(k[5]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[5]==5)break;k[5]=1;}}/**********判断对角(左下-右上)************/for(i=1;i<=p;i++){if(k[0]==5||k[1]==5||k[2]==5||k[3]==5||k[4]==5||k[5]==5) break;else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]+1)&&(b[i]==b[j]-1)){k[6]++;continue;}else if((a[i]==a[j]+2)&&(b[i]==b[j]-2)) {k[6]++;continue;}else if((a[i]==a[j]+3)&&(b[i]==b[j]-3)) {k[6]++;continue;}else if((a[i]==a[j]+4)&&(b[i]==b[j]-4))k[6]++;continue;}else if(k[6]==5){printf("Player 1 wins!!!\n"); }elsecontinue;}if(k[6]==5)break;k[6]=1;}else if(k[6]==5)else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]+1)&&(b[i]==b[j]-1)){k[7]++;continue;}else if((a[i]==a[j]+2)&&(b[i]==b[j]-2)) {k[7]++;continue;}else if((a[i]==a[j]+3)&&(b[i]==b[j]-3))k[7]++;continue;}else if((a[i]==a[j]+4)&&(b[i]==b[j]-4)) {k[7]++;continue;}else if(k[7]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[7]==5)break;k[7]=1;}}}/****************和棋*******************/void heqi(){printf("************************************\n"); printf(" Tie!!!\n");printf("************************************\n"); }/****************游戏结束*******************/void over(){printf("************************************\n"); printf(" game over!!!\n");printf("************************************\n"); }/****************游戏开始*******************/void welcome(){printf("************************************\n"); printf(" Welcome!!!\n");printf("************************************\n"); }。

五子棋C语言程序代码

五子棋C语言程序代码

五子棋C语言程序代码#include <graphics.h>#include <stdio.h>#include <conio.h>void drawPanel();int isWin(int,int);int color = 1; //1-红色2-白色int chessman[15][15];//主函数void main(){initgraph(620,620); //产生窗体//画棋盘drawPanel();//画棋子//1.定义鼠标事件MOUSEMSG m;HWND wnd = GetHWnd(); //定义当前窗体的句柄while(true){m = GetMouseMsg(); //获取鼠标事件对象if(m.uMsg == WM_LBUTTONDOWN){//获取点击的坐标int x = m.x;int y = m.y;//换算成二维数组中的下标int i = x/40;int j = y/40;//显示点击的坐标/*char msg[100];sprintf(msg,"%d,%d",i,j);MessageBoxA(wnd,msg,"消息",MB_OK);*/if(color==1){setfillstyle(RGB(255,0,0));fillcircle(40*i+20,40*j+20,20);chessman[i][j] = 1;}else if(color==2){setfillstyle(RGB(255,255,255));fillcircle(40*i+20,40*j+20,20);chessman[i][j] = 2;}//判断输赢result => 1int result = isWin(i,j);if(result ==1){if(color==1){MessageBoxA(wnd,_T("恭喜,红方获胜!"),"消息",MB_OK);}else if(color==2){MessageBoxA(wnd,_T("恭喜,白方获胜!"),"消息",MB_OK);}break;}//切换对方下子color = color == 1 ? 2 : 1 ;}}getch();closegraph(); //关闭窗体}int isWin(int x,int y){int count=0;//计数器int i;//横向for(i=0;i<15;i++){if(chessman[i][y]==color){count++;if(count==5)return 1;}else{count=0;}}//竖向for(i=0;i<15;i++){if(chessman[x][i]==color){count++;if(count==5)return 1;}else{count=0;}}return 0;}void drawPanel(){int i;//画横线for(i=0;i<15;i++){line(20,20+40*i,20+14*40,20+40*i);}//画竖线for(i=0;i<15;i++){line(20+40*i,20,20+40*i,20+14*40);}}。

c语言 五子棋 代码

c语言 五子棋 代码
setcolor(14);
settextstyle(2,0,8);
getch();
cleardevice();
setviewport(100,100,540,380,1);
/*定义一个图形窗口*/
setfillstyle(1,2);
break ;
}
case DOWN :
if((step_y+1)>18)
break ;
else
{
for(i=step_x,j=step_y+1;j<=18;j++)
break ;
else if(ch=='N'||ch=='n')
{
window(1,1,80,25);
textbackground(BLACK);
textcolor(LIGHTGRAY);
clrscr();
for(i=step_x,j=step_y-1;j>=1;j--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break ;
judgewho(step_x,step_y);
break ;
}
case UP :
if((step_y-1)<0)
break ;
else
{
void attentoin();
void attention()
{
char ch ;
window(1,1,80,25);
textbackground(LIGHTBLUE);

c做的五子棋源码

c做的五子棋源码

using System;using ;using System.Text;namespace wuziqi{class Program{public static void Main(string[] args){int maxsize = 19;//棋盘行列最大值int x, y;//用于定位下棋位置string x1, y1;//临时变量获取棋手输入的坐标值(此时坐标值属于字符串类型)int col_up = 0, col_down = 0;//用于统计输入坐标值的上下相同棋子的个数int row_left = 0, row_right = 0;//用于统计输入坐标值的左右相同棋子的个数int dia_left_up = 0, dia_left_down = 0, dia_right_up = 0, dia_right_down = 0;//对角线的英文拼写(diagonal line)用于统计对角线上相同的棋子数目int m;//临时变量,用于控制判断相同棋子比较的次数int judgement;//用于获取判断是否要结束棋局或继续棋局的变量string[,] qipan = new string[24, 24];//定义二维棋盘//初始化棋盘label0:{Console.Clear();//五子棋规则Console.WriteLine("===============================================");Console.WriteLine("五子棋规则说明如下:");Console.WriteLine("1、下棋坐标是从1-15");Console.WriteLine("2、下棋坐标值为整型数据类型");Console.WriteLine("3、下棋双方先构成五子连线者胜");Console.WriteLine("===============================================");for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){qipan[i, j] = "╋";}}}//输出棋盘for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){Console.Write(qipan[i, j]);}Console.Write("\n");}//走棋label2:{//甲方走棋Console.WriteLine("===============================================");Console.WriteLine("请甲方走棋(棋盘为15x15)");Console.Write("x=");x1 = Console.ReadLine();//判断输入的坐标值是否为字母foreach(char ch in x1){if ((ch >'a'&&ch <'z')||(ch >'A'&&ch <'Z')){Console.WriteLine("你输入的坐标值非法!请正确输入你的坐标值");goto label2;}}//判断输入的棋子坐标是否为空if (x1 == "" || x1 == null){Console.WriteLine("===============================================");Console.WriteLine("你输入的棋盘坐标为空!");goto label2;}Console.Write("y=");y1 = Console.ReadLine();//判断输入的坐标值是否为字母foreach (char ch in y1){if ((ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z')){Console.WriteLine("你输入的坐标值非法!请正确输入你的坐标值");goto label2;}}//判断输入的棋子坐标是否为空if (y1 == "" || y1 == null){Console.WriteLine("===============================================");Console.WriteLine("你输入的棋盘坐标为空!");goto label2;}x = int.Parse(x1);y = int.Parse(y1);if (x >= 16 || y >= 16){Console.WriteLine("===============================================");Console.WriteLine("你输入的坐标超出了范围!");goto label2;}if (qipan[x + 4, y + 4] == "╋"){qipan[x + 4, y + 4] = "●";//清屏Console.Clear();//输出棋走后棋盘//五子棋规则Console.WriteLine("===============================================");Console.WriteLine("五子棋规则说明如下:");Console.WriteLine("1、下棋坐标是从1-15");Console.WriteLine("2、下棋坐标值为整型数据类型");Console.WriteLine("3、下棋双方先构成五子连线者胜");Console.WriteLine("===============================================");for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){Console.Write(qipan[i, j]);}Console.Write("\n");}}else{Console.WriteLine("===============================================");Console.WriteLine("此处已经有棋子了");goto label2;}// goto label;//判断是否可以连成五子//判断上下col_down = 0;col_up = 0;row_left = 0;row_right = 0;dia_left_down = 0;dia_left_up = 0;dia_right_down = 0;dia_right_up = 0;for (m = 1; m <= 4; m++){//判断上下if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){col_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){col_down++;}//判断左右if (qipan[x + 4, y + 4] == qipan[x + 4, y - m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){row_left++;}if (qipan[x + 4, y + 4] == qipan[x + 4, y + m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){row_right++;}//判断左对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y - m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_left_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_left_down++;}//判断右对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_right_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y - m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_right_down++;}}//判断甲方是否有构成五子if (dia_left_down == 4 || dia_left_up == 4 || col_up == 4 || col_down == 4 || row_right == 4 || row_left == 4 || dia_right_up == 4 || dia_right_down == 4){Console.WriteLine("甲方先构成五子连线,恭喜甲获胜!");Console.WriteLine("请选择:");Console.WriteLine("1、继续下一局");Console.WriteLine("2、结束棋局");judgement = int.Parse(Console.ReadLine());switch (judgement){case 1: goto label0;default: goto label3;}}if(((col_down + col_up) == 4) || ((row_left + row_right == 4)) || (dia_left_down + dia_left_up == 4) || (dia_right_down + dia_right_up == 4)){Console.WriteLine("甲方先构成五子连线,恭喜甲获胜!");Console.WriteLine("请选择:");Console.WriteLine("1、继续下一局");Console.WriteLine("2、结束棋局");judgement = int.Parse(Console.ReadLine());switch (judgement){case 1: goto label0;default: goto label3;}}//乙方走棋label1:{Console.WriteLine("===============================================");Console.WriteLine("请已方走棋(棋盘为15x15)");//判断坐标值是否为空Console.Write("x=");x1 = Console.ReadLine();//判断输入的坐标值是否为字母foreach (char ch in x1){if ((ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z')){Console.WriteLine("你输入的坐标值非法!请正确输入你的坐标值");goto label1;}}if (x1 == "" || x1 == null){Console.WriteLine("你输入的棋盘坐标值为空!");goto label1;}x = int.Parse(x1);Console.Write("y=");y1 = Console.ReadLine();//判断输入的坐标值是否为字母foreach (char ch in y1){if ((ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z')){Console.WriteLine("你输入的坐标值非法!请正确输入你的坐标值");goto label1;}}//判断是否为空if (y1 == "" || y1 == null){Console.WriteLine("你输入的棋盘坐标值为空!");goto label1;}y = int.Parse(y1);//对输入的棋子进行判断是否合法if (x >= 16 || y >= 16){Console.WriteLine("你输入的坐标超出了范围!");goto label1;}if (qipan[x + 4, y + 4] == "╋"){qipan[x + 4, y + 4] = "○";//输出棋走后棋盘//清屏Console.Clear();//五子棋规则Console.WriteLine("===============================================");Console.WriteLine("五子棋规则说明如下:");Console.WriteLine("1、下棋坐标是从1-15");Console.WriteLine("2、下棋坐标值为整型数据类型");Console.WriteLine("3、下棋双方先构成五子连线者胜");Console.WriteLine("===============================================");for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){Console.Write(qipan[i, j]);}Console.Write("\n");}}else{Console.WriteLine("此处已经有棋子了");goto label1;}//判断是否可以连成五子col_down = 0;col_up = 0;row_left = 0;row_right = 0;dia_left_down = 0;dia_left_up = 0;dia_right_down = 0;dia_right_up = 0;for (m = 1; m <= 4; m++){//判断上下if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + 4] && qipan[x - m + 4, y + 4] != "●" && qipan[x - m + 4, y + 4] != "╋"){col_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + 4] && qipan[x + m + 4, y + 4] != "●" && qipan[x + m + 4, y + 4] != "╋"){col_down++;}//判断左右if (qipan[x + 4, y + 4] == qipan[x + 4, y - m + 4] && qipan[x + 4, y - m + 4] != "●" && qipan[x + 4, y - m + 4] != "╋"){row_left++;}if (qipan[x + 4, y + 4] == qipan[x + 4, y + m + 4] && qipan[x + 4, y + m + 4] != "●" && qipan[x + 4, y + m + 4] != "╋"){row_right++;}//判断左对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y - m + 4] && qipan[x - m + 4, y - m + 4] != "●" && qipan[x - m + 4, y - m + 4] != "╋"){dia_left_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + m + 4] && qipan[x + m + 4, y + m + 4] != "●" && qipan[x + m + 4, y + m + 4] != "╋"){dia_left_down++;}//判断右对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + m + 4] && qipan[x - m + 4, y + m + 4] != "●" && qipan[x - m + 4, y + m + 4] != "╋"){dia_right_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y - m + 4] && qipan[x + m + 4, y - m + 4] != "●" && qipan[x + m + 4, y - m + 4] != "╋"){dia_right_down++;}}//判断甲方是否有构成五子if (dia_left_down == 4 || dia_left_up == 4 || col_up == 4 || col_down == 4 || row_right == 4 || row_left == 4 || dia_right_up == 4 || dia_right_down == 4){Console.WriteLine("===============================================");Console.WriteLine("乙方先构成五子连线,恭喜乙获胜!");Console.WriteLine("请选择:");Console.WriteLine("1、继续下一局");Console.WriteLine("2、结束棋局");judgement = int.Parse(Console.ReadLine());switch (judgement){case 1: goto label0;default: goto label3;}}if (((col_down + col_up) == 4) || ((row_left + row_right == 4)) ||(dia_left_down + dia_left_up == 4) || (dia_right_down + dia_right_up == 4)){Console.WriteLine("===============================================");Console.WriteLine("乙方先构成五子连线,恭喜乙获胜!");Console.WriteLine("请选择:");Console.WriteLine("1、继续下一局");Console.WriteLine("2、结束棋局");judgement = int.Parse(Console.ReadLine());switch (judgement){case 1: goto label0;default: goto label3;}}goto label2;}}//用于结束棋局label3:{}}}}。

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

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

C语言教程:简易五子棋程序收集于网络/* 纯用字符和数组编的五子棋,棋盘也是用字符画的。

编了1上午了,主要是算法跟按键比较烦,发现有bug-- 按键速度过快会产生延时显示,可能是算法不好。

操作:玩家1:a,s,w,d(方向)空格(落子)玩家2:上、下、左、右回车(落子)ESC:退出编译测试环境:TC3.0*/#include <stdio.h>#include <stdlib.h>#include <bios.h>#include <conio.h>#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 19char 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<size-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<size-1;j++)a[i][j]=CR;}return ;}void inits() //界面初始化{for(int i=0;i<size;i++){gotoxy(x,y+i);for(int j=0;j<size;j++)putch(a[i][j]);}gotoxy(x,y);i=0;j=0;return ;}void pressco(int m){switch(m){case 7777: //Aif(i>0) {i--;x--;gotoxy(x,y);} break;case 8051: //Sif(j<size-1){j++;y++;gotoxy(x,y);} break;case 4471: //wif(j>0) {j--;y--;gotoxy(x,y);} break;case 8292: //Dif(i<size-1){i++;x++;gotoxy(x,y);} break;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<size-1){j++;y++;gotoxy(x,y);} break;case 18432: //上if(j>0) {j--;y--;gotoxy(x,y);} break;case 19712: //右if(i<size-1){i++;x++;gotoxy(x,y);} break;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;本文章来自 21视频教程网C语言教程:简易五子棋程序_C语言程序设计教程原文链接:/html/96307.shtml。

五子棋C语言代码

#include<stdio.h>int hen(char a[10][10]);int shu(char a[10][10]);int xie1(char a[10][10]);int xie2(char a[10][10]);int main(){char a[10][10];int x=0,y=0;for(y=0;y<10;y++)a[x][y]=y+'0';for(x=0,y=0;x<10;x++)a[x][y]=x+'0';for(x=1;x<10;x++)for(y=1;y<10;y++)a[x][y]='*';for(x=0;x<10;x++){for(y=0;y<10;y++)printf("%3c",a[x][y]);printf("\n");}printf("------------------------------\n");while(1){while(1){printf("请@号玩家下子\n");scanf("%d.%d",&x,&y);if(a[x][y]=='@'||a[x][y]=='O')printf("棋盘上已有棋子\n"); else{a[x][y]='@';break;}}for(x=0;x<10;x++){for(y=0;y<10;y++)printf("%3c",a[x][y]);printf("\n");}printf("------------------------------\n");if(hen(a)==1||shu(a)==1||xie1(a)==1||xie2(a)==1){printf("@玩家赢\n" );break;}while(1){printf("请O号玩家下子\n");scanf("%d.%d",&x,&y);if(a[x][y]=='@'||a[x][y]=='O')printf("棋盘上已有棋子\n"); else{a[x][y]='O';break;}}for(x=0;x<10;x++){for(y=0;y<10;y++)printf("%3c",a[x][y]);printf("\n");}printf("------------------------------\n");if(hen(a)==2||shu(a)==2||xie1(a)==2||xie2(a)==2){printf("O玩家赢了\n" );break;}}return 0;}int hen(char a[10][10])//横函数{int x,y,k=0,l=0;for(x=1;x<10;x++)for(y=1;y<10;y++){if(a[x][y]=='@')k=k+1;if(y==9)k=0;if(k==5)return 1;if(a[x][y]=='O')l=l+1;if(y==9)l=0;if(l==5)return 2;}}int shu(char a[10][10])//竖函数{int x,y,k=0,l=0;for(y=1;y<10;y++)for(x=1;x<10;x++){if(a[x][y]=='@')k=k+1;if(x==9)k=0;if(k==5)return 1;if(a[x][y]=='O')l=l+1;if(x==9)l=0;if(l==5)return 2;}}int xie1(char a[10][10])//斜函数{int x,y,m,k=0,l=0;for(m=1;m<10-4;m++)for(x=1,y=m;y<10;x++,y++){if(a[x][y]=='@')k=k+1;if(x==9)k=0;if(k==5)return 1;if(a[x][y]=='O')l=l+1;if(x==9)l=0;if(l==5)return 2;}}int xie2(char a[10][10])//斜函数{int x,y,n,k=0,l=0;for(n=1;n<10-4;n++)for(y=1,x=n;x<10;x++,y++){if(a[x][y]=='@')k=k+1;if(x==9)k=0;if(k==5)return 1;if(a[x][y]=='O')l=l+1;if(x==9)l=0;if(l==5)return 2;}}。

五子棋C语言代码

#include "graphics.h" /*图形系统头文件*/#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,score2;/*具体分数以及按键与存放棋子的变量*/ 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,"c:\\tc"); /*初始化图形系统*/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);/*取消圆周围的一圈东西*/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;elseif(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;}elsecontinue;/*如果按键无效*/}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);}elseif(key==RIGHT&&x<400&&y>80)/*右方向键*/ {MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y>120)/*上方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(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);/*白色*/elsesetfillstyle(SOLID_FILL,8);/*灰色*/}void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/{if(y<100)/*如果是从起点出发就恢复蓝色*/setfillstyle(SOLID_FILL,BLUE);else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/ switch(a[(x-120)/40][(y-120)/40]){case 1:setfillstyle(SOLID_FILL,15);break; /*白色*/case 2:setfillstyle(SOLID_FILL,8);break; /*黑色*/default:setfillstyle(SOLID_FILL,BLUE); /*蓝色*/}}int QpChange(int x,int y,int t)/*判断棋盘的变化*/{int i,j,k,kk,ii,jj,yes;yes=0;i=(x-120)/40; /*计算数组元素的行下标*/j=(y-120)/40; /*计算数组元素的列下标*/SetPlayColor(t);/*设置棋子变化的颜色*//*开始往8个方向判断变化*/if(j<6)/*往右边*/{for(k=j+1;k<8;k++)if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格结束*/ break;if(a[i][k]!=0&&k<8){for(kk=j+1;kk<k&&k<8;kk++)/*判断右边*/{a[i][kk]=a[i][j]; /*改变棋子颜色*/fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j+1) /*条件成立则有棋子改变过颜色*/yes=1;}}if(j>1)/*判断左边*/{for(k=j-1;k>=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k>=0){for(kk=j-1;kk>k&&k>=0;kk--){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j-1)yes=1;}}if(i<6)/*判断下边*/{for(k=i+1;k<8;k++)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k<8){for(kk=i+1;kk<k&&k<8;kk++){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i+1)yes=1;}}if(i>1)/*判断上边*/{for(k=i-1;k>=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k>=0){for(kk=i-1;kk>k&&k>=0;kk--){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15); }if(kk!=i-1)yes=1;}}if(i>1&&j<6)/*右上*/{for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++) if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&k>=0&&kk<8){for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i-1)yes=1;}}if(i<6&&j>1)/*左下*/{for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--) if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k<8&&kk>=0){for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i+1)yes=1;}}if(i>1&&j>1)/*左上*/{for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k>=0&&kk>=0){for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(i<6&&j<6)/* 右下*/{for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&kk<8&&k<8){for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i+1)yes=1;}}return yes;/*返回是否改变过棋子颜色的标记*/ }void DoScore()/*处理分数*/{int i,j;score1=score2=0;/*重新开始计分数*/for(i=0;i<8;i++)for(j=0;j<8;j++)if(a[i][j]==1)/*分别统计两个人的分数*/score1++;elseif(a[i][j]==2)score2++;}void PrintScore(int playnum)/*输出成绩*/{if(playnum==1)/*清除以前的成绩*/{setfillstyle(SOLID_FILL,BLUE);bar(550,100,640,400);}setcolor(RED);settextstyle(0,0,4);/*设置文本输出样式*/if(playnum==1)/*判断输出哪个棋手的分,在不同的位置输出*/ {sprintf(playone,"%d",score1);outtextxy(550,200,playone);}else{sprintf(playtwo,"%d",score2);outtextxy(550,300,playtwo);}setcolor(0);}void playWin()/*输出最后的胜利者结果*/{settextstyle(0,0,4);setcolor(12);if(score2>score1)/*开始判断最后的结果*/outtextxy(100,50,"black win!");elseif(score2<score1)outtextxy(100,50,"white win!");elseouttextxy(60,50,"you all win!");}。

C语言五子棋游戏源代码

#include<stdio.h>#define N 10void welcome();void initqipan();void showqi(int i);void save(int p);void panduan(int p);void heqi();void over();int zouqihang();int zouqilie();/******************结构体*****************/ struct zuobiao{int x[N*N];int y[N*N];}weizhi[N*N];/******************主函数*****************/ void main(){int p=0;welcome();initqipan();for(p=1;p<=N*N;p++){weizhi[p].x[p]=zouqihang();weizhi[p].y[p]=zouqilie();save(p);showqi(p);panduan(p);}if(p==N*N)heqi();over();}/******************建立棋盘*****************/ void initqipan(){int i,j;for(i=0;i<N;i++){printf("%d",i);printf(" ");}printf("\n");for(i=1;i<N;i++){for(j=0;j<N;j++){if(j==0)printf("%d",i);elseprintf("·");}printf("\n");}}/******************显示棋子*****************/void showqi(int p){int i,j,k,m;int a[N*N],b[N*N];FILE *fp;fp=fopen("wuzi_list","rb");for(i=1;i<=N*N;i++){fread(&weizhi[i],sizeof(struct zuobiao),1,fp);a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}for(m=1;m<p;m++){while(weizhi[p].x[p]==a[m]&&weizhi[p].y[p]==b[m]) {printf("error!\n");weizhi[p].x[p]=zouqihang();weizhi[p].y[p]=zouqilie();m=1;}}for(i=0;i<N;i++){printf("%d",i);printf(" ");}printf("\n");for(i=1;i<N;i++){for(j=1;j<N;j++){if(j==1)printf("%d",i);for(k=1;k<=p;k++){if(i==weizhi[k].x[k]&&j==weizhi[k].y[k]) {if(k%2==1){printf("○");break;}else if(k%2==0){printf("●");break;}}}if(k>p)printf("·");else continue;}printf("\n");}}/******************走棋行*****************/int zouqihang(){int x;printf("请输入要走棋子所在行数!\n");printf("x=");scanf("%d",&x);while(x>N-1||x<1){printf("error!\n");printf("请输入要走棋子所在行数!\n");printf("x=");scanf("%d",&x);}return x;}/******************走棋列*****************/int zouqilie(){int y;printf("请输入要走棋子所在列数!\n");printf("y=");scanf("%d",&y);while(y>N-1||y<1){printf("error!\n");printf("请输入要走棋子所在列数!\n");printf("y=");scanf("%d",&y);}return y;}/******************文件保存*****************/void save(int i){FILE *fp;fp=fopen("wuzi_list","wb");fwrite(&weizhi[i],sizeof(struct zuobiao),1,fp);}/****************判断输赢*******************/void panduan(int p){int i,j,k[8]={1,1,1,1,1,1,1,1,};int a[N*N],b[N*N];FILE *fp;fp=fopen("wuzi_list","rb");for(i=1;i<=p;i++){fread(&weizhi[i],sizeof(struct zuobiao),1,fp); a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}/*****************判断行******************/for(i=1;i<=p;i++){if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j])&&(b[i]==b[j]-1)){k[0]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-2)) {k[0]++;continue;else if((a[i]==a[j])&&(b[i]==b[j]-3)) {k[0]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-4)) {k[0]++;continue;}else if(k[0]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[0]==5)break;k[0]=1;}else if(k[0]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j])&&(b[i]==b[j]-1)){k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-2)) {k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-3)) {k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-4))k[1]++;continue;}else if(k[1]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[1]==5)break;k[1]=1;}}/**********************判断列************************/ for(i=1;i<=p;i++){if(k[0]==5||k[1]==5)break;else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j])){k[2]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j])) {k[2]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j])) {k[2]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j])) {k[2]++;continue;else if(k[2]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[2]==5)break;k[2]=1;}else if(k[2]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j])){k[3]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j])) {k[3]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j])) {k[3]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j])) {k[3]++;continue;}else if(k[3]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[3]==5)break;k[3]=1;}}/****************判断对角(左上-右下)******************/ for(i=1;i<=p;i++){if(k[0]==5||k[1]==5||k[2]==5||k[3]==5)break;else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j]-1)){k[4]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j]-2)) {k[4]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j]-3)) {k[4]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j]-4)) {k[4]++;continue;}else if(k[4]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[4]==5)break;}else if(k[2]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j]-1)){k[5]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j]-2)){k[5]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j]-3)){k[5]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j]-4)){k[5]++;continue;}else if(k[5]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[5]==5)break;k[5]=1;}}/**********判断对角(左下-右上)************/for(i=1;i<=p;i++){if(k[0]==5||k[1]==5||k[2]==5||k[3]==5||k[4]==5||k[5]==5)else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]+1)&&(b[i]==b[j]-1)){k[6]++;continue;}else if((a[i]==a[j]+2)&&(b[i]==b[j]-2)) {k[6]++;continue;}else if((a[i]==a[j]+3)&&(b[i]==b[j]-3)) {k[6]++;continue;}else if((a[i]==a[j]+4)&&(b[i]==b[j]-4)) {k[6]++;continue;}else if(k[6]==5){printf("Player 1 wins!!!\n");}elsecontinue;}if(k[6]==5)break;k[6]=1;}else if(k[6]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]+1)&&(b[i]==b[j]-1)){k[7]++;continue;}else if((a[i]==a[j]+2)&&(b[i]==b[j]-2)) {k[7]++;continue;}else if((a[i]==a[j]+3)&&(b[i]==b[j]-3)) {k[7]++;continue;}else if((a[i]==a[j]+4)&&(b[i]==b[j]-4)) {k[7]++;continue;}else if(k[7]==5){printf("Player 2 wins!!!\n");}elsecontinue;}if(k[7]==5)break;k[7]=1;}}}/****************和棋*******************/void heqi(){printf("************************************\n"); printf(" Tie!!!\n");printf("************************************\n"); }/****************游戏结束*******************/void over(){printf("************************************\n"); printf(" game over!!!\n");printf("************************************\n");}/****************游戏开始*******************/void welcome(){printf("************************************\n"); printf(" Welcome!!!\n");printf("************************************\n"); }。

c做的五子棋源码

using System;using;namespace wuziqi{class Program{public static void Main(string[] args){int maxsize = 19;//棋盘行列最大值int x, y;//用于定位下棋位置string x1, y1;//临时变量获取棋手输入的坐标值(此刻座标值属于字符串类型)int col_up = 0, col_down = 0;//用于统计输入座标值的上下相同棋子的个数int row_left = 0, row_right = 0;//用于统计输入座标值的左右相同棋子的个数int dia_left_up = 0, dia_left_down = 0, dia_right_up = 0, dia_right_down = 0;//对角线的英文拼写(diagonal line)用于统计对角线上相同的棋子数量int m;//临时变量,用于操纵判定相同棋子比较的次数int judgement;//用于获取判定是不是要终止棋局或继续棋局的变量string[,] qipan = new string[24, 24];//概念二维棋盘//初始化棋盘label0:{();//五子棋规那么("===============================================");("五子棋规那么说明如下:");("1、下棋坐标是从1-15");("2、下棋坐标值为整型数据类型");("3、下棋两边先组成五子连线者胜");("===============================================");for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){qipan[i, j] = "╋";}}}//输出棋盘for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){(qipan[i, j]);}("\n");}//走棋label2:{//甲方走棋("===============================================");("请甲方走棋(棋盘为15x15)");("x=");x1 = ();//判定输入的坐标值是不是为字母foreach(char ch in x1){if ((ch >'a'&&ch <'z')||(ch >'A'&&ch <'Z')){("你输入的坐标值非法!请正确输入你的坐标值");goto label2;}}//判定输入的棋子坐标是不是为空if (x1 == "" || x1 == null){("===============================================");("你输入的棋盘坐标为空!");goto label2;}("y=");y1 = ();//判定输入的坐标值是不是为字母foreach (char ch in y1){if ((ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z')){("你输入的坐标值非法!请正确输入你的坐标值");goto label2;}}//判定输入的棋子坐标是不是为空if (y1 == "" || y1 == null){("===============================================");("你输入的棋盘坐标为空!");goto label2;}x = (x1);y = (y1);if (x >= 16 || y >= 16){("===============================================");("你输入的坐标超出了范围!");goto label2;}if (qipan[x + 4, y + 4] == "╋"){qipan[x + 4, y + 4] = "●";//清屏();//输出棋走后棋盘//五子棋规那么("===============================================");("五子棋规那么说明如下:");("1、下棋坐标是从1-15");("2、下棋坐标值为整型数据类型");("3、下棋两边先组成五子连线者胜");("===============================================");for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){(qipan[i, j]);}("\n");}}else{("===============================================");("此处已经有棋子了");goto label2;}// goto label;//判定是不是能够连成五子//判定上下col_down = 0;col_up = 0;row_left = 0;row_right = 0;dia_left_down = 0;dia_left_up = 0;dia_right_down = 0;dia_right_up = 0;for (m = 1; m <= 4; m++){//判定上下if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){col_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){col_down++;}//判定左右if (qipan[x + 4, y + 4] == qipan[x + 4, y - m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){row_left++;}if (qipan[x + 4, y + 4] == qipan[x + 4, y + m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){row_right++;}//判定左对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y - m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_left_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_left_down++;}//判定右对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_right_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y - m + 4] && qipan[x - m + 4, y + 4] != "○" && qipan[x - m + 4, y + 4] != "╋"){dia_right_down++;}}//判定甲方是不是有组成五子if(dia_left_down == 4 || dia_left_up == 4 || col_up == 4 || col_down == 4 || row_right == 4 || row_left == 4 || dia_right_up == 4 || dia_right_down == 4){("甲方先组成五子连线,恭喜甲获胜!");("请选择:");("1、继续下一局");("2、终止棋局");judgement = ());switch (judgement){case 1: goto label0;default: goto label3;}}if (((col_down + col_up) == 4) || ((row_left + row_right == 4)) || (dia_left_down + dia_left_up == 4)|| (dia_right_down + dia_right_up == 4)){("甲方先组成五子连线,恭喜甲获胜!");("请选择:");("1、继续下一局");("2、终止棋局");judgement = ());switch (judgement){case 1: goto label0;default: goto label3;}}//乙方走棋label1:{("===============================================");("请已方走棋(棋盘为15x15)");//判定坐标值是不是为空("x=");x1 = ();//判定输入的坐标值是不是为字母foreach (char ch in x1){if ((ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z')){("你输入的坐标值非法!请正确输入你的坐标值");goto label1;}}if (x1 == "" || x1 == null){("你输入的棋盘坐标值为空!");}x = (x1);("y=");y1 = ();//判定输入的坐标值是不是为字母foreach (char ch in y1){if ((ch > 'a' && ch < 'z') || (ch > 'A' && ch < 'Z')){("你输入的坐标值非法!请正确输入你的坐标值");goto label1;}}//判定是不是为空if (y1 == "" || y1 == null){("你输入的棋盘坐标值为空!");goto label1;}y = (y1);//对输入的棋子进行判定是不是合法if (x >= 16 || y >= 16){("你输入的坐标超出了范围!");goto label1;}if (qipan[x + 4, y + 4] == "╋"){qipan[x + 4, y + 4] = "○";//输出棋走后棋盘//清屏();("===============================================");("五子棋规那么说明如下:");("1、下棋坐标是从1-15");("2、下棋坐标值为整型数据类型");("3、下棋两边先组成五子连线者胜");("===============================================");for (int i = 5; i <= maxsize; i++){for (int j = 5; j <= maxsize; j++){(qipan[i, j]);}("\n");}}else{("此处已经有棋子了");goto label1;}//判定是不是能够连成五子col_down = 0;col_up = 0;row_left = 0;row_right = 0;dia_left_down = 0;dia_left_up = 0;dia_right_down = 0;dia_right_up = 0;for (m = 1; m <= 4; m++){//判定上下if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + 4] && qipan[x - m + 4, y + 4] != "●" && qipan[x - m + 4, y + 4] != "╋"){col_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + 4] && qipan[x + m + 4, y + 4] != "●" && qipan[x + m + 4, y + 4] != "╋"){col_down++;}//判定左右if (qipan[x + 4, y + 4] == qipan[x + 4, y - m + 4] && qipan[x + 4, y - m + 4] != "●" && qipan[x + 4, y - m + 4] != "╋"){row_left++;}if (qipan[x + 4, y + 4] == qipan[x + 4, y + m + 4] && qipan[x + 4, y + m + 4] != "●" && qipan[x + 4, y + m + 4] != "╋"){row_right++;}//判定左对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y - m + 4] && qipan[x - m + 4, y - m + 4] != "●" && qipan[x - m + 4, y - m + 4] != "╋"){dia_left_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y + m + 4] && qipan[x + m + 4, y + m + 4] != "●" && qipan[x + m + 4, y + m + 4] != "╋"){dia_left_down++;}//判定右对角线if (qipan[x + 4, y + 4] == qipan[x - m + 4, y + m + 4] && qipan[x - m + 4, y + m + 4] != "●" && qipan[x - m + 4, y + m + 4] != "╋"){dia_right_up++;}if (qipan[x + 4, y + 4] == qipan[x + m + 4, y - m + 4] && qipan[x + m + 4, y - m + 4] != "●" && qipan[x + m + 4, y - m + 4] != "╋"){dia_right_down++;}}//判定甲方是不是有组成五子if (dia_left_down == 4 || dia_left_up == 4 || col_up == 4 || col_down == 4 || row_right == 4 || row_left == 4 || dia_right_up == 4 || dia_right_down == 4){("===============================================");("乙方先组成五子连线,恭喜乙获胜!");("请选择:");("1、继续下一局");("2、终止棋局");judgement = ());switch (judgement){case 1: goto label0;default: goto label3;}}if (((col_down + col_up) == 4) || ((row_left + row_right == 4)) || (dia_left_down + dia_left_up == 4) || (dia_right_down + dia_right_up == 4)){("===============================================");("乙方先组成五子连线,恭喜乙获胜!");("请选择:");("1、继续下一局");("2、终止棋局");judgement = ());switch (judgement){case 1: goto label0;default: goto label3;}}goto label2;}}//用于终止棋局label3:{}}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#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 zhineng(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=zhineng(a);if(n==STOP) goto end;map(a);}end:;}int zhineng(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(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++)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); }。

相关文档
最新文档