game.h
#ifndef __game_h__
#define __game_h__
#include<stdio.h>
#include<time.h>
#include<windows.h>
#pragma warning(disable:4996)
#define row 3
#define line 3
void Init(char board[][row], int x,int y);
void Show(char board[][row], int x, int y);
char Judge(char board[][row], int x, int y);
void C_move(char board[][row], int x, int y);
int Firstone();
void Game();
#endif
game.c
#include "game.h"
void Init(char board[][row], int x, int y)
{
int i = 0;
for (i; i < x; ++ i){
int j = 0;
for (j; j < y; j++){
board[i][j] = ' ';
}
}
}
int Firstone()
{
int rnum = rand() % 2;
printf("请猜硬币正反面决定落子顺序!\n");
for (int i = 5; i > 0; i--){
printf("正在生成硬币...........%d\r", i);
Sleep(1000);
}
printf("硬币已生成,请猜(反面:0,正面:1):>");
int select=0;
scanf("%d", &select);
if (select == rnum){
printf("恭喜猜对了!\n");
return 0;
}
else{
printf("很遗憾猜错了\n");
return 1;
}
}
void Show(char board[][row], int x, int y)
{
printf(" 1 | 2| 3\n");
printf("-------------\n");
for (int i=1; i <= x; i++){
printf("%d |",i);
for (int j=1; j <= y; j++){
printf("%c |", board[i-1][j-1]);
}
printf("\n");
printf("-------------\n");
}
}
char Judge(char board[][row], int x, int y)
{
for (int i=0; i < line; i++){
if (board[i][0]!=' '&&board[i][0] == board[i][1] && board[i][1] == board[i][2]){
return board[i][0];
}
if (board[0][i] != ' '&&board[0][i] == board[1][i] && board[1][i] == board[2][i]){
return board[0][i];
}
}
if (board[0][0] != ' '&&board[0][0] == board[1][1] && board[0][0] == board[2][2])
return board[0][0];
if (board[0][2] != ' '&&board[0][2] == board[1][1] && board[0][2] == board[2][0])
return board[0][2];
for (int i=0; i < x; i++){
for (int j=0; j < y; j++){
if (board[i][j] == ' ')
return 'N';
}
}
return 'F';
}
void C_move(char board[][row], int x, int y)
{
while (1){
int a = rand()%line;
int b = rand()%row;
if (board[a][b] == ' '){
board[a][b] = 'o';
break;
}
}
}
void Game()
{
int who=1;
char board[3][3];
char result = 0;
Init(board, line, row);
who = Firstone();
if (who){
goto aa;
}
do{
int x = 0, y = 0;
Show(board,line,row);
printf("请落子(输入格式:x y): >");
scanf("%d %d", &x, &y);
if (x <1 || x > 3 || y <1 || y > 3){
printf("输入有误,请重新输入!\n");
continue;
}
else if (board[x-1][y-1] != ' '){
printf("该位置已被占用,请重新输入!\n");
continue;
}
else
board[x-1][y-1] = 'x';
result=Judge(board, line, row);
if (result != 'N'){
break;
}
aa:C_move(board,line,row);
result=Judge(board, line,row);
if (result != 'N'){
break;
}
} while (1);
if (result == 'x'){
printf("---------------------\n");
Show(board, line, row);
printf("恭喜,你赢了!\n");
}
else if (result == 'o'){
printf("---------------------\n");
Show(board, line, row);
printf("很遗憾,你输了!\n");
}
else if (result == 'F'){
printf("平局!\n");
}
}
```cpp
main.c
#include "game.h"
void Menu()
{
printf("###########################\n");
printf("## 欢迎来到我的游戏厅 ##\n");
printf("## 1.play 2.exit ##\n");
printf("###########################\n");
printf("Please select >");
}
int main()
{
srand((unsigned long)time(NULL));
int select = 0;
int quit = 0;
while (!quit)
{
Menu();
scanf("%d", &select);
switch (select)
{
case 1:
Game();
printf("玩的还不错,还要继续吗?\n");
break;
case 2:
quit = 1;
printf("bye,bye~\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}