导语

每日游戏更新系列——今天带大家来看看扫雷小游戏!

它是许多人接触到的第一款游戏,大概也是广大办公族和无网学生无聊时消遣的最佳游戏。

在那些还没有网(被切断网)的岁月,扫雷曾陪伴无数人度过了他们的童年。你的最佳纪录是多少了?

对于许多90后、00后来说,扫雷这个电脑上自带的小游戏早就变成古早的历史,再一次提到扫雷这个名字的时候,对许多人来说,仿佛就是上世纪的事情了。

就像是偶尔点开微信的跳一跳小游戏,发现排行榜上还有人在孤独的霸榜一样。已经2021年了,还有许多90后、00后坚守在扫雷这个游戏上~

正文

首先准备好相应的素材可自选:

​​

环境安装:依旧是游戏模块pygame,python3.6,pycharm2021。

pip  install  pygame​

游戏规则:

在有限的时间里面用最短的时间找到所有的雷,每个数字代表附近有几颗雷,踩到雷结束,找到全部的雷即过关。

导入所有的字体,图片等:

def main():pygame.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('扫雷小游戏')images = {}for key, value in cfg.IMAGE_PATHS.items():if key in ['face_fail', 'face_normal', 'face_success']:image = pygame.image.load(value)images[key] = pygame.transform.smoothscale(image, (int(cfg.GRIDSIZE*1.25), int(cfg.GRIDSIZE*1.25)))else:image = pygame.image.load(value).convert()images[key] = pygame.transform.smoothscale(image, (cfg.GRIDSIZE, cfg.GRIDSIZE))font = pygame.font.Font(cfg.FONT_PATH, cfg.FONT_SIZE)pygame.mixer.music.load(cfg.BGM_PATH)pygame.mixer.music.play(-1)

定义表情按钮,点开微笑即可重新开始游戏!

class EmojiButton(pygame.sprite.Sprite):def __init__(self, images, position, status_code=0, **kwargs):pygame.sprite.Sprite.__init__(self)# 导入图片self.images = imagesself.image = self.images['face_normal']self.rect = self.image.get_rect()self.rect.left, self.rect.top = position# 表情按钮的当前状态self.status_code = status_code'''画到屏幕上'''def draw(self, screen):# 状态码为0, 代表正常的表情if self.status_code == 0:self.image = self.images['face_normal']# 状态码为1, 代表失败的表情elif self.status_code == 1:self.image = self.images['face_fail']# 状态码为2, 代表成功的表情elif self.status_code == 2:self.image = self.images['face_success']# 绑定图片到屏幕screen.blit(self.image, self.rect)'''设置当前的按钮的状态'''def setstatus(self, status_code):self.status_code = status_code

随机生成雷:

class MinesweeperMap():def __init__(self, cfg, images, **kwargs):self.cfg = cfg# 雷型矩阵self.mines_matrix = []for j in range(cfg.GAME_MATRIX_SIZE[1]):mines_line = []for i in range(cfg.GAME_MATRIX_SIZE[0]):position = i * cfg.GRIDSIZE + cfg.BORDERSIZE, (j + 2) * cfg.GRIDSIZEmines_line.append(Mine(images=images, position=position))self.mines_matrix.append(mines_line)# 随机埋雷for i in random.sample(range(cfg.GAME_MATRIX_SIZE[0]*cfg.GAME_MATRIX_SIZE[1]), cfg.NUM_MINES):self.mines_matrix[i//cfg.GAME_MATRIX_SIZE[0]][i%cfg.GAME_MATRIX_SIZE[0]].burymine()count = 0for item in self.mines_matrix:for i in item:count += int(i.is_mine_flag)# 游戏当前的状态self.status_code = -1# 记录鼠标按下时的位置和按的键self.mouse_pos = Noneself.mouse_pressed = None

记录方格状态,是不是点开了雷,状态如何。

