c语言编程扫雷游戏

头文件:(test.h)

#ifndef _MINE_H_
#define _MINE_H_

#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <time.h>//调用标准库或系统中的头文件

#pragma warning(disable:4996)//VS中解决scanf函数问题

#define ROW 12
#define COL 12
#define MINES 20//宏定义

void Menu();
void Game();
void SetMine(char mine_board[][COL], int row, int col);
void PlayGame(char show_board[][COL], char mine_board[][COL], int row, int col);
int GetMineNum(char mine_board[][COL], int i, int j);
void ShowBoard(char show_board[][COL], int row, int col);//函数声明

#endif

源文件:(test.c)

#include "mine.h"

void Menu()//菜单
{
    printf("###########################################\n");
    printf("##    1. Play                  2. Exit   ##\n");
    printf("###########################################\n");
    printf("Please Select:> ");
}
static int GetIndex(int start, int end)//[1, 10]
{
    return rand() % (end - start + 1) + start;//随机埋雷
}

void SetMine(char mine_board[][COL], int row, int col)
{
    srand((unsigned long)time(NULL));
    int mine_num = MINES;
    while (mine_num){
        int i_index = GetIndex(1, col - 2);
        int j_index = GetIndex(1, col - 2);
        if (mine_board[i_index][j_index] == ‘0‘){
            mine_board[i_index][j_index] = ‘1‘;
            mine_num--;
        }
    }
}

int GetMineNum(char mine_board[][COL], int i, int j)//确定选择坐标值旁边雷的个数
{
    //‘0 ‘ + ‘1‘+‘1‘+‘0‘...+‘0‘
    return mine_board[i - 1][j - 1] + mine_board[i - 1][j] +         mine_board[i - 1][j + 1] + mine_board[i][j - 1] +         mine_board[i][j + 1] + mine_board[i + 1][j - 1] +         mine_board[i + 1][j] + mine_board[i + 1][j + 1] - 8 * ‘0‘;
}

