【c苑杂坛之小游戏系列】 三子棋游戏

news/2025/1/8 22:14:07/

【c苑杂坛之边学边玩】 三子棋游戏带你初识C语言

  • 1.游戏说明
  • 2.效果展示
  • 3.游戏代码

1.游戏说明

三子棋游戏相信大家都知道,在这里不去讲述游戏背景,对本代码实现的三子棋游戏进行一定的说明。

博友们可以复制一下代码运行游戏! 注意文件创建哦。共三个文件。

#define ROW 3    //表示该棋盘行数为3
#define COL 3    //表示该棋盘列数为3//声明棋盘初始化函数
void init_board(char board[ROW][COL], int row, int col);//打印棋盘函数声明
void print_board(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);//判断输赢函数声明
int is_win(char board[ROW][COL], int row, int col);

2.效果展示

在这里插入图片描述
在这里插入图片描述

3.游戏代码

该全套代码需要三个文件实现:game.c、game.h、test.c。其中在test.c文件存放代码块为游戏主体函数。例如:菜单打印、选择功能、游戏流程控制功能及主函数。game.c文件代码为游戏功能的实现函数及初始化函数。

test.c文件代码:

#define  _CRT_SECURE_NO_WARNINGS 1
/*
代码功能:测试逻辑
*/#include"game.h"void menu()  //菜单函数
{printf("************************\n");printf("********1.play**********\n");printf("********0.exit**********\n");printf("************************\n");
}void game() //游戏主体函数
{char board[ROW][COL];   //定义3*3数组来存放"棋子"数据char ret = 0;			//判断游戏结果的变量/*ret=*则是玩家赢#则是电脑赢Q则是平局c则是游戏继续*/init_board(board, ROW, COL); //棋盘初始化函数print_board(board, ROW, COL);//棋盘打印函数while (1)                    //玩家电脑轮流下棋{player_move(board, ROW, COL);  //玩家下棋函数print_board(board, ROW, COL);  //更新棋盘函数ret = is_win(board, ROW, COL); //游戏输赢判断函数if (ret != 'c'){break;}system("cls");                  //清屏函数computer_move(board, ROW, COL); //电脑下棋函数print_board(board, ROW, COL);  // 更新棋盘ret = is_win(board, ROW, COL); //判断输赢函数if (ret != 'c'){break;}}if (ret == '#')                 //结果判断printf("电脑赢了\n");else if (ret == '*')printf("玩家赢了\n");else if (ret == 'Q')printf("平局\n");}
void test()                                  //游戏步骤运行函数
{srand((unsigned int)time(NULL));      //时间戳,使得电脑随机获取棋盘坐标int input = 0;                        //功能选择函数  1.开始游戏  0. 退出游戏 do                                    //实现菜单打印、共能选择和功能的开始{menu();printf("请选择->");scanf_s("%d", &input);switch (input){case 1:                            //选择1 调用game()函数进行游戏game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);
}int main()  //主函数调用test()函数实现游戏功能
{test();return 0;
}

game.c文件代码:

#define  _CRT_SECURE_NO_WARNINGS 1
/*
代码功能:游戏逻辑
*/
#include<stdio.h>
#include"game.h"
void init_board(char board[ROW][COL], int row, int col)//棋盘初始化函数,开始时3*3数组保存空格数据
{int i = 0;int j = 0;for (i = 0; i < ROW; i++)for (j = 0; j < COL; j++)board[i][j] = ' ';
}void print_board(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]);//打印空格使得3*3数组数据居中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)//玩家下棋函数
{printf("玩家下棋\n");while (1){printf("请输入坐标");int x = 0;int y = 0;scanf_s("%d%d", &x, &y);//接收玩家下棋左边if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' ')//坐标变换,数组下标从0开始,改为从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;//坐标范围0-2   对3进行取余则余数对应0-2int y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';//电脑棋子设定为#break;}}
}static int is_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;
}int 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][0];}}//判断三列是否连线for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[1][i];}}//判断对角线是否连线if (board[1][1] == board[0][0] && 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 (is_full(board, row, col) == 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 init_board(char board[ROW][COL], int row, int col);//打印棋盘
void print_board(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);//判断输赢
int is_win(char board[ROW][COL], int row, int col);

http://www.ppmy.cn/news/381270.html

相关文章

【娱乐大闯关】C语言实现猜数字小游戏

文章目录 1、打印菜单2、选择器3、猜数字——核心生成随机数 4、头文件5、主函数6、执行结果 猜数字游戏规则&#xff1a; 让电脑随机生成一个数字&#xff0c;然后玩家输入所猜的数&#xff0c;再让电脑进行比较&#xff0c;若比随机数大&#xff0c;则提示&#xff1a;猜大了…

三子棋小游戏——C语言版

三子棋—c语言版本 一、问题描述二、基本思路三、操作步骤1.打印菜单2.初始化棋盘3.打印棋盘4.玩家下棋5.电脑下棋5.判断胜负 四、全部代码1.game.h2.game.c3.test.c 一、问题描述 本次三子棋小游戏代码全部由C语言实现&#xff0c;运用了C语言的二维数组&#xff0c;循环&…

C语言 三子棋小游戏

因为代码有些多&#xff0c;所以使用了头文件来方便理解。 void initial(char arr[ROW][COL],int row,int col) //初始化棋盘函数 { for(row0;row<ROW;row) {for(col0;col<COL;col){arr[row][col] ;printf("%c",arr[row][col]);if(col<COL -1)printf(&qu…

C语言初级小游戏——三子棋

目录 前言 一、游戏的设计思路 1.游戏模式 2.设计模块 二、分层说明 1.game.h文件 1.1 在此文件中&#xff0c;我们对其它需要在此游戏中实现的功能所对应的函数库进行了包含 1.2 进行符号定义 1.3 函数声明 2.game.c文件 2.1 对二维字符数组进行初始化 2.2 展示棋盘…

【C语言】三字棋小游戏详解

前言&#xff1a;今天我们来用C语言写一个三子棋小游戏&#xff0c;三子棋&#xff0c;是黑白棋的一种。三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉、一条龙、井字棋等。这里我们写的是玩家与电脑对战的一个代码&#xff0c;如果想跟朋友一起玩也可以自己稍作修…

【C语言】三子棋小游戏设计

设计思路大致如下&#xff1a; 将游戏函数与主函数分块&#xff0c;主函数需要调用另一个源文件里的游戏函数&#xff0c;则在自定的头文件里要做好声明&#xff0c;头文件如下 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #inclu…

【C语言小游戏】猜数字游戏

hello&#xff0c;csdn的小伙伴呢&#xff0c;在前面&#xff0c;我们已经初步了解了c语言&#xff0c;并且系统的学习了分支与循环的内容。今天我们就将分支与循环的内容综合应用一下&#xff0c;来做一个很简单猜数字小游戏。 目录 程序的需求以及最终代码展示 一、实现打印…

【C语言入门小游戏】三子棋

快点点赞 目录 文本目录 前言 一、游戏整体思路 二、代码实现以及思路 1.棋盘的初始化 2.棋盘的打印 3.玩家下棋 4.电脑自动下棋&#xff08;智障化下棋&#xff09; 5.判断输赢 三、代码的运行 前言 相信很多学习c语言的小伙伴都想设计一款属于自己的小游戏吧&#xff0c;那…