class Mine(pygame.sprite.Sprite):def __init__(self, images, position, status_code=0, **kwargs):pygame.sprite.Sprite.__init__(self)# 导入图片self.images = imagesself.image = self.images['blank']self.rect = self.image.get_rect()self.rect.left, self.rect.top = position# 雷当前的状态self.status_code = status_code# 真雷还是假雷(默认是假雷)self.is_mine_flag = False# 周围雷的数目self.num_mines_around = -1'''设置当前的状态码'''def setstatus(self, status_code):self.status_code = status_code'''埋雷'''def burymine(self):self.is_mine_flag = True'''设置周围雷的数目'''def setnumminesaround(self, num_mines_around):self.num_mines_around = num_mines_around'''画到屏幕上'''def draw(self, screen):# 状态码为0, 代表该雷未被点击if self.status_code == 0:self.image = self.images['blank']# 状态码为1, 代表该雷已被点开elif self.status_code == 1:self.image = self.images['mine'] if self.is_mine_flag else self.images[str(self.num_mines_around)]# 状态码为2, 代表该雷被玩家标记为雷elif self.status_code == 2:self.image = self.images['flag']# 状态码为3, 代表该雷被玩家标记为问号elif self.status_code == 3:self.image = self.images['ask']# 状态码为4, 代表该雷正在被鼠标左右键双击elif self.status_code == 4:assert not self.is_mine_flagself.image = self.images[str(self.num_mines_around)]# 状态码为5, 代表该雷在被鼠标左右键双击的雷的周围elif self.status_code == 5:self.image = self.images['0']# 状态码为6, 代表该雷被踩中elif self.status_code == 6:assert self.is_mine_flagself.image = self.images['blood']# 状态码为7, 代表该雷被误标elif self.status_code == 7:assert not self.is_mine_flagself.image = self.images['error']# 绑定图片到屏幕screen.blit(self.image, self.rect)

游戏主循环:

clock = pygame.time.Clock()while True:screen.fill(cfg.BACKGROUND_COLOR)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.MOUSEBUTTONDOWN:mouse_pos = event.posmouse_pressed = pygame.mouse.get_pressed()minesweeper_map.update(mouse_pressed=mouse_pressed, mouse_pos=mouse_pos, type_='down')elif event.type == pygame.MOUSEBUTTONUP:minesweeper_map.update(type_='up')if emoji_button.rect.collidepoint(pygame.mouse.get_pos()):minesweeper_map = MinesweeperMap(cfg, images)time_board.update('000')time_board.is_start = Falseremaining_mine_board.update(str(cfg.NUM_MINES))emoji_button.setstatus(status_code=0)if minesweeper_map.gaming:if not time_board.is_start:start_time = time.time()time_board.is_start = Truetime_board.update(str(int(time.time() - start_time)).zfill(3))remianing_mines = max(cfg.NUM_MINES - minesweeper_map.flags, 0)remaining_mine_board.update(str(remianing_mines).zfill(2))if minesweeper_map.status_code == 1:emoji_button.setstatus(status_code=1)if minesweeper_map.openeds + minesweeper_map.flags == cfg.GAME_MATRIX_SIZE[0] * cfg.GAME_MATRIX_SIZE[1]:minesweeper_map.status_code = 1emoji_button.setstatus(status_code=2)minesweeper_map.draw(screen)emoji_button.draw(screen)remaining_mine_board.draw(screen)time_board.draw(screen)pygame.display.update()clock.tick(cfg.FPS)

游戏效果:

​​

​​

​​​​​总结

今日游戏更新好啦!我要去战斗了!我就不信我过不了。。。。。。小声BB:不行的话还是开个挂吧!

​​

制作不易,记得一键三连哦!!

