(C语言)用C语言编写小游戏——三子棋

article/2025/10/27 6:55:38

目录

三子棋效果展示

三子棋的功能实现

1、初始化棋盘格

2、打印棋盘

3、玩家下棋

4、电脑下棋

5、判断输赢(玩家赢/电脑赢/平局)

完整代码展示


三子棋小游戏的代码实现分为三个文件,test.c(测试游戏功能)、game.h(头文件的包含和函数的声明)、game.c(实现函数功能)

后附三个文件完整代码

三子棋效果展示


                                   

三子棋的功能实现


1、初始化棋盘格

将定义的二维数组中的数据全部初始化为空格

void InitBoard(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] = ' ';}}
}

2、打印棋盘

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){for (j = 0;j < col ;j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}
}

3、玩家下棋

void PlayerMove(char board[ROW][COL],int row,int col)
{int a = 0;int b = 0;printf("玩家走:\n");while(1){printf("请输入下棋的坐标:");scanf("%d %d",&a,&b);if (a>0 && a<=row && b>0 && b<=col){if (board[a-1][b-1] == ' '){board[a-1][b-1] = '*';break;}else{printf("坐标被占用,请重新输入\n");}}else{printf("坐标不合法,请重新输入\n");}}}

4、电脑下棋

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;}}
}

5、判断输赢(玩家赢/电脑赢/平局)

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 IsWin(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];}}//判断三列for (i = 0;i < row;i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[1][i];}}//判断对角线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];}//判断平局//满1int ret = IsFull(board,ROW,COL);if (ret == 1)return 'Q';return 'C';
}

完整代码展示

1、test.c

#include "game2.h"void menu()
{printf("***************************\n");printf("*******   1.play   ********\n");printf("*******   0.exit   ********\n");printf("***************************\n");
}void game()
{char mine[ROWS][COLS] = {0};char show[ROWS][COLS] = {0};//初始化棋盘InitBoard(mine,ROWS,COLS,'0');InitBoard(show,ROWS,COLS,'*');//打印棋盘//DisplayBoard(mine,ROW,COL);DisplayBoard(show,ROW,COL);//布置雷SetMine(mine,ROW,COL);//DisplayBoard(mine,ROW,COL);//扫描雷FindMine(mine,show,ROW,COL);
}int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case 1:game();break;case 0:printf("已退出游戏\n");break;default:printf("输入错误,请重新选择\n");break;}}while(input);return 0;
}

2、game.h

#ifndef game2_h
#define game2_h#include <stdio.h>
#include "stdlib.h"
#include "time.h"#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINEC 10//函数声明
//初始化棋盘
void InitBoard(char board[ROWS][COLS],int row,int col,char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS],int row,int col);
//布置雷
void SetMine(char board[ROWS][COLS],int row,int col);
//排查雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);#endif /* game2_h */

3、game.c

