鱼C论坛

 找回密码
 立即注册
查看: 1393|回复: 1

关于外星人入侵小游戏问题求大神解答

[复制链接]
发表于 2020-11-3 14:02:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的飞船右上,右下,左下飞行的同时都可以发射子弹,为什么左上飞行的同时不能发射?



import pygame,sys
from pygame.sprite import Sprite
from pygame.sprite import Group

class Settings():
    def __init__(self):
        self.screen_width = 800
        self.screen_height = 600
        self.bg_color = (230, 230, 230)
        self.ship_speed_factor = 0.5
        self.bullet_speed_factor = 0.6
        self.bullet_width = 3.1
        self.bullet_height = 5
        self.bullet_color = 150, 50, 50

class Bullet(Sprite):
    def __init__(self, Settings, screen, ship):
        super(Bullet, self).__init__()
        self.screen = screen
        self.rect = pygame.Rect(0, 0, Settings.bullet_width,Settings.bullet_height)
        self.rect.centerx = ship.rect.centerx
        self.rect.top = ship.rect.top
        self.y = float(self.rect.y)
        self.color = Settings.bullet_color
        self.speed_factor = 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)

def update_bullets(bullets):
    bullets.update()
    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)


class Ship():
    def __init__(self, ai_sets , screen):
        """初始化飞船并设置其初始位置"""
        self.screen = screen
        self.image = pygame.image.load('ship.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()
        self.ai_sets = ai_sets
        self.center=self.screen_rect.centerx
        self.y=self.screen_rect.bottom
        self.moving_right = False
        self.moving_left = False
        self.moving_up = False
        self.moving_down = False

    def blitme(self):
        """在指定位置绘制飞船"""
        self.screen.blit(self.image, self.rect)
    def updata(self):
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center+= self.ai_sets.ship_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_sets.ship_speed_factor
        if self.moving_up and self.rect.bottom > 50:
            self.y-= self.ai_sets.ship_speed_factor
        if self.moving_down and self.rect.bottom < 600:
            self.y+= self.ai_sets.ship_speed_factor
        self.rect.centerx=self.center
        self.rect.bottom=self.y

def check_keydown_events(event, aisets, screen, ship, bullets):
    """响应按键"""
    if event.key == pygame.K_SPACE:
        new_bullet = Bullet(aisets, screen, ship)
        bullets.add(new_bullet)
    elif event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_UP:
        ship.moving_up = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
    elif event.key == pygame.K_DOWN:
        ship.moving_down = True


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
    elif event.key == pygame.K_UP:
        ship.moving_up = False
    elif event.key == pygame.K_DOWN:
        ship.moving_down = False

def check_events(ai_settings, screen, ship, bullets):
    """响应按键和鼠标事件"""
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event, ai_settings, screen, ship, bullets)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)


def update_screen(ai_settings, screen, ship,bullets):
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    pygame.display.flip()

def run_game():
    pygame.init()
    ai_set=Settings()
    screen=pygame.display.set_mode((ai_set.screen_width,ai_set.screen_height))
    ship=Ship(ai_set, screen)
    bullets = Group()

    while True:
        check_events(ai_set, screen, ship, bullets)
        ship.updata()
        update_bullets(bullets)
        update_screen(ai_set, screen, ship, bullets)


run_game()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-3 16:44:06 | 显示全部楼层
有没有想过有时候可能并不是代码的问题?
键盘按键冲突你可能没遇到过吧?
这种时候你可以调出屏幕键盘测试代码是否有问题
如果不是代码问题,那只能是换个键盘了,机械键盘,或者是全键无冲突的键盘
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表