让我们在terminal下愉快的...扫雷

昨天跟奇葩霖聊起“雷区”这个敏感词汇,然后非常荣幸的。。。

应该轰炸不到我。。

后来百无聊赖的去玩了把扫雷。然后发现我之前都是乱扫的,没有不论什么技巧。百科之后才发现,扫雷是有技巧的,接着玩了一把。咦挺有意思的。。。大概感受了一下,今天又要考数电,昨晚写了个框架。就到两点半了。。。睡。

。。

今天中午回来。第一件事就是接着写。。。简直是爽。。。

这家伙。原来昨天之前。。。我一直不会玩。。

。假设还是跟我一样不会玩的。。

我也懒得介绍规则了。。。自行google吧。。

this blog的目的不是推广扫雷。

。。

/******************************************************************
Code writer : EOF
code file : mine_sweep.c
code date : 2014.06.23
e-mail: jasonleaster@gmail.com Code purpose :
This code is just a simulation of mine sweeping...
If there are some where wrong with my code, just touch me by e-mail.
Thank you. Have fun! ********************************************************************/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MATRIX_SIZE 4 //demention of square matrix
#define BUFFSIZE 1024 //buffer size #define NUM_MINE 4 //number of mine #define IS_BOMB 1 //MACRO for determining current location has a bomb
#define NOT_BOMB 0 #define GAMEOVER 0
#define GAMING 1 struct battle
{
/*
char current_battlefiled is used for descripting current state of battlefield
*/
char current_battlefiled[MATRIX_SIZE][MATRIX_SIZE]; /*
char answer is used for determining that location has a bomb or not.
*/
int answer[MATRIX_SIZE][MATRIX_SIZE]; /*
char num_bomb is used for determing that how many bombs around the current location.
*/
int num_bomb[MATRIX_SIZE][MATRIX_SIZE];
}; void print_current_battle(struct battle *p_battlefiled); struct battle initialize_battle(void); void do_open(struct battle *p_battlefiled,int row,int rank);
void do_mine(struct battle *p_battlefiled,int row,int rank);
void do_unknow(struct battle *p_battlefiled,int row,int rank); void do_operation(struct battle *p_battlefiled,int row, int rank); void count_bomb_around(struct battle *p_battlefiled); int Game = GAMING;
//In fact, I try my best to avoid to use global varible in my code....
//but I think it is ok here.You know I can't accept that long long parameter list.
int Open_safely_times = 0; int main()
{ int row = 0;
int rank = 0; struct battle new_york; new_york = initialize_battle(); print_current_battle(&new_york);//Firstly, show player the initial battlefiled. printf("Hey guys, please input two numbers that represent \nthe number of row and rank of the location in the battlefiled\n"); while(!scanf("%d",&row) ||row >= MATRIX_SIZE)
{
printf("input row error\nplease input again\n");
while(getchar() != '\n')
{ }
} while(!scanf("%d",&rank) || rank >= MATRIX_SIZE)
{
printf("input rank error\nplease input again\n");
while(getchar() != '\n')
{ }
} printf("Remember that there are only three operation could be done.\n");
printf("If you want to open the current location, just input command \"open\"\n");
printf("If you want to sign the current location as mine, just input command \"mine\"\n");
printf("If you want to sign the current location as question mark, just input command \"unknow\"\n"); printf("Never forget that!\n"); while(Game == GAMING && Open_safely_times < MATRIX_SIZE*MATRIX_SIZE-NUM_MINE)
{ do_operation(&new_york,row,rank); if(Game == GAMEOVER)
{
break;
} printf("Again! Input two numbers that represent \nthe number of row and rank of the location in the battle\n"); while(!scanf("%d",&row) ||row >= MATRIX_SIZE)
{
printf("input row error\nplease input again\n");
while(getchar() != '\n')
{ }
} while(!scanf("%d",&rank) || rank >= MATRIX_SIZE )
{
printf("input rank error\nplease input again\n");
while(getchar() != '\n')
{ }
}
} return 0;
} void count_bomb_around(struct battle *p_battlefiled)
{
//This function used in "struct battle initialize_battle(void)" for counting how many bombs around.
int row = 0;
int rank = 0; for(row = 0; row < MATRIX_SIZE; row++)
{
for(rank = 0;rank < MATRIX_SIZE;rank++)
{
if(row-1>=0 && rank -1 >= 0 && p_battlefiled->answer[row-1][rank-1] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row-1>=0 && rank >= 0 && p_battlefiled->answer[row-1][rank] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row >=0 && rank -1 >= 0 && p_battlefiled->answer[row][rank-1] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row+1 <= MATRIX_SIZE-1 && rank +1 <= MATRIX_SIZE-1 && p_battlefiled->answer[row+1][rank+1] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row+1 <= MATRIX_SIZE-1 && rank <= MATRIX_SIZE-1 && p_battlefiled->answer[row+1][rank] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row <= MATRIX_SIZE-1 && rank +1 <= MATRIX_SIZE-1 && p_battlefiled->answer[row][rank+1] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row+1 <= MATRIX_SIZE-1 && rank -1 >= 0 && p_battlefiled->answer[row+1][rank-1] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
} if(row-1 >= 0 && rank+1 <= MATRIX_SIZE && p_battlefiled->answer[row-1][rank+1] == IS_BOMB)
{
(p_battlefiled->num_bomb[row][rank])++;
}
}
}
} void do_open(struct battle *p_battlefiled,int row,int rank)
{ if(p_battlefiled == NULL)
{
printf("parameter error in do_open\n");
return ;
} if(p_battlefiled->answer[row][rank] == IS_BOMB)
{
printf("BOMB~~!!!\n");
for(row = 0; row < MATRIX_SIZE; row++)
{
for(rank = 0;rank < MATRIX_SIZE;rank++)
{
if(p_battlefiled->answer[row][rank] == IS_BOMB)
{
p_battlefiled->current_battlefiled[row][rank] = '@';
}
}
} //game over...
Game = GAMEOVER;
}
else if(p_battlefiled->answer[row][rank] == NOT_BOMB)
{
p_battlefiled->current_battlefiled[row][rank] = ((char)p_battlefiled->num_bomb[row][rank]) + '0'; //Lucky, not bomb
Open_safely_times++;
}
} void do_mine(struct battle *p_battlefiled,int row,int rank)
{
if(p_battlefiled == NULL)
{
printf("parameter error in do_open\n");
return ;
} p_battlefiled->current_battlefiled[row][rank] = '!';
} void do_unknow(struct battle *p_battlefiled,int row,int rank)
{ if(p_battlefiled == NULL)
{
printf("parameter error in do_open\n");
return ;
} p_battlefiled->current_battlefiled[row][rank] = '?';
} void do_operation(struct battle *p_battlefiled,int row, int rank)
{
char operation[BUFFSIZE] = {0}; printf("Which operation would you want to do?\n"); read_operation:
scanf("%s",operation);//Obevious,It's unsafe that there may be a overflow,Just a game never mind it... if(strcmp(operation,"open") == 0)
{
do_open(p_battlefiled,row,rank); print_current_battle(p_battlefiled);
}
else if(strcmp(operation,"mine") == 0)
{
do_mine(p_battlefiled,row,rank); print_current_battle(p_battlefiled);
}
else if(strcmp(operation,"unknow") == 0)
{
do_unknow(p_battlefiled,row,rank); print_current_battle(p_battlefiled);
}
else
{
printf("operation error\nAttention!...Just input one of \"open\" \"mine\" or \"unknow\"\n"); goto read_operation;
} } struct battle initialize_battle(void)
{
struct battle s_battle; int row = 0;
int rank = 0;
int temp = 0; for(rank = 0; rank < MATRIX_SIZE; rank++)
{
for(row = 0;row < MATRIX_SIZE;row++)
{
s_battle.current_battlefiled[row][rank] = '*';
s_battle.answer[row][rank] = NOT_BOMB;
s_battle.num_bomb[row][rank] = 0;
}
} //Maybe, it is time consuming...But it do work correctly.
for(temp = 0; temp < NUM_MINE; temp++)
{
row = (rand() % MATRIX_SIZE);
rank = (rand() % MATRIX_SIZE); if(s_battle.answer[row][rank] == NOT_BOMB)
{
s_battle.answer[row][rank] = IS_BOMB;
}
else
{
temp--;
}
} count_bomb_around(&s_battle); return s_battle;
} void print_current_battle(struct battle *p_battlefiled)
{
int row = 0;
int rank = 0;
for(row = 0; row < MATRIX_SIZE; row++)
{
for(rank = 0;rank < MATRIX_SIZE;rank++)
{
printf("%c ",p_battlefiled->current_battlefiled[row][rank]);
}
printf("\n");
}
}

