失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言#(C语言小游戏:三子棋)

C语言#(C语言小游戏:三子棋)

时间:2023-10-16 22:30:14

相关推荐

C语言#(C语言小游戏:三子棋)

目录

一、准备与规划

二、各类步骤

1、制作简易的界面(在test.c文件中)​编辑

2、游戏开始选择(在test.c文件中)

3、设置行,列(建议使用预处理指令#define定义)(在game.h中)创建数组存储数据(在test.c中)

​编辑

(game.h)

4、初始化棋盘

5、打印棋盘

6、玩家下棋

7、电脑下棋

8、判断游戏状态

三、代码段

一、准备与规划

(上图来自比特鹏哥直播视频截图)

二、各类步骤

1、制作简易的界面(在test.c文件中)

2、游戏开始选择(在test.c文件中)

(可以在do while循环语句里面放一个switch分支语句)

3、设置行,列(建议使用预处理指令#define定义)(在game.h中)创建数组存储数据(在test.c中)

(game.h)

(test.c)

4、初始化棋盘

(test.c)

(game.h)

(game.c)

5、打印棋盘

(test.c)

(game.h)

(game.c)

6、玩家下棋

(test.c)(game.h)(game.c)

7、电脑下棋

(test.c)(game.h)(game.c)

8、判断游戏状态

(test.c)

(game.h)

(game.c)

三、代码段

test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){printf("**************************\n");printf("******* 三子棋游戏 *******\n");printf("******* 1.play *******\n");printf("******* 0.exit *******\n");printf("**************************\n");}void game(){//存储数据char board[ROW][COL];//初始化棋盘IsitBoard(board, ROW, COL);//打印棋盘——本质是打印数组内容DisplayBoard(board, ROW, COL);//*代表玩家赢//#代表电脑赢//'Q'代表平局//'C'代表游戏继续char ret = 0;while (1){//玩家下棋PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断玩家是否赢得游戏ret = InWin(board, ROW, COL);if (ret != 'C')break;//电脑下棋ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断电脑是否赢得游戏if (ret != 'C')break;}if (ret == '*'){printf("玩家赢\n");}else if (ret == '#'){printf("电脑赢\n");}else{printf("平局\n");}}int main(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:printf("游戏开始\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入");break;}} while (input);return 0;}

game.c

#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void IsitBoard(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++){board[i][j] = ' ';}}}void DisplayBoard(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++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){int j = 0;for (j = 0; j < col; j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}}void PlayerMove(char board[ROW][COL], int row, int col){int x = 0;int y = 0;printf("玩家走:>\n");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 ComputerMove(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;}}}int IsFull(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 InWin(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][0] != ' '){return board[i][0];break;}}//判断三列int j = 0;for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' '){return board[0][j];break;}}//判断对角线if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' '){return board[0][0];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' '){return board[0][2];}//如果棋盘满了返回1,没满返回0int ret = IsFull(board, row, col);if (ret == 1){return 'Q';}//继续return 'C';}

game.h

#pragma once#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3//竖#define COL 3//横//函数声明//初始化棋盘的函数void IsitBoard(char board[ROW][COL], int row, int col);//打印棋盘的函数void DisplayBoard(char board[ROW][COL], int row, int col);//玩家下棋的函数void PlayerMove(char board[ROW][COL], int row, int col);//电脑下棋的函数void ComputerMove(char board[ROW][COL], int row, int col);//判断游戏状态的函数char InWin(char board[ROW][COL], int row, int col);

如果觉得《C语言#(C语言小游戏:三子棋)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。