简单三子棋人机版
游戏所要声明的函数和头文件
#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#pragma warning(disable:4996)
#define ROW 3
#define COL 3
void game();
#endif
游戏的主逻辑
void menu()
{
printf("###############\n");
printf("#1.开始 2.结束#\n");
printf("###############\n");
printf("Plese Select: \n");
}
菜单,输入1开始游戏输入2结束游戏。
#include"game.h"
int main()
{
int select = 0;
do //为了让玩家一直玩下去
{
menu();
scanf("%d", &select);
switch (select)
{
case 1:
game();
break;
case 2:
exit(0);
default:
break;
}
} while (1);
system("pause");
return 0;
}
游戏的实现
void game()
{
char board[ROW][COL];//定义一个棋盘数组
memset(board, ' ', ROW*COL);//初始化数组为空
char record;
do
{
system("CLS");//每次下棋判断之后清空之前的棋盘
displayBoard(board, ROW);//显示棋盘函数
playerMove(board, ROW);//控制玩家移动的函数
record = isWin(board, ROW);//判断输赢的函数
displayBoard(board, ROW);//在判断输赢之后再引用一次棋盘,不然会在判断之后不显示最后一步棋
if (record != ' ')
{
break;
}
computerMove(board, ROW);//控制电脑移动的函数
record = isWin(board, ROW);
displayBoard(board, ROW);
if (record != ' ')
{
break;
}
} while (record==' ');
if (record == 'x')
{
printf("恭喜你,你赢了!\n");
}
else if (record == 'o')
{
printf("这你都赢不了???\n");
}
else if (record == 'p')
{
printf("平局!\n");
}
}
显示棋盘函数
void displayBoard(char board[][COL], int row)
{
int i=0;
for (; i < row; i++)
{
for (; i < row-1;i++)
{
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
printf("---|---|---\n");
}
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
}
}
控制玩家移动的函数
void playerMove(char board[][COL], int row)
{
int x, y;
do
{
printf("Plese Enter<行,列>: \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("该位置已被占用,请重新输入!\n");
}
}
else
{
printf("Enter error! Try again.\n");
}
} while (1);
}
电脑移动
void computerMove(char board[][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);
}
判断输赢
char isWin(char board[][COL], int row)
{
system("CLS");
int i = 0;
for (; 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[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')//斜行相同
{
return board[1][1];
}
if (isFull(board, row))//判断是否下满
{
return 'p';
}
return ' ';
}
判断是否下满棋盘
int isFull(char board[][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;
}
运行结果
菜单
棋盘
错误输入检测
玩家赢
电脑赢
平局
简单的三子棋小游戏就完成了。