C language 模拟 win的经典游戏——扫雷的更多相关文章

  1. C++复现经典游戏——扫雷

    国庆小长假,当大家都去看人山人海的时候,我独自一人狂码代码.这两天想要实现的内容是Windows上的一个经典游戏——扫雷.相信90后和一些上班族对此并不陌生.然而,从win8开始,扫雷就不再是Wind ...

  2. JY游戏之毁经典《扫雷》

    JY游戏之毁经典<扫雷> 这是一个经典的pc端游戏,一定的运气加一点数学常识,讲的是一个速度,这次,我利用js JY库重做了这款游戏,加了三次生命,过关难度,也兼容了移动端的触摸事件. 它 ...

  3. Python之模拟职场人生游戏

    题目:模拟人生 要求:1.至少有两个角色 2.玩的过程中,有冲突 3.根据不同的交互,产生不同的行为. 4.一定要用到面向对象语法和思想 1.解题思路 创建一个类,赋予角色不同的方法,使用面向对象思想 ...

  4. 常用Java API之Ramdom--用代码模拟猜数小游戏

    常用Java API之Ramdom Ramdom类用来生成随机数字.使用起来也是三个步骤: 1.导包 import java.util.Random; 2.创建 Random r = new Rand ...

  5. Javascript版经典游戏之《扫雷》

    翻出年初写的游戏贴上来,扫雷相信大家都玩过,先上图: 源码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  6. 用Javascript模拟微信飞机大战游戏

    最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...

  7. FC经典游戏还原之:松鼠大作战2

    版权声明:本文原创发布于博客园"优梦创客"的博客空间(id:raymondking123) 原帖地址:http://www.cnblogs.com/raymondking123/p ...

  8. Unity2017 经典游戏开发教程 算法分析与实现 (张帆 著)

    https://meta.box.lenovo.com/link/view/82c451b41ce34e81a4b34cb46747d3d5 第1章 熟悉Unity软件的操作 第2章 打地鼠 (已看) ...

  9. cocos2d-x《农场模拟经营养成》游戏完整源代码

    cocos2d-x农场模拟经营养成游戏完整源代码,cocos2d-x引擎开发,使用JSON交互,支持IOS与 Android,解压后1016MB. 非常强大的游戏源代码         完整游戏源代码 ...

