基于Pygame中Pygame模块的大战外星人

本文档介绍了如何使用Python的Pygame库开发一款大战外星人的游戏。内容涵盖游戏环境设置、关键代码段,包括外星飞船、子弹、玩家飞船的控制以及游戏难度升级等。游戏玩法包括通过WSED键控制飞船移动,使用箭头键发射子弹,外星人接触玩家会导致生命值减少,全灭外星人后难度提升。
摘要由CSDN通过智能技术生成

一,引言

开发环境:Pycharm

操作系统:Windows 10

Pyhon版本:3.9.9

需要自行安装Pygame 3(必须)和Python(必须)。

由于多次引用背景参数,建议不要更改文中的背景参数。本文中的图片用的是相对引用的方式,如果和我图片位置放置不同的话需要设置绝对引用。

二,主要内容

主要代码片段:

import sys
import pygame  # 调用pygame
from settings import Settings  # 背景和一些必要值
from ship import Ship           # 飞船个人设置
import game_function as gf  # 移动和发射

# 把整个给gf 并不是按照调用类的方式用的
from pygame.sprite import Group
from game_stats import GameStats
from Button import Button
from Scoreboard import Scoreboard
def run_game():
    pygame.init()
    ai_settings = Settings()
    pygame.display.set_caption('飞机大战1')
    stats = GameStats(ai_settings)
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    play_button = Button(ai_settings, screen, 'game')
    sb = Scoreboard(ai_settings, screen, stats)
    ship = Ship(ai_settings, screen)
    bullets_left = Group()
    bullets_down = Group()
    bullets_right = Group()
    bullets = Group()
    aliens = Group()
    gf.create_fleet(ai_settings, screen ,ship,aliens)
    while True:
        gf.check_events(ai_settings, stats, play_button,screen,ship,  aliens,bullets,bullets_left,bullets_right,
                        bullets_down)
        if stats.game_active:
            ship.update()   # 这句很重要必须要调用ship里的判断
            gf.update_bullets(sb,screen,stats, ship ,ai_settings,aliens, bullets,bullets_left,bullets_right,bullets_down) #####
            gf.update_aliens(ai_settings, aliens ,stats, screen, ship ,bullets,bullets_down,bullets_left,bullets_right)
        gf.update_screen(ai_settings, screen, stats,ship,aliens, bullets,bullets_left,bullets_right,bullets_down,play_button
                  ,sb)

run_game()

关于外星飞船的一些调用:

import pygame
import sys
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('外星飞船.png')
        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.fleet_direction)
        self.rect.x = self.x


    def blitme(self):

        self.screen.blit(self.image, self.rect)

关于子弹的一些配置(这里只是向前方向的子弹) 其余各个方向的子弹也是基于这个略改:

import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
    def __init__(self, ai_settings, screen, ship):
        super(Bullet, self).__init__()  # pygame2.7需要这么写
        self.screen = screen

        self.rect = pygame.Rect(0,0,ai_settings.bullet_width, ai_settings.bullet_height)


        self.rect.centerx = ship.rect.centerx
        self.rect.top = ship.rect.top  # 子弹的初始位置



        self.y = float(self.rect.y)    # 记录子弹输出的位置

        self.color = ai_settings.bullet_color
        self.speed_factor = ai_settings.bullet_speed_factor

    def update(self):
        self.y -= self.speed_factor # 让子弹持续往上飞
        self.rect.y = self.y
    def draw_bullet(self):
        pygame.draw.rect(self.screen, self.color, self.rect)

关于可操控飞船的一些设置(如果要改变背景的长宽比,需要改变飞船的重置位置):

import pygame

class Ship():

    def __init__(self, ai_settings, screen):

            self.screen = screen

            self.ai_settings = ai_settings

            self.image = pygame.image.load('小飞机.png')
            self.rect = self.image.get_rect()
            self.screen_rec
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值