简单的三子棋人机对战:
1.头文件game.h:
#ifndef __GAME_H__
#define __GAME_H__
//函数的声明
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#pragma warning(disable:4996)
#define ROW 3
#define COL 3
void game();
#endif //__GAME_H__
2.源文件main.c:
#include "game.h"
void menu()//菜单
{
printf("**************************\n");
printf("*** 1.play ***\n");
printf("*** 2.exit ***\n");
printf("**************************\n");
printf("Please Select:");
}
int main()//主函数
{
int select;
do
{
menu();
scanf("%d", &select);
switch (select)
{
case 1:
game();
break;
case 2:
exit(0);
default:
printf("Select error!!!\n");//输入错误
}
}
while (1);
system("pause");
return 0;
}
3.源文件game.c:
#include "game.h"
static void displayBoard(char board[ROW][COL], int row)//打印游戏面板
{
int i = 0;
for (; i < row; i++)
{
printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);
printf("|---|---|---|\n");
}
}
static void playerMove(char board[ROW][COL], int row)//玩家移动
{
int x, y;
do{
printf("Please Enter(x,y):\n");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = 'x';
break;
}
else
{
printf("Position occupied,Select again!\n");
}
}
else
{
printf("Select errors,Please try again!\n");
}
} while (1);
}
static void computerMove(char board[ROW][COL], int row)//电脑移动
{
srand((unsigned long)time(NULL));
do
{
int x = rand() % row;
int y = rand() % COL;
if (board[x][y] == ' ')
{
board[x][y] = 'o';
break;
}
} while (1);
}
static int isFull(char board[ROW][COL], int row)//判断是否把棋盘下满
{
int i = 0;
for (; i < row; i++)
{
int j = 0;
for (; j < COL; j++)
{
if (board[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
static char isWin(char board[ROW][COL], int row)//判断是否胜利
{
int i = 0;
for (i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && \
board[i][1] == board[i][2] && \
board[i][0] != ' ')//判断行
{
return board[i][0];
}
}
for (i = 0; i < COL; i++)
{
if (board[0][i] == board[1][i] && \
board[1][i] == board[2][i] && \
board[0][i] != ' ')//判断列
{
return board[0][i];
}
}
if (board[0][0] == board[1][1] && \
board[1][1] == board[2][2] && \
board[0][0] != ' ')//判断对角线
{
return board[0][0];
}
if (board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && \
board[0][2] != ' ')//判断对角线
{
return board[0][2];
}
if (isFull(board, row))
{
return 'q';
}
return ' ';
}
void game()
{
char board[ROW][COL];
memset(board, ' ', ROW*COL);
char ret;
printf("开始游戏\n");
do
{
system("CLS");//清屏
displayBoard(board, COL);//显示棋盘
playerMove(board, COL);//玩家移动:x
system("CLS");
displayBoard(board, COL);
ret = isWin(board, COL);
if (ret!=' ')
{
break;
}
computerMove(board, COL);//电脑移动:o
system("CLS");
displayBoard(board, COL);
ret = isWin(board, COL);
} while (ret == ' ');
if (ret == 'q')//平局
{
printf("Tied!!!\n");
}
else if (ret == 'x')//玩家胜利
{
printf("You Win\n");
}
else if (ret == 'o')//电脑胜利
{
printf("You Lose\n");
}
else
{
printf("debug!\n");//程序除错
}
}
4.程序结果如下: