python实现飞机大战游戏

飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累。实现出来,成就感还是满满的),如图所示:

完整代码如下:

1.工具类plane_sprites.py

import random
import pygame

# 屏幕大小的常量
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__("C:/Users/Administrator/Desktop/background.png")# 1. 调用父类方法实现精灵的创建(image/rect/speed)
    if is_alt:# 2. 判断是否是交替图像,如果是,需要设置初始位置
      self.rect.y = -self.rect.height
  def update(self):
    super().update()# 1. 调用父类的方法实现
    if self.rect.y >= SCREEN_RECT.height:# 2. 判断是否移出屏幕,如果移出屏幕,将图像设置到屏幕的上方
      self.rect.y = -self.rect.height
class Enemy(GameSprite):
   """敌机精灵"""
   def __init__(self):
     super().__init__("C:/Users/Administrator/Desktop/enemy1.png")# 1. 调用父类方法,创建敌机精灵,同时指定敌机图片
     self.speed = random.randint(1, 3)# 2. 指定敌机的初始随机速度 1 ~ 3
     self.rect.bottom = 0# 3. 指定敌机的初始随机位置
     max_x = SCREEN_RECT.width - self.rect.width
     self.rect.x = random.randint(0, max_x)
   def update(self):
     super().update()# 1. 调用父类方法,保持垂直方向的飞行
     # 2. 判断是否飞出屏幕,如果是,需要从精灵组删除敌机
     if self.rect.y >= SCREEN_RECT.height:
       self.kill()
       # print("飞出屏幕,需要从精灵组删除...")
       # kill方法可以将精灵从所有精灵组中移出,精灵就会被自动销毁

   def __del__(self):
       # print("敌机挂了 %s" % self.rect)
       pass
class Hero(GameSprite):
  """英雄精灵"""
  def __init__(self):
    super().__init__("C:/Users/Administrator/Desktop/me1.png", 0)
    self.rect.centerx = SCREEN_RECT.centerx
    self.rect.bottom = SCREEN_RECT.bottom - 120
    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.right > SCREEN_RECT.right:
      self.rect.right = SCREEN_RECT.right
  def fire(self):
    print("发射子弹...")
    for i in (0, 1, 2):
      bullet = Bullet()
      bullet.rect.bottom = self.rect.y - i * 20
      bullet.rect.centerx = self.rect.centerx
      self.bullets.add(bullet)
class Bullet(GameSprite):
  """子弹精灵"""
  def __init__(self):
    super().__init__("C:/Users/Administrator/Desktop/bullet1.png", -2)
  def update(self):
    super().update()
    if self.rect.bottom < 0:
      self.kill()
    def __del__(self):
      print("子弹被销毁...")

2.主类plane_main.py

