C语言实现三子棋小游戏
游戏大致流程:
游戏代码:
头文件:game.h
#ifndef _GAME_H_
#define _GAME_H_
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#define ROW 3
#define COL 3
void game(); //主游戏
void Init(char board, int row, int col); //初始化棋盘
void ChessBoard(char board, int row, int col); //显示棋盘
void PlayerRemove(char board, int row, int col); //玩家走棋
void ComputerRemove(char board, int row, int col); //电脑走棋
char IsWin(char board, int row, int col); //判赢
#endif
源文件:game.c
#include"game.h"
void Init(char board[ROW][COL], int row, int col) //初始化数组
{
memset(board, ' ', sizeof(board[0][0])*row*col);
}
void ChessBoard(char board[ROW][COL], int row, int col) //打印棋盘
{
int i;
int j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
}
printf("\n");
}
}
void PlayerRemove(char board[ROW][COL], int row, int col) //玩家走棋
{
int x;
int y;
printf("玩家走棋:\n");
while (1)
{
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] = 'O';
break;
}
else
{
printf("该位置被占用,请重新选择:\n");
}
}
else
{
printf("位置错误,请重新输入:\n");
}
}
}
void ComputerRemove(char board[ROW][COL], int row, int col) //电脑走棋
{
int x;
int y;
printf("电脑走棋:\n");
while (1)
{
x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = 'X';
break;
}
}
}
char IsWin(char board[ROW][COL], int row, int col) //判赢
{
int i = 0;
for (; i < 3; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) //判断行上是否相同
{
if (board[i][0] == 'O')
{
return 'O';
}
if (board[i][0] == 'X')
{
return 'X';
}
}
if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) //判断列上是否相同
{
if (board[0][i] == 'O')
{
return 'O';
}
if (board[0][i] == 'X')
{
return 'X';
}
}
}
if ((board[0][0] == board[1][1] && board[1][1] == board[2][2])|| //判断对角线是否相同
(board[0][2] == board[1][1] && board[1][1] == board[2][0]))
{
if (board[1][1] == 'O')
{
return 'O';
}
if (board[1][1] == 'X')
{
return 'X';
}
}
return 0;
}
void game()
{
int count = 0;
char board[ROW][COL];
Init(board, ROW, COL); //初始化
ChessBoard(board,ROW,COL); //打印棋盘
while (1)
{
char c = 0;
PlayerRemove(board, ROW, COL); //玩家走棋
count++;
ChessBoard(board, ROW, COL); //打印棋盘
c = IsWin(board, ROW, COL); //判赢
if (c == 'O')
{
printf("玩家赢\n");
return;
}
if(c == 'X')
{
printf("电脑赢\n");
return;
}
if (count == 9)
{
printf("平局\n");
return;
}
ComputerRemove(board, ROW, COL); //电脑走棋
count++;
ChessBoard(board, ROW, COL); //打印棋盘
c = IsWin(board, ROW, COL); //判赢
if (c == 'O')
{
printf("玩家赢\n");
return;
}
if (c == 'X')
{
printf("电脑赢\n");
return;
}
if (count == 9)
{
printf("平局\n");
return;
}
}
}
源文件:main.c
#include"game.h"
void menu()
{
printf("*****************************\n");
printf("******* 1.play ********\n");
printf("******* 0.exit ********\n");
printf("*****************************\n");
printf("请选择游戏:\n");
}
int main()
{
srand((unsigned int)time(NULL));
int input;
do {
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
default:
break;
}
} while (input);
system("pause");
return 0;
}