首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 貪吃蛇遊戲:蛇不動作的解決方案

     編輯:程式設計疑難解答

問題描述

初學者編寫 C# WinForms 貪吃蛇遊戲,編譯無誤但執行後蛇不會移動。核心程式碼包含 Form2 主視窗、Snake 蛇類別與 Bean 食物類別,使用 Timer 控制遊戲循環,在 pictureBox1_Paint 事件中繪製畫面。

根本原因

PictureBox 的 Paint 事件不會自動持續觸發。遊戲邏輯雖在 timer1_Tick 中更新座標,但畫面未重繪,導致蛇看似靜止。

解決方法

在 timer1_Tick 事件處理函式中加入 pictureBox1.Refresh(),強制觸發重繪:

private void timer1_Tick(object sender, EventArgs e)
{
    if (play)
    {
        pictureBox1.Refresh(); // 新增這行
        snack1.Addsnack();
    }
    if (snack1.HeadPoint == food.Origin)
    {
        pictureBox1.Refresh(); // 吃食物時也要重繪
        foodDraw = false;
        snack1.Addsnack();
    }
    if (snack1.Diedif())
    {
        pictureBox1.Refresh(); // 結束前重繪最後一幀
        timer1.Enabled = false;
        play = false;
        MessageBox.Show("Game Over!");
    }
}

補充說明

  • Refresh() 會立即使控制項失效並重繪,配合 Timer.Interval = 500 可形成約 2 FPS 的遊戲循環。
  • 鍵盤控制使用 button1_KeyUp 捕獲 WASD 鍵,透過 snack1.Direction 改變移動方向,邏輯正確。
  • 碰撞檢測 Diedif() 檢查蛇頭是否撞牆或撞到自己,邊界設定為 400x300 像素,與畫格大小 10px 對應。

套用此修正後,貪吃蛇即可正常移動、進食與判定結束。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved