源文件展示:
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROWS 3
#define COLS 3
void init_board(char arr[ROWS][COLS], int rows, int cols);
void display_board(char arr[ROWS][COLS], int rows, int cols);
void computer(char arr[ROWS][COLS], int rows, int cols);
void player(char arr[ROWS][COLS], int rows, int cols);
char win(char arr[ROWS][COLS], int rows, int cols);
#endif//__GAME_H__
功能函数模块:
#define _CRT_SECURE_NO_DEPRECATE
#include"game.h"
void init_board(char arr[ROWS][COLS], int rows, int cols)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
arr[i][j] = ' ';
}
}
}
void display_board(char arr[ROWS][COLS], int rows, int cols)
{
int i = 0;
for (i = 0; i < ROWS ; i++)
{
printf("| %c| %c| %c|\n", arr[i][0], arr[i][1], arr[i][2]);
if (i != 2)
{
printf("|---|---|---|\n");
}
}
}
void computer(char arr[ROWS][COLS], int rows, int cols)//电脑下棋函数
{
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = '0';
break;
}
}
}
void player(char arr[ROWS][COLS], int rows, int cols)//玩家下棋函数
{
int x = 0;
int y = 0;
while (1)
{
printf("请输入坐标(1到3)下棋\n");
scanf("%d %d", &x, &y);
if (((x > 0) && (x <=3)) && ((y > 0) && (y <= 3)))
{
if (arr[x-1][y-1] == ' ')
{
arr[x-1][y-1] = '*';
break;
}
else
{
printf("此格已有棋子\n");
}
}
else
{
printf("输入坐标错误,请重新输入\n");
}
}
}
static int over(char arr[ROWS][COLS], int rows, int cols)//判断棋盘是否满函数
{
int i = 0;
int j = 0;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
char win(char arr[ROWS][COLS], int rows, int cols)//检查输赢函数
{
int i = 0;
for (i=0; i < ROWS; i++)
{
if ((arr[i][0] == arr[i][1])&&
(arr[i][1] == arr[i][2]) &&
(arr[i][1] != ' '))
{
return arr[i][1];
}
}
for (i=0; i < COLS; i++)
{
if ((arr[0][i] == arr[1][i]) &&
(arr[1][i] == arr[2][i]) &&
(arr[1][i] != ' '))
{
return arr[1][i];
}
}
if ((arr[0][0] == arr[1][1]) &&
(arr[1][1] == arr[2][2]) &&
(arr[1][1] != ' '))
{
return arr[1][1];
}
if ((arr[2][2] == arr[1][1]) &&
(arr[1][1] == arr[0][0]) &&
(arr[1][1] != ' '))
{
return arr[1][1];
}
if (over(arr, ROWS, COLS))
{
return 'f';
}
return ' ';
}
游戏实现的主函数如下:
#define _CRT_SECURE_NO_DEPRECATE
#include"game.h"
void meau()
{
printf("******************************\n");
printf("***** 欢迎来到三子棋 *****\n");
printf("******* 1.play ********\n");
printf("******* 0.exit ********\n");
printf("******************************\n");
}
void game()
{
int input = 0;
char ret = 0;
char arr[ROWS][COLS];
init_board(arr, ROWS, COLS);
display_board(arr, ROWS, COLS);
while (1)
{
printf("玩家下\n");
player(arr, ROWS, COLS);
if ((ret = win(arr, ROWS, COLS)) != ' ')
{
break;
}
display_board(arr, ROWS, COLS);
printf("电脑下\n");
computer(arr, ROWS, COLS);
if ((ret = win(arr, ROWS, COLS)) != ' ')
{
break;
}
display_board(arr, ROWS, COLS);
//if ((ret = win(arr, ROWS, COLS)) != ' ')
//{
// break;
//}
}
display_board(arr, ROWS, COLS);
if (ret == '*')
{
printf("恭喜你,你赢了!\n");
}
else if (ret == '0')
{
printf("很遗憾,电脑赢了\n");
}
else if (ret == 'f')
{
printf("平局,是否再来?\n");
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
meau();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
下面是运行的结果:
!