华企号 后端开发 利用PyGame做个扫雷游戏

利用PyGame做个扫雷游戏

效果

利用PyGame做个扫雷游戏插图

 

利用PyGame做个扫雷游戏插图1

 

  • 绿色的F表示右键点击插旗的地方
  • 红色的格子表示点击到了地雷

原理

主时间循环

基本上GUI应用都会有一个主循环,用来接收各种事件,并按照时间类型进行不同的处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while True:
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONUP:
            if game.is_over():
                init_game(30)
                continue
            pos = event.pos
            if event.button == 1:
                game.clicked(pos)
            elif event.button == 3:
                game.right_clicked(pos)
            # 获取当前那个格子被点击了
        if event.type == pygame.QUIT:
            sys.exit(0)
        pygame.display.update()

主要自定义处理类

  • class Game
  • class Square

Game

表示一次游戏。当前游戏中所有的地雷分布;保存所有的格子信息;以及每个格子周围的地雷数量。Game点击后需要判断是否是否游戏结束。

如何获胜:

  • 所有的雷都被标注
  • 已经没有空白的格子可以点了

Square

表示一个格子,初始化的时候会传入是否包含地雷的信息,格子作为一圈的地雷数量。

Square本身含有一个状态机,根据点击状态和点击方式画出各种样式(空白,带数字,F,红色)等。

 

主循环中的事件会传给Game,最终根据位置传个某个Square。

PyGame

pygame.Screen 使用pygame.display.set_mode返回一个画布,然后可以将各种Rect,font之类的放到这画布上。

1
pygame.display.set_mode((total_width, total_height))

pygame.Rect 输出格子

pygame.font 输出字体

 

重点方法

  • pygame.Screen.blit 将绘制的内容叠放到屏幕上。
1
2
3
4
self.face = pygame.Surface((self.rect.width, self.rect.height))
self.face.fill('white')
game.get_screen().blit(self.face, (self.rect.left, self.rect.top))
pygame.draw.rect(self.surface, 'gray'self.rect, 1
  • pygame.display.update 刷新页面

作者: 华企网通王鹏程序员

我是程序员王鹏,热爱互联网软件开发和设计,专注于大数据、数据分析、数据库、php、java、python、scala、k8s、docker等知识总结。 我的座右铭:"业精于勤荒于嬉,行成于思毁于随"
上一篇
下一篇

发表回复

联系我们

联系我们

028-84868647

在线咨询: QQ交谈

邮箱: tech@68v8.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部