分为3个文件。注意:在写调用函数时,要注意调用函数的参数。
test.c//测试
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"game.h"
void game()
{
char p = 0;
char arr[row][col]={0};
init(arr,row,col);
chess_border(arr,row,col);
srand((unsigned int)time(NULL));
while(1)
{
player(arr,row,col);
p = win(arr,row,col);
if( p=='M')
{
printf("玩家赢\n");
break;
}
else if( p=='Y')
{
printf("电脑赢\n");
break;
}
else if( p =='e')
{
printf("平局\n");
break;
}
computer(arr,row,col);
p = win(arr,row,col);
if( p=='M')
{
printf("玩家赢\n");
break;
}
else if( p=='Y')
{
printf("电脑赢\n");
break;
}
else if( p=='e')
{
printf("平局\n");
break;
}
}
}
void menu()
{
printf("-----------------------------------\n");
printf("@@@ 1.play 0.exit @@@\n");
printf("-----------------------------------\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择:-->");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入\n");
break;
}
}while(input);
return 0;
}
游戏环节
game.c
#include"game.h" void init(char arr[row][col],int r,int c)//初始化数组 { int i =0; int j =0; for(i=0;i<row;i++) { for(j=0;j<col;j++) { arr[i][j]=' '; } } } void chess_border(char arr[row][col],int r,int c)//设置棋盘 { int i =0; for(i=0;i<row;i++) { printf(" %c | %c | %c \n", arr[i][0],arr[i][1],arr[i][2]); if(i!=2) { printf("---|---|---\n"); } } } void player(char arr[row][col],int r,int c)//玩家走 { int i =0,j = 0; while(1) { printf("请玩家输入坐标:\n"); scanf("%d%d",&i,&j); if((i>=0)&&(i<row)&&(j>=0)&&(j<col)) { if(arr[i][j]==' ') { arr[i][j]='M'; chess_border(arr,row,col); break; } else { printf("下标输入有误,请重新输入\n"); } } else { printf("下标输入有误,请重新输入\n"); } } } void computer(char arr[row][col],int r,int c)//电脑走 { while(1) { int i =rand()%3; int j =rand()%3;//随机产生一个坐标 if(arr[i][j]==' ') { printf("请电脑走:\n"); arr[i][j]='Y'; chess_border(arr,row,col); break; } } } char win(char arr[row][col],int r,int c)//判赢 { int i =0; int j =0; for(i=0;i<row;i++) { if((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && arr[i][2]!=' ') { return arr[i][1]; } } for(j=0;j<col;j++) { if((arr[0][j] == arr[1][j]) && (arr[1][j] == arr[2][j]) && arr[2][j]!=' ') { return arr[1][j]; } } if((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && arr[2][2]!=' ') { return arr[2][2]; } if((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && arr[2][0]!=' ') { return arr[2][0]; } if(equal(arr,r,c)) { return 'e'; } return ' '; } int equal(char arr[row][col],int r,int c)//判平局 { int i =0; int j =0; for(i=0;i<row;i++) { for(j=0;j<col;j++) { if(arr[i][j]==' ') { return 0; } } } return 1; }
game.h//头文件
#ifndef _GAME_H__ #define _GAME_H__ #include<stdio.h> #include<stdlib.h> #include<time.h> #define row 3 #define col 3void init(char arr[row][col],int r,int c); void chess_border(char arr[row][col],int r,int c); void player(char arr[row][col],int r,int c); void computer(char arr[row][col],int r,int c); char win(char arr[row][col],int r,int c); int equal(char arr[row][col],int r,int c);#endif//_GAME_H__