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

【C语言】实现一个好玩的三子棋

2016-10-11 21:12 429 查看
想要用C语言写一个简单的三子棋游戏,首先要打印出三字棋的布局,对棋盘进行初始化;

在玩游戏时,玩家和电脑进行对完,因此要设计玩家和电脑两部分;

电脑和玩家下完一个棋之后,则要进行判断棋盘是否满,以及玩家和电脑哪一边赢。

首先是头文件

game.h:

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define rows 3
#define cols 3

int print_chessboard(char chessboard[rows][cols]);//打印棋盘
int init(char chessboard[rows][cols]);// 初始化棋盘
int menu();//菜单函数
int ManPlay(char chessboard[rows][cols]);//玩家玩
void CalPlay(char chessboard[rows][cols]);//电脑玩
int chess_full(char chessboard[rows][cols]);//判断棋盘是否满
int Judge(char chessboard[rows][cols]);//判断输赢
void Game(char chessboard[rows][cols]);//游戏

接下来是函数的实现,这一部分重要的是判断棋盘是否满和判断玩家和电脑哪一方赢

在电脑玩的时候要用到随机数产生1--3之间的随机数

game.c

#include"game.h"
int count = 9;

//打印棋盘
int print_chessboard(char chessboard[rows][cols])
{
int i = 0;
for (i = 0; i < rows - 1; i++)
{
printf(" %c | %c | %c \n", chessboard[i][0], chessboard[i][1], chessboard[i][2]);
printf("___|___|___\n");
}
printf(" %c | %c | %c \n", chessboard[2][0], chessboard[2][1], chessboard[2][2]);
printf("   |   |  \n");
return 0;
}

//初始化棋盘
int init(char chessboard[rows][cols])
{
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
chessboard[i][j] = ' ';
}
}
return 0;
}

//菜单函数
int menu()
{
printf("********************************************\n");
printf("********************************************\n");
printf("*************welcome to sanziqi*************\n");
printf("*************   1.      play   *************\n");
printf("*************   0.      exit   *************\n");
printf("********************************************\n");
printf("********************************************\n");
return 0;
}

//玩家玩
int ManPlay(char chessboard[rows][cols])
{
int x = 0, y = 0;
int ret = 0;
printf("请输入坐标:\n");
scanf("%d%d", &x, &y);
if (x<1 || x>3 || y<1 || y>3 || chessboard[x - 1][y - 1] != ' ')
{
printf("此处不能下棋!\n");
ManPlay(chessboard);
}
else
{
chessboard[x - 1][y - 1] = 'X';
count--;
}
return 0;
}

//电脑玩
void CalPlay(char chessboard[rows][cols])
{
printf("电脑下棋:\n");
int x = 0;
int y = 0;
srand((unsigned)time(NULL));
x = rand() % 3;
y = rand() % 3;
while (chessboard[x][y] != ' ')
{
x = rand() % 3;
y = rand() % 3;
}
chessboard[x][y] = 'O';
count--;
}

//判断棋盘是否满
int chess_full(char chessboard[rows][cols])
{
if (count == 0)
return 1;
return 0;
}

//判断输赢
int Judge(char chessboard[rows][cols])
{
int ret = 2;
int i = 0;
if ((chessboard[0][0] == chessboard[1][1]) && (chessboard[1][1] == chessboard[2][2]))
{
if (chessboard[1][1] == 'X')
{
ret = 1;
}
if (chessboard[1][1] == 'O')
{
ret = 0;
}
}
if ((chessboard[0][2] == chessboard[1][1]) && (chessboard[1][1] == chessboard[2][0]))
{
if (chessboard[1][1] == 'X')
{
ret = 1;
}
if (chessboard[1][1] == 'O')
{
ret = 0;
}
}
for (i = 0; i < rows; i++)
{
if ((chessboard[i][0] == chessboard[i][1]) && (chessboard[i][1] == chessboard[i][2]))
{
if (chessboard[i][1] == 'X')
{
ret = 1;
}
if (chessboard[i][1] == 'O')
{
ret = 0;
}
}
}

for (i = 0; i < rows; i++)
{
if ((chessboard[0][i] == chessboard[1][i]) && (chessboard[1][i] == chessboard[2][i]))
{
if (chessboard[1][i] == 'X')
{
ret = 1;
}
if (chessboard[1][i] == 'O')
{
ret = 0;
}
}
}
return ret;
}

//游戏
void Game(char chessboard[rows][cols])
{
int i = 0;
int ret = 0;
//	char chessboard[rows][cols];
init(chessboard);
print_chessboard(chessboard);
while ((chess_full(chessboard) == 0))
{
ManPlay(chessboard);
ret = Judge(chessboard);
if (ret == 1)
{
printf("玩家赢了!\n");
break;
}
else if (ret == 0)
{
printf("电脑赢了!\n");
break;
}
CalPlay(chessboard);
print_chessboard(chessboard);
ret = Judge(chessboard);
if (ret == 1)
{
printf("玩家赢了!\n");
break;
}
else if (ret == 0)
{
printf("电脑赢了!\n");
break;
}
}
}

最后是测试函数:

text.c

#include"game.h"

int main()
{
int input = 0;
char chessboard[rows][cols];
menu();
while (1)
{
printf("请选择:");
scanf("%d", &input);
if (input == 1)
{
printf("进入游戏\n");
Game(chessboard);
break;
}
else if (input == 0)
{
printf("退出游戏!\n");
exit(0);
break;
}
else
{
printf("输入有误!\n");
}
}
return 0;
}

下来我们就可以玩三子棋了



 

 


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息