做了这个飞机大战,感觉还不错
不过要成为一个成熟的游戏还不够
解决的问题:
创建了一个飞机图片在屏幕上自由移动
可以按住键盘按键不放进行移动和射击
可以连发子弹
这个游戏由最原始的面向过程写成了面向对象,加深了对面向对象的理解
创建敌方飞机并且能左右移动,遇到边界返回(最最最低级的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()
`