随机推荐

  1. json标准是双引号

    双引号才是json 的标准,单引号是不规范的(虽然在js 中是行的通的)!json 的名称和字符串值需要用双引号引起来,单引号的话,使用json.parse会出现错误

  2. 学习笔记TF061:分布式TensorFlow,分布式原理、最佳实践

    分布式TensorFlow由高性能gRPC库底层技术支持.Martin Abadi.Ashish Agarwal.Paul Barham论文<TensorFlow:Large-Scale Mac ...

  3. Spring面试题目

    问题清单: 1. 什么是Spring框架?Spring框架有哪些主要模块? 2. 使用Spring框架有什么好处? 3. 什么是控制反转(IOC)?什么是依赖注入? 4. 请解释下Spring中的IO ...

  4. SQL系统函数的使用(实验五)

    SQL系统函数的使用(试验5) 函数在查询语句中的使用 查询员工的姓名和日工资(保留1位小数): 查询并显示部门号为01和02的所有员工的姓名首字及岗位: 查询并显示所有员工的姓名及工龄: 查询199 ...

  5. HQL连接查询和注解

    HQL连接查询和注解 一:HQL连接查询 各种连接查询: 内连接:inner join或join From Entity inner [inner] join [fetch] Entity.prope ...

  6. asp.net web api 版本控制

    版本控制   版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionController ...

  7. web前端-----第二弹CSS

    web前端之CSS样式 CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. ''' selector { property: value; property: value; ...

  8. python基础-------函数(二)

    闭包函数与装饰器 一.闭包函数 闭包函数:函数内部定义函数,成为内部函数,该内部函数包含对外部作用域,而不是对全局作用域名字的引用那么该内部函数成为闭包函数 name='alex' # def fun ...

  9. MSSQL-并发控制-1-Transaction

         MSSQL并发控制原先打算分为两个部分写:隔离级别及锁,写的过程中,发现需要提及下事务的相关内容,故加多一篇博文,共3篇.         如果转载,请注明博文来源: www.cnblogs ...

  10. 模仿J2EE的session机制的App后端会话信息管理

    此文章只将思想,不提供具体完整实现(博主太懒,懒得整理),有疑问或想了解的可以私信或评论 背景 在传统的java web 中小型项目中,一般使用session暂存会话信息,比如登录者的身份信息等.此机 ...