import pygame
from plane_sprites import *
class PlaneGame(object):
  """飞机大战主游戏"""
  def __init__(self):
     print("游戏初始化")
     self.screen = pygame.display.set_mode(SCREEN_RECT.size)
     self.clock = pygame.time.Clock()
     self.__create_sprites()
     pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
     pygame.time.set_timer(HERO_FIRE_EVENT, 500)
  def __create_sprites(self):
    bg1 = Background()
    bg2 = Background(True)
    self.back_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:
      self.clock.tick(FRAME_PER_SEC)
      self.__event_handler()
      self.__check_collide()
      self.__update_sprites()
      pygame.display.update()
  def __event_handler(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()
          # elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
          #   print("向右移动...")
    keys_pressed = pygame.key.get_pressed()
    if keys_pressed[pygame.K_RIGHT]:
      self.hero.speed = 2
    elif keys_pressed[pygame.K_LEFT]:
      self.hero.speed = -2
    else:
      self.hero.speed = 0
  def __check_collide(self):
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
        PlaneGame.__game_over()
      elif event.type == CREATE_ENEMY_EVENT:
        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 = 2
    elif keys_pressed[pygame.K_LEFT]:
      self.hero.speed = -2
    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 __update_sprites(self):
    self.back_group.update()
    self.back_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()

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

(0)

相关推荐

  • python实现飞机大战微信小游戏

    0.前言 我学一种语言,可以说学任何东西都喜欢自己动手实践,总感觉自己动手一遍,就可以理解的更透彻,学python也一样,自己动手写代码,但更喜欢做点小东西出来,一边玩一边学.下面我就展示一下我最近做的一个小游戏. 1.素材准备 首先我们先来预览一下游戏的最终运行界面 根据游戏界面,我们可以清楚的知道必须要先准备游戏背景图片,飞机图片,子弹图片等等.这些素材我已经放到网上, 点我下载 ,里面包括了我的代码和图片素材. 2.代码部分 库依赖: pygame 本游戏主要有两个py文件,主文件plan

  • python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * from pygame.font import * import time import random class Hero(object): #玩家 英雄类 def __init__(self, screen_temp): self.x = 210 self.y = 700 self.life

  • python pygame模块编写飞机大战

    本文实例为大家分享了python pygame模块编写飞机大战的具体代码,供大家参考,具体内容如下 该程序没有使用精灵组,而是用列表存储对象来替代精灵组的动画效果.用矩形对象的重叠来判断相撞事件.该程序可以流畅运行,注释较为详细,希望可以帮助大家. import pygame from pygame.locals import * from sys import exit import time import random # 创建子弹类,把子弹的图片转化为图像对象,设定固定的移动速度 clas

  • python实现飞机大战

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 实现的效果如下: 主程序代码如下: import pygame from plane_sprites import * class PlaneGame(object): """飞机大战主游戏""" def __init__(self): print("游戏初始化") # 1,绘制屏幕窗口 self.screen = pygame.display.

  • 用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动

    目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有这项技能的同学只能和我一样从网上下载相应的素材了. 网上可以找到相应的这样的图片,注意,所有的元件图片要是png类型的图片,那样可以有透明的背景,否则会有白色的边框露出来. 找到素材以后我们就要开始搭建我们的飞机大战了. 微信上的飞机大战是由手指控制的,在电脑上,我们就先用鼠标代替了. 按照之前我们在天空上移动云的那个程序,我们可以知道该怎么做

  • python开发飞机大战游戏

    本文实例为大家分享了python开发飞机大战游戏的具体代码,供大家参考,具体内容如下 import pygame import random import math # 数学模块 # 初始化界面 pygame.init() # 设置窗口大小 windows = pygame.display.set_mode((800, 600)) # 设置窗口标题 pygame.display.set_caption("小赵同学") # 引入图片 logo icon = pygame.image.lo

  • python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工具类plane_sprites.py import random import pygame # 屏幕大小的常量 SCREEN_RECT = pygame.Rect(0, 0, 480, 700) # 刷新的帧率 FRAME_PER_SEC = 60 # 创建敌机的定时器常量 CREATE_ENEM

  • python实现飞机大战游戏(pygame版)

    简介 使用python实现pygame版的飞机大战游戏: 环境:Windows系统+python3.8.0 游戏规则: 1.点击"PLAY"或者按键"P"开始游戏: 2.敌机根据设置频率从顶部随机位置生成,生成后向下移动: 3.飞船在底部中间生成,玩家使用上下左右键控制飞船移动,敲击空格键发射子弹: 4.子弹打到敌机,该敌机产生爆炸效果并累计分数到右上角: 5.消灭10只飞机后,等级升高,敌机生成频率变快,下落速度也变快: 6.当三条命都消失了,游戏结束. 游戏运行

  • 使用python实现飞机大战游戏

    本文实例为大家分享了Python飞机大战项目,供大家参考,具体内容如下 import gc import random import pygame # 玩家飞机精灵类 import Constants class HeroPlane(pygame.sprite.Sprite): def __init__(self, screen): # 调用父类初始化方法 # pygame.sprite.Sprite.__init__(self) super().__init__() # 窗口 self.scr

  • python实现简单的飞机大战游戏

    本文实例为大家分享了python实现飞机大战游戏的具体代码,供大家参考,具体内容如下 1.准备环境 下载python(这里建议不需要安装最新的,好像pygame还没有对3.8支持的包,我也没去试),安装pygame模块. 进入cmd: 输入“pip install pygame”——>显示“successfully”安装成功. 2.代码块: import sys#退出程序 import pygame class Settings():   def __init__(self):     self

  • Pygame实战练习之飞机大战游戏

    导语 承载童年的纸飞机你还会叠嘛? 如果你是个80后或者90后,那你应该记得小时候玩的纸飞机. 叠好后,哈口仙气,飞出去,感觉棒棒哒. ​ 虽然是一个极其简单的玩具,但那时候,很多熊孩子能傻傻地玩上一整天. 今天带大家制作一款彩色版本另一个版本的飞机大冒险~ 欢迎阅读往期另一个飞机大战的文章:python开发飞机大战游戏. Are you ready? 一起开启飞机大冒险吧~ ▼▼▼ 正文 首先准备好飞机大冒险的图片: ​ 环境安装:主要游戏模块pygame. pip install pygam

  • 500行代码使用python写个微信小游戏飞机大战游戏

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来! 这是史诗级的发明,是浓墨重彩的一笔,是-- 在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉? 所以我打开电脑,创建了一个 plan_game.py-- 先

  • python实现飞机大战小游戏

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 初学Python,写了一个简单的Python小游戏. 师出bilibili某前辈 pycharm自带了第三方库pygame,安装一下就好了,很方便. 虽然很多大佬已经给出了步骤,我这里还是啰嗦一下,也为了自己巩固一下. 上图: 这里再给出代码的逻辑架构 plane_main.py import pygame from plane_sprites import * class PlaneGame(object): "

  • python飞机大战游戏实例讲解

    记得刚学python那会,作过一个飞机大战小项目,这个项目非常经典,可以帮助初学者提高动手能力,今天把它分享出来. 一.项目介绍 先放几张图片 二.项目实现 1.首先安装库 pip install pygame 2.主要python代码 import pygame from pygame.locals import * import random #https://blog.csdn.net/qq_36079986/article/details/110395731 class HeroPlan

随机推荐