用pygame开发自己的游戏-3.用键盘控制方块的移动

一、引言

前面文章中我们学会让方块随着时间运动,本文我们实现用键盘控制方块的移动。

二、pygame事件概念

事件在计算机术语常用来指系统中发生的重要事情,比如用户输入、定时器到期等。pygame提供了一个 pygame.event.get()来获取游戏的事件,通过读取整个事件队列,程序可以获得当前的事件并做相应处理。pygame文档中列出以下事件:

列表中KEYDOWN、KEYUP这两事件分别代表键盘按下、键盘松开事件。键盘事件也只是事件列表中的一种,我们需要判断是否有键盘按下,再通过api返回的键值来判断某个键有没有被按下。

if event.type == KEYDOWN:
if event.key == pygame.K_w:
print("The button is pressed")

上述代码中程序判断键盘按下事件发生后,再判断是否按键“w”被按下。

三、功能及代码实现

awsd四个字母在很多游戏做为左上下右四个方向键,我们来实现一个功能,先在游戏中画出一个方块,当按下a键就将方块向左移动,当按下d键后,方块向右移动。

思路

方块的x坐标会在不同的情况下有所变化,我们用一个变量x来保存,x值只有在键盘被按下后变化,我们用依照前面代码做好相应处理就好。代码如下:

import pygame, sys

# 初始化
pygame.init()
SCREEN = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello World!')
x = 110
# 游戏主循环
while True:
for event in pygame.event.get():
# 处理退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 键盘按下事件
elif event.type == pygame.KEYDOWN:
# 'a'键被按下
if event.key == pygame.K_a:
x -= 5
elif event.key == pygame.K_d:
x += 5
SCREEN.fill((255, 255, 255))
# 调用 pygame.display.update() 方法更新整个屏幕的显示
pygame.draw.rect(SCREEN, (255, 0, 0), (x, 130, 100, 50))
pygame.display.update()
pygame.time.delay(50)

默认的话pygame不会重复地去响应一个被一直按住的键,只是在按键第一次被按下的时候响应一次,如果需要重复响应一个按键的话下面的操作:

pygame.key.set_repeat(10)
#参数是一个以毫秒为单位的值

游戏主循环前加上这句能得到更好的游戏体验。

四、练习题

  1. 增加功能,当按下w键就将方块向上移动,当按下s键后,方块向下移动。

  2. 当前代码中,即使方块走出边界,依然可以继续走,增加功能,使用当方块走到左边或者右边边界时,无法继续再往外边走。(PS: 可以通过保证x值的范围来完成功能)

(0)

相关推荐

  • 用pygame开发自己的游戏-2.让方块动起来

    一.引言 前面的文章中,我们学习了如何画出一个方块,今天我们来学习如何让方块运动起来. 二.让方块自行移动 我们将前面文章出现的代码进行修改,我们将方块的x坐标改成变量x,while循环语句里每次将x ...

  • 用pygame开发自己的游戏-1. 基础与入门

    一.前言 pygame是一个用Python写的SDL库.SDL是一个能访问计算机多媒体硬件组件(包括声卡,视频卡,输入组件等)的跨平台库.本系列主要通过pygame做小游戏来学习编程.对于学过基本语法 ...

  • 如何用C语言开发图形化游戏

    https://m.toutiao.com/is/eAdqUaF/ 当你C语言学到一段时间后,也许对命令行程序感到厌倦了,也许你想要做一款游戏,但是光目前的知识,无法用命令行达到你想要的效果,那么恭喜 ...

  • 什么样团队开发出来的游戏陪玩源码才称得上是优秀

    很多想要做游戏陪玩系统的个人和公司,往往在开发初期不了解定制游戏陪玩系统开发的步骤都有哪些,在游戏陪玩源码的选择上也比较盲目,直接去找开发公司的也不是不可以,但是在后期的了解沟通方面可能还需要耗费大量 ...

  • 2021年,开发一款游戏到底有多难?

    开篇语:北京的夏季是炎热的.5月30日下午,"Unity技术开放日"北京站正式开启,此次活动报名人数突破了800人,这远远超出了Unity官方的预期.为了符合防疫要求并让所有来现场 ...

  • 基于 Blazor 开发五子棋⚫⚪小游戏

    今天是农历五月初五,端午节.在此,祝大家端午安康! 端午节是中华民族古老的传统节日之一.端午也称端五,端阳.此外,端午节还有许多别称,如:午日节.重五节.五月节.浴兰节.女儿节.天中节.地腊.诗人节. ...

  • 开发儿童思维游戏,小游戏大智慧

    手表准不准 汤姆买了一块新手表.这块手表比他家里的闹钟每小时快30秒,而那只闹钟又比标准时间每小时慢30秒. 汤姆新买的这块手表到底准不准? 看起来闹钟每小时慢30秒,手表每小时快30秒,两相抵消,所 ...

  • 独立游戏推荐:那些业余独立游戏开发者,开发的小游戏是什么样的?

    沐沐带你发现好游戏! 游戏行业有一群这样的人, 他们不是游戏玩家. 不是游戏开发公司, 他们是介于这2者之间的独立开发者! 他们可能是大学生.可能是某些领域的翘楚, 阴差阳错之下, 他们掌握了开发游戏 ...

  • LayaMe:如何开发一款游戏?你也可以做个小游戏

    沐沐带你发现好游戏! 嗨! 旁咬们! 我又双叒叕来了, 最近不仅蟑螂多, 还因为下大雨多了大水蚁, 丑姐儿洗完碗不经意扭头一看, 偶买嘎! 窗户上一群大水蚁在爬来爬去, 密集恐惧症都要被逼出来了, 咦 ...