5,504
社区成员




import sys
import time
import random
import pygame
from pygame.locals import *
# 常量
# 背景 background路径、大小、位置
BACKGROUND_PATH = ['images/start/startBg.jpg', 'images/bg/bg1.jpg']
BACKGROUND_SIZE = WIDTH, HEIGHT = 500, 700
BACKGROUND_COORDINATE = BACKGROUND_X, BACKGROUND_Y = 0, 0
# 开始按钮 startButton路径、大小、位置
START_BUTTON_PATH = 'images/start/startButton.png'
START_BUTTON_SIZE = START_BUTTON_WIDTH, START_BUTTON_HEIGHT = 200, 100
START_BUTTON_COORDINATE = START_BUTTON_X, START_BUTTON_Y = (WIDTH - START_BUTTON_WIDTH) / 2, HEIGHT / 2
# 简介 rules路径、大小、位置
RULES_PATH = 'images/start/rules.png'
RULES_SIZE = RULES_WIDTH, RULES_HEIGHT = 200, 100
RULES_COORDINATE = RULES_X, RULES_Y = (WIDTH - RULES_WIDTH) / 2, START_BUTTON_Y + RULES_HEIGHT + 20
# 我机 myAircraft路径、大小、位置、速度
MY_AIRCRAFT_PATH = 'images/my/own0.png'
MY_AIRCRAFT_SIZE = MY_AIRCRAFT_WIDTH, MY_AIRCRAFT_HEIGHT = 80, 80
MY_AIRCRAFT_COORDINATE = MY_AIRCRAFT_X, MY_AIRCRAFT_Y = (WIDTH - MY_AIRCRAFT_WIDTH) / 2, HEIGHT - MY_AIRCRAFT_HEIGHT
MY_AIRCRAFT_SPEED = 5
# 子弹 Bullet路径、大小、位置、速度
BULLET_PATH = ['images/fire/fire1.png', 'images/fire/fire2.png', 'images/fire/fire3.png',
'images/fire/fire4.png', 'images/fire/fire5.png', 'images/fire/fire6.png', 'images/fire/fire7.png']
BULLET_SIZE = BULLET_WIDTH, BULLET_HEIGHT = 30, 30
# BULLET_COORDINATE = BULLET_X, BULLET_Y = 0,0
BULLET_SPEED = 5
TITLE = '飞机大战1.0'
# 方法
def imageSet(path, size):
return pygame.transform.scale(pygame.image.load(path), size)
def hello():
startBG = imageSet(BACKGROUND_PATH[0], BACKGROUND_SIZE)
screen.blit(startBG, (0, 0))
startButton = imageSet(START_BUTTON_PATH, START_BUTTON_SIZE)
screen.blit(startButton, START_BUTTON_COORDINATE)
rules = imageSet(RULES_PATH, RULES_SIZE)
screen.blit(rules, RULES_COORDINATE)
def gaming():
# screen.fill((255, 255, 255)) # 填充颜色
# 加载背景
startBG = imageSet(BACKGROUND_PATH[1], BACKGROUND_SIZE)
screen.blit(startBG, (0, 0))
myAircraftImg = imageSet(MY_AIRCRAFT_PATH, MY_AIRCRAFT_SIZE)
screen.blit(myAircraftImg, myAircraft.myAircraftRect)
pygame.display.update() # 更新显示
def gameOver():
pass
# 类
# 子弹
class Bullet:
def __init__(self, path, coordinate):
self.bulletImg = imageSet(BULLET_PATH[path], BULLET_SIZE)
# 位置
self.bulletCoordinate = self.bullet_X, self.bullet_Y = coordinate
# 移动速度
self.speed = BULLET_SPEED
# Rect
self.bulletRect = pygame.Rect(self.bullet_X, self.bullet_Y, BULLET_WIDTH, BULLET_HEIGHT)
self.bulletSurface = self.bulletImg.subsurface(self.bulletRect)
def move(self):
self.bulletRect[1] -= self.speed
# 飞机
class MyAircraft:
def __init__(self):
# 图像
self.myAircraftImg = imageSet(MY_AIRCRAFT_PATH, MY_AIRCRAFT_SIZE)
# 位置
self.myAircraftCoordinate = self.myAircraft_X, self.myAircraft_Y = MY_AIRCRAFT_X, MY_AIRCRAFT_Y
# 移动速度
self.speed = MY_AIRCRAFT_SPEED
# 状态
self.death = False
# Rect
#self.myAircraftRect = pygame.Rect(self.myAircraft_X, self.myAircraft_Y, MY_AIRCRAFT_WIDTH, MY_AIRCRAFT_HEIGHT)
self.myAircraftRect=self.myAircraftImg.get_rect()
self.myAircraftSurface = self.myAircraftImg.subsurface(self.myAircraftRect)
self.myAircraftRect.top=self.myAircraft_X
self.myAircraftRect.left=self.myAircraft_Y
# 子弹是由玩家飞机发射的,所以创建列表,存储子弹对象,使该列表变为该类的属性
self.bullets = [] # 子弹空列表
# 生成函数,完成发射子弹动作,同时将每个子弹对象存在列表中 bullet_path 0-6
def shooting(self, bullet_path=0):
bullet = Bullet(bullet_path, self.myAircraftRect)
self.bullets.append(bullet) # 加入子弹列表
def myAircraftFlyCheck(self):
if event.type == pygame.KEYDOWN and not self.death:
# 定义向上移动方法,当飞机移动到边框位置时,无法移动
if event.key == pygame.K_UP or event.key == pygame.K_w:
if self.myAircraftRect[1] <= 0:
self.myAircraftRect[1] = 0
else:
self.myAircraftRect[1] -= self.speed
# 定义向下移动方法,当飞机移动到边框位置时,无法移动
if event.key == pygame.K_DOWN or event.key == pygame.K_s:
if self.myAircraftRect[1] >= HEIGHT - MY_AIRCRAFT_HEIGHT:
self.myAircraftRect[1] = HEIGHT - MY_AIRCRAFT_HEIGHT
else:
self.myAircraftRect[1] += self.speed
# 定义向左移动方法,当飞机移动到边框位置时,无法移动
if event.key == pygame.K_LEFT or event.key == pygame.K_a:
if self.myAircraftRect[0] <= 0:
self.myAircraftRect[0] = 0
else:
self.myAircraftRect[0] -= self.speed
# 定义向右移动方法,当飞机移动到边框位置时,无法移动
if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
if self.myAircraftRect[0] >= WIDTH - MY_AIRCRAFT_WIDTH:
self.myAircraftRect[0] = WIDTH - MY_AIRCRAFT_WIDTH
else:
self.myAircraftRect[0] += self.speed
# 敌机
class EnemyAircraft:
pass
# 初始化
pygame.init()
myAircraft = MyAircraft()
enemyAircraft = EnemyAircraft()
# 设置屏幕
screen = pygame.display.set_mode(BACKGROUND_SIZE)
pygame.display.set_caption(TITLE)
# 静态效果
##设置图片
# startBG = imageSet(BACKGROUND_PATH[1], BACKGROUND_SIZE)
# screen.blit(startBG, (0, 0))
# 设置时钟实例
clock = pygame.time.Clock()
# 进行时
# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码
while True:
# 刷新频率
clock.tick(60)
# 循环获取事件,监听事件状态
for event in pygame.event.get():
# 判断用户是否点了"X"关闭按钮,并执行if代码段
if event.type == pygame.QUIT:
# 卸载所有模块
pygame.quit()
# 终止程序,确保退出程序
sys.exit()
# gaming()
# myAircraft.myAircraftFlyCheck()
hello()
pygame.display.flip() # 更新屏幕内容
已解决,在另外的py文件中写了不同的屏幕大小,导致出现了这个问题