首页 > 其他分享 >C语言实现三子棋游戏

C语言实现三子棋游戏

时间:2023-01-20 19:31:20浏览次数:32  
标签:游戏 int 三子 C语言 col board printf COL ROW

什么是三子棋游戏?三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,棋盘被占满前率先将自己的三个棋子走成一条线就视为胜利,否则为平局。

如何实现游戏?

实现游戏外观和游戏功能

游戏外观实现:​

玩游戏首先得有一个游戏选择界面,以及控制游戏的开始与退出的开关

void meau()  //显示游戏选择界面
{

printf(" 三子棋游戏 \n");

printf(" 1.开始游戏 \n");

printf(" 0.退出游戏 \n");

}

int main()

{

int input = 0;

int board[ROW][COL] = { 0 };

srand((unsigned int)time(NULL));利用srand(int)函数使得rand()函数每次返回的结果不同 do {

meau();

scanf("%d", &input);//控制开关

switch (input)

{

case 1:printf("开始游戏\n");game();

break;

case 0:printf("退出游戏\n");

break;

default:printf("输入错误,请重新输入\n");

break;

}


} while (input);

}

游戏功能实现

1.初始化并展示出一个九宫格棋盘

​void Initboard(char arr[ROW][COL],int row,int col)//初始化棋盘
{

int i = 0,j=0;

for (i = 0; i < row; i++)

{

for (j = 0; j < col; j++)

{

arr[i][j] = ' ';

}

}

}

void Printboard(char arr[ROW][COL], int row, int col)//显示棋盘
{

int i = 0, j = 0;

for (i = 0; i < row; i++)

{

for (j = 0; j < col; j++)

{

printf(" %c ", arr[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");

}

}

}

2.有了棋盘之后,玩家和电脑依次下棋

​void Player(char board[ROW][COL], int row, int col)//玩家下棋

{


int x = 0, y = 0;

while (1)

{

printf("玩家走\n");

scanf("%d%d", &x, &y);

if (x >= 1 && x <= row && y >= 1 && y <= col)//确定坐标,不能越界

{

if (board[x - 1][y - 1] == ' ')

{

board[x - 1][y - 1] = '*';

break;

}


}

else

{

printf("坐标越界,请重新输入\n");

}

}

}

void Computer(char board[ROW][COL], int row, int col)
//电脑下棋
{

printf("电脑走\n");

int x = 0, y = 0;

while (1)

{

x = rand()% row; //随机生成0~2的数

y = rand() % col;

if (x >= 0 && x <= row - 1 && y >= 0 && y <= col - 1)

{

if (board[x][y] == ' ')

{

board[x][y] = '#';

break;

}


}


}

}

3.每次下完之后,判断输赢

​char IsWin(char board[ROW][COL], int row, int col)

{


for (int i = 0; i < row; i++) //行相同

{

if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')

{

return board[i][0];

}

}


for (int 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[1][1] != ' ')
//对角1
{

return board[1][1];

}

if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
//对角2
{

return board[1][1];

}

int ret = IsFull(board, ROW, COL);

if (0 == ret)

{

return 'C';//棋盘为占满

}

return 'Q';//棋盘已满

}
int IsFull(char board[ROW][COL], int row, int col)
//判断棋盘状态
{

for (int i = 0; i < row; i++)

{

for (int j = 0; j < col; j++)

{

if (board[i][j] == ' ')

return 0; //棋盘未满

}

}

return 1;//棋盘已满

}

游戏功能函数实现后,包装在一个函数中

void game()

{

char board[ROW][COL] = { 0 };

char ret;

Initboard(board, ROW, COL);

Printboard(board, ROW, COL);
//在棋盘未满之前,玩家与电脑重复下棋步骤
while (1)

{

Player(board, ROW, COL);//玩家走

system("cls"); //屏幕清屏

Printboard(board, ROW, COL);//打印当前棋盘状态

ret=IsWin(board, ROW, COL);//判断是否赢

if (ret != 'C') //棋盘已满,则跳出下棋步骤

break;

Computer(board, ROW, COL);//电脑走

system("cls");//屏幕清屏

Printboard(board, ROW, COL);//打印当前棋盘状态

ret = IsWin(board, ROW, COL);//判断是否赢

if (ret != 'C')//棋盘已满,则跳出下棋步骤

break;

}

if (ret == '*')

{

printf("玩家赢\n");

}

else if (ret == '#')

{

printf("电脑赢\n");

}

else

{

printf("平局\n");

}



}

标签:游戏,int,三子,C语言,col,board,printf,COL,ROW
From: https://blog.51cto.com/u_15466618/6020752

相关文章

  • 第 1 天|基于 AI 进行游戏开发:5 天创建一个农场游戏!
    欢迎使用AI进行游戏开发!在本系列中,我们将使用各种AI工具,在5天内创建一个功能完备的农场游戏。到本系列结束时,你将了解到如何将多种AI工具整合到游戏开发流程中。......
  • [数据结构] 栈 (C语言)
    栈栈的概念栈(stack)是一种特殊的线性表存储结构,其一端可以进行插入和弹出的操作,而另一端是封死的。可以把栈想象成是一个柱状的容器。就比如一个乒乓球筒,我们只能在筒的......
  • C语言概述
    一.C语言程序初识,先介绍一个简单的C语言程序:#include<stdio.h>intarr[100000];//声明一个较大的整型数组,尽量放在函数外部/*原因是:函数内部申请的局部变量空间,来自于......
  • C语言自加问题与整形提升
    提问:   在程序里,++a和+a在sizeof里,明显++a没有进行运算而+a进行运算并整形提升,这是为什么?解答: 这跟提升没有关系,这是运算优先级问题++a,运算优先级最高,所以是先进......
  • 如何使用C语言实现汉诺塔
    现有3个柱子A、B、C,有n个圆盘在A柱上,要实现n个圆盘要从A柱从大到小移动到C柱。思路:先将n-1个圆盘移动到B柱上,然后将最后一个圆盘移动到C柱上,最后将B柱上的n-1个圆盘移动到C......
  • c语言 打印数字金字塔
    提问: c语言。打印数字金字塔。for循环中为什么是j<i+1呢?以及如何判断这里的控制变量到底是与n有关还是与循环变量i有关呢?需要详细的解答 #include<stdio.h>voidpi......
  • c语言实现扫雷
    前言:上一篇博客我们写了三子棋小游戏,紧着这我们趁热打铁,继续巩固知识点,再来写一个更有意思的扫雷吧,想必扫雷大家都玩过,我就不做介绍了。概述:我们一样将代码分为三部分来写,主......
  • C语言运算符&优先级
    运算符优先级这一块即使你用了很久C语言,如果不刻意记忆,也是容易搞混的.C语言的运算符非常多,一共有50多种,可以分成若干类。算术运算符算术运算符专门用于算术......
  • C语言学院教学信息管理系统[2023-01-19]
    C语言学院教学信息管理系统[2023-01-19]30、某学院教学信息管理系统功能:1、每一条记录包括一位教师的职工号、姓名、职称、性别、3门主讲课程(课程名称、开课学期、课......
  • C语言核酸检测系统[2023-01-19]
    C语言核酸检测系统[2023-01-19]项目九:核酸检测系统1.教学内容实现一个简单的核酸检测系统,业务包括:将被检测人员的信息精准记录在系统中,并实时更据,实现精准监控并快速......