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中threading模块的几个常用方法
Jun 18 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
关于python的list相关知识(推荐)
Aug 30 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
pytorch 数据集图片显示方法
Jul 26 Python
python tkinter实现屏保程序
Jul 30 Python
python matplotlib库直方图绘制详解
Aug 10 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
Python实现弹球小游戏
Aug 01 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
OpenCV实现常见的四种图像几何变换
Apr 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
JS数据类型判断的几种常用方法
2020/07/07 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python 实现堆排序算法代码
2012/06/05 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
python导入模块交叉引用的方法
2019/01/19 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
秋天的图画教学反思
2014/05/01 职场文书
女性健康知识讲座通知
2015/04/23 职场文书