void ShowBoard(char show_board[][COL], int row, int col)//显示界面
{
    int i = 1;
    int j = 1;
    printf("    ");
    for (; i <= col - 2; i++){
        printf("%d   ", i);
    }
    printf("\n");
    for (i = 1; i <= col - 1; i++){
        printf("----");
    }
    printf("\n");
    for (i = 1; i <= row - 2; i++){
        printf("%2d|", i);
        for (j = 1; j <= col - 2; j++){
            printf(" %c |", show_board[i][j]);
        }
        printf("\n");
        int k = 1;
        for (; k <= col - 1; k++){
            printf("----");
        }
        printf("\n");
    }
}
void PlayGame(char show_board[][COL], char mine_board[][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    int total = (ROW - 2)*(COL - 2);//total还剩多少位置没扫
    while (1){
        ShowBoard(show_board, row, col);
        printf("Please Enter Pos<x, y>: ");
        scanf("%d%d", &i, &j);
        if (i >= 1 && i <= row - 2 && j >= 1 && j <= col - 2){
            if (mine_board[i][j] == ‘0‘){
                int num = GetMineNum(mine_board, i, j);
                show_board[i][j] = num + ‘0‘;
                total--;
            }
            else{
                ShowBoard(mine_board, row, col);
                printf("Game Over! You Lose :(!\n");
                break;
            }
        }
        else{
            printf("Enter Error, Try Again!\n");
            continue;
        }
        if (total == MINES){
            printf("You Win:)\n");
            break;
        }
    }
}
void Game()
{
    char show_board[ROW][COL];//显示界面
    char mine_board[ROW][COL];//雷区界面
    memset(show_board, ‘*‘, sizeof(show_board));//未扫区域用“*”表示
    memset(mine_board, ‘0‘, sizeof(mine_board));//扫完区域用“0”表示
    SetMine(mine_board, ROW, COL);//扫完区域赋值
    PlayGame(show_board, mine_board, ROW, COL);//游戏过程
}

执行文件(main.c)

#include "mine.h"

int main()
{
    int select = 0;
    int quit = 0;
    while (!quit){
        Menu();
        scanf("%d", &select);
        switch (select){
        case 1:
            Game();
            break;
        case 2:
            printf("I Am Quit!\n");
            quit = 1;
            break;
        default:
            printf("Select Error! Try Again!\n");
            break;
        }
    }
    return 0;
}

原文地址:https://blog.51cto.com/14233078/2378066

时间: 2024-10-22 18:37:03

c语言编程扫雷游戏的相关文章

C语言/C+游戏编程学习之简单 DLL 劫持,就是这么任性

C语言面向过程编程的语言:C++面向对象编程的语言. 两者有本质的区别,其实是完全不同的两种语言,只不过C++兼容C语言而已. 其中C++则一般看作是对C语言的扩展.因为C语言没有面向对象的语法结构,而当时业界又迫切需要面向对象的编程特性,所以贝尔实验室的开发者就为C语言添加了面向对象的结构.现在C++已经不只是C语言的扩展了,它已经完全可以被看作一种新的编程语言.虽然C语言的特性以及库函数仍然被C++支持,不过C++拥有自己的独立的类库体系,功能相当强大. C/C++的优点在于与底层比较接近,

Unity_3D脚本编程:使用C#语言开发跨平台游戏pdf

下载地址:网盘下载 <Unity 3D脚本编程--使用C#语言开发跨平台游戏>以Unity 3D 的跨平台基础Mono,以及其游戏脚本语言C#为基础进行讲解.全面系统地剖析了Unity 3D 的跨平台原理以及游戏脚本开发的特点. 第1 章主要介绍了Unity 3D 引擎的历史以及编辑器的基本知识:第2 章主要介绍了Mono,以及Unity3D 利用Mono 实现跨平台的原理,并且分析了C#语言为什么更适合Unity 3D 游戏开发的原因:第3 章到第10 章主要介绍了Unity 3D 游戏脚本

C语言二维数组实现扫雷游戏

#include<stdio.h> //使用二维数组实现 扫雷 int main() { char ui[8][8]={ '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+'

LINUX下C语言编程基础

实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 二.实验步骤 1. 快捷键 Ubuntu中: 2. vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人

linux 操作系统下c语言编程入门

2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编

在Unity中使用Lua脚本:语言层和游戏逻辑粘合层处理

前言:为什么要用Lua 首先要说,所有编程语言里面,我最喜欢的还是C#,VisualStudio+C#,只能说太舒服了.所以说,为什么非要在Unity里面用Lua呢?可能主要是闲的蛋疼.....另外还有一些次要原因: 方便做功能的热更新: Lua语言的深度和广度都不大,易学易用,可以降低项目成本. C#与Lua互相调用的方案 坦白来将,我并没有对现在C#与Lua互相调用的所有库进行一个仔细的调研,大概搜了一下,找到这样几个: slua:https://github.com/pangweiwei/

Java Swing扫雷游戏demo分享

好多年前写过简略的扫雷游戏,模拟windows的. 后来由于多次搬迁环境,弄丢了,遗憾不已啊. 于是趁着这两年还在编程的道路上,趁热再次编写了一次,同时也扩展了功能,更接近windows的扫雷. 此次重写是用Javaswing实现的(eclipse开发),考虑到各位看客可能大部分是Android岗位,于是我着重注意了功能结构化的处理,使游戏核心算法与UI分离,使用回调交互,便于迁移到android环境. 本人对swing不是很熟练,一直以来用swing做项目的人很少,学习资料也少,所有的这些都是

C语言实现扫雷

实现用C语言编写一个扫雷游戏 大家想必都玩过扫雷,无论那个版本都有难度供已选择,下面来分享一个自己用C语言编写的扫雷游戏吧! 编写语言:C语言 编写软件:visual studio 2017 1.首先是将游戏的测试模块写好,要有提示玩家进入的菜单函数以及选择函数等各种需要编写的函数想出一个整体框架来 //测试模块test.c #include "game.h" void Menu() { printf("************************************

编写扫雷游戏提高 Bash 技巧

那些令人怀念的经典游戏可是提高编程能力的好素材.今天就让我们仔细探索一番,怎么用 Bash 编写一个扫雷程序. 我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法.比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习. 如果你是一个有经验的 Bash 程序员,希望在提高技巧的同时乐在其中,那么请跟着我编写一个你的运行在终端中的扫雷游戏.完整代码可以在这个 GitHub 存储库中找到. 做好准备 在我编写任何代码之前,