pygame 组合键的实现

自己尝试写了一个飞机大战的游戏,一开始只能处理单个按键的信号:如只能单方向飞退出只能是鼠标点击X,后面重新修改代码实现了ALT+F4的退出功能,与同时按不同方向键出现组合的飞行路径。代码如下:

import sys
import pygame
from pygame.locals import *  # key_pressed[]方法所在的包
from alien import Alien

from bullet import Bullet


def check_keydown_events(event, ai_setting, screen, ship, bullets):
    if event.key == pygame.K_SPACE:
        if len(bullets) < ai_setting.bullets_allowed:
            new_bullet = Bullet(ai_setting, screen, ship)
            bullets.add(new_bullet)


def check_events(ai_settings, screen, ship, bullets):
    key_pressed = pygame.key.get_pressed()
    c_exit = False
    if key_pressed[K_LALT] and key_pressed[K_F4]:  # 实现ALT+F4退出
        c_exit = True
    for event in pygame.event.get():
        if event.type == pygame.QUIT or c_exit:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event, ai_settings, screen, ship, bullets)
            if event.key == pygame.K_RIGHT:
                ship.moving_right = True
            if event.key == pygame.K_LEFT:
                ship.moving_left = True
            if event.key == pygame.K_UP:
                ship.moving_up = True
            if event.key == pygame.K_DOWN:
                ship.moving_down = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = False
            if event.key == pygame.K_LEFT:
                ship.moving_left = False
            if event.key == pygame.K_UP:
                ship.moving_up = False
            if event.key == pygame.K_DOWN:
                ship.moving_down = False

 其中from alien import Alien和from bullet import Bullet是自己定义的其它对象,和上面的功能没关系

我把我飞船的类也贴一下,这样好参照着看,我把检测移动的信号写在了上面的那个模块中而移动的方法是在Ship对象中:

class Ship(object):
    def __init__(self, screen):
        self.screen = screen
        self.image = pygame.image.load('image/ship.png').convert()
        self.image = pygame.transform.scale(self.image, (60, 60))
        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.moving_right = False
        self.moving_left = False
        self.moving_up = False
        self.moving_down = False

    def update(self):
        # if self.moving_right:
        #     self.rect.centerx += 1
        # if self.moving_left:
        #     self.rect.centerx -= 1
        if self.moving_right and self.rect.right < 1200:
            self.rect.centerx += 2
        if self.moving_left and self.rect.left > 0:
            self.rect.centerx -= 1.5
        if self.moving_up and self.rect.top > 0:
            self.rect.bottom -= 2
        if self.moving_down and self.rect.bottom <= self.screen_rect.bottom:
            self.rect.bottom += 2

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

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值