导入pygame模块
窗口的一些设置
screen = pygame.display.set_mode() 设置窗口大小
pygame.display.set_caption() 设置游戏窗口标题
pygame.display.set_icon() 设置窗口左上角图标
注:必须使用变量记录set_mode方法的返回窗口对象,因为:后续所有的图像绘制都基于这个返回结果
screen.blit(background,(x,y))向窗口中粘贴背景图片,(x,y)对应的是图片左上角的坐标
pygame.display.update() # 更新屏幕显示
V1.0版本
import pygame
window = pygame.display.set_mode((480,500)) # 设置游戏窗口大小
pygame.display.set_caption('飞机大战') # 设置游戏窗口标题
icon = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\icon72x72.png')
pygame.display.set_icon(icon)# 设置窗口左上角图标
background = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\background.png')# 设置窗口背景图片
# 游戏循环,进入游戏循环就意味着游戏的开始
while True:
window.blit(background,(0,0)) # 将背景图片粘贴到窗口
# 获取事件并逐类响应
for event in pygame.event.get():
if event.type == pygame.QUIT: # 如果事件的类型是退出(点击退出按钮触发)
print('退出了')
exit(0)
pygame.display.update() # update更新屏幕显示
需求:加载玩家飞机图片,并控制飞机左右移动
1.加载玩家飞机图片
pygame.image.load(‘图片路径’)
将玩家飞机图片粘贴到窗口上
2.控制飞机左右移动
导入模块from pygame.locals import *
触发事件KEYDOWN
(1)如果控制飞机左移,触发事件K_LEFT
飞机左移,横坐标减小
控制飞机移动范围,防止飞机跑丢了
(2)如果控制飞机右移,触发事件K_RIGHT
飞机右移,横坐标增加
控制飞机移动范围,防止飞机跑丢了
import pygame
from pygame.locals import *
window = pygame.display.set_mode((480,500)) # 设置游戏窗口大小
pygame.display.set_caption('飞机大战') # 设置游戏窗口标题
icon = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\icon72x72.png')
pygame.display.set_icon(icon)# 设置窗口左上角图标
playerPlane = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\hero.gif') # 加载玩家飞机图片,图片尺寸100×124
player_x = (480-100)//2 # 飞机左上角坐标,横坐标
player_y = 500-124 # 纵坐标
background = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\background.png')# 设置窗口背景图片
# 游戏循环,进入游戏循环就意味着游戏的开始
while True:
window.blit(background,(0,0)) # 将背景图片粘贴到窗口
window.blit(playerPlane,(player_x,player_y)) # 将玩家飞机粘贴到窗口上
# 获取事件并逐类响应
for event in pygame.event.get(): # 循环获取事件(尤其是鼠标、键盘事件)
if event.type == pygame.QUIT: # 如果事件的类型是退出(点击退出按钮触发)
print('退出了')
exit(0)
elif event.type == KEYDOWN:
# 控制飞机左右移动
if event.key == K_LEFT: # 飞机
player_x = player_x - 5 if player_x>0 else 0 # 防止飞机移出窗口,如果没有这条语句的话,飞机会移出窗口
elif event.key == K_RIGHT:
player_x = player_x + 5 if player_x<480-100-5 else (480-100) # 控制飞机移动范围
pygame.display.update() # update更新屏幕显示
需求:让玩家飞机喷火和发射子弹
1.让玩家飞机喷火(本质就是两张图片的切换)
2.飞机发射子弹
封装一个玩家飞机子弹类
触发事件:按下空格键发射子弹
(1)按下空格键,创建一个子弹对象
(2)将子弹添加到子弹列表中
(3)遍历列表中的子弹
(4)发射子弹,即将子弹图片粘贴到窗口上
(5)如果子弹移动范围超出窗口,则将子弹从子弹列表中移出
import pygame
from pygame.locals import *
# 封装玩家飞机子弹类
class PlayerBullet():
def __init__(self,x,y,window):
self.x = x
self.y = y
self.window = window
self.picture = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\bullet.png') # 子弹图片,图片尺寸(22×22)
def draw(self):
self.window.blit(self.picture,(self.x,self.y)) # 向窗口粘贴子弹图片
self.move()
def move(self): # 子弹移动
self.y -= 5 # 子弹向上移动
window = pygame.display.set_mode((480,500)) # 设置游戏窗口大小
pygame.display.set_caption('飞机大战') # 设置游戏窗口标题
icon = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\icon72x72.png')
pygame.display.set_icon(icon)# 设置窗口左上角图标
playerPlaneIndex = 0
playerPlane1 = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\hero1.png') # 加载玩家飞机图片,图片尺寸100×124
playerPlane2 = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\hero2.png') # 加载玩家飞机图片,图片尺寸100×124
player_x = (480-100)//2 # 飞机左上角坐标,横坐标
player_y = 500-124 # 纵坐标
playerPlaneBulletList = [] # 玩家飞机子弹列表为空
background = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\background.png')# 设置窗口背景图片
# 第一个参数是,按下键盘30毫秒后开始反应,第二个参数是按下30毫秒未抬起,触发一次新的按键事件
pygame.key.set_repeat(30,120)
# 游戏循环,进入游戏循环就意味着游戏的开始
while True:
window.blit(background,(0,0)) # 将背景图片粘贴到窗口
if playerPlaneIndex == 0:
window.blit(playerPlane1,(player_x,player_y)) # 将玩家飞机粘贴到窗口上
playerPlaneIndex = 1
else:
window.blit(playerPlane2,(player_x,player_y)) # 将玩家飞机粘贴到窗口上
playerPlaneIndex = 0
# for zd in playerPlaneBulletList:
# zd.draw()
# playerPlaneBulletList.remove(zd) if zd.y < 0 else ''
# 获取事件并逐类响应
for event in pygame.event.get(): # 循环获取事件(尤其是鼠标、键盘事件)
if event.type == pygame.QUIT: # 如果事件的类型是退出(点击退出按钮触发)
print('退出了')
exit(0)
elif event.type == KEYDOWN:
# 控制飞机左右移动
if event.key == K_LEFT: # 飞机
player_x = player_x - 5 if player_x>0 else 0 # 防止飞机移出窗口,如果没有这条语句的话,飞机会移出窗口
elif event.key == K_RIGHT:
player_x = player_x + 5 if player_x<480-100-5 else (480-100) # 控制飞机移动范围
# 设置按下空格键 发射子弹
elif event.key == K_SPACE:
zd = PlayerBullet(player_x + 100/2 - 22/2,player_y - 22,window) # 创建玩家飞机子弹对象
playerPlaneBulletList.append(zd) # 向子弹列表中添加子弹
for zd in playerPlaneBulletList:
zd.draw()
playerPlaneBulletList.remove(zd) if zd.y < 0 else '' # 如果子弹纵坐标小于0,说明子弹已经移出窗口,则移出列表中的子弹
pygame.display.update() # update更新屏幕显示
需求:添加敌方飞机,让敌方飞机移动
1.添加敌方飞机
2.让敌方飞机移动
设置初始移动方向
如果走到窗口边界,则调换方向
import pygame
from pygame.locals import *
# 封装玩家飞机子弹类
class PlayerBullet():
def __init__(self,x,y,window):
self.x = x
self.y = y
self.window = window
self.picture = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\bullet.png') # 子弹图片,图片尺寸(22×22)
def draw(self):
self.window.blit(self.picture,(self.x,self.y)) # 向窗口粘贴子弹图片
self.move()
def move(self): # 子弹移动
self.y -= 5 # 子弹向上移动
window = pygame.display.set_mode((480,500)) # 设置游戏窗口大小
pygame.display.set_caption('飞机大战') # 设置游戏窗口标题
icon = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\icon72x72.png')
pygame.display.set_icon(icon)# 设置窗口左上角图标
playerPlaneIndex = 0
playerPlane1 = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\hero1.png') # 加载玩家飞机图片,图片尺寸100×124
playerPlane2 = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\hero2.png') # 加载玩家飞机图片,图片尺寸100×124
player_x = (480-100)//2 # 飞机左上角坐标,横坐标
player_y = 500-124 # 纵坐标
playerPlaneBulletList = [] # 玩家飞机子弹列表为空
enemyPlane = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\enemy1.png') # 加载敌军飞机图片,图片尺寸(69×89)
enemy_x = (480-69)//2
enemy_y = 0
direct = '左'
background = pygame.image.load(r'C:\Users\Administrator\Desktop\0715系统班\飞机大战\img\background.png')# 设置窗口背景图片
# 第一个参数是,按下键盘30毫秒后开始反应,第二个参数是按下30毫秒未抬起,触发一次新的按键事件
pygame.key.set_repeat(30,120)
# 游戏循环,进入游戏循环就意味着游戏的开始
while True:
window.blit(background,(0,0)) # 将背景图片粘贴到窗口
window.blit(enemyPlane,(enemy_x,enemy_y)) # 将敌军飞机粘贴到窗口
if direct == '左':
enemy_x = enemy_x - 3
if enemy_x<=0:
direct = '右'
else:
enemy_x = enemy_x + 3
if enemy_x>=480 - 69:
direct = '左'
if playerPlaneIndex == 0:
window.blit(playerPlane1,(player_x,player_y)) # 将玩家飞机粘贴到窗口上
playerPlaneIndex = 1
else:
window.blit(playerPlane2,(player_x,player_y)) # 将玩家飞机粘贴到窗口上
playerPlaneIndex = 0
# for zd in playerPlaneBulletList:
# zd.draw()
# playerPlaneBulletList.remove(zd) if zd.y < 0 else ''
# 获取事件并逐类响应
for event in pygame.event.get(): # 循环获取事件(尤其是鼠标、键盘事件)
if event.type == pygame.QUIT: # 如果事件的类型是退出(点击退出按钮触发)
print('退出了')
exit(0)
elif event.type == KEYDOWN:
# 控制飞机左右移动
if event.key == K_LEFT: # 飞机
player_x = player_x - 5 if player_x>0 else 0 # 防止飞机移出窗口,如果没有这条语句的话,飞机会移出窗口
elif event.key == K_RIGHT:
player_x = player_x + 5 if player_x<480-100-5 else (480-100) # 控制飞机移动范围
# 设置按下空格键 发射子弹
elif event.key == K_SPACE:
zd = PlayerBullet(player_x + 100/2 - 22/2,player_y - 22,window) # 创建玩家飞机子弹对象
playerPlaneBulletList.append(zd) # 向子弹列表中添加子弹
for zd in playerPlaneBulletList:
zd.draw()
playerPlaneBulletList.remove(zd) if zd.y < 0 else '' # 如果子弹纵坐标小于0,说明子弹已经移出窗口,则移出列表中的子弹
pygame.display.update() # update更新屏幕显示