当前位置: 首页 > news >正文

C语言代码练习

B站鹏哥C语言65-67课

鹏哥的课对零基础小白真的非常友好……学到这里可以自己写一个简单的扫雷小游戏。代码主要包括棋盘的生成,雷的设置,地雷的排查,标记功能和展开一片的功能。使用到dowhile语句、if语句、for循环、功能分块(一种功能用一个函数实现)、递归等。

附完整代码。

test.c(59)

#define _CRT_SECURE_NO_WARNINGS #include "game.h" void menu() { printf("********************\n"); printf("****** 1.play ******\n"); printf("****** 0.play ******\n"); printf("********************\n"); } void game() { //char mine[ROWS][COLS]={'0'}这样不行,这样是不完全初始化,只把第一个元素初始化为字符0 char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息//第一个元素为整数0,其余自动补0,整个数组全为'\0'(空字符)。 char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息 //初始化数组的内容为指定的内容 //mine数组在没有布置雷的时候,都是'0' //初始化函数 InitBoard(mine, ROWS, COLS,'0'); //show数组在没有排查雷的时候,都是'*' InitBoard(show, ROWS, COLS,'*'); //DisplayBoard(mine, ROW, COL); //设置雷 SetMine(mine, ROW, COL); //布置好之后看一下 //DisplayBoard(mine, ROW, COL); DisplayBoard(show, 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; }

game.c(289)

#define _CRT_SECURE_NO_WARNINGS #include "game.h" void InitBoard(char board[ROWS][COLS], int rows, int cols,char set) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = set; } } } void DisplayBoard(char board[ROWS][COLS], int row, int col) { int i = 0; int j = 0; printf("------扫雷游戏-----\n"); for (j = 0; j <= col; j++) { printf("%d ", j); } 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 = EASY_COUNT; //1-9 //1-9 //循环次数可能大于十次,因为count只有在满足if语句的条件的时候才count-- while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] == '0') { board[x][y] = '1'; count--; } } } void Judge(char mine[ROWS][COLS], char show[ROWS][COLS],int* win, int x, int y,int row,int col) { //左1 if (show[x-1][y-1]=='*' && x - 1 >= 1 && x - 1 <= row && y - 1 >= 1 && y - 1 <= col) { (*win)++; int count1 = get_mine_count(mine, x-1, y-1); if (count1 == 0) { show[x-1][y-1] = ' '; Judge(mine, show, win, x - 1, y - 1, ROW, COL); } else { show[x - 1][y - 1] = count1 + '0'; } } //左2 if (show[x][y-1]=='*'&& x >= 1 && x <= row && y - 1 >= 1 && y - 1 <= col) { (*win)++; int count2 = get_mine_count(mine, x, y - 1); if (count2 == 0) { show[x][y - 1] = ' '; Judge(mine, show, win, x, y - 1, ROW, COL); } else { show[x ][y - 1] = count2 + '0'; } } //左3 if (show[x+1][y-1]=='*' && x + 1 >= 1 && x + 1 <= row && y - 1 >= 1 && y - 1 <= col) { (*win)++; int count3 = get_mine_count(mine, x + 1, y - 1); if (count3 == 0) { show[x + 1][y - 1] = ' '; Judge(mine, show, win, x+1, y - 1, ROW, COL); } else { show[x + 1][y - 1] = count3 + '0'; } } //中3 if (show[x+1][y]=='*' && x + 1 >= 1 && x + 1 <= row && y >= 1 && y <= col) { (*win)++; int count4 = get_mine_count(mine, x + 1, y); if (count4 == 0) { show[x + 1][y] = ' '; Judge(mine, show, win, x + 1, y,ROW,COL); } else { show[x + 1][y] = count4 + '0'; } } //右3 if (show[x+1][y+1]=='*' && x + 1 >= 1 && x + 1 <= row && y + 1 >= 1 && y + 1 <= col) { (*win)++; int count5 = get_mine_count(mine, x + 1, y+1); if (count5 == 0) { show[x + 1][y+1] = ' '; Judge(mine, show, win, x + 1, y+1, ROW, COL); } else { show[x + 1][y+1] = count5 + '0'; } } //右2 if (show[x][y+1]=='*'&& x >= 1 && x <= row && y + 1 >= 1 && y + 1 <= col) { (*win)++; int count6 = get_mine_count(mine, x , y + 1); if (count6 == 0) { show[x ][y + 1] = ' '; Judge(mine, show, win, x , y + 1, ROW, COL); } else { show[x ][y + 1] = count6 + '0'; } } //右1 if (show[x-1][y+1]=='*'&& x - 1 >= 1 && x - 1 <= row && y + 1 >= 1 && y + 1 <= col) { (*win)++; int count7 = get_mine_count(mine, x-1, y + 1); if (count7 == 0) { show[x-1][y + 1] = ' '; Judge(mine, show, win, x-1, y + 1, ROW, COL); } else { show[x-1][y + 1] = count7 + '0'; } } //中1 if (show[x-1][y]=='*'&& x - 1 >= 1 && x - 1 <= row && y >= 1 && y <= col) { (*win)++; int count8 = get_mine_count(mine, x - 1, y); if (count8 == 0) { show[x - 1][y] = ' '; Judge(mine, show, win, x - 1, y , ROW, COL); } else { show[x - 1][y ] = count8 + '0'; } } } int get_mine_count(char board[ROWS][COLS], int x, int y) { return (board[x - 1][y] + board[x - 1][y - 1] + board[x][y - 1] + board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] + board[x][y + 1] + board[x - 1][y + 1] - 8 * '0'); } void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int s = 0; int t = 0; int input = 0; int i = 0; int j = 0; int win = 0;//找到非雷的个数 //当找到非雷的个数小于71就进入循环 while (win < row * col - EASY_COUNT) { printf("请选择是否标记(1/0):>"); scanf("%d", &input); if (input == 1) { printf("请输入标记雷的坐标:>"); scanf("%d %d", &s, &t); if (s >= 1 && s <= row && t >= 1 && t <= col) { if (show[s][t] != '*') { printf("该位置不能被标记:>"); } else { show[s][t] = '#'; } } else { printf("输入的坐标违法,请重新输入\n"); } } else if(input==0) { printf("请输入要排查的坐标:>"); scanf("%d %d", &x, &y); //没布置雷的区域不用扫,只需要扫描9*9的范围 if (x >= 1 && x <= row && y >= 1 && y <= col) { if (show[x][y] != '*') { printf("该坐标被排查过了,不能重复排查\n"); } else { if (mine[x][y] == '1') { printf("很遗憾,你被炸死了!\n"); DisplayBoard(mine, ROW, COL); break; } else//如果不是雷 { //统计mine数组中,周边八个坐标上有几个雷 win++; int count = get_mine_count(mine, x, y); if (count == 0) { show[x][y] = ' '; Judge(mine, show, &win, x, y, ROW, COL); DisplayBoard(show, ROW, COL); } else { show[x][y] = count + '0';//转换成字符3 DisplayBoard(show, ROW, COL); } } } } else { printf("输入的坐标违法,请重新输入\n"); } } else { printf("输入的指令错误,请重新输入\n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功\n"); DisplayBoard(mine, ROW, COL); } } //基础功能 // 用到递归 //1.标记功能 //2.展开一片:该坐标不是雷;该坐标周围没有雷;同时该坐标没有被排查过 // //推箱子 //三子棋、扫雷、推箱子都是对二维数组的利用