如需打包好的源码+素材免费分享滴

Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......相关推荐

  1. 计算机游戏第72关,史上最难的游戏第72关 第72关通关攻略

    史上最难的游戏第72关 第72关通关攻略 2014-04-03 来源: 996手游网 编辑: 帽纸 () 史上最难的游戏是以暴走漫画为游戏剧情及背景,让无数小伙伴们抓狂的游戏.全新的关卡又更新了,为了 ...

  2. 史上最难逻辑题!据说99.9%的人都做不出来……

    全世界只有3.14 % 的人关注了 爆炸吧知识 非常「逻辑」 撩人于无形 普林斯顿大学博士生 Raymond Smullyan 是一位非常厉害逻辑高手. 在Smullyan与他非常迷恋的女音乐家的第一 ...

  3. node.js 腾讯镜像站_史上最强Sx05RE游戏整合镜像发布!FBA4ARM永久闭源并停止发布!...

    先来说第一件事. 经过两个多星期的编程和整合,史上最强Sx05RE游戏整合镜像终于发布了!此次的整合镜像在官方Sx05RE 2.3.1的基础上,添加了独立NDS模拟器Drasitc以及独立程序Open ...

  4. 史上最强女游戏程序员

    也许你听说过John Carmack 和Tim Sweeney等大牛的名字,而向来游戏工业都是阳盛阴衰,适逢国际妇女节,今天我为大家介绍游戏业界一位史上最强女游戏程序员:Corrinne Yu. 简历 ...

  5. 60篇论文入选,两度夺魁,“史上最难ECCV”商汤再攀高峰

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 来源:商汤科技SenseTime 8月23-28日,全球计算机视觉三大顶会之一,两年一届的欧洲 ...

  6. 史上最佳十大游戏排名 魔兽世界位列第十

      史上最佳十大游戏排名 魔兽世界位列第十 随着游戏行业的不断扩大,每位玩家都能获取自己希望购买的心仪游戏.棒透了的独立游戏也总是不断出现.然而,那些系列性的游戏却能使我们成为永久的"回头客 ...

  7. rpg游戏发展史计算机网络,PC Gamer盘点史上最经典RPG游戏TOP15

    RPG角色演类游戏往往能带给玩家史诗般的剧情和难忘的战斗体验,今天外媒PC Gamer盘点了史上最经典RPG游戏TOP15,让我们一起来看看吧! 第 2 页 史上最经典15大RPG 2 6.<质 ...

  8. 史上最难618,公域遇冷、私域热

    作者 | 曾响铃 文 | 响铃说 过去是"流量时代",到了今天"流"将会变成"留存的留". 说这话时,戴珊(阿里国内数字商业板块总裁)正在& ...

  9. 史上最难618,TCL夺得电视行业京东和天猫份额双第一

    随着2022年618这场年中大促落下帷幕,我们又迎来了一波晒成绩单的日子. 翻开第三方平台公布的汇总成绩,在今年大盘承压的背景之下,家电行业依旧闪耀.而在家电品类的榜单上,TCL再次登顶. TCL Q ...

最新文章

  1. 计算机考试创建数据库,2013年计算机二级access创建数据库
  2. 中国开封菊花花会照片1
  3. operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍
  4. 从程序员到产品经理,我是如何成功转型的
  5. python中用def实现自动排序_Python sorted排序方法如何实现
  6. 塔式服务器、机架式服务器、刀片服务器区别小结
  7. 招银网络笔试java_春招|招银网络Java软件开发 电话面试+一二三面面经
  8. linux simple这个目录哪来的,Arch Linux 碎碎念
  9. Redis源码解析(1)——源码目录介绍
  10. 矩表 - 现代数据分析中必不可少的报表工具
  11. java继承和接口连接怎么用_继承与接口的使用
  12. QT虚拟小键盘设计--qt事件循环,事件发送的理解
  13. 饮冰三年-人工智能-Python-11之HelloWorld
  14. 用 Python 绘制了若干张词云图,惊艳了所有人
  15. USB 公,母头接口
  16. 循序搜寻法(使用卫兵)
  17. SWFAddress实现Flex深度链接(不同模块具有不同的URL)
  18. 当前计算机什么专业好就业找工作,计算机哪个专业最好就业
  19. R语言问题解决: 不存在叫‘xxx’这个名字的程辑包
  20. 计算机load代表,什么是 Load ? 什么是 Load Average ?

热门文章

  1. 历代权臣的唯一结局 孙权为什么要迫害陆逊?
  2. java.net cidr接口_【算法】CIDR集合的算法
  3. 考虑碳交易机制的园区综合能源系统电热协同运行优化研究(Matlab代码实现)
  4. 【数据库MySQL】数据库网上书店管理系统
  5. 2019前端学习路线图
  6. eclipse的新字体导入
  7. GSR-ISAC 05规避本振泄露
  8. Wifi模块-ESP-01s
  9. 为什么我可以正常上网,却ping不通自己的外网IP呢???
  10. python正则表达式模块_Python常用模块——正则表达式re模块