相信大多數朋友寫出貪食蛇遊戲沒有太大的困難,但若要實現蛇自動吃豆的功能,就要花一番心思了。
本人自動遊戲的第一個版本中有兩個明顯的錯誤會導致蛇進入死胡同,或者不能從死胡同中走出來。
下面先介紹下實現的思路,
這是程式的整體架構:
這個程式既可以手動也可以切換為自動
其中frmGame是遊戲的主視窗,在視窗初始化時,將視窗中填滿lbls:List<List<Label>>的控制項數組,若要顯示蛇和豆,只需要將相應位置上的Label控制項的Enable屬性設為true,其它的設為false,就可以達到顯示的作用。這種方式以記憶體的消耗換取了顯示上的簡單。
ControlSnake是控制蛇的類,在其中包括遊戲場地的寬Width、高Height,豆的位置Target,蛇的身體snakes:List<Point>,蛇的方向:Direction,以及遊戲的狀態GameState。包括的方法有:遊戲初始化,判斷蛇是否撞到自己或者撞到牆
AutoPlay類實現的功能就是蛇的自動遊戲。實現自動吃豆的方式為:
1.先判斷蛇的前面有沒有牆或者自己,若都沒有,接下來就進行吃豆的動作,就是往豆的方向的走
2.若有牆或者自己,則進行避開操作AvoidDead(),所謂避開就是在蛇的方向轉向,而在轉向時可能進入死胡同。而為了防止其進入死胡同,這個程式中暫時採用的方式是分別求出蛇左右兩邊被蛇身體和牆圍起來的空格數,而蛇就往空格數多的那一邊走
在進行下一步說明前,請大家先看兩段視頻,這是在遊戲中出現的問題
第一個問題
第二個問題
第一個問題,就是在於沒有考慮到蛇在往前走的時候也有可能進入死胡同,改進的方法就是,在蛇往前每走一步時,就加判斷前面是否是死胡同的代碼,如果是則轉向
第二個問題,我只有實現的大概方法:當蛇進入吃不到豆的情況後,就換一種行走的方法(我們在手動遊戲時,很容易想到用這種方法來走)。但用程式實現就要考慮一些問題,一是何時採用特殊的走法,二是當採用這種特殊走法時何時退出這種特殊狀態,三是怎麼在程式中描述這種走法
相信,如果把第二個問題解決了,蛇可以變得更長些,但隨著蛇長度的增加,後面肯定會遇到新的問題,希望和大家一起讓這個蛇變更長!!
這是我程式的源碼,VS08版本 貪食蛇.rar