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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python常见数据结构详解
Jul 24 Python
python 多线程实现检测服务器在线情况
Nov 25 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
Django中Model的使用方法教程
Mar 07 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
Python logging模块用法示例
Aug 28 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
python 实现屏幕录制示例
Dec 23 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
Python实现8种常用抽样方法
Jun 27 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限制文件下载速度的代码
2015/10/20 PHP
分享10段PHP常用代码
2015/11/11 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
小程序实现上下切换位置
2020/11/16 Javascript
Python全局变量操作详解
2015/04/14 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
在django中自定义字段Field详解
2019/12/03 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
如何实现一个自定义类的序列化
2012/05/22 面试题
培训班开班仪式主持词
2014/03/28 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
了解Redis常见应用场景
2021/06/23 Redis