- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 python 编码新手,需要一些单元测试方面的帮助。我想测试我的模块,根据用户按下的内容移动 Pygame 中的图像位置。这是我的模块:
def moveRight(self):
self.x = self.x + self.speed
def moveLeft(self):
self.x = self.x - self.speed
这是我调用这些模块的地方:
def on_execute(self):
# While game is running
while( self._running ):
pygame.event.pump()
keys = pygame.key.get_pressed()
if (keys[K_RIGHT]):
self.player.moveRight()
if (keys[K_LEFT]):
self.player.moveLeft()
# Use class players function moveUp to move up
if (keys[K_UP]):
self.player.moveUp()
self.on_render()
我该如何测试这些?使用 Pygame 时单元测试是否有所不同?
最佳答案
一种方法是抽象 pygame.key.get_pressed()
,这样你就可以在测试期间用其他返回我们想要测试的假输入的东西替换它(我们称之为模拟) 。
def on_execute(self, key_state_function):
# While game is running
while( self._running ):
pygame.event.pump()
keys = key_state_function()
if (keys[K_RIGHT]):
self.player.moveRight()
if (keys[K_LEFT]):
self.player.moveLeft()
# Use class players function moveUp to move up
if (keys[K_UP]):
self.player.moveUp()
self.on_render()
运行游戏时,您可以将 pygame.event.get
作为参数传递给 on_execute
,并且在测试中,您可以传递一个返回您想要的任何内容的函数(模拟)。
但是由于我们使用的是 python where,我们还可以猴子补丁 pygame.event.get
(在运行时替换整个函数)。
所以在测试中我们会做这样的事情:
def create_key_mock(pressed_key):
def helper():
tmp = [0] * 300
tmp[pressed_key] = 1
return tmp
return helper
pygame.key.get_pressed = create_key_mock(K_RIGHT)
现在,pygame.key.get_pressed()
将始终告诉用户按下了右箭头键。
现在您已经了解了这一点,请看一下内置 mock
module .
关于python - Python Pygame 中 key.get_pressed() 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52917479/
我的程序中的键盘事件遇到一些问题。长话短说,我正在使用 pygame.KEYDOWN 事件,但后来几乎每个人都听说 get_pressed() 是一个更合适的选项。我相应地更改了代码,但遇到了一些问题
代码如下 import pygame pygame.init() info = pygame.display.Info() win = pygame.display.set_mode(((info.c
我知道已经有一些关于同一问题的问题,但提出的解决方案对我没有帮助。 我想在任何给定时间监视箭头键的状态(按下/未按下),因此我有以下代码: import pygame pygame.init() a=
我在 pygame 中遇到了一个“简单”的问题,这让我完全抓狂。基本上,当我尝试读取键盘的状态时,pygame.get_pressed() 内的所有值都为零。我已经尝试了一切但没有任何结果。这是我的代
pygame.get_keypressed() 为每个按下的按键返回一个由 0 和 1 组成的长列表,可以由 pygame 映射。下面的示例,是否有直接的方法来提取按下的按键的字母表示? 我试图避免使
我有一个程序可以绘制一个收缩的绿色圆圈,当您按p时,圆圈消失并出现一条红线。但是当我再次按 p 时,绿色圆圈应该重新出现,但事实并非如此。 每当我第一次按 p 后调用 pygame.event.get
我正在尝试使用 Python 中的 pygame 为应用程序制定简单的控件。我已经掌握了基础知识,但我遇到了奇怪的墙:我正在使用箭头键来控制我的角色。如果我按住一个箭头键,然后按住另一个箭头键(沿对角
我在 Stack Overflow 上阅读过与此类似的问题,但没有帮助。这是我的代码: import pygame from pygame.locals import * pygame.init()
这是我的蛇游戏代码的开头。在按下箭头键和蛇的实际转弯之间有一个恼人的延迟。 很难准确地转动并捕获“苹果”。 我希望这更具响应性。如何调整我的代码以使转弯更灵敏? import random impor
我是 Python 新手,但我决定尝试在 Pygame 中制作一款格斗游戏。我的角色只会向左移动,并且只有在强制更新时才会移动。 我尝试过: 按下按键 if event.key == pygame.K
我最近开始使用 python 并决定使用 pygame 创建一个游戏,其中基本上有方 block 掉落,你必须越过它们。您可以使用向左键和向右键移动,但如果您按住它们,什么也不会发生,我不知道为什么,
我正在编写一款自上而下的射击游戏,最近试图找出一种在按住某个键的同时连续移动我的角色的方法。我在互联网上搜索一种方法,发现了 pygame.key.get_pressed() ,这非常有效,直到我尝试
尽管四处寻找,我似乎找不到这个看似简单问题的答案: 我是 pygame 的新手(但不是 python),并且正在尝试通过连续按下按钮来获取一些代码 - 但 get_pressed 似乎对我不起作用。我
正在做print pygame.key.get_pressed()打印出很多 0的,但是有什么办法可以打印这些 0作为一个字母输出,然后将该字母标记为变量? 这就是我的意思: import pygam
好的,所以我正在制作一个基本的 spaceship 游戏。 我无法让旋转工作,因为它扰乱了位图,但这是另一个问题。我应该使用 gif 吗?还有其他文件类型建议吗? 回到正题,所以: k = pygam
我是 python 编码新手,需要一些单元测试方面的帮助。我想测试我的模块,根据用户按下的内容移动 Pygame 中的图像位置。这是我的模块: def moveRight(self): sel
这个问题在这里已经有了答案: How to get keyboard input in pygame? (11 个答案) How can I make a sprite move when key
我正在尝试创建一个函数,如果按下一个键,变量就会发生变化。这将被放入一个在屏幕上移动 Sprite 的类中。当松开按键时,while 循环被破坏。然而,什么也没有发生。 while 循环正在运行,我没
我的程序有两个问题: 关闭程序时出现错误:keys = pygame.key.get_pressed() pygame.error: video system not initialized 当我按“
我是一名优秀的程序员,十分优秀!