这是一个简单的三子棋游戏,只能手动输入坐标玩游戏。下面是我的代码:
定义的头文件:game.h
#ifndef _game_H_
#define _game_H_
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
#define Line 3
#define Col 3
void Games(char gamearr[][Col], int x, int y);
int ComPuter(char gamearr[][Col], int x, int y);
int GamePlayer(char gamearr[][Col], int x, int y);
void Show(char gamearr[][Col], int x, int y);
void InitGame(char arr[][Col], int x, int y);
#endif /* _game_H_ */
源文件:game.c
#include "game.h"
void InitGame(char arr[][Col], int x, int y) //初始化棋盘,把每一个数组元素初始化
{
int i = 0;
int j = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
arr[i][j] = ' ';
}
}
}
void Show(char gamearr[][Col], int x, int y) //显示棋盘(打印)
{
int i = 0;
int j = 0;
for (i = 0; i < Line; i++)
{
for (j = 0; j < Col; j++)
{
printf("_");
if (gamearr[i][j] == '*')
{
printf("%c", gamearr[i][j]);
}
else if (gamearr[i][j] == '#')
{
printf("%c", gamearr[i][j]);
}
else
{
printf("%c", '_');
}
printf("|");
}
printf("\n\n");
}
}
int GamePlayer(char gamearr[][Col], int x, int y)//玩家落子
{
int x1 = 0;
int y1 = 0;
int sum = 0;
while (1)
{
printf("请输入您要下子的坐标>\n"); //用户输入下子的坐标
scanf("%d %d", &x1, &y1);
if (x1 > Line || y1 > Col) //判断坐标是否合法
{
printf("坐标非法!请重新输入!\n");
continue;
}
if (gamearr[x1 - 1][y1 - 1] == ' ') //用户输入的坐标从1开始,这里我们-1是下标
{
gamearr[x1 - 1][y1 - 1] = '*';
//判断是否赢了
if (gamearr[0][0] == '*' && gamearr[0][1] == '*'&& gamearr[0][2] == '*') //判断第一行是否全是*
{
return 1;
}
else if (gamearr[1][0] == '*' && gamearr[1][1] == '*'&& gamearr[1][2] == '*')//判断第二行是否全是*
{
return 1;
}
else if (gamearr[2][0] == '*' && gamearr[2][1] == '*'&& gamearr[2][2] == '*')//判断第三行是否全是*
{
return 1;
}
else if (gamearr[0][0] == '*' && gamearr[1][1] == '*' && gamearr[2][2] == '*')//判段从左上角到右下角是否全是*
{
return 1;
}
else if (gamearr[0][2] == '*' && gamearr[1][1] == '*' && gamearr[2][0] == '*') //判断从右上角到左下角是否全是*
{
return 1;
}
else if (gamearr[0][0] == '*' && gamearr[1][0] == '*' && gamearr[2][0] == '*')//判断第一列是否全是*
{
return 1;
}
else if (gamearr[0][1] == '*' && gamearr[1][1] == '#' && gamearr[2][1] == '*')//判断第二列是否全是*
{
return 1;
}
else if (gamearr[0][2] == '*' && gamearr[1][2] == '*' && gamearr[2][2] == '*')//判断第三列是否全是*
{
return 1;
}
//循环判断是否已经全部落完子,是的话平局。
for (x1 = 0; x1 < Line; x1++)
{
for (y1 = 0; y1 < Col; y1++)
{
if (gamearr[x1][y1] == ' ')
{
return 0; //有坐标为空 返回0 表示游戏继续 。
}
}
}
return 2; //到这说明坐标全部下完 返回2
}
else
{
printf("您输入的坐标已经有子了,请重新输入!\n");
}
}
}
int ComPuter(char gamearr[][Col], int x, int y) //电脑自动随机落子
{
while (1)
{
int x1 = rand() % 3 + 1;
int y1 = rand() % 3 + 1;
if (gamearr[x1 - 1][y1 - 1] == ' ')
{
gamearr[x1 - 1][y1 - 1] = '#';
//判断是否赢了
if (gamearr[0][0] == '*' && gamearr[0][1] == '*'&& gamearr[0][2] == '*') //判断第一行是否全是#
{
return 1;
}
else if (gamearr[1][0] == '*' && gamearr[1][1] == '*'&& gamearr[1][2] == '*')//判断第二行是否全是#
{
return 1;
}
else if (gamearr[2][0] == '*' && gamearr[2][1] == '*'&& gamearr[2][2] == '*')//判断第三行是否全是#
{
return 1;
}
else if (gamearr[0][0] == '*' && gamearr[1][1] == '*' && gamearr[2][2] == '*')//判段从左上角到右下角是否全是#
{
return 1;
}
else if (gamearr[0][2] == '*' && gamearr[1][1] == '*' && gamearr[2][0] == '*') //判断从右上角到左下角是否全是#
{
return 1;
}
else if (gamearr[0][0] == '*' && gamearr[1][0] == '*' && gamearr[2][0] == '*')//判断第一列是否全是#
{
return 1;
}
else if (gamearr[0][1] == '*' && gamearr[1][1] == '#' && gamearr[2][1] == '*')//判断第二列是否全是#
{
return 1;
}
else if (gamearr[0][2] == '*' && gamearr[1][2] == '*' && gamearr[2][2] == '*')//判断第三列是否全是#
{
return 1;
}
for (x1 = 0; x1 < Line; x1++)
{
for (y1 = 0; y1 < Col; y1++)
{
if (gamearr[x1][y1] == ' ')
{
return 0; //有坐标为空 返回0 。
}
}
}
return 2; //到这说明坐标全部下完 返回2
}
else
{
}
}
}
void Games(char gamearr[][Col], int x, int y)
{
int gpover = 0;
int cpover = 0;
InitGame(gamearr, Line, Col); //初始化棋盘
system("cls"); //打印前清屏
Show(gamearr, Line, Col); //打印棋盘
while (1)
{
gpover = GamePlayer(gamearr, Line, Col); //玩家下子,返回1就是赢了返回0表示没有继续
system("cls"); //打印前清屏
Show(gamearr, Line, Col); //玩家落完子了再打印一下棋盘
if (gpover == 1)
{
printf("恭喜您赢了!");
Sleep(5000);
return;
}
else if (gpover == 2)
{
printf("平局!");
Sleep(5000);
return;
}
srand((unsigned)time(NULL)); //置随机数种子
cpover = ComPuter(gamearr, Line, Col); //电脑自动落子
system("cls"); //打印前清屏
Show(gamearr, Line, Col); //电脑落完子了再打印一下棋盘
if (cpover == 1)
{
printf("很遗憾,您输了!");
Sleep(5000);
return;
}
else if (cpover == 2)
{
printf("平局!");
Sleep(5000);
return;
}
}
}
测试程序:Test.c
#include "game.h"
int main()
{
int input = 0;
char gamearr[Line][Col] = {0};
do
{
printf("\n******************\n");
printf("** 1 开始游戏 **\n");
printf("** 0 退出游戏 **\n");
printf("******************\n");
scanf("%d", &input);
switch(input)
{
case 1:
Games(gamearr,Line,Col);
break;
case 0:
printf("退出成功!\n");
return 0;
default:
printf("输入错误!请重新输入:\n");
break;
}
} while (input);
}