2014-01-09 26 views
1

我正在C#上做一個Snake遊戲,但我的鑰匙有一個小故障。我與我的蛇遊戲有一個錯誤

我正在關注在此處找到的確切代碼。 http://codesmesh.com/snake-game-in-c/ 我得到的錯誤是......例如,如果我正在下去,如果我在同一時間正確向上按壓,在那裏我基本按壓在一起,那麼蛇就會上升並走向它自己的身體,自殺。

這是我在我的代碼中的keydown部分。

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    //Space is just to restart the form. 
    if (e.KeyData == Keys.Space) 
    { 
     timer1.Enabled = true; 
     codesmeshlabel.Text= ""; 
     spaceBarLabel.Text = ""; 
     down = false; 
     up = false; 
     left = false; 
     right = true; 
    } 

    if (e.KeyData == Keys.Down && up == false) 
    { 
     down = true; 
     up = false; 
     right = false; 
     left = false; 
    } 

    if (e.KeyData == Keys.Up && down == false) 
    { 
     down = false; 
     up = true; 
     right = false; 
     left = false; 
    } 

    if (e.KeyData == Keys.Left && right == false) 
    { 
     down = false; 
     up = false; 
     right = false; 
     left = true; 
    }  

    if (e.KeyData == Keys.Right && left == false) 
    { 
     down = false; 
     up = false; 
     right = true; 
     left = false; 
    } 
}  
+1

你可能會想檢查,看看是否對於擠壓方向的逆(在這種情況下向上)不是當前的方向(如果是,則忽略按鍵) –

回答

2

這聽起來像你正在改變你的蛇將前往「右」的方向,然後再次蛇移動之前將其設置爲「向上」。

某處在你的代碼中,我假設你有一個遊戲循環,每次更新屏幕(但是長)。爲了防止這種情況發生,您需要更改設計,以便遊戲接受方向更改(key.left/right/up/down)後,一直等到屏幕更新一次後才接受第二次方向更改。這應該可以解決你的bug :)

由於m.t.bennett指出的另一種選擇是檢查每一個按鍵,看它是否是當前行駛的方向相反,如果是忽略它。可以更優雅。

+0

的作品!耶謝謝你。 – user3151588

+0

很高興工作。請將答案標記爲已接受,以便人們知道此問題已解決:) –

相關問題