貪吃蛇開發(fā)隨筆 V1.0版本
貪吃蛇是我用c語言寫的真正意義上的一個程序。感覺很新奇。以前都是用c語言解題,現(xiàn)在用c語言寫了一個游戲,中間的差距還是挺大的。這個貪吃蛇,基本上是照著別人的源碼抄的。自己還沒有這方面的思維。抄完了之后,又修改了一下。感覺思維正在發(fā)生跳轉(zhuǎn)。通過這個程序,認(rèn)識到自己的水平還是挺差勁的。不過,估計在抄上幾個小游戲后,就應(yīng)該能形成自己的思維。到時候就能開發(fā)出自己的程序了。
另外還學(xué)到了一點。就是在這個程序中,把一個游戲分成了很多的模塊,然后每個模塊寫一個函數(shù),這樣寫出來的程序很耐讀。調(diào)試也方便。學(xué)習(xí)之。
還需努力 ———————————————————————————————————
V1.1版本(Sarah,thinking獻(xiàn)禮版)
與v1.0版本改進(jìn)說明
1.注冊BGI驅(qū)動,使之可以脫離.BGI文件運行
2.增加啟動界面,引入音樂
3.改進(jìn)注釋,增加函數(shù)注釋。
這三項都是收別的程序的啟發(fā)。第一項的方法在TC的示例程序中就有。第二項很簡單,一個圖形結(jié)束后,然后再清屏就是了。第三個是看著別人的注釋很不錯。尤其是對函數(shù)的注釋。
/*******************************************************************************
** 函數(shù)名稱:drawmat
** 函數(shù)描述:依次:字模指針、點陣大小、起始坐標(biāo)(x,y)、顏色
** 輸入?yún)?shù):*mat,matsize,x,y,color
** 輸出參數(shù):無
*******************************************************************************/
雖然占用的行數(shù)有點多了。不過注釋的很清晰,于是引進(jìn)之。 在下面的學(xué)習(xí)中,希望能找到用C語言引進(jìn)位圖,和音樂的方法。是游戲更生動一些。
———————————————————————————————————
V1.2版本(自動尋路版)
此版本與前面版本的不同之處在于,增加了自動尋路函數(shù)。在開始畫面中可以選擇,如果選1。則手動。選2。則自動。
想法:增加一個findway()函數(shù)。此函數(shù)的功能是判斷蛇頭與食物之間的坐標(biāo)關(guān)系。蛇頭的橫坐標(biāo)減去食物的橫坐標(biāo),負(fù)則發(fā)出右行指令;正責(zé)發(fā)生左行指令。縱坐標(biāo)減去食物的縱坐標(biāo),負(fù)責(zé)發(fā)出下行指令;正則發(fā)出上行指令。(注:計算機(jī)中坐標(biāo)系的原點在左上角)。但是要注意的是:1。發(fā)出的指令不能與行使的方向相反。這樣的話,則需要在函數(shù)中添加一個判斷,如果發(fā)出的指令與蛇行駛的方向相反的話,先讓蛇垂直運動一下。2:在某些特殊情況下,在會撞墻,因此還需要加個撞墻判斷條件。
bug:1.容易撞到自己。2.如果食物出現(xiàn)在墻壁,容易死亡。
此版本是個失敗的版本。蛇的走法千奇百怪,撞墻的方法多種多樣。目前的水平還不能考慮到那么多情況。寫出來一個很容易自身的貪吃蛇。哎。,。
———————————————————————————————————
在家編的這個小程序,深深地體會到自己的不足。學(xué)完c語言,僅僅開了一扇門而已。也體會到為啥能成為一個程序員,至少需要兩年的時間。太多的領(lǐng)域需要我們?nèi)ヌ剿鳌indows,Linux,Unix,算法,網(wǎng)絡(luò),圖像,3D,引擎。。。。每一項都有著很深的學(xué)問。浩浩蕩蕩,無窮無盡。我們必須不斷地努力,在繁雜的表面下,找到共同的地方。抓住根源,才能成為一代宗師。 我們還太嫩,即使學(xué)完c語言,學(xué)完數(shù)據(jù)結(jié)構(gòu),學(xué)完算法分析。看著電腦里滿滿的一點都看不懂得資料,我們必須有壓力。突然想起一個有人評論以前的中美黑客大戰(zhàn),讀來汗顏不止“你們在美國人的系統(tǒng)上,利用美國人發(fā)現(xiàn)的漏洞,拿著美國人寫的工具,去攻擊美國人”。在此不做評論。 現(xiàn)在不想說過多的廢話,最后只想問自己一句,你盡力了么?
/* WIN-TC BGI 圖形編程模板 */
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同樣效果 */
registerbgidriver(EGAVGA_driver);/* 注冊BGI驅(qū)動后可以不需要.BGI文件的支持運行 */
initgraph(&gd, &gm, "");
}
int main(void)
{
initgr(); /* BGI初始化 */
/*****此部分添加你自己的代碼,例如
line(25, 25, 220, 220);
circle(100, 100, 50);
等等*****/
getch(); /* 暫停一下,看看前面繪圖代碼的運行結(jié)果 */
closegr(); /* 恢復(fù)TEXT屏幕模式 */
return 0;
}
|