game.h

#pragma once #include<stdio.h> #include<time.h> #include<stdlib.h> //给用户显示的时候只显示9*9的格子;但是逻辑判断的时候要用到11*11的格子 #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 void InitBoard(char board[ROWS][COLS], int rows,int cols,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);
http://www.jsqmd.com/news/574615/

相关文章:

  • YOLO11实战体验:上传图片视频,实时检测效果惊艳
  • 手把手教你用Qwen-Image-Edit-2511-Unblur-Upscale,让模糊人脸清晰如新
  • OpenClaw定时任务管理:Qwen3-32B镜像实现智能闹钟
  • 实战应用:基于快马定制企业级ventoy维护盘,集成系统修复与数据恢复工具
  • 如何在移动设备上实现AI本地部署? Maid跨平台AI应用的隐私保护方案
  • HunyuanVideo-Foley效果评测:与AudioLDM、MERT等主流音效模型横向对比
  • 类脑计算中的因果提示:提示工程架构师如何设计更合理的提示?
  • PHP怎么使用Eloquent Common Table Expressions公用表表达式_Laravel复杂查询分解【技巧】
  • AI伦理挑战难倒AI应用架构师?这些策略帮你解围
  • Hunyuan-MT-7B入门必看:从环境配置到Chainlit前端调用完整实操手册
  • Qwen3.5-9B GPU算力适配教程:nvidia-smi验证+torch28环境配置
  • Qwen2.5-14B-Instruct开源大模型应用:像素剧本圣殿实现剧本动作/对白/旁白自动分段
  • Ostrakon-VL-8B助力C语言嵌入式系统:边缘端轻量级图像识别
  • 2026新疆靠谱的小包团/定制旅行社推荐:纯玩无购物,靠谱更安心! - 栗子测评
  • 开源模拟器唤醒街机记忆:FinalBurn Neo的跨平台复古游戏解决方案
  • 语义SLAM新手村:用SUMA++在Ubuntu 20.04跑通第一个点云语义地图(含数据集和模型配置)
  • YOLOv11最新特性解析与模型部署:Pixel Epic · Wisdom Terminal 实践指南
  • 零门槛部署Clawdbot+Qwen3:32B:手把手教你搭建Chat服务
  • 3步破解加密程序:如何使用开源逆向工具安全提取Python源代码?
  • Dify+火山引擎大模型实战:如何用Python脚本快速验证API Key有效性
  • Qwen3-ASR-1.7B模型在PS软件中的语音指令自动化处理
  • 使用Node.js构建Qwen-Image-Edit-F2P实时服务
  • 千问3.5-9B模型切换指南:OpenClaw多模型动态调用
  • 灵毓秀-牧神-造相Z-Turbo新手入门:三步搞定古风AI绘画
  • linux指令练习
  • StructBERT文本相似度WebUI完整指南:从安装部署到高级应用,一篇就够了
  • Pixel Couplet Gen 快速上手:3步完成Java环境调用集成
  • 【PySpark】 如何在 Windows 成功使用 `saveAsTextFile()` 全流程教程 ✅
  • 为了避免出现未知错误:支付宝使用秘钥模式取代证书模式
  • 【2026年最新600套毕设项目分享】springboot]农产品销售管理系统(14305)