射击小游戏(Python)

博主分享了自己首次开发Python小游戏的经历,游戏由7个文件组成,包括alien_invasion、alien、bullet等,讲述了在安装pygame上的挫折,以及各文件的主要功能,如alien负责外星人,bullet实现射击,game_functions管理飞船移动等。
摘要由CSDN通过智能技术生成

这个项目是我第一次开发小游戏。由7个文件构成,分别是alian_invasion、alien、bullet、game_functions、game_stats、settings、ship。
项目开始开发前得先安装pygame,这个过程真是一把辛酸泪,整整弄了2天!!!简直不忍回首!!!有空再写一篇安装文章给各位吧。
好了,进入正题,直接给出7个文件的代码吧。

alian_invasion

创建一系列整个游戏要用到的对象和游戏的主循环。

import pygame
from pygame.sprite import Group

from settings import Settings
from game_stats import GameStats
from ship import Ship
import game_functions as gf

def run_game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")
    
    stats = GameStats(ai_settings)
    
    bg_color = (230, 230, 230)
    
    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, ship, bullets)
        
        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
            gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets)
        
        gf.update_screen(ai_settings, screen, ship, aliens, bullets)

run_game()

alien

外星人来啦~这个文件应该放到最后做的。

import pygame
from pygame.sprite import Sprite

class Alien(Sprite):
    def __init__(self, ai_settings, screen):
        super(Alien, self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings

        self.image = pygame.image.load('images/alien.bmp')
        self.rect = self.image.get_rect()
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height
        self.x = float(self.rect.x)
        
    def check_edges(self):
        screen_rect = self.screen.get_rect()
        if self.rect.right >= screen_rect.right:
            return True
        elif self.rect.left <= 0:
            return True
        
    def update(self):
        self.x += (self.ai_settings.alien_speed_factor *
                        self.ai_settings
这是一个使用Pygame库实现飞行射击小游戏Python代码示例: ```python import pygame import random # 初始化Pygame pygame.init() # 定义游戏屏幕大小和帧率 SCREEN_WIDTH = 480 SCREEN_HEIGHT = 640 FPS = 60 # 定义颜色 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) # 创建游戏屏幕 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("飞行射击小游戏") # 加载图片 player_img = pygame.image.load("player.png") player_img = pygame.transform.scale(player_img, (50, 50)) enemy_img = pygame.image.load("enemy.png") enemy_img = pygame.transform.scale(enemy_img, (50, 50)) bullet_img = pygame.image.load("bullet.png") bullet_img = pygame.transform.scale(bullet_img, (10, 20)) # 加载音效 shoot_sound = pygame.mixer.Sound("shoot.wav") explosion_sound = pygame.mixer.Sound("explosion.wav") # 定义玩家类 class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = player_img self.rect = self.image.get_rect() self.rect.centerx = SCREEN_WIDTH // 2 self.rect.bottom = SCREEN_HEIGHT - 10 self.speedx = 0 def update(self): self.speedx = 0 # 控制玩家移动 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: self.speedx = -8 if keys[pygame.K_RIGHT]: self.speedx = 8 self.rect.x += self.speedx # 限制玩家移动范围 if self.rect.left < 0: self.rect.left = 0 if self.rect.right > SCREEN_WIDTH: self.rect.right = SCREEN_WIDTH def shoot(self): bullet = Bullet(self.rect.centerx, self.rect.top) all_sprites.add(bullet) bullets.add(bullet) shoot_sound.play() # 定义敌人类 class Enemy(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = enemy_img self.rect = self.image.get_rect() self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) self.speedx = random.randrange(-3, 3) def update(self): self.rect.x += self.speedx self.rect.y += self.speedy # 碰撞检测 if self.rect.top > SCREEN_HEIGHT + 10 or self.rect.left < -25 or self.rect.right > SCREEN_WIDTH + 20: self.kill() # 定义子弹类 class Bullet(pygame.sprite.Sprite): def __init__(self, x, y): super().__init__() self.image = bullet_img self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y self.speedy = -10 def update(self): self.rect.y += self.speedy # 子弹飞出屏幕后删除 if self.rect.bottom < 0: self.kill() # 定义游戏结束函数 def game_over(): font = pygame.font.SysFont(None, 48) text = font.render("GAME OVER", True, RED) text_rect = text.get_rect() text_rect.centerx = SCREEN_WIDTH // 2 text_rect.centery = SCREEN_HEIGHT // 2 screen.blit(text, text_rect) pygame.display.flip() pygame.time.wait(2000) # 创建游戏精灵组 all_sprites = pygame.sprite.Group() enemies = pygame.sprite.Group() bullets = pygame.sprite.Group() # 创建玩家对象 player = Player() all_sprites.add(player) # 创建敌人对象 for i in range(8): enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) # 设置帧率 clock = pygame.time.Clock() # 游戏循环 running = True while running: clock.tick(FPS) # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: player.shoot() # 更新游戏精灵组 all_sprites.update() # 检测子弹和敌人的碰撞 hits = pygame.sprite.groupcollide(enemies, bullets, True, True) for hit in hits: enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) explosion_sound.play() # 检测玩家和敌人的碰撞 hits = pygame.sprite.spritecollide(player, enemies, False) if hits: game_over() running = False # 渲染游戏画面 screen.fill(BLACK) all_sprites.draw(screen) pygame.display.flip() # 退出Pygame pygame.quit() ``` 这是一个简单的飞行射击小游戏,玩家通过控制箭头左右移动来躲避敌人的攻击,并使用空格键发射子弹攻击敌人。当敌人被击中时,会播放爆炸音效并生成新的敌人。当玩家与敌人碰撞时,游戏结束并显示GAME OVER的提示。运行代码即可开始游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值