好不容易有個(gè)十一長(zhǎng)假,終于可以編點(diǎn)自己喜歡的東西了,由于公司主要用的是C#,我也就入鄉(xiāng)隨俗了,拿C#寫了個(gè)小游戲練練手,以后有時(shí)間再用JAVA重寫一遍。
這只是初版,如果有BUG的話,大家盡量提出來噢,我會(huì)盡力改的,不會(huì)改的就得請(qǐng)教各位高手咯!
我同時(shí)也希望可以幫助像我一樣的初學(xué)者能更上一層樓 。
還有一個(gè)我不解的問題,希望高手賜教。
當(dāng)我在Visual Studio 2005里點(diǎn)運(yùn)行按鈕時(shí),游戲運(yùn)行會(huì)很卡,很占CPU,而且源代碼目錄下會(huì)生成一大堆.TMP文件;但是,我直接雙擊DEBUG文件夾下編譯好的.exe文件,游戲運(yùn)行正常,CPU占用率很低。
誰能告訴我為什么?先謝謝啦!
以下是可執(zhí)行文件及源代碼的下載
MySnake
08.10.05
今天修復(fù)了一個(gè)BUG,即在定時(shí)器每次時(shí)間間隔中,可以改變N次蛇的移動(dòng)方向,只要按的夠快。這樣就產(chǎn)生了一個(gè)問題,比如說,蛇正在向右移動(dòng),用很快的手速依次按下"↓"鍵和"←"鍵,當(dāng)按下"↓"鍵時(shí),蛇實(shí)際并沒有移動(dòng)(每次時(shí)間間隔只能移動(dòng)一次),但移動(dòng)方向已改變?yōu)橄拢@時(shí)可以按下"←"鍵的條件為真,按下"←"鍵后在界面顯示蛇還未移動(dòng)的情況下,就GAME OVER了(即蛇頭撞到了蛇身)。
我在原有基礎(chǔ)上加了個(gè)BOOL變量canChangeDirection,來控制在定時(shí)器每次時(shí)間間隔中,只能改變一次蛇的移動(dòng)方向,這樣就修復(fù)了以上BUG。
以下為1.01版本的可執(zhí)行文件及源代碼的下載
MySnake_v1.01
今天又修改了兩個(gè)地方,這都要多虧raof01 給我提的兩個(gè)很好的建議。在這里要好好謝謝他!
1.原來蛇身移動(dòng)的算法效率不高,我的做法是先將移動(dòng)前的整個(gè)蛇身坐標(biāo)復(fù)制一遍,然后再進(jìn)行移動(dòng)時(shí)的賦值;其實(shí)只要復(fù)制當(dāng)前Tile的前一個(gè)Tile的坐標(biāo)即可,詳情請(qǐng)見v1.02版的代碼。
2.在v1.01版中,不支持在每個(gè)時(shí)間間隔內(nèi)玩家多次的鍵盤輸入,即每個(gè)時(shí)間間隔內(nèi)只接受玩家的第一次輸入,其實(shí)這樣很不人性化,通過raof01 的指點(diǎn),我在v1.02版中添加了一個(gè)保存蛇的移動(dòng)方向的隊(duì)列,存儲(chǔ)用戶的輸入,這樣玩家想按多快都可以了,他按的都會(huì)被處理,按照隊(duì)列的順序依次改變蛇的移動(dòng)方向,不過每個(gè)時(shí)間間隔依然只能改變一次移動(dòng)方向。
以下為1.02版本的可執(zhí)行文件及源代碼的下載
MySnake_v1.02
08.10.18
what the hell is going on ??!!
我當(dāng)時(shí)構(gòu)成的是一個(gè)非對(duì)稱加密程序的萬次運(yùn)算對(duì)比。。。
當(dāng)時(shí)給我的答復(fù)是:編譯的時(shí)候要加載編譯信息庫(kù)等等,所以耗資源。。。
謝謝你的程序,下來看看。
建立一個(gè)隊(duì)列,將用戶按鍵事件所代表的方向enqueue;每個(gè)timer時(shí)間發(fā)生時(shí),從該隊(duì)列dequeue一個(gè)元素,這樣每個(gè)方向都能處理到了。
你一點(diǎn)都不菜。
你的實(shí)現(xiàn)沒問題,我只是從空間效率上說一下。
恩 說的好 我去試試
謝謝你哈
以后可能要經(jīng)常請(qǐng)教你咯
別的機(jī)器不需要.net freamwork 都可以運(yùn)行嗎
“請(qǐng)問你是怎么把他生成EXE的”
當(dāng)編譯完成后,.exe你可以去debug或release目錄下找到(哪個(gè)目錄取決于你的設(shè)置),
“別的機(jī)器不需要.net freamwork 都可以運(yùn)行嗎”
必須要安裝.net freamwork 才可以運(yùn)行。
謝謝
使用雙緩沖就不閃屏了,至于一閃屏蛇身就不見了一截,這個(gè)估計(jì)你重繪的時(shí)候邏輯有問題?不清楚。
根據(jù)蛇的移動(dòng)規(guī)則,蛇將永遠(yuǎn)無法與目標(biāo)豆重合(比如蛇每次移動(dòng)五個(gè)單位,也就是說蛇頭的坐標(biāo)是五的倍數(shù),而目標(biāo)豆的坐標(biāo)卻不是五的倍數(shù),這樣怎么也吃不到豆)
為什么一次要移動(dòng)5個(gè)單位?我是一次移動(dòng)一個(gè)單位。