星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来

这篇具有很好参考价值的文章主要介绍了星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、监听按键并作出判断

 二、持续移动

 三、左右移动

 总结:


前言

今天开始正式操控我们的小蜜蜂了,之前学java的时候是有一个函数监听鼠标和键盘的操作,我们通过传过来不同的值进行判断,现在来看看python是否一样的实现。

一、监听按键并作出判断

 以我浅薄的知识判断,流程应该为时刻监听键盘或者鼠标的操作,然后判断键盘是否点击的方向键,假如点击一下向左移动,那么我们就将小蜜蜂的位置向左移动一个设定好的距离,然后再显示在屏幕上。我们专门创建了一个模块game_functions来存放游戏操作的代码,那么我们在game_functions模块里面编写就性,下面我们看看代码:

import sys
import pygame

def check_events(ship):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type==pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                ship.rect.centerx += 1
def update_screen(new_setting,screen,ship):
    screen.fill(new_setting.bg_color)
    ship.blitme()

    pygame.display.flip()

可以看出,我们将check_events()函数进行了补充,增加了判断,之前只是判断是否点击了关闭,现在增加了对键盘输入的判断,我们详细分析一下:

1、首先判断事件类型是否为键盘事件KEYDOWN。pygame.KEYDOWN是一个事件类型,指的是键盘上某个键被按下的事件。当键盘上的某个键被按下时,pygame会生成一个KEYDOWN事件,程序可以通过检测这个事件来获取键盘按键的信息,如按下的是哪个键、是否同时按下了Shift、Ctrl等修饰键。

2、当判断我们确实是在键盘按下某个键后,进入下一步判断,判断到底是按了哪个键,代码中我们目前只写的按向右移动的键。常见的event.key值包括:

  • pygame.K_UP/K_DOWN/K_LEFT/K_RIGHT表示方向键上下左右
  • pygame.K_SPACE表示空格键
  • pygame.K_ESCAPE表示Esc键
  • pygame.K_RETURN表示回车键
  • pygame.K_a到pygame.K_z表示26个字母键

3、当我们判断匹配后,我们需要将小蜜蜂位置向右移动一格,那么我们需要改变Ship模块里面的rect.centerx值,将它加1,那么我们就需要传入ship,因此在定义check_events()是要设置参数,将ship传进来。

 我们将check_events()函数修改好以后,那么我们就需要在主函数里调用它,之前我们已经调用了check_events()函数用来判断程序的关闭,但是现在因为要加传参进去,所以略加修改,增加传参ship就行。

import pygame
import settings
from ship import Ship
import game_functions as gf

def run_game():
    pygame.init()
    new_setting=settings.Settings()
    screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))
    ship = Ship(screen)
    pygame.display.set_caption("Alien Invasion")

    while True:
        gf.check_events(ship)
        gf.update_screen(new_setting,screen,ship)


run_game()

 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来,python游戏,pygame,python,开发语言,实例,笔记

 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来,python游戏,pygame,python,开发语言,实例,笔记

 通过运行程序,点击右方向键,我们可以看出,小蜜蜂向右进行了移动。

 二、持续移动

 在操作的过程中,我发现我需要不停的点击右移动键才能实现小蜜蜂不断右移动,这是反人性的,以我多年打cs、街头篮球、QQ飞车、泡泡堂的经验来说,人类更习惯于点着不放实现持续移动,喜欢连发,而不喜欢点射。“大蟒蛇”很贴心的告诉我们下一步该怎么实现持续功能。

 “大蟒蛇”提供的思路是:不再以按下向右移动键为判断小蜜蜂向右移动的条件,而是设置另一个变量(比如m),m初始值为0,如果按下右移动键,m为1,只要m等于1,小蜜蜂就向右移动,如果m等于0,小蜜蜂就不动。个人觉得思路可行,只需要再加一个判断,判断松开右移动键时,将0赋值给m。下面我们来看代码

import pygame

class Ship():
    def __init__(self,screen):
        self.screen = screen
        self.image = pygame.image.load('cat.png')
        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
        
        
    def update(self):
        if self.moving_right:
            self.rect.centerx += 1
        
        

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

 我们看到,我们重写了Ship模块,不仅是增加了一个变量(moving_right就相当于我之前说的m,True和False就相当于1和0),还增加了函数update,将小蜜蜂的移动写到了这里,那么我们的主函数和game_functions也要作出相应修改(为什么不写在game_functions里?)

import sys
import pygame

def check_events(ship):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type==pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = True
                
        elif event.type==pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = False
                
                
def update_screen(new_setting,screen,ship):
    screen.fill(new_setting.bg_color)
    ship.blitme()

    pygame.display.flip()

我们可以看出,在game_functions模块里面,我们只需要将moving_right变量进行修改,就能控制小蜜蜂的移动。如果能理解前面我们的思路,那么KRYUP状态就很好理解了,就是弹起或者说松开按键的意思。下面我们再在主程序对我们新建立的update函数调用就行了。

import pygame
import settings
from ship import Ship
import game_functions as gf

def run_game():
    pygame.init()
    new_setting=settings.Settings()
    screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))
    ship = Ship(screen)
    pygame.display.set_caption("Alien Invasion")

    while True:
        gf.check_events(ship)
        ship.update()
        gf.update_screen(new_setting,screen,ship)


run_game()

 三、左右移动

 上面我们已经实现了向右移动,那么向左移动就变得十分简单,只需要在同样的地方加一个判断就行,这里建议大家自己写,我们只需要在ship和game_functions模块添加代码就行。

 ship:

import pygame

class Ship():
    def __init__(self,screen):
        self.screen = screen
        self.image = pygame.image.load('cat.png')
        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


    def update(self):
        if self.moving_right:
            self.rect.centerx += 1

        if self.moving_left:
            self.rect.centerx -= 1


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

 game_functions:

import sys
import pygame

def check_events(ship):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type==pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                ship.moving_right = True

            elif event.key == pygame.K_LEFT:
                ship.moving_left = 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

def update_screen(new_setting,screen,ship):
    screen.fill(new_setting.bg_color)
    ship.blitme()

    pygame.display.flip()

星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来,python游戏,pygame,python,开发语言,实例,笔记  

 总结:

 今天我们完成了小蜜蜂的左右移动,由点及面,窥一斑可见全豹,我们可以整理一下思路,之后我们只需要建立大黄蜂模块和子弹模块,然后在那两个模块里设置变量控制他们的移动和消失,就可以初步完成游戏的基本功能。文章来源地址https://www.toymoban.com/news/detail-663331.html

到了这里,关于星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

    星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫  星际争霸之小霸王之小蜜蜂(七)--消失的子弹  星际争霸之小霸王之小蜜蜂(六)--让子弹飞  星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速  星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来 目录 系列文

    2024年02月09日
    浏览(38)
  • 星际争霸之小霸王之小蜜蜂(二)--类的使用

    目录 前言 一、将设置内容写在一个类里  二、设置小蜜蜂的造型  三、设置猫蜜蜂的参数  四、绘制猫蜜蜂到窗口  总结 前言 昨天我们设置好了窗口,下面我们需要向窗口中添加元素了。  我个人理解书上的意思是要创建一个类,将所有需要设置的属性都放在这里,这样后

    2024年02月12日
    浏览(39)
  • 星际争霸之小霸王之小蜜蜂(七)--消失的子弹

    目录 前言  一、删除子弹  二、限制子弹数量  三、继续重构代码 总结 昨天我们已经让子弹飞了起来,但是会面临一个和之前小蜜蜂一样的问题,小蜜蜂的行动应该限制在窗口内,那么子弹也是有相同之处,也需要限制一个移动范围,当超出范围之后,就要将其消灭,释放

    2024年02月09日
    浏览(34)
  • 星际争霸之小霸王之小蜜蜂(十五)--剧将终场

    星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪 星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命  星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(

    2024年02月08日
    浏览(41)
  • 星际争霸之小霸王之小蜜蜂(一)--窗口界面设计

    目录   前言 一、安装pygame库  1、pygame库简介  2、在windows系统安装pygame库 二 、搭建游戏框架 1、创建游戏窗口   2、改变窗口颜色  总结 前言 大家应该都看过或者都听说过python神书“大蟒蛇”,上面有一个案例是《外星人入侵》,游戏介绍让我想起了上学时候玩过的星际

    2024年02月12日
    浏览(34)
  • 星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

    星际争霸之小霸王之小蜜蜂(十二)--猫有九条命  星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾  星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫  星际争霸之小霸王之小蜜蜂(七)

    2024年02月08日
    浏览(37)
  • 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命

    星际争霸之小霸王之小蜜蜂(十一)--杀杀杀  星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾  星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫   星际争霸之小霸王之小蜜蜂(七)--消失的子弹  星际争霸之小霸王之小蜜蜂(六)

    2024年02月08日
    浏览(35)
  • 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来

    目录 前言 一、监听按键并作出判断  二、持续移动  三、左右移动  总结: 前言 今天开始正式操控我们的小蜜蜂了,之前学java的时候是有一个函数监听鼠标和键盘的操作,我们通过传过来不同的值进行判断,现在来看看python是否一样的实现。  以我浅薄的知识判断,流程

    2024年02月12日
    浏览(43)
  • 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫

     星际争霸之小霸王之小蜜蜂(七)--消失的子弹  星际争霸之小霸王之小蜜蜂(六)--让子弹飞  星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速  星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来 目录  前言 一、寻找图片  二、创建Alien类  三、小老鼠实例化

    2024年02月11日
    浏览(37)
  • AI强化学习初探——卡牌游戏星际争霸II

    作者:禅与计算机程序设计艺术 在AI技术领域,强化学习(Reinforcement Learning)是最具代表性的一种机器学习方法。其核心思想是通过反馈机制让智能体(Agent)不断修正策略,使得它不断地按照既定目标策略进行行动,以达到最优状态的优化。常见的强化学习算法如Q-learnin

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包