我正在编写2个蛇车的代码,我的第一个蛇车,使用WASD键盘格式,工作完美。但是我的第二个蛇车,使用的是方向键,只能对角线移动。我希望两个蛇车都能向各个方向移动(上、下、左、右、对角线),但是现在,第二个蛇车只能对角线移动。
#initialize variables for player 1
car1x = 250
car1y = 300
car1width = 20
car1height = 20
car1dx = 0
car1dy = 0
speed = 3
#initialize variables for player 2
car2x = 500
car2y = 300
car2width = 20
car2height = 20
car2dx = 0
car2dy = 0
speed = 3
screen.fill(WHITE)
# set main loop to True so it will run
main = True
# main loop
while main:
for event in pygame.event.get(): # check for any events (i.e key press, mouse click etc.)
if event.type ==pygame.QUIT: # check to see if it was "x" at top right of screen
main = False # set the "main" variable to False to exit while loop
if event.type ==pygame.KEYDOWN:
if event.key == pygame.K_w:
car1dx = 0
car1dy = -speed
elif event.key == pygame.K_s:
car1dx = 0
car1dy = speed
elif event.key == pygame.K_a:
car1dx = -speed
car1dy = 0
elif event.key == pygame.K_d:
car1dx = speed
car1dy = 0
if event.key == pygame.K_UP:
car2dx = 0
car2dy = -speed
elif event.key == pygame.K_DOWN:
car2dx = 0
car2dy = speed
elif event.key == pygame.K_LEFT:
car2dx = -speed
car2dy = 0
elif event.key == pygame.K_RIGHT:
car2dx = speed
car2dy = 0
elif event.key == pygame.K_q:
pygame.quit()
if event.type == pygame.KEYUP:
if event.key in (pygame.K_w, pygame.K_s):
car1dx = 0
elif event.key in (pygame.K_a, pygame.K_d):
car1dy = 0
if event.key in (pygame.K_UP, pygame.K_DOWN):
car1dx = 0
elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
car1dy = 0
# move the x and y positions of the player
oldcar1x = car1x
oldcar1y = car1y
oldcar2x = car2x
oldcar2y = car2y
car1x = car1x + car1dx
car1y = car1y + car1dy
car2x = car2x + car2dx
car2y = car2y + car2dx
if car1x >= screenwidth:
car1x = oldcar1x
car1y = oldcar1y
if car2x >= screenwidth:
car2x = oldcar2x
car2y = oldcar2y
```
我想这是因为向上键的检测是...。一条ifelif和ifelif不一样。按键. 也可能是 因为那 你没有指定第二辆车的上锁检测功能。. 我不知道,只是一个建议。我不能评论。
在你最后的if语句中,看起来应该重置Car2的dxdy的KEYUP事件正在设置Car1的dxdy值。这可能是你的错误的根源。
这一行有一个印刷错误。
car2y = car2y + car2dx
应该是:
car2y = car2y + car2dy
注意最后一个字符被改成了 y
不 x
.
虽然使用 +=
操作符,并将其写成。
car2y += car2dy
你在这部分还有其他错误
if event.type == pygame.KEYUP:
if event.key in (pygame.K_w, pygame.K_s):
car1dx = 0
elif event.key in (pygame.K_a, pygame.K_d):
car1dy = 0
if event.key in (pygame.K_UP, pygame.K_DOWN):
car1dx = 0
elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
car1dy = 0
你重置了错误的变量 你重置了dy而不是dx,反之亦然,而且在方向键部分你忘了把它改成car2。像这样。
if event.type == pygame.KEYUP:
if event.key in (pygame.K_w, pygame.K_s):
car1dy = 0
elif event.key in (pygame.K_a, pygame.K_d):
car1dx = 0
elif event.key in (pygame.K_UP, pygame.K_DOWN):
car2dy = 0
elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
car2dx = 0
注意: 在上面的部分,我还把第二个变量 if
到一个 elif
. 这不会影响代码的正确性,只是在上面已经匹配的情况下,避免了不必要的if检查。
这里有一个错误。
if event.type == pygame.KEYUP:
if event.key in (pygame.K_w, pygame.K_s):
car1dx = 0
elif event.key in (pygame.K_a, pygame.K_d):
car1dy = 0
if event.key in (pygame.K_UP, pygame.K_DOWN):
car1dx = 0
elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
car1dy = 0
你用的是car1dx和car1dy,而应该是car2dx和car2dy。
if event.type == pygame.KEYUP:
if event.key in (pygame.K_w, pygame.K_s):
car1dx = 0
elif event.key in (pygame.K_a, pygame.K_d):
car1dy = 0
if event.key in (pygame.K_UP, pygame.K_DOWN):
car2dx = 0
elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
car2dy = 0
因为方向键是2号车的
你也应该改变这一行。
car2y = car2y + car2dx
这句话应该改成:
car2y += car2dy