您的位置:首页 > 编程语言 > C语言/C++

C语言:3*3棋盘实现三子棋

2016-10-13 18:03 357 查看
三子棋的实现功能:

通过输入坐标确认下棋地点,与电脑对战,电脑产生随机数(随机坐标)。

输出棋盘,并判断玩家与电脑的输赢,输出赢家。

#include<stdio.h>
#include<stdlib.h>
#include"game.h"
#include<windows.h>

void start_game(char arr[ROWS][COLS])
{
show_arr(arr, ROWS, COLS);  //输出棋盘;
while (1)
{
player_game(arr, ROWS, COLS);//玩家开始玩游戏;
if (check(arr) == 'p')
{
break;
}
show_arr(arr, ROWS, COLS);
printf("电脑开始下棋:>\n");
computer_game(arr, ROWS, COLS);//电脑开始玩游戏;
if (check(arr) == 'c')
{
break;
}
Sleep(1000);
show_arr(arr, ROWS, COLS);
}
if (check(arr) == 'p')
{
printf("玩家获胜\n");
}
else
{
printf("电脑获胜\n");
}
}

void menu()  //简易的菜单输出;
{
printf("**************************\n");
printf("******    1.play    ******\n");
printf("******    0.exit    ******\n");
printf("**************************\n");
}

void game()
{
int tmp = 0;
char arr[ROWS][COLS] = { 0 };//初始化棋盘输出 ROWS,COLS宏定义大小;
init_arr(arr, ROWS, COLS);
srand((unsigned)time(NULL));//产生随机数,此处需要调用头文件#include<time.h>
menu();
printf("请选择是否开始玩游戏:>");
scanf("%d", &tmp);
switch (tmp)
{
case PLAY:
start_game(arr);
break;
case EXIT:
break;
}
}

int main()
{
game();
system("pause");
return 0;
}


text.c写大概的逻辑,通过调用各个函数判断是否开始游戏,并写一个简易的判断输赢的函数。text.c需要调用头文件#include "game.h"。

#include<stdio.h>
#include<stdlib.h>
#include"game.h"

void init_arr(char arr[ROWS][COLS])   //给棋盘复制为空格’ ’;
{
int i = 0;
int j = 0;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
{
arr[i][j] = ' ';
}
}
}

void show_arr(char arr[ROWS][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 player_game(char arr[ROWS][COLS])  //玩家开始玩游戏
{
int x = 0;
int y = 0;
while (1)
{
printf("请玩家输入坐标:>");
scanf("%d %d", &x, &y);
//判断坐标是否合法;
if ((x > 0 && x <= 3) && (y > 0 && y <= 3))
{
if (arr[x - 1][y - 1] == ' ')
9f72

{
arr[x - 1][y - 1] = 'X';
break;
}
else
{
printf("坐标不可以使用.\n");
}
}
else
{
printf("坐标输入不合法\n");
}
}
}

void computer_game(char arr[ROWS][COLS])  //电脑开始玩游戏
{
while (1)
{
int x = rand() % 3;  //此处产生随机数,对3取余,使x,y的坐标数为0或者1或者2;
int y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = '0';
break;
}
}
}

char check(char arr[ROWS][COLS])
{
int i = 0;
//判断玩家的输赢;
for (i = 0; i < ROWS; i++)//判断三个行数是否均为X,是的话返回p,代表player获胜;
{
if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][0] == 'X'))
return 'p';
}
for (i = 0; i < COLS; i++)//判断三个列数是否均为X,是的话返回p,代表player获胜;
{
if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[0][i] == 'X'))
return 'p';
}
//用两个if语句判断两个对角是否均为X,是的话返回p,代表player获胜;
if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'X'))
{
return 'p';
}
if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'X'))
{
return 'p';
}
//判断电脑的输赢;
for (i = 0; i < ROWS; i++)
{
if (((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][0] == '0'))
return 'c';
}
for (i = 0; i < COLS; i++)
{
if (((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[0][i] == '0'))
return 'c';
}
if (((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == '0'))
{
return 'c';
}
if (((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == '0'))
{
return 'c';
}
}
game.c主要写text.c调用的函数,实现三子棋的主要函数功能。

1、初始化棋盘;

2、输出棋盘;

3、玩家和电脑分别下棋;

4、判断输赢;

此处的函数声明均放在下面的game.h头文件中,因此此处应该写入#include "game.h"

#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __GAME_H__
#define __GAME_H__

#define ROWS 3     //定义行数;
#define COLS 3	   //定义列数;

enum XP    //枚举 使得选择菜单容易理解1.play  0.exit;
{
PLAY = 1,
EXIT = 0
};
//函数的声明;
void init_arr(char arr[ROWS][COLS]);
void show_arr(char arr[ROWS][COLS]);
void player_game(char arr[ROWS][COLS]);
void computer_game(char arr[ROWS][COLS]);
char check(char arr[ROWS][COLS]);

#endif
三子棋的主要代码如上。可以写在一个.c文件中,像上面这样,代码容易读懂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: