zoukankan      html  css  js  c++  java
  • python 简答打飞机(面向对象)

      1 import pygame
      2 import time
      3 import random
      4 from pygame.locals import *
      5 
      6 
      7 class Base(object):
      8     def __init__(self, screen_temp, x, y, image_name):
      9         self.x = x
     10         self.y = y
     11         self.screen = screen_temp
     12         self.image = pygame.image.load(image_name)
     13 
     14 
     15 class BasePlane(Base):
     16     def __init__(self, screen_temp, x, y, image_name):
     17         Base.__init__(self, screen_temp, x, y, image_name)
     18         self.bullet_list = []  # 存储发射出去的子弹对象的引用
     19 
     20     def display(self):
     21         self.screen.blit(self.image, (self.x, self.y))
     22 
     23         for bullet in self.bullet_list:
     24             bullet.display()
     25             bullet.move()
     26 
     27             if bullet.judge():  # 判断子弹是否越界
     28                 self.bullet_list.remove(bullet)
     29 
     30 
     31 class HeroPlane(BasePlane):
     32     def __init__(self, screen_temp):
     33         # 也可以用super().__init__(), 用这个方法不用加参数self
     34         BasePlane.__init__(self,screen_temp,210,700,"./feiji/hero1.png")
     35 
     36     def move_left(self):
     37         self.x = self.x - 5
     38 
     39     def move_right(self):
     40         self.x = self.x + 5
     41 
     42     def fire(self):
     43         self.bullet_list.append(Bullet(self.screen, self.x, self.y))
     44 
     45 
     46 class EnemyPlane(BasePlane):
     47     """敌机的类"""
     48     def __init__(self, screen_temp):
     49         BasePlane.__init__(self,screen_temp,0,0,"./feiji/enemy0.png")
     50         self.direction = "right"  # 用来存储飞机默认的显示方向
     51 
     52 
     53     def move(self):
     54         if self.direction == "right":
     55             self.x += 5
     56 
     57         elif self.direction == "left":
     58             self.x -= 5
     59 
     60         if self.x > 430:
     61             self.direction = "left"
     62         elif self.x < 0:
     63             self.direction = "right"
     64 
     65     def fire(self):
     66         random_num = random.randint(1,100)
     67         if random_num == 8 or random_num == 88:     #降低子弹重复出现的可能
     68             self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y))
     69 
     70 
     71 class BaseBullet(Base):
     72     def __init__(self, screen_temp, x, y, image_name):
     73         Base.__init__(self, screen_temp, x, y, image_name)
     74 
     75     def display(self):
     76         self.screen.blit(self.image, (self.x, self.y))
     77 
     78 
     79 class Bullet(BaseBullet):
     80     def __init__(self, screen_temp, x, y):
     81         BaseBullet.__init__(self,screen_temp,x+40,y-20,"./feiji/bullet.png")
     82 
     83     def move(self):
     84         self.y = self.y - 5
     85 
     86     def judge(self):
     87         if self.y < 0:
     88             return True
     89         else:
     90             return False
     91 
     92 
     93 class EnemyBullet(BaseBullet):
     94     def __init__(self, screen_temp, x, y):
     95 
     96         BaseBullet.__init__(self,screen_temp,x+25,y+40,"./feiji/bullet1.png")
     97 
     98     def move(self):
     99         self.y = self.y + 5
    100 
    101     def judge(self):
    102         if self.y > 852:
    103             return True
    104         else:
    105             return False
    106 
    107 
    108 def key_control(hero_temp):
    109     # 获取事件,比如按键等
    110     for event in pygame.event.get():
    111 
    112         if event.type == QUIT:
    113             print("exit")
    114             exit()
    115 
    116         elif event.type == KEYDOWN:
    117             if event.key == K_a or event.key == K_LEFT:
    118                 print('left')
    119                 # x = x - 5
    120                 hero_temp.move_left()
    121 
    122             elif event.key == K_d or event.key == K_RIGHT:
    123                 print("right")
    124                 # x = x + 5
    125                 hero_temp.move_right()
    126 
    127             elif event.key == K_SPACE:
    128                 hero_temp.fire()
    129                 print("space")
    130 
    131 
    132 def main():
    133     # 创建一个窗口,用来显示内容
    134     screen = pygame.display.set_mode((480, 852), 0, 32)
    135 
    136     # 创建一个和窗口大小相同的图片,用来当背景
    137     background = pygame.image.load("./feiji/background.png")
    138 
    139     # 创建一个飞机
    140     hero = HeroPlane(screen)
    141 
    142     # 创建一个敌机
    143     enemy = EnemyPlane(screen)
    144 
    145     # 把背景图片放到窗口中显示
    146     while True:
    147         # 设定需要显示的背景图
    148         screen.blit(background, (0, 0))
    149 
    150         # 显示飞机
    151         hero.display()
    152         enemy.display()
    153         enemy.move()  # 调用敌机的移动方法
    154         enemy.fire()
    155 
    156         # 更新需要显示的内容
    157         pygame.display.update()
    158 
    159         key_control(hero)
    160 
    161         # 延迟降低CPU使用率
    162         time.sleep(0.01)
    163 
    164 
    165 if __name__ == '__main__':
    166     main()
  • 相关阅读:
    CPU飙高,OOM排查?
    反射
    Mybatits
    spring 基础问题
    java中格式化数字0和#区别
    java中File对象的mkdir和mkdirs的区别
    java截取字符串几种方式
    java工厂模式
    Java获取文件路径的几种方式
    jxl生成excel时,增加批注和冻结窗口
  • 原文地址:https://www.cnblogs.com/Hunter-541695/p/9383766.html
Copyright © 2011-2022 走看看