设为首页 - 加入收藏 大理站长网 (http://www.0872zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2018 系统 2016 什么
当前位置: 首页 > 亚博娱乐入口 > 评论 > 正文

500行代码,教你用Python写个微信飞机大战

发布时间:2019-10-26 14:01 所属栏目:[评论] 来源:上海小胖
导读:亚博娱乐入口【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起
【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

500行代码,教你用Python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。

帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来!

这是史诗级的发明,是浓墨重彩的一笔,是……

在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉?

所以我打开电脑,创建了一个 plan_game.py……

先看效果图

500行代码,教你用Python写个微信飞机大战

操作环境

  • 操作系统:windows10
  • python版本:python 3.7
  • 代码编辑器:pycharm 2018.2
  • 使用模块:os,sys,random,pygame

因为实现代码使用到了一个pygame的第三方模块,没有的先 pip install 一下,这里顺便提供一个比较好的pygame的教程.

https://eyehere.net/2011/python-pygame-novice-professional-index/

具体实现

首先我们先指定素材文件的文件目录.方便我们后面的使用。

  1. import os 
  2.  
  3. # 得到当前文件夹下面的material_images目录的路径 
  4. source_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'material_images') 

实现一个Game类,用来完成这个游戏的主要逻辑。

  1. import pygame 
  2.  
  3.  
  4. class Game(): 
  5.     def __init__(self, background_image_path, size=(480, 700), title='飞机大战', font_name='方正舒体', font_size=30, speed=2000): 
  6.         ''' 
  7.         :param background_image_path: 背景图片的路径地址 
  8.         :param size: 游戏窗口的大小 
  9.         :param title: 游戏窗口的标题 
  10.         :param font_name: 指定字体 
  11.         :param font_size: 指定字体大小 
  12.         :param speed: 背景图滚动整个窗口一次所用时间,单位为ms 
  13.         ''' 
  14.         self.size = size 
  15.         self.screen = pygame.display.set_mode(size) 
  16.         self.title = title 
  17.         self.background_image_path = background_image_path 
  18.         self.background = pygame.image.load(self.background_image_path).convert() 
  19.         # 设置字体对象,得到系统中自带的字体 
  20.         self.font = pygame.font.SysFont(font_name, font_size) 
  21.         # 得到Clock对象,我们可以使用它来获取距离上次绘制图像的时间 
  22.         self.clock = pygame.time.Clock() 
  23.         # 背景图初始位置 
  24.         self.height = 0 
  25.         # 使用窗口的高度处于滚动的时间,就能得到每ms滚动的距离 
  26.         self.every_ms_move_distance = self.size[1] / speed   # 2秒 
  27.         # 分数 
  28.         self.score = 0 
  29.         # 存放所有的敌机 
  30.         self.enemies = [] 
  31.  
  32.  
  33.     def show_score(self): 
  34.         ''' 
  35.         显示分数, 在窗口的的最上方距离上边距10px, 左右居中 
  36.         ''' 
  37.         pass 
  38.  
  39.  
  40.     def set_time_passed(self): 
  41.         # 控制画 的帧, 越大越快 
  42.         # 得到上一次绘制图像到到现在的时间, ms 
  43.         self.time_passed = self.clock.tick() 
  44.  
  45.  
  46.     def draw_background(self): 
  47.         ''' 
  48.         绘制背景图片,一直向下滚动,营造飞机一直往上面飞的感觉 
  49.         ''' 
  50.         # 每次移动的距离 = 每ms移动的距离 * 上次到现在的时间(ms) 
  51.         pass 
  52.  
  53.  
  54.     def create_enemy(self, image_path=os.path.join(source_dir,'enemy1.png'), enemy_number=5): 
  55.         ''' 
  56.         创建敌机 
  57.         :param image_path: 敌机的图片地址 
  58.         :param enemy_number: 最多有几个敌机在屏幕上 
  59.         ''' 
  60.         pass 
  61.  
  62.  
  63.     def draw_enemies(self, time_passed, screen): 
  64.         ''' 
  65.         绘制敌机到屏幕上,清理跑出窗口的敌机, 
  66.         :param time_passed: 上次绘制导向现在经过的时间 
  67.         :param screen: 绘制的窗口对象 
  68.         ''' 
  69.         pass 
  70.  
  71.  
  72.     def bullet_and_enemy_crash_detection(self, bullets): 
  73.         ''' 
  74.         检测子弹是否击中敌机 
  75.         :param bullets: 飞机的所有子弹 
  76.         ''' 
  77.         pass 
  78.  
  79.  
  80.     def plan_and_enemy_crash_detection(self, plan, allow_crash_size=None): 
  81.         ''' 
  82.         检测敌机与飞机是否相撞 
  83.         :param plan: 飞机对象 
  84.         :param allow_crash_size: 允许飞机碰撞的大小,只有左右有效 
  85.         ''' 
  86.         pass 
  87.  
  88.  
  89.     def draw_plan(self, plan, time_passed): 
  90.         ''' 
  91.         绘制飞机 
  92.         :param plan: 飞机对象 
  93.         :param time_passed: 距离上次绘制的时间 
  94.         :return: 
  95.         ''' 
  96.         pass 
  97.  
  98.  
  99.     def game_over(self): 
  100.         ''' 
  101.         游戏结束 
  102.         ''' 
  103.         while True: 
  104.             # 绘制背景图 
  105.             pass 
  106.  
  107.  
  108.     def run(self): 
  109.         ''' 
  110.         游戏入口函数,开始函数,主体函数 
  111.         :return: 
  112.         ''' 
  113.  
  114.         # 设置游戏窗口的大小 
  115.         pygame.display.set_caption(self.title) 
  116.         # 初始化一个飞机对象 
  117.         plan = Plan() 
  118.  
  119.         while True: 
  120.             # 如果飞机自毁完成, 游戏结束, 调用game_over函数 
  121.             pass 
  122.  
  123.             # 检测监听事件 
  124.             pass 
  125.  
  126.             # 检测上下左右的移动案件. 
  127.             # w,a,s,d 和 上,下,左,右键都可以 
  128.             # 然后执行plan.update函数,改变飞机的位置 
  129.             pass 
  130.  
  131.             # 子弹和敌机的碰撞检测 
  132.             self.bullet_and_enemy_crash_detection(plan.bullets) 
  133.             # 飞机与敌机的碰撞检测 
  134.             self.plan_and_enemy_crash_detection(plan) 
  135.             # 设置属性time_passed的值, 距离上次的时间,方便后面使用 
  136.             self.set_time_passed() 
  137.             # 绘制背景图片 
  138.             self.draw_background() 
  139.             # 显示分数 
  140.             self.show_score() 
  141.             # 生成敌机 
  142.             self.create_enemy() 
  143.             # 绘制敌机 
  144.             self.draw_enemies(time_passed=self.time_passed, screen=self.screen) 
  145.             # 绘制飞机 
  146.             self.draw_plan(plan=plan, time_passed=self.time_passed) 
  147.             # 绘制子弹 
  148.             plan.draw_bullets(time_passed=self.time_passed, screen=self.screen) 
  149.             # 显示我们的图像 
  150.             pygame.display.update() 
  151.  
  152. 这里说以下怎样查看自己的系统中有哪些自带的字体. 
  153. pygame.font.get_fonts(),这个函数就能够得到系统中所有的自带字体文件。不过,当我们游戏中有中文的时候,我们也得选择支持中文的字体,否则的话是显示不出中文的。 

500行代码,教你用Python写个微信飞机大战

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章