模拟扫雷游戏

game_main

from game_map import map
from game_intro import intro

class Engine(object):

    def __init__(self):
        self.moves = {}
        self.count = 0
        self.h_step = 0
        self.v_step = 0

    def play(self):

        print("You‘re now in (%s, %s)" % (self.h_step, self.v_step))
        h_move = int(input("How much do you want to move horizontally?"))
        v_move = int(input("How much do you want to move vertically?"))
        if int(self.h_step) + h_move >= 0 and int(self.v_step) + v_move >= 0:
            next_h_step = self.h_step + h_move
            next_v_step = self.v_step + v_move

            if next_h_step - int(self.h_step) <= 1 and next_v_step - int(self.v_step) <= 1:
                print("So, you‘re going to (%s, %s)" % (next_h_step, next_v_step))
                self.h_step += h_move
                self.v_step += v_move
                self.moves[self.h_step] = self.v_step
                return self.h_step, self.v_step, self.bomb(self.h_step)
        else:
            print("Wrong input, please try again")

    def bomb(self, step):

        bomb_steps = {0: 2, 1: 1, 2: 0, 3: 2}
        x = self.moves[step]

        if x == bomb_steps[step] and self.count <3:
            print("Boooom!!!")
            print("You just stepped on a bomb")
            self.count += 1
            return self.live()
        else:
            print("You‘re safe. Keep moving!")
            map()
            return self.win()

    def live(self):

        if self.count <3:
            print("\033[31;01mNow you have %s live left.\033[0m" % (3 - self.count))
            return self.win()

        else:
            print("Game over!")
            exit()

    def win(self):

        if self.h_step == self.v_step == 3:
            exit("\033[32;01mCongratulations! You win!!\033[0m")

        else:
            return self.play()

intro()
a = Engine()
a.play()

game_intro

from game_map import map

def intro():
    print("\nWelcome to MyGame!\n")
    print("Here are some rules of this game:")
    print("\tyou will begin at the ‘B‘ point, i.e. (0, 0);")
    print("\tthe aim is to get to point ‘W‘, i.e. (3, 3);")
    print("\teach time you can only move 0 or 1 step horizontally and vertically,")
    print("\t就是说每次输入横向,以及纵向移动1个或0个单位")
    print("Attention!")
    print("\tThere are four bombs hidden in the map,")
    print("\tyou have three lives, one step on a bomb takes one life")
    print("Good luck!")
    print("Now, let‘s do this!")
    map()

game_map

def map():
    print(‘‘‘
                     (3, 3)
        o -- o -- o -- W
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        B -- o -- o -- o
     (0, 0)
    ‘‘‘)
Welcome to MyGame!

Here are some rules of this game:
    you will begin at the ‘B‘ point, i.e. (0, 0);
    the aim is to get to point ‘W‘, i.e. (3, 3);
    each time you can only move 0 or 1 step horizontally and vertically.
    就是说每次输入横向,以及纵向移动1个或0个单位
Attention!
    There are four bombs hidden in the map,
    you have three lives, one step on a bomb takes one life
Good luck!
Now, let‘s do this!

                     (3, 3)
        o -- o -- o -- W
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        B -- o -- o -- o
     (0, 0)

You‘re now in (0, 0)
How much do you want to move horizontally?0
How much do you want to move vertically?1
So, you‘re going to (0, 1)
{0: 1}
You‘re safe. Keep moving!

                     (3, 3)
        o -- o -- o -- W
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        B -- o -- o -- o
     (0, 0)

You‘re now in (0, 1)
How much do you want to move horizontally?1
How much do you want to move vertically?1
So, you‘re going to (1, 2)
{0: 1, 1: 2}
You‘re safe. Keep moving!

                     (3, 3)
        o -- o -- o -- W
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        B -- o -- o -- o
     (0, 0)

You‘re now in (1, 2)
How much do you want to move horizontally?0
How much do you want to move vertically?-1
So, you‘re going to (1, 1)
{0: 1, 1: 1}
Boooom!!!
You just stepped on a bomb
Now you have 2 live left.
You‘re now in (1, 1)
How much do you want to move horizontally?1
How much do you want to move vertically?1
So, you‘re going to (2, 2)
{0: 1, 1: 1, 2: 2}
You‘re safe. Keep moving!

                     (3, 3)
        o -- o -- o -- W
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        B -- o -- o -- o
     (0, 0)

