pygame之飞机小游戏

alien_invasion

import  pygame
import game_functions as gf
from setting import Settings #从setting模块中导入Settings类
from ship import Ship
from pygame.sprite import Group
from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button



def run_game():
    pygame.init() # 初始化pygame
    ai_settings = Settings() # 创建Settings对象(实例)
    # 设置(ai_settings.screen_width, ai_settings.screen_height)大小的窗口
    screen = pygame.display.set_mode((ai_settings.screen_width,\
         ai_settings.screen_height))
    
    pygame.display.set_caption("Alien Invasion by caoheng") #设置窗口标题内容
    
    stats = GameStats(ai_settings)
    sb = Scoreboard(ai_settings, screen, stats)
    play_button = Button(ai_settings, screen, "Play") #创建按钮对象(实例)
    ship = Ship(ai_settings, screen) #飞船对象(实例)
    bullets = Group() #子弹编组
    aliens = Group() #创建外星人编组
    gf.create_fleet(ai_settings, screen, ship, aliens)
    
    #程序主循环
    while True:
        gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) #监视控制器输入
        # print(stats.game_active)
        if stats.game_active:
            ship.update() #飞船行为控制
            gf.update_aliens(ai_settings, stats, screen, sb, ship, aliens, bullets) #外星人行为控制
            gf.update_bullets(ai_settings, screen,stats, sb, ship, aliens, bullets) #子弹行为控制  
        gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button) #更新屏幕图像

if __name__ == "__main__":
    run_game()
    

game_function

import sys, pygame
from bullet import Bullet
from alien import Alien
from time import sleep


def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets):
    """监视控制器(键盘和鼠标等)输入"""
    for event in pygame.event.get(): #获取控制器信息
        if event.type == pygame.QUIT: #事件为退出类型,游戏窗口关闭
            filename = "history_high_score.txt"
            file_save(filename, stats)
        elif event.type == pygame.KEYDOWN: #事件类型为按下键盘
            check_keydown_events(ai_settings, screen, stats, ship, bullets, event)
        elif event.type == pygame.KEYUP: #事件类型为松开键盘
            check_keyup_events(event, ship)
        elif event.type == pygame.MOUSEBUTTONDOWN: #事件类型为按下鼠标左键
            mouse_x, mouse_y = pygame.mouse.get_pos()
            check_play_button(ai_settings, screen, stats, sb, play_button,\
                 ship, aliens, bullets, mouse_x, mouse_y)


def file_save(filename, stats):
    """存储历史最高分文件"""
    try:
        with open(filename, 'w') as file_object:
            file_object.write(str(stats.high_score))
    except FileExistsError: 
        print("写入失败! ")
    sys.exit()    
  
def check_keydown_events(ai_settings, screen, stats, ship, bullets, event):
    if event.key == pygame.K_RIGHT: #按下右方向键
        ship.moving_right = True #向右移动标志位为真
    elif event.key == pygame.K_q: #按下q退出
        filename = "history_high_score.txt"
        file_save(filename, stats)
    elif event.key == pygame.K_LEFT: #按下左方向键
        ship.moving_left = True #向左移动标志位为真
    elif event.key == pygame.K_SPACE:#按下空格键
        fire_bullet(ai_settings, screen, ship, bullets)
    # elif event.key == pygame.K_p: #开始游戏
    #     start_game(ai_settings, screen, stats, aliens, ship, bullets, event)

def check_keyup_events(event, ship):
	"""响应松开"""
	if event.key == pygame.K_RIGHT: #事件的值等于向右
		ship.moving_right = False #向右移动标志位为真
	elif event.key == pygame.K_LEFT: #事件的值等于向左
		ship.moving_left = False #向左移动标志位为真

# def start_game(ai_settings, screen, stats, aliens, ship, bullets, event):
#     if event.key == pygame.K_p and not stats.game_active: #游戏处于非活动状态
#         #重置游戏统计数据
#         stats.reset_stats()
#         stats.game_avtive = True
        
#         #清空外星人和子弹列表
#         aliens.empty()
#         bullets.empty()

#         #创建一群外星人,并让飞船居中
#         create_fleet(ai_settings, screen, ship, aliens)
#         ship.center_ship()

def check_play_button(ai_settings, screen, 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的飞机大战游戏pygame代码示例,你可以参考一下: ```python import pygame import random pygame.init() # 设置游戏窗口大小 screen = pygame.display.set_mode((480, 700)) # 设置游戏标题 pygame.display.set_caption("飞机大战") # 定义颜色 BLACK = pygame.Color(0, 0, 0) WHITE = pygame.Color(255, 255, 255) GREEN = pygame.Color(0, 255, 0) RED = pygame.Color(255, 0, 0) # 加载背景图片 bg = pygame.image.load("background.png") # 加载飞机图片 player_img = pygame.image.load("player.png") # 加载敌机图片 enemy_img = pygame.image.load("enemy.png") # 加载子弹图片 bullet_img = pygame.image.load("bullet.png") # 设置字体 font = pygame.font.SysFont("arial", 36) # 定义玩家飞机类 class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player_img self.rect = self.image.get_rect() self.rect.centerx = 240 self.rect.bottom = 680 self.speed = 5 self.bullets = pygame.sprite.Group() def update(self): key_pressed = pygame.key.get_pressed() if key_pressed[pygame.K_LEFT]: self.rect.x -= self.speed if key_pressed[pygame.K_RIGHT]: self.rect.x += self.speed if key_pressed[pygame.K_SPACE]: bullet = Bullet(self.rect.centerx, self.rect.top) self.bullets.add(bullet) def draw(self, surface): surface.blit(self.image, self.rect) self.bullets.draw(surface) def shoot(self): bullet = Bullet(self.rect.centerx, self.rect.top) self.bullets.add(bullet) # 定义子弹类 class Bullet(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self) self.image = bullet_img self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y self.speed = -10 def update(self): self.rect.y += self.speed if self.rect.bottom < 0: self.kill() # 定义敌机类 class Enemy(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = enemy_img self.rect = self.image.get_rect() self.rect.x = random.randint(0, 480 - self.rect.width) self.rect.y = random.randint(-100, -50) self.speed = random.randint(3, 8) def update(self): self.rect.y += self.speed if self.rect.top > 700: self.kill() # 创建精灵组 all_sprites = pygame.sprite.Group() enemies = pygame.sprite.Group() player = Player() all_sprites.add(player) # 设置游戏帧率 clock = pygame.time.Clock() FPS = 60 # 游戏循环 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 更新玩家飞机 player.update() # 创建敌机 if random.randint(0, 60) == 0: enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) # 更新所有精灵 all_sprites.update() # 碰撞检测 hits = pygame.sprite.groupcollide(enemies, player.bullets, True, True) for hit in hits: enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) hits = pygame.sprite.spritecollide(player, enemies, False) if hits: text = font.render("Game Over", True, RED) screen.blit(text, (240 - text.get_rect().width // 2, 300)) pygame.display.update() pygame.time.delay(2000) pygame.quit() exit() # 绘制背景 screen.blit(bg, (0, 0)) # 绘制所有精灵 all_sprites.draw(screen) # 更新屏幕 pygame.display.update() # 控制游戏帧率 clock.tick(FPS) ``` 以上是一个非常简单的飞机大战游戏pygame代码示例,你可以根据自己的需求进行修改和完善。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值