Skip to main content

moregeek program

扫雷游戏程序-多极客编程

程序大纲

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include"game.h"


void menu()

{

printf("*******************************\n");

printf("************1.play*************\n");

printf("************0.exit******* *****\n");

printf("*******************************\n");

}


void game()

{

//1.布置好雷的信息

char mine[ROWS][COLS] = { 0 };

//2.摆查出雷的信息

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

}

void test()

{

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

}


int main()

{

test();

return 0;

}


函数声明

#define _CRT_SECURE_NO_WARNINGS 1


#include<stdio.h>//要把include库文件放到define前面,要不然自定义函数可能识别不了EASY_COUNT的值

#include<stdlib.h>

#include<time.h>


#define ROW 9

#define COL 9

#define ROWS ROW+2

#define COLS COL+2


#define EASY_COUNT 79




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

void spread(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y);



函数定义

#include "game.h"


#define _CRT_SECURE_NO_WARNINGS 1


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;

 }

}

}




int get_mine_count(char mine[ROWS][COLS], int x, int y)

{

return mine[x - 1][y - 1] +

 mine[x - 1][y] +

 mine[x - 1][y + 1] +

 mine[x][y - 1] +

 mine[x][y + 1] +

 mine[x + 1][y - 1] +

 mine[x + 1][y] +

 mine[x + 1][y + 1] - 8 * '0';

}


void DisplayBoard(char board[ROWS][COLS], int row, int col)

{

int i = 0;

int j = 0;

for (i = 0; i <= col; i++)

{

 printf("%d ", i);

}

printf("\n");

for (i = 1; i <= row; i++)//从1开始,到第9行,相当于数组中间

{

 printf("%d ", i);

 for (j = 1; j <= col; j++)//同理

 {

  printf("%c ", board[i][j]);

 }

 printf("\n");

}

}


void SetMine(char board[ROWS][COLS], int row, int col)//还是ROWS不打折

{

int count = EASY_COUNT;

while (count)

{

 int x = rand() % row + 1;//模出0-8,需要1-9还是数组中间

 int y = rand() % col + 1;

 if (board[x][y] == '0')

 {

  board[x][y] = '1';

  count--;

 }

}

}


void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)

{

int x = 0;

int y = 0;

int win = 0;

while (win<row*col-EASY_COUNT)

{

 printf("请输入排查雷的坐标:>");

       scanf("%d%d", &x, &y);

 if (x >= 1 && x <= row && y >= 1 && y <= col)

 {

  //坐标合法

  //1.踩雷

  if (mine[x][y] == '1')

  {

   printf("很遗憾,您被炸死了\n");

   DisplayBoard(mine, row, col);

   break;

  }

  else//不是雷

  {

   //计算x,y坐标周围有几个雷

   spread(mine, show, x, y);

   DisplayBoard(show, row, col);

   win++;

  }

 }

 else

 {

  printf("输入坐标非法,请重新输入!\n");

 }

 if (win == row * col - EASY_COUNT)

 {

  printf("恭喜你,排雷成功\n");

  DisplayBoard(mine, row, col);

 }

}


}


void spread(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)

{

int count = get_mine_count(mine, x, y);

if (count == 0)

{

 show[x][y] = ' ';

 int m = 0;//将i,j换成m,n可以正常运行,j的值循环的时候直接为2

 int n = 0;

 for(m=-1;m<=1;m++)

 {

  for (n =-1; n<= 1;n++)

  {

   if ((x + m > 0) && (y + n > 0) && (x + m < ROWS) && (y + n < COLS) && (show[x+m][y+n] == '*'))

   {

    DisplayBoard(show, ROW, COL);

    spread(mine, show, x + m, y + n);

   }

  }

 }

   

   

}

else

{

 show[x][y] = count + '0';

}

}

©著作权归作者所有:来自51CTO博客作者rythshys的原创作品,请联系作者获取转载授权,否则将追究法律责任

c语言实现三子棋-多极客编程

前言:在此之前我们学习了循环,函数,数组等相关知识,我们来写一个小游戏练练手概述:代码大致分为三部分程序主函数,函数,声明函数(这一点我们在通讯录项目是就介绍过了,将代码分为三部分可以是代码各司其职,不冗余,可读性高),游戏框架大概分为以下几部分,主函数main,菜单函数,初始化棋盘,打印棋盘,玩家走函数,电脑走函数,判断输赢函数,所以我们也会按照这几个部分来讲解,先给大家演示一下,我们是通过输入

(一)java基础语法-多极客编程