You‘re now in (2, 2)
How much do you want to move horizontally?1
How much do you want to move vertically?1
So, you‘re going to (3, 3)
{0: 1, 1: 1, 2: 2, 3: 3}
You‘re safe. Keep moving!

                     (3, 3)
        o -- o -- o -- W
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        o -- o -- o -- o
        |    |    |    |
        B -- o -- o -- o
     (0, 0)

Congratulations! You win!!

Process finished with exit code 1

2019-10-04

02:19:12

原文地址:https://www.cnblogs.com/petitherisson/p/11620828.html

时间: 2024-11-13 15:25:03

模拟扫雷游戏的相关文章

Java练习(模拟扫雷游戏)

要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示.如某位置为地雷,则该位置用数字-1表示, 如该位置不是地雷,则暂时用数字0表示. 编写程序完成在该二维数组中随机布雷的操作,程序读入3个参数:布雷面板的行数(r),列数(c),布置的地雷个数(n), 且要满足0<n<r*c*0.75(即布置地雷的最大密度为75%),程序运行后将n个地雷随机地布置在r*c的二维数组,布置完成后进行扫雷游戏. import java.util.*; public class Minesweeper

javascript模拟Windows系统下的扫雷游戏

javascript模拟Windows系统下的扫雷游戏. 说好的一周一篇随笔的,这才第三周就延迟交作业了,深深的自责中... 先玩一把 demo 很久以前写的 当时都没写注释的 刚加上了 (尼玛,好多自己都不认识了 ... ) 不足的敌方就是本来想写个游戏排名的统计的,等有空了再加上(好像每次都这么说 然后就等好久好久...) 还有就是没有实现:点击第一个格子不能是雷的功能 刚才在手机端 打开了下这篇文章 排版完全乱了... <style> ul{padding:0;list-style:no

2015扫雷游戏

题目描述 Description 扫雷游戏是一款十分经典的单机小游戏. 在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格) ,其他格子不含地雷(称之为非地雷格) .玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格. 游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格.现在给出n行m列的雷区中的地雷分布, 要求计算出每个非地雷格周围的地雷格数.注:一个格子的周围格子包括其上.下.左.右.左上.右上.左下.右下八个方向上与之直接相邻的格子. 输入描述 

Java Swing扫雷游戏demo分享

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

Noip(pj)2015 t2 扫雷游戏

题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数. 注:一个格子的周围格子包括其上.下.左.右.左上.右上.左下.右下八个方向上与之直接相邻的格子. 输入输出格式 输入格式: 输入文件第一行是用一个

洛谷P2670 扫雷游戏

题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数. 注:一个格子的周围格子包括其上.下.左.右.左上.右上.左下.右下八个方向上与之直接相邻的格子. 输入输出格式 输入格式: 输入文件第一行是用一个

c++ 控制台版 扫雷游戏

白天看了一天书看累了,晚上瞅见扫雷游戏,就自己琢磨着做一个呗.想了一会,也没看别人怎么做的,大概1个多小时完成了这个简单版本的扫雷游戏,由于没怎么学过c#,界面的事情可能迟几天再做,明天要回家啦,哈哈! 先说思路,其实挺简单的. (1) 随机生成10个雷,标记到二维数组里,然后计算八个方向的雷的总数记录下来,这是预处理阶段. (2)输入要翻开的位置的坐标,如果是数字直接显示,是空白的话,这里采用bfs即宽度优先搜索解决,搜到最外层是数字(仅一层)时结束,具体详见代码. // 扫雷程序 #incl

扫雷游戏

扫雷游戏 发布时间: 2017年8月15日 22:17   最后更新: 2017年8月15日 22:21   时间限制: 1000ms   内存限制: 128M 描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的

基于c++控制台的扫雷游戏

Screen   类用于与控制台交互 gotoxy(short x, short y)跳转到控制台的指定位置 void Init() 获取控制台 句柄 bool changeColor(WORD color)变更颜色 /* 0 = 黑色 8 = 灰色搜索 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 浅绿色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色 FOREGROUND_BLUE