簡體   English   中英

在 pygame 中按下另一個鍵時如何禁用某個鍵

[英]How to disbale certain key when another key is pressed in pygame

我正在完成我的大學作業,他們給了我一項任務,即使用 pygame 在 python 中制作蛇游戲,我已經制作了游戲,但我面臨一個問題,如果我按下了右鍵並且我的蛇在移動向右,然后我按下左鍵,蛇撞到自己,我輸掉了比賽。

我想要的是如果我的蛇朝某個方向移動,例如:右左鍵應該被禁用,換句話說,當按下右鍵時左鍵不應該工作。 2天以來我一直在嘗試解決問題,但找不到任何東西,任何幫助將不勝感激,謝謝

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        game_over = True
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            x1_change = -snake_block
            y1_change = 0
        elif event.key == pygame.K_RIGHT:
            x1_change = snake_block
            y1_change = 0
        elif event.key == pygame.K_UP:
            x1_change = 0
            y1_change = -snake_block
        elif event.key == pygame.K_DOWN:
            x1_change = 0
            y1_change = snake_block

您需要添加一個額外的條件來檢查蛇沒有朝相反的方向移動。
例如,如果蛇向右移動,則不允許按LEFT

if not x1_change > 0 and event.key == pygame.K_LEFT:

事件循環:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        game_over = True
    if event.type == pygame.KEYDOWN:
        if not x1_change > 0 and event.key == pygame.K_LEFT: 
            x1_change = -snake_block
            y1_change = 0
        elif not x1_change < 0 and event.key == pygame.K_RIGHT:
            x1_change = snake_block
            y1_change = 0
        elif not y1_change > 0 and event.key == pygame.K_UP:
            x1_change = 0
            y1_change = -snake_block
        elif not y1_change < 0 and event.key == pygame.K_DOWN:
            x1_change = 0
            y1_change = snake_block

您還可以通過注意蛇是否尚未朝該方向移動來禁用按鍵:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        game_over = True
    if event.type == pygame.KEYDOWN:
        if y1_change:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block
                y1_change = 0
        elif x1_change:
            elif event.key == pygame.K_UP:
                x1_change = 0
                y1_change = -snake_block
            elif event.key == pygame.K_DOWN:
                x1_change = 0
                y1_change = snake_block

此代碼僅允許玩家在水平移動時將其方向更改為上/下,當他垂直移動時將其更改為左/右。 當玩家向左移動時, y1_change為 0,使得if y1_change不被執行。 然后玩家不能向左移動(因為他已經這樣做了)而不是向右移動(使蛇與自身相撞)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM