python实现飞机大战


Posted in Python onSeptember 11, 2018

本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下

实现的效果如下:

python实现飞机大战 

主程序代码如下:

import pygame
from plane_sprites import *
 
 
class PlaneGame(object):
 """飞机大战主游戏"""
 
 def __init__(self):
  print("游戏初始化")
  # 1,绘制屏幕窗口
  self.screen = pygame.display.set_mode(SCREEN_RECT.size)
  # 2,创建时钟
  self.clock = pygame.time.Clock()
  # 3,调用私有方法,精灵和精灵组的创建
  self.sprite_creat()
  # 4,设置定时器事件,创建敌机
  pygame.time.set_timer(CREATE_ENEMY_EVENT, 400)
  pygame.time.set_timer(HERO_FIRE_EVENT, 200)
 
 def sprite_creat(self):
  bg1 = BackGround()
  bg2 = BackGround(True)
 
  self.bg_group = pygame.sprite.Group(bg1, bg2)
  self.enemy_group = pygame.sprite.Group()
 
  # 创建英雄的精灵和精灵组
  self.hero = Hero()
  self.hero_group = pygame.sprite.Group(self.hero)
 
 def start_game(self):
  print("游戏开始。。。")
  while True:
   # 1,设置刷新帧率
   self.clock.tick(FRAME_PER_SEC)
   # 2,事件监听
   self.__event_handle()
   # 3,碰撞检测
   self.__check_collide()
   # 4,更新/绘制精灵和精灵组
   self.__updtae_sprites()
   # 5,更新显示
   pygame.display.update()
 
 def __event_handle(self):
  for event in pygame.event.get():
   if event.type == pygame.QUIT:
    PlaneGame.__game_over()
   elif event.type == CREATE_ENEMY_EVENT:
    print("敌机出场。。。")
    # 创建敌机精灵
    enemy = Enemy()
    # 敌机精灵添加到敌机精灵组
    self.enemy_group.add(enemy)
   elif event.type == HERO_FIRE_EVENT:
    self.hero.fire()
 
  # 移动英雄
  keys_pressed = pygame.key.get_pressed()
  if keys_pressed[pygame.K_RIGHT]:
   self.hero.speed = 5
  elif keys_pressed[pygame.K_LEFT]:
   self.hero.speed = -5
  else:
   self.hero.speed = 0
 
 def __check_collide(self):
  pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
  enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
  if len(enemies) > 0:
   self.hero.kill()
   PlaneGame.__game_over()
 
 def __updtae_sprites(self):
 
  self.bg_group.update()
  self.bg_group.draw(self.screen)
 
  self.enemy_group.update()
  self.enemy_group.draw(self.screen)
 
  self.hero_group.update()
  self.hero_group.draw(self.screen)
 
  self.hero.bullets.update()
  self.hero.bullets.draw(self.screen)
 
 @staticmethod
 def __game_over():
  print("游戏结束了")
  pygame.quit()
  exit()
 
 
if __name__ == '__main__':
 
 # 创建游戏对象
 game = PlaneGame()
 
 # 启动游戏
 game.start_game()

各个类的代码如下:

import pygame
import random
 
# 屏幕大小
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
# 刷新帧率
FRAME_PER_SEC = 60
# 创建敌机的定时器常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
# 创建发射子弹事件常量
HERO_FIRE_EVENT = pygame.USEREVENT + 1
 
 
class GameSprite(pygame.sprite.Sprite):
 
 def __init__(self, image_name, speed=1):
  super().__init__()
  self.image = pygame.image.load(image_name)
  self.rect = self.image.get_rect()
  self.speed = speed
 
 def update(self):
  self.rect.y += self.speed
 
 
class BackGround(GameSprite):
 
 def __init__(self, is_alt=False):
  super().__init__("./feiji/background.png")
  if is_alt:
   self.rect.y = -self.rect.height
 
 def update(self):
  self.rect.y += self.speed
  # self.speed += 0.0001
  # 判断背景图片是否移出屏幕窗口
  if self.rect.y > SCREEN_RECT.height:
   self.rect.y = -self.rect.height
 
 
class Enemy(GameSprite):
 
 def __init__(self):
  super().__init__("./feiji/enemy0.png")
  # 随机敌机的速度
  self.speed = random.randint(2, 5)
 
  # 随机敌机的水平位置
  self.rect.x = random.randint(0, (SCREEN_RECT.width-self.rect.width))
 
 def update(self):
  super().update()
  # 判断敌机是否移出屏幕
  if self.rect.y > SCREEN_RECT.height:
   print("飞出屏幕。。。")
   # 将敌机从敌机精灵组中删除
   self.kill()
 
 def __del__(self):
  print("删除敌机")
 
 
class Hero(GameSprite):
 """英雄类"""
 
 def __init__(self):
  super(Hero, self).__init__("./feiji/hero1.png", 0)
  self.rect.centerx = SCREEN_RECT.centerx
  self.rect.bottom = SCREEN_RECT.bottom - 80
  self.bullets = pygame.sprite.Group()
 
 def update(self):
  self.rect.x += self.speed
  if self.rect.x <= 0:
   self.rect.x = 0
  elif self.rect.x >= (SCREEN_RECT.width - self.rect.width):
   self.rect.x = SCREEN_RECT.width - self.rect.width
 
 def fire(self):
  # 创建子弹精灵
  bullet = Bullet()
 
  # 设置子弹精灵的位置
  bullet.rect.bottom = self.rect.y -5
  bullet.rect.centerx = self.rect.centerx
 
  # 将子弹精灵添加到子弹精灵组中去
  self.bullets.add(bullet)
 
 
class Bullet(GameSprite):
 
 def __init__(self):
  super(Bullet, self).__init__('./feiji/bullet.png', -2)
 
 def update(self):
  super(Bullet, self).update()
  if self.rect.y <= 0:
   self.kill()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python和pyqt实现360的CLable控件
Feb 21 Python
Python中super的用法实例
May 28 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
python配置grpc环境
Jan 01 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
django框架两个使用模板实例
Dec 11 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
浅析python函数式编程
Sep 26 Python
python 模块导入问题汇总
Feb 01 Python
pygame实现简易飞机大战
Sep 11 #Python
python实现飞机大战微信小游戏
Mar 21 #Python
python实现微信小程序自动回复
Sep 10 #Python
python中map的基本用法示例
Sep 10 #Python
python2 与 pyhton3的输入语句写法小结
Sep 10 #Python
django DRF图片路径问题的解决方法
Sep 10 #Python
详解python中Numpy的属性与创建矩阵
Sep 10 #Python
You might like
php Memcache 中实现消息队列
2009/11/24 PHP
PHP经典面试题集锦
2015/03/19 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
php获取linux命令结果的实例
2017/03/13 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
让html页面不缓存js的实现方法
2014/10/31 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python实现多线程抓取妹子图
2015/08/08 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
python实现视频分帧效果
2019/05/31 Python
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
九年级历史教学反思
2014/01/27 职场文书
主题班会演讲稿
2014/05/22 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
大学生求职意向书
2015/05/11 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
导游词之江西赣州
2019/10/15 职场文书
聘任书的格式及模板
2019/10/28 职场文书