• 用pygame实现打飞机游戏-9-抽出飞机和子弹的基类


      1 #coding=utf-8
      2 import pygame
      3 import random
      4 #导入pygame模块
      5 from pygame.locals import *
      6 #导入检测键盘的子模块
      7 import time
      8 class Base(object):
      9     def __init__(self,screen,planeName):
     10         self.planeName = planeName 
     11         self.screen = screen
     12     def display(self):
     13         self.screen.blit(self.imageFile,(self.x,self.y))
     14 class PublicAircraft(Base):
     15     def __init__(self,screen,planeName):
     16         super().__init__(screen,planeName)
     17         self.imageFile = pygame.image.load(self.imagePath).convert()
     18         self.bulletList = []
     19     def display(self):
     20         super().display()
     21         for bullet in self.bulletList:
     22             bullet.display()
     23             bullet.move()
     24         needDelBullet = []
     25         for i in self.bulletList:
     26             if i.judge():
     27                 needDelBullet.append(i)
     28         for i in needDelBullet:
     29             self.bulletList.remove(i)
     30     def shoot(self):
     31         newBullet = PublicBullet(self.x,self.y,self.screen,self.planeName)
     32         self.bulletList.append(newBullet)
     33 class PublicBullet(Base):
     34     def __init__(self,x,y,screen,planeName):
     35         super().__init__(screen,planeName)
     36         #定义默认值,接收从飞机类中传过来的参数
     37         if planeName == "aircraft":
     38             self.x = x+40
     39             self.y = y-20
     40             imagePath = "./feiji/bullet-3.gif"
     41         elif planeName == "enemy":
     42             self.x = x+30
     43             self.y = y+30
     44             imagePath = "./feiji/bullet-1.gif"
     45         self.imageFile = pygame.image.load(imagePath).convert()
     46     def move(self):
     47         if self.planeName == "aircraft":
     48             self.y -= 2
     49         if self.planeName == "enemy":
     50             self.y += 2
     51     def judge(self):
     52         if self.y<0 or self.y>890:
     53             return True
     54         else:
     55             return False
     56 class HeroAircraft(PublicAircraft):
     57     def __init__(self,screen,planeName):
     58         self.x = 250
     59         self.y = 600
     60         self.imagePath = "./feiji/hero.gif"
     61         super().__init__(screen,planeName)
     62     def moveLeft(self):
     63         self.x -= 20
     64     def moveRight(self):
     65         self.x += 20
     66     def moveUp(self):
     67         self.y -= 20
     68     def moveDown(self):
     69         self.y += 20
     70 class EnemyAircraft(PublicAircraft):
     71     def __init__(self,screen,planeName):
     72         self.x = 0
     73         self.y = 0
     74         self.imagePath = "./feiji/enemy-1.gif"
     75         super().__init__(screen,planeName)
     76         self.direction = "right"
     77     def move(self):
     78         if self.direction == "right":
     79             self.x += 2
     80         elif self.direction == "left":
     81             self.x -= 2
     82         if self.x > 480-50:
     83             self.direction = "left"
     84         elif self.x < 0:
     85             self.direction = "right"
     86     def shoot(self):
     87         num = random.randint(1,5)
     88         if num == 5:
     89             super().shoot()
     90             print("敌人射子弹")
     91 if __name__ == '__main__':
     92 #__name__变量,判断该模块是作为脚本被执行,还是被调用,当直接执行的时候,就是main,在被别人调用的时候,就是name
     93     screen = pygame.display.set_mode((480,980),0,32)
     94 #设置屏幕,0,32是默认值
     95     bgImageFile = './feiji/background.png'
     96 #导入图片
     97     background = pygame.image.load(bgImageFile).convert()
     98 #背景用background保存
     99     aircraft = HeroAircraft(screen,"aircraft")
    100     enemy = EnemyAircraft(screen,"enemy")
    101     #aircraftImageFile =  './feiji/hero.gif'
    102     #导入飞机图片
    103     #aircraft = pygame.image.load(aircraftImageFile).convert()
    104     #飞机图用aircraft保存
    105 
    106 while True:
    107     screen.blit(background,(0,0))
    108     #设置背景在屏幕的坐标,0.0是左上角的坐标。
    109     #screen.blit(aircraft,(x,y))
    110     #设置飞机在屏幕的坐标
    111     aircraft.display()
    112     enemy.move()
    113     enemy.shoot()
    114     enemy.display()
    115 
    116     for event in pygame.event.get():
    117         #在发生的事件当中循环,意思可以等同于获取所有的键盘操作
    118         if event.type == QUIT:
    119             #判断是否是按下了关闭键
    120             print("exit")
    121             exit()
    122             #退出程序
    123         elif event.type ==KEYDOWN:
    124             #判断是否按下了按键
    125             if event.key == K_a or event.key == K_LEFT:
    126             #判断是否按下了a键或者左键
    127                 print('')
    128                 aircraft.moveLeft()
    129             elif event.key == K_d or event.key == K_RIGHT:
    130             #判断是否按下了d键或者右键
    131                 print('')
    132                 aircraft.moveRight()
    133             elif event.key == K_w or event.key == K_UP:
    134             #判断是否按下了w键或者上键
    135                 print('')
    136                 aircraft.moveUp()
    137             elif event.key == K_s or event.key == K_DOWN:
    138             #判断是否按下了s键或者下键
    139                 print('')
    140                 aircraft.moveDown()
    141             elif event.key == K_SPACE:
    142             #判断是否按下了空格键
    143                 print('射子弹')
    144                 aircraft.shoot()
    145     time.sleep(0.01)
    146     pygame.display.update()
    147     #更新屏幕

    显示效果:

  • 相关阅读:
    libevent
    /dev/poll, kqueue(2), event ports, POSIX select(2), Windows select(), poll(2), and epoll(4)
    Netty 系列之 Netty 高性能之道 高性能的三个主题 Netty使得开发者能够轻松地接受大量打开的套接字 Java 序列化
    How to Design a Good API and Why it Matters
    cloud native
    Service Mesh服务网格:是什么和为什么
    唯品会的Service Mesh三年进化史 2018 年 Service Mesh 元年,被誉为是下一代微服务架构
    干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?
    Gradle
    Why did we build Zuul? How We Use Zuul At Netflix
  • 原文地址:https://www.cnblogs.com/huxiaoyi/p/8988830.html
Copyright © 2020-2023  润新知