#define_CRT_SECURE_NO_WARNINGS#include"game.h"intmain()int num =1;srand((unsignedint)time(NULL));doif(num ==1)//打印一个开始面板playboard();printf("输入1则进行游戏,输入0则结束程序\\n");//输入选择
num =choose();//通过输入的选择来判断是否进行游戏switch(num)case1://开始游戏doplaygame();
num =0;printf("是否重新开始游戏,重新开始输入1,结束游戏输入0:>");scanf("%d",&num);if(num ==1);elseif(num ==0)break;elseprintf("输入错误,");while(1);break;case0:printf("结束程序\\n");break;default:printf("\\n输入错误,未能识别你的选择,请重新输入\\n\\n");break;//判断是否跳出循环if(num ==0)break;while(1);return0;
game.c
#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#defineWID10#defineNID10#defineSIC5voidplayboard()printf("**********************************\\n");printf("**********************************\\n");printf("************ 1.play **************\\n");printf("************ 0.exit **************\\n");printf("**********************************\\n");printf("**********************************\\n");intchoose()int num =0;printf("请输入你的选择:>");scanf("%d",&num);return num;voidspace(char arr[WID][NID],int x,int y)int i =0;for(i =0; i < x; i++)int j =0;for(j =0; j < y; j++)
arr[i][j]=' ';board(char arr[WID][NID],int x,int y)int i =0;int j =0;printf("\\n-");for(i =0; i < x; i++)printf("----");printf("-\\n");printf("0");for(i =1; i <= x; i++)printf(" %d ", i);printf("\\n");printf("-");for(i =0; i < x; i++)printf("----");printf("-\\n");for(i =0; i < x; i++)int k =0;printf("%d", i+1);for(j =0; j < y; j++)printf("|");printf(" %c ", arr[i][j]);printf("|\\n");printf("-");for(k =0; k < x; k++)printf("----");printf("-\\n");voidaxis(int* x,int* y)scanf("%d %d",&*x,&*y);*x=(*x)-1;*y=(*y)-1;voidsure(char arr[WID][NID],int x,int y,char c)
arr[x][y]= c;voidhuman_machine(int* x,int* y)*x =rand()% WID;*y =rand()% NID;intjudge(char arr[WID][NID],int x,int y)if(arr[x][y]==' ')return0;elsereturn1;intjudgesure(char arr[WID][NID],int x,int y,char siz)int count =0;int i =0;for(i =1; i <= y; i++)if(arr[x][y - i]== siz)
count++;elsebreak;for(i =1; i <= NID-y-1; i++)if(arr[x][y + i]== siz)
count++;elsebreak;if(count >= SIC -1)return1;
count =0;for(i =1; i <= x; i++)if(arr[x-i][y]== siz)
count++;elsebreak;for(i =1; i <= NID - x-1; i++)if(arr[x+i][y ]== siz)
count++;elsebreak;if(count >= SIC -1)return1;
count =0;if(WID >= NID)for(i =1; i <= y; i++)if(arr[x - i][y - i]== siz)
count++;elsebreak;for(i =1; i <= NID - y -1; i++)if(arr[x + i][y + i]== siz)
count++;elsebreak;if(count >= SIC -1)return1;
count =0;for(i =1; i <= y; i++)if(arr[x + i][y - i]== siz)
count++;elsebreak;for(i =1; i <= NID - y -1; i++)if(arr[x - i][y + i]== siz)
count++;elsebreak;if(count >= SIC -1)return1;
count =0;if(WID <= NID)for(i =1; i <= x; i++)if(arr[x - i][y - i]== siz)
count++;elsebreak;for(i =1; i <= NID - x; i++)if(arr[x + i][y + i]== siz)
count++;elsebreak;//if(count >= SIC -1)return1;
count =0;for(i =1; i <= x; i++)if(arr[x + i][y - i]== siz)
count++;elsebreak;for(i =1; i <= NID - x; i++)if(arr[x - i][y + i]== siz)
count++;elsebreak;if(count >= SIC -1)return1;return0;intjudgefill(char arr[WID][NID])int count =0;int i =0;int j =0;for(i =0; i < WID; i++)int j =0;for(j =0; j < NID; j++)if(arr[i][j]!=' ')
count++;return WID*NID-count;voidplaygame()//建立一个二维数组char arr[WID][NID];//把数组初始化为空格 space(arr,WID,NID);int over =0;int i =0;int count =0;int X =0;int Y =0;int* P1 =&X;int* P2 =&Y;do//打印一个n字棋的面板board(arr, WID, NID);doprintf("输入你选择的坐标:>");//游戏者输入坐标axis(P1, P2);//判断游戏者输入的坐标是否已输入,已输入返回1,未输入返回0int z =judge(arr, X, Y);if(z ==1)printf("此位置已输入,请重新");elsebreak;//printf("%d %d", X, Y);while(1);//把O记录坐标到数组上sure(arr, X, Y,'O');//判断是否获得胜利,胜利就返回1,没有胜利就返回0
over =judgesure(arr, X, Y,'O');if(over ==1)printf("你获得胜利\\n");board(arr, WID, NID);break;//判断是否填满了表格if(judgefill(arr)==0)printf("平局");break;do//电脑输入坐标human_machine(P1, P2);//判断电脑输入的坐标是否已输入,已输入返回1,未输入返回0int z =judge(arr, X, Y);if(z ==0)//把X记录坐标到数组上sure(arr, X, Y,'X');//结束循环break;while(1);//判断电脑是否获得胜利,胜利就返回1,没有胜利就返回0
over =judgesure(arr, X, Y,'X');if(over ==1)printf("电脑获得胜利\\n");board(arr, WID, NID);break;//判断是否填满了表格if(judgefill(arr)==0)printf("平局\\n");break;while(1);