c语言实现三子棋
创始人
2024-04-13 21:22:47

目录

一、三子棋玩法

二、需要实现的游戏功能

三、拆分代码

3.1游戏菜单

3.2初始化棋盘

3.2.1函数调用

3.2.2函数体实现

3.3打印棋盘

3.3.1函数调用

3.3.2函数体实现

3.4玩家下棋

3.4.1函数调用

3.4.2函数体实现

3.4.3效果展示

3.5电脑下棋

3.5.1函数调用

3.5.2函数体实现

 3.5.3效果展示

3.6判断输赢

3.6.1函数调用

3.6.2函数体实现

3.6.3效果展示

3.7游戏逻辑(主函数)

 四、代码

4.1game.h(函数声明)

4.2game.c(函数体实现)

4.3main.c(函数逻辑)

END.


一、三子棋玩法

三子棋相信大家都不陌生,是一款非常好玩的益智游戏。

游戏规则是:谁先将三颗棋子连成一条线,谁就获胜

二、需要实现的游戏功能

1.需要有一个棋盘下棋

2.玩家能下棋,电脑能自动下棋

3.能判断输赢

三、拆分代码

这次的代码使用game.h(函数声明)game.c(函数体实现)main.c(游戏逻辑实现)

三子棋其实,用的是一个3*3的格子,我们可以用二维数组来实现 

其中的行(row)和列(col)使用宏定义,这样我们修改棋盘大小时会很方便,只需要改这两个值即可。

 

3.1游戏菜单

用printf实现

3.2初始化棋盘

3.2.1函数调用

将数组,行和列传过去

3.2.2函数体实现

 

3.3打印棋盘

3.3.1函数调用

3.3.2函数体实现

使用for循环实现

 

3.4玩家下棋

3.4.1函数调用

 

3.4.2函数体实现

3.4.3效果展示

3.5电脑下棋

3.5.1函数调用

3.5.2函数体实现

 猜数字游戏icon-default.png?t=M85Bhttp://t.csdn.cn/NtRT7

 3.5.3效果展示

3.6判断输赢

3.6.1函数调用

游戏无非就是这4种情况

3.6.2函数体实现

 

 

 判断是否为平局的函数

 

3.6.3效果展示

 

3.7游戏逻辑(主函数)

 主函数逻辑

游戏逻辑 

 

 四、代码

4.1game.h(函数声明)

#pragma once
#include
#include
#include
#define ROW 3
#define COL 3
//初始化棋盘
void Initboard(char board[ROW][COL],int row, int col);
//打印棋盘
void Display(char board[ROW][COL],int  row, int col);
//玩家下棋
void Player_move(char board[ROW][COL],int row,int col);
//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col);
//判断输赢
char is_win(char board[ROW][COL], int row, int col);

4.2game.c(函数体实现)

#include"game.h"//初始化
void Initboard(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){board[i][j] = ' ';}}
}//打印棋盘
void Display(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[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");}}
}//玩家下棋
void Player_move(char board[ROW][COL], int row, int col)
{int x = 0;int 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");}}else{printf("输入非法,重新输入\n");}}
}//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋\n");while (1){int x = rand() % row;int y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}//判断是否为平局
static int If_full(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' '){return 0;}}}return 1;
}//判断输赢,平局还是继续的状态
char is_win(char board[ROW][COL], int row, int col)
{//判断行int i = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' '){return board[i][1];}}//判断列int j = 0;for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][i] != ' '){return board[1][j];}}//对角线if (board[0][0] == board[1][1] && board[1][1] == board[2][2]  && board[1][1] != ' '){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 (If_full(board, ROW, COL) == 1){return 'Q';}return 'C';
}

4.3main.c(函数逻辑)

#include "game.h"menu()
{printf("***************************\n");printf("***********1.play**********\n");printf("***********0.exit**********\n");printf("***************************\n");
}
void game()
{char ret = 0;char board[ROW][COL] = {0};//初始化棋盘Initboard( board, ROW, COL);//打印棋盘Display(board, ROW, COL);while (1){//玩家下棋Player_move(board, ROW, COL);Display(board, ROW, COL);ret = is_win(board,ROW,COL);if (ret != 'C'){break;}//电脑下棋Computer_move(board, ROW, COL);Display(board, ROW, COL);ret = is_win(board,ROW,COL);if (ret != 'C'){break;}}/*	ret返回'C'继续'*'玩家赢'#'电脑赢'Q'平局*/if (ret == '*'){printf("玩家赢\n");}else if ( ret=='#'){printf("电脑赢\n");}else{printf("平局\n");}}int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请输入模式\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("输入错误,请重新输入\n");}} while (input);return 0;
}

 


END.

希望我的内容能给你带来帮助。

A huge tree that fills one’s arms grows from a tiny seedling; a nine-storied tower rises from a heap of earth; a thousand li journey starts with the first step.

合抱之木,生于毫末,九层之台,起于累土,千里之行,始于足下。——老子

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
tag是什么意思 tab是什么... 一、B端基础控件的认识控件一词,直译的话可以翻译成 “用来控制的元件”,是我们对 B 端系统进行信息...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
tag是什么意思 tab是什么... 一、B端基础控件的认识控件一词,直译的话可以翻译成 “用来控制的元件”,是我们对 B 端系统进行信息...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...