一.基础写法/*使用命令行的方式执行的时候,cmd的默认编码是GBK所以在输入中文的时候需要设置文件的编码格式为ANSI这样不会出现乱码格式*/public class HelloWorld/*java文件的名称必须跟public class的名称保持一致*/{ public static void main(String[] args) /* 1.该代码是所有java程序的入口,如果向执行

运用c语言完成简单的猜数字游戏(随机数为1到100)-多极客编程

要完成一个猜数字游戏首先我们要让电脑生成一个随机数,这时候我们就可以使用rand函数这个函数的作用就是返回一个随机数但如果不先配置随机数生成器那么就会出现一个问题就是就是每一次重新启动这个代码那么生成的随机数还是你上次游玩时的随机数,这就不够随机这时我们便要使用srand函数来配置随机数生成器但使用srand函数要运用一个不断在变化的值这时候我们便可以使用时间戳来配置,而c语言中time函数便可以

c语言指针统览-多极客编程

前言本文对C语言指针和指针使用时的问题做一个概览性的总结,并对一些值得探讨的问题进行讨论。阅读本文,读者能达到统览C语言指针的目的。以下的讨论只针对32/64位机器。指针纲领:什么是指针要知道什么是指针,就要先了解内存的编址方法。内存的编址存储器由一块块的空间(存储单元)组成,为了方便寻找到每一块空间,我们需要对每一个空间进行标识——内存编址。字节(Byte)是讨论内存空间时的基本单位,每个存储单

sgx性能实验-多极客编程

SGX实验报告​一.实验目标​了解采用SGX可信任环境后对应用和目标主机产生的性能影响有多少。​二.实验准备​Microsoft Window10 21H2版本主机一台,​处理器:Intel Core(TM)i5-9500F ​​CPU@3.00GHZ​​​64位操作系统,内存16GB​代码编译环境:vs2015专业版或者Clion2021​SGX插件相关版本​Intel ME版本:ME_SW_1

c语言实现三子棋-多极客编程

前言:在此之前我们学习了循环,函数,数组等相关知识,我们来写一个小游戏练练手概述:代码大致分为三部分程序主函数,函数,声明函数(这一点我们在通讯录项目是就介绍过了,将代码分为三部分可以是代码各司其职,不冗余,可读性高),游戏框架大概分为以下几部分,主函数main,菜单函数,初始化棋盘,打印棋盘,玩家走函数,电脑走函数,判断输赢函数,所以我们也会按照这几个部分来讲解,先给大家演示一下,我们是通过输入

shell 命令奇淫技巧,就是有点短-多极客编程

1、在任意目录之间快速移动 你发现自己要在两个或更多目录之间频繁移动,一会切换到这里,一会切换到那里,来回跳转。这些目录之间隔得还挺远,反复输入冗长的路径让人疲惫不堪。 使用内建命令 pushd 和 popd 来管理目录栈,轻松地在目录之间切换。下面是一个简单的示例: $ cd /tmp/tank $ pwd /tmp/tank $ pushd /var/log/cups /var/log/cu

使用file类创建简单的文件目录检索小工具-多极客编程

File类的常用方法 序号 方法描述 1 public String getName() 返回由此抽象路径名表示的文件或目录的名称。 2 public String getParent()****、 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。 3 public File getParentFile() 返回此抽象路径名的父路径名

mybatisplus实战专题 多表连接 代码生成 分组查询 一网打尽-多极客编程

一、MybatisPlusMax简介 MybatisPlusMax是MybatisPlus的增强包,秉承只拓展不修改的理念,对MybatisPlus做增强。 正如MybatisPlus是对MyBatis的增强,MybatisPlusMax是对MybatisPlus的增强,拓展理念一脉相承。 MybatisPlus依然进入软件成熟期,对其进行微小的修改会慎之又慎,向其提交修改PR周期较长,基于此考虑

c语言指针统览-多极客编程

前言本文对C语言指针和指针使用时的问题做一个概览性的总结,并对一些值得探讨的问题进行讨论。阅读本文,读者能达到统览C语言指针的目的。以下的讨论只针对32/64位机器。指针纲领:什么是指针要知道什么是指针,就要先了解内存的编址方法。内存的编址存储器由一块块的空间(存储单元)组成,为了方便寻找到每一块空间,我们需要对每一个空间进行标识——内存编址。字节(Byte)是讨论内存空间时的基本单位,每个存储单

如何通过c#/vb.net将格式应用于 word 中的字符-多极客编程

字符格式设置是指用户对字符的屏幕显示和打印输出形式的设定。Word文档中的字符格式有:字体、字号、字体颜色、高亮颜色、边框、下划线、斜体、阴影字、着重号等等。带格式的文本可以突出内容重点,引起读者注意。应用字符格式可以使简单的文档变得比只使用纯文本更具吸引力。本文将为您介绍一种高效便捷的方法,通过编程方式将格式应用于 Word 中的字符。并附上C#/VB.NET代码供大家参考。程序环境本次测试时,