#include "game2.h"void InitBoard(char board[ROWS][COLS],int row,int col,char set)
{int i = 0;int j = 0;for (i = 0; i < row;i++){for (j = 0;j < col;j++){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS],int row,int col)
{int i = 0;int j = 0;printf("--------扫雷游戏--------\n");for (i = 0; i <= col; i++){printf("%d ",i);}printf("\n");for (i = 1;i <= row;i++){printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",board[i][j]);}printf("\n");}printf("--------扫雷游戏--------\n");
}void SetMine(char board[ROWS][COLS],int row,int col)
{int count = MINEC;while(count){int i = rand() % row + 1;int j = rand() % col + 1;if (board[i][j] == '0'){board[i][j] = '1';count--;}}}int get_mine_count(char mine[ROWS][COLS],int x,int y)
{return mine[x-1][y-1] + mine[x][y-1] + mine[x+1][y-1] + mine[x-1][y] + mine[x+1][y] + mine[x-1][y+1] +  mine[x][y+1] + mine[x+1][y+1] - 8*'0';
}void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{//1、输入排查的坐标//2、检查坐标处是不是雷//(1)是雷 - 很遗憾炸死//(2)不是雷 - 统计坐标周围有几个雷 - 存储排查雷的信息到show数组,游戏继续int x = 0;int y = 0;int win = 0;while(win < row*col - MINEC){printf("请输入要排查的坐标:");scanf("%d %d",&x,&y);if (x>=1 && x<= row && y>=1 && y<=col){if(mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int count = get_mine_count(mine,x,y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);win++;}}else{printf("坐标不合法,请重新输入\n");}}if (win == row*col - MINEC){printf("成功\n");DisplayBoard(mine, ROW, COL);}}


http://chatgpt.dhexx.cn/article/fauAkSls.shtml

相关文章

c语言编写的小游戏(c语言编写小游戏入门)

C语言编写是要注意什么&#xff1f; 因此&#xff0c;在编写选择语句之前&#xff0c;应该首先明确判断条件是什么&#xff0c;并确定当判断结果为“真”或“假”时应分别执行什么样的操作(算法) c语言编写小游戏请提供俄罗斯方块&#xff0c;坦克大战之类的小游戏的程序的c 应…

(C语言)用C语言编写小游戏——扫雷

目录 扫雷效果展示 扫雷的功能实现 1、初始化棋盘格 2、 打印棋盘 3、布置雷 4、排查雷 完整代码展示 扫雷小游戏的代码实现分为三个文件&#xff0c;test.c&#xff08;测试游戏功能&#xff09;、game.h&#xff08;头文件的包含和函数的声明&#xff09;、game.c&…

详解5个C语言简单易懂小游戏

文章目录 前言一、准备工作二、游戏菜单三、游戏内容1.猜数字2.三子棋3.扫雷4.五子棋5.飞行棋 总结 前言 我们通过5个简单易懂的小游戏来加强我们对C语言的认识&#xff0c;这五个小游戏不仅有单人&#xff0c;还有人机对战和人人对战。让我们在学习之余来上一局紧张刺激的小游…

C语言趣味小游戏——扫雷(详解版)

前言 ​ 全篇无任何废话&#xff0c;本文的解释大多数都在代码段中&#xff0c;所以一定要看代码&#xff0c;边看边学边理解。 这只是初学者入门的一个小游戏&#xff0c;不难懂&#xff0c;没有什么复杂的内容 可以先学习一下比扫雷还简单的猜数字和三子棋 C语言趣味小游戏—…

C语言小程序游戏

c语言小程序游戏 ​ 本代码是我大一刚学完c语言自己编写的&#xff0c;三个游戏分别是飞机竞速、走迷宫和魔塔&#xff0c;满满的都是回忆。 1、不可能的任务-飞机竞速 ​ 这种游戏在以前小时候玩的游戏机里面玩过&#xff0c;那时抱着个游戏机一玩就是一下午&#xff0c;如…

C语言简易小游戏

文章目录 前言一、猜数字游戏二、旋转光标三、多个字符从两端移动&#xff0c;向中间汇聚四、恶搞&#xff1a;关机小程序五、闪烁的五彩爱心六、扫雷七、三子棋 前言 本篇博客将带领大家自己动手写一下一些C语言小游戏&#xff1b;以增加对于C语言的兴趣&#x1f600;&#x…

c语言成绩管理系统(链表)

C语言实现了学生成绩管理系统&#xff0c;可以进行学生成绩的增加&#xff0c;删除&#xff0c;修改&#xff0c;查询&#xff0c;计算平均成绩和展示。 开发语言&#xff1a;C语言 开发工具&#xff1a;Dev c 开发者&#xff1a;呵呵up 创建学生成绩信息 2. 插入学生信息 3.…

C语言实现学生成绩管理系统设计

本系统有增加学生记录、修改学生记录、删除学生记录、按姓名查询学生记录、按C语言成绩对学生进行排序、退出系统6大功能。 能够对学生的姓名&#xff0c;学号&#xff0c;c语言成绩做相应的操作。 在检测到输入成绩大于55时&#xff0c;会自动加上5。 该管理系统设计功能模块…

c语言成绩管理系统常见错误,求教 学生成绩管理系统出错

已结贴√ 问题点数:20 回复次数:5 求教 学生成绩管理系统出错 小弟刚做了个学生成绩管理系统 编译无错误 但是运行的时候连选择函数都不能 特来求教 望高手解释 代码如下: #include #include #define N 20 #define M 100 struct score {int scr1; int scr2; int scr…

c语言课程设计 学生成绩管理系统

学生成绩管理系统要求&#xff1a; 1、系统功能以菜单方式工作&#xff1b; 2、数据的输入&#xff1b; 3、数据的插入&#xff1b; 4、数据的输出&#xff1b; 5、数据的删除&#xff1b; 6、数据的查找&#xff0c;通常以两种方式进行查找&#xff0c;如姓名、学号&#xff1…

C语言学生成绩管理系统详解

文章目录 一、系统概述二、数据类型三、自定义函数说明四、运行界面五、源代码 源代码请直接跳到最后 引言&#xff1a;最近写了C语言的大作业&#xff0c;感觉做得还行&#xff0c;记录一下&#xff0c;给后人一些参考&#xff0c;给自己留更深印象方便后续改进&#xff01; …

学生成绩管理系统 C语言

基础篇问题&#xff1a; 1.输出如下菜单&#xff1a; *********************学生成绩管理系统******************* * 1 成绩录入 2 成绩查询 3 计算平均分 * * 4 计算最高分 5 排名 6 退出 * ******************************…

C语言编程学生成绩管理系统

目录 一、介绍 二、功能 1.录入学生 2.删除学生信息 3.修改学生信息 4.查询学生信息 5.所有学生信息 6.成绩排序 7.退出程序 三、代码 1.主函数 2.头文件 3.函数封装库 一、介绍 利用C语言&#xff0c;运用链表、指针、封装函数等基本知识实现一个学生管理系统。通…

C语言学生成绩管理系统

制作学生成绩管理系统&#xff0c;可以实现以下功能&#xff1a; 每条记录包括&#xff1a;学号、姓名、专业和5门课程的成绩&#xff1b;能够实现添加、删除、修改功能&#xff1b;能够计算某学生的总分和平均分&#xff1b;能按照总分排序输出&#xff1b; 利用C语言的基本…

c语言成绩管理系统

关注微信公众号每日新觉&#xff0c;私聊作者获取提取密码点击下面链接&#xff0c;私聊作者获取提取密码。https://mp.weixin.qq.com/s/QgRQ3YB2JqCvNOGQHQ57rA 作者每日新觉&#xff0c;是一名热爱技术和编程的年轻程序员。他在计算机科学和软件工程领域有着广泛的研究和实践…

c语言成绩管理系统1.0,c语言成绩管理系统完整附源码v1.0 免费版

c语言成绩管理系统拥有和hello word一样的江湖地位&#xff0c;初学C语言的朋友基本都会从管理系统开始入手学习&#xff0c;对于很多大学生来说更是如此&#xff0c;今天为大家带来的这款系统以及源码希望能对大家学习学C语言有所帮助&#xff0c;欢迎下载使用。 C语言介绍 C语…

C语言学生成绩管理系统(综合项目)

1. 这个代码主要实现以下功能&#xff1a; 2. 用到的主要参数有&#xff1a; 1.整型变量int n;用于储存学生人数和之后的循环判断。 2.字符串char name[][];用于储存姓名。 3.浮点型变量float score[];用于储存成绩。 4.长整型变量long ID[Max];用于储存学号。 3.…

【高级语言程序设计】c语言-学生成绩管理系统

c语言期末作业 声明&#xff1a;未经允许&#xff0c;请勿转载 学生成绩管理系统 本系统能够对学生成绩管理功能&#xff0c;包括&#xff1a; 1.对多个学生成绩进行管理&#xff0c;至少10个学生。 2.每个学生至少3门课程。 3.对每个学生大学期间的成绩进行记录。 4.修改学生…

班级成绩管理系统(C语言)

文章目录 一、设计任务与目标二、实现功能三、程序源码四、效果展示 一、设计任务与目标 对一个有N个学生的班级&#xff0c;每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。 二、实现功能 &#xff08;1&#xff09;本系统采用一个结…

C语言:学生成绩管理系统

目录 一&#xff1a;功能概述&#xff1a; 二&#xff1a;实现&#xff1a; 1.主源文件 1.打印菜单&#xff01; 2.构建管理系统的框架&#xff1a; 二&#xff1a;辅源文件 1.使用结构体&#xff0c;方便后面的编写 2.输入学生信息 3.输出学生基本信息 3.按姓名查询 3.…