做了这个飞机大战,感觉还不错
不过要成为一个成熟的游戏还不够

解决的问题:

创建了一个飞机图片在屏幕上自由移动
可以按住键盘按键不放进行移动和射击
可以连发子弹
这个游戏由最原始的面向过程写成了面向对象,加深了对面向对象的理解
创建敌方飞机并且能左右移动,遇到边界返回(最最最低级的Ai)
敌机可以发射子弹,且发射子弹频率不高
添加了背景音乐

之后的问题

面向对象的类可以调整一下,飞机可以继承同一个抽象类,子弹可以是一个类
可以有不同类型的飞机,发射不同类型的子弹
游戏中各种动作都会产生音效
可以重新开始游戏,记录得分,可以设置飞机类型,敌机数量等参数

小问题

代码需要增加注释,才能更好的读懂
有一些常量可以提取出来,写数字不太能看懂
`
import pygame
import sys
import time
import random

class Auto:
def init(self,screen):
self.auto = pygame.image.load("E:/图片/plane1.jpg")
self.x = 300
self.y = 300
self.speed = 5
self.screen = screen
self.bu = []

def control(self):
    key_pressed = pygame.key.get_pressed()
    if key_pressed[pygame.K_w]:
        self.y -= self.speed
    if key_pressed[pygame.K_s]:
        self.y += self.speed
    if key_pressed[pygame.K_a]:
        self.x -= self.speed
    if key_pressed[pygame.K_d]:
        self.x += self.speed
    if key_pressed[pygame.K_SPACE]:
        b = Bullet(self.screen,self.x,self.y)
        self.bu.append(b)

def display(self):
    self.screen.blit(self.auto,(self.x,self.y))
    for i in self.bu:
        i.move()
        i.display()

`

`
class Enemy:
def init(self,screen):
self.en = pygame.image.load("E:/图片/enemy.jpg")
self.x = 0
self.y = 0
self.speed = 6
self.screen = screen
self.bu = []
self.dire = True

def display(self):
    self.screen.blit(self.en,(self.x,self.y))
    for i in self.bu:
         i.move()
         i.display()

def auto(self):
    if self.dire:
        self.x += self.speed
    else:
        self.x -= self.speed
    if self.x > 850:
        self.dire = False
    elif self.x < 0:
        self.dire = True

def ai(self):
    r = random.randint(1,10)
    if r == 6:
        bb = Bu(self.screen,self.x,self.y)
        self.bu.append(bb)

class Bullet(object):
def init(self,screen,x,y):
self.x = x
self.y = y
self.image = pygame.image.load("E:/图片/buee.png")
self.screen = screen
self.speed = 10

def display(self):
    self.screen.blit(self.image,(self.x,self.y))

def move(self):
    self.y -= self.speed

class Bu:
def init(self, screen, x, y):
self.x = x
self.y = y
self.image = pygame.image.load("E:/图片/buee.png")
self.screen = screen
self.speed = 10

def display(self):
    self.screen.blit(self.image, (self.x, self.y))

def move(self):
    self.y += self.speed

class Sound:
def init(self):
pygame.mixer.init()
pygame.mixer.music.load("E:/图片/back.mp3")
pygame.mixer.music.set_volume(0.3)

def back(self):
    pygame.mixer.music.play(-1)

`

`
def main():
s = Sound()
s.back()
pygame.init()
screen = pygame.display.set_mode((1000,750))
p = Auto(screen)
en = Enemy(screen)
while True:
screen.fill((250, 250, 250))
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
sys.exit()
p.control()
p.display()
en.display()
en.auto()
en.ai()
pygame.display.update()
time.sleep(0.1)

if name == 'main':
main()
`