微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在外星人入侵游戏中,我发射子弹和加载外星人的代码在运行后没有显示输出?

如何解决在外星人入侵游戏中,我发射子弹和加载外星人的代码在运行后没有显示输出?

The output of the game

这是游戏的输出

我正在参考电子书“ Python Crash Course”,我使用Pycharm IDE,并且还安装了python和pygame,游戏运行良好,直到飞船向左移动为止。 另外,我还有另一个关于在游戏中加载外星人图像的问题,因为pygame容易接受BMP图像,因此将图像保存在images文件夹内的PYGAME目录中作为位图图像。运行该程序后,外星飞船似乎没有出现在游戏中。 我还添加了船(而不是外星人船)的代码。请帮我从船上发射子弹。 到目前为止,我已经使用了五个类,例如 ship.py,bullet.py,alien.py,settings.py,游戏函数.py

这是发射子弹类的代码

import pygame as pg
from pygame.sprite import Sprite


class Bullet(Sprite):
    def __init__(self,ai_settings,screen,ship):
        super(Bullet,self).__init__()
        self.screen = screen
        self.rect = pg.Rect(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):
        pg.draw.rect(self.screen,self.color,self.rect)

这是外星人阶级的代码

import pygame as pg
from pygame.sprite import Sprite


class Alien(Sprite):
    def __init__(self,screen):
        super(Alien,self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings
        self.image = pg.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 blitme(self):
        self.screen.blit(self.image,self.rect)

这是 ship.py 代码

import pygame


class Ship:
    def __init__(self,screen):
        self.screen = screen
        self.ai_settings = ai_settings
        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom
        self.center = float(self.rect.centerx)
        self.moving_right = False
        self.moving_left = False

    def update(self):
        if self.moving_right:
            if self.moving_right and self.rect.right < self.screen_rect.right:
                self.center += self.ai_settings.ship_speed_factor
            self.rect.centerx += 1
        if self.moving_left:
            if self.moving_left and self.rect.left > 0:
                self.center -= self.ai_settings.ship_speed_factor
            self.rect.centerx -= 1
        self.rect.centerx = self.center

    def blitme(self):
        self.screen.blit(self.image,self.rect)

这是主程序Alien Invasion.py中的类实现。

import pygame as pg
from pygame.sprite import Group

import game_functions as gf
from alien import Alien
from settings import Settings
from ship import Ship


def run_game():
    pg.init()
    ai_settings = Settings()
    screen = pg.display.set_mode((ai_settings.scree_width,ai_settings.screen_height))
    pg.display.set_caption('Alien Invasion')
    ship = Ship(ai_settings,screen)
    bullets = Group()
    alien = Alien(ai_settings,screen)
    while True:
        gf.check_events(ai_settings,ship,bullets)
        ship.update()
        gf.update_bullets(bullets)
        gf.update_screen(ai_settings,alien,bullets)


run_game()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?