安装pygame库
pip install pygame
飞机大战游戏使用的pygame库,该游戏的代码分为三个部分,游戏窗体的创建,设置飞机和子弹的动画效果,飞机类的编写。
创建飞机大战的游戏窗体
#设置游戏屏幕大小
SCREEN_WIDTH=480
SCREEN_HEIGHT=700
#初始化pygame,必须放在最前面
pygame.init()
#设置游戏界面大小,背景图片及标题,像素大小
screen=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
#游戏界面标题
pygame.display.set_caption('飞机大战')
设置游戏的动画效果
#背景图
background=pygame.image.load('resplane/resplane1/image/background.png').convert()
#飞机图片集合
#设置玩家飞机不同状态图片列表,多张图片展示为动画效果
player_img1=pygame.image.load('resplane/resplane1/image/cap1.png')
player_img2=pygame.image.load('resplane/resplane1/image/player1.png')
plane_img=[]
plane_img2=[]
#参数前面两位为图片偏移量,后为像素大小
plane_img.append(player_img1.subsurface(pygame.Rect(0,0,30,30)).convert_alpha())
plane_img2.append(player_img2.subsurface(pygame.Rect(0,0,30,30)).convert_alpha())
player_pos1=[40,600]
player_pos2=[420,600]
在使用pygame.Rect时要注意大小不要小于实际图片的 像素大小,不然会报错。
玩家飞机类
class Player(pygame.sprite.Sprite):
def __init__(self,plane_img,init_pos):
pygame.sprite.Sprite.__init__(self)
self.image=plane_img
self.rect=pygame.Rect(0,0,100,120)
self.rect.topleft=init_pos
self.img_index=0
self.speed=8
def moveUp(self):
if self.rect.top<=0:
self.rect.top=0
else:
self.rect.top-=self.speed
def moveDown(self):
if self.rect.top>=SCREEN_HEIGHT-self.rect.height:
self.rect.top=SCREEN_HEIGHT-self.rect.height
else:
self.rect.top+=self.speed
def moveLeft(self):
if self.rect.left<=0:
self.rect.left=0
else:
self.rect.left-=self.speed
def moveRight(self):
if self.rect.left>=SCREEN_WIDTH-self.rect.width:
self.rect.left=SCREEN_WIDTH-self.rect.width
else:
self.rect.left+=self.speed
完整代码
import pygame
from sys import exit
from pygame.locals import *
#玩家飞机类
class Player(pygame.sprite.Sprite):
def __init__(self,plane_img,init_pos):
pygame.sprite.Sprite.__init__(self)
self.image=plane_img
self.rect=pygame.Rect(0,0,100,120)
self.rect.topleft=init_pos
self.img_index=0
self.speed=8
def moveUp(self):
if self.rect.top<=0:
self.rect.top=0
else:
self.rect.top-=self.speed
def moveDown(self):
if self.rect.top>=SCREEN_HEIGHT-self.rect.height:
self.rect.top=SCREEN_HEIGHT-self.rect.height
else:
self.rect.top+=self.speed
def moveLeft(self):
if self.rect.left<=0:
self.rect.left=0
else:
self.rect.left-=self.speed
def moveRight(self):
if self.rect.left>=SCREEN_WIDTH-self.rect.width:
self.rect.left=SCREEN_WIDTH-self.rect.width
else:
self.rect.left+=self.speed
#设置游戏屏幕大小
SCREEN_WIDTH=480
SCREEN_HEIGHT=700
#初始化pygame,必须放在最前面
pygame.init()
#设置游戏界面大小,背景图片及标题,像素大小
screen=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
#游戏界面标题
pygame.display.set_caption('飞机大战')
#背景图
background=pygame.image.load('resplane/resplane1/image/background.png').convert()
#飞机图片集合
#设置玩家飞机不同状态图片列表,多张图片展示为动画效果
player_img1=pygame.image.load('resplane/resplane1/image/cap1.png')
player_img2=pygame.image.load('resplane/resplane1/image/player1.png')
plane_img=[]
plane_img2=[]
#参数前面两位为图片偏移量,后为像素大小
plane_img.append(player_img1.subsurface(pygame.Rect(0,0,30,30)).convert_alpha())
plane_img2.append(player_img2.subsurface(pygame.Rect(0,0,30,30)).convert_alpha())
player_pos1=[40,600]
player_pos2=[420,600]
#实例化玩家飞机
player1=Player(plane_img,player_pos1)
player2=Player(plane_img2,player_pos2)
#游戏循环帧率设置
clock=pygame.time.Clock()#判断游戏循环退出的参数
running=True#游戏主循环
while running:
#控制游戏最大帧率
clock.tick(60)
#绘制背景
screen.fill(0)
screen.blit(background,(0,0))
#绘制玩家飞机
screen.blit(player1.image[player1.img_index],player1.rect)
screen.blit(player2.image[player2.img_index],player2.rect)
#更新屏幕
pygame.display.update()
key_pressed=pygame.key.get_pressed()
if key_pressed[K_w]:
player1.moveUp()
if key_pressed[K_s]:
player1.moveDown()
if key_pressed[K_a]:
player1.moveLeft()
if key_pressed[K_d]:
player1.moveRight()
if key_pressed[K_UP]:
player2.moveUp()
if key_pressed[K_DOWN]:
player2.moveDown()
if key_pressed[K_LEFT]:
player2.moveLeft()
if key_pressed[K_RIGHT]:
player2.moveRight()
#处理游戏退出,不能删除,不然移动窗体就会死机
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
exit()