版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 C語言程序設(shè)計(jì)課程設(shè)計(jì)題 目: 貪吃蛇游戲設(shè)計(jì) 學(xué) 院: 信息學(xué)院 專 業(yè): 網(wǎng)絡(luò)工程 姓 名: 李益雙 學(xué) 號: 1101010121 班 級: 信息A1111班 指導(dǎo)教師: 羅成 職 稱: 講師 完成日期: 2012年6月 目 錄1、 前言32、 摘要.43、 項(xiàng)目背景.54、 需求分析.65、 概要設(shè)計(jì).76、 詳細(xì)設(shè)計(jì)與測試.8601 定義蛇身的數(shù)據(jù)結(jié)構(gòu).8602算法設(shè)計(jì)與程序流程圖.8 602.1貪吃蛇算法設(shè)計(jì).8 602.2程序流程圖.9603光標(biāo)移動的設(shè)計(jì)與實(shí)現(xiàn).10 603.1顯示水平圍墻的實(shí)現(xiàn).10 603.2顯示分?jǐn)?shù)的實(shí)現(xiàn).11 603.3接受玩家按鍵信息的實(shí)現(xiàn).11 6
2、03.4游戲結(jié)束時顯示信息的實(shí)現(xiàn).11604 貪吃蛇游戲主干的設(shè)計(jì).12 604.1游戲的初始化與加載的實(shí)現(xiàn).12 604.2食物隨機(jī)產(chǎn)生的實(shí)現(xiàn)13 604.3蛇身的增長設(shè)計(jì).14 604.4蛇身的顯示與移動的設(shè)計(jì)實(shí)現(xiàn).15604.5蛇的頭部與物體碰撞的而設(shè)計(jì)實(shí)現(xiàn).167、 編碼.17 8、 結(jié)論.189、 參考文獻(xiàn).1910、 致謝.19前 言 C語言,是一種通用的、過程式的編程語言,廣泛用于系統(tǒng)與應(yīng)用軟件的開發(fā)。具有高效、靈活、功能豐富、表達(dá)力強(qiáng)和較高的移植性等特點(diǎn),在程序員中備受青睞。C語言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年 由肯
3、83;湯普遜(Ken Thompson)所研制出的B語言的基礎(chǔ)上發(fā)展和完善起來的。目前,C語言編譯器普遍存在于各種不同的操作系統(tǒng)中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設(shè)計(jì)影響了許多后來的編程語言,例如C+、Objective-C、Java、C#等。1980年代,為了避免各開發(fā)廠商用的C語言語法產(chǎn)生差異,由美國國家標(biāo)準(zhǔn)局(American National Standard Institution)為C語言訂定了一套完整的國際標(biāo)準(zhǔn)語法,稱為ANSI C,作為C語言的標(biāo)準(zhǔn)。1980年代至今的有關(guān)程式開發(fā)工具,一般都支持符合ANSI C的語法。對于
4、一個初學(xué)者,Microsoft Visual C+是一個比較好的軟件。界面友好,功能強(qiáng)大,調(diào)試也很方便。這是微軟出的一個C語言集成開發(fā)環(huán)境(IDE),主要有:VC+6.0、VS2005VS2008VS2010等,分為企業(yè)版和學(xué)生版等。對于初學(xué)者VC+6.0是比較容易上手的,但其對標(biāo)準(zhǔn)支持的不好可能使人養(yǎng)成不良的編程習(xí)慣。 在unix/linux操作系統(tǒng)上,學(xué)習(xí)c語言一般使用vim/emacs來編輯源文件,使用gcc來編譯源文件,使用make程序來管理編譯過程。 C+學(xué)習(xí)過程中,涉及到很多的基本知識點(diǎn),需要以練習(xí)的形式逐步深入,以達(dá)到融會貫通的目的。學(xué)習(xí)C+是一項(xiàng)交互式練習(xí),不實(shí)際編寫程序就無法
5、學(xué)會C+,因此,要抱著一種十年方能磨一劍的心理,扎扎實(shí)實(shí)從基礎(chǔ)開始。選一些好的實(shí)例,這些實(shí)例經(jīng)過反復(fù)的挑選,既有利于我們掌握有關(guān)知識,又不識趣味性。不斷地寫代碼,寫有意義的代碼。這其實(shí)也是入門任何其他編程語言的必由之路。在編程的過程中,重點(diǎn)訓(xùn)練我的編程的邏輯思路和算法以及編程、調(diào)試的基本技術(shù)。因此,在作課程設(shè)計(jì)時,以任務(wù)驅(qū)動為前提,從提出問題開始,行分析和算法設(shè)計(jì),最后再歸納總結(jié),以加強(qiáng)學(xué)習(xí)的針對性和應(yīng)用性。萬丈高樓平地起,能夠編寫復(fù)雜的游戲都是在編寫過簡單的游戲程序基礎(chǔ)上演變過來的能力。然而像貪吃蛇這樣的小游戲程序,就自然成了游戲設(shè)計(jì)者的入門首選。因此其界面簡單,操作、玩法一目了然,所以編寫
6、起來就不會很困難,而且需要考慮的問題也不是很多,就是蛇的顯示、移動、碰撞3個游戲的主塊,程序就自然編寫出來了,不會一開始就把游戲設(shè)計(jì)初學(xué)者拒之門外。編成之后成就感就油然而生,并使之對游戲設(shè)計(jì)產(chǎn)生強(qiáng)烈的興趣。成為向游戲設(shè)計(jì)之路成功邁進(jìn)的第一步,同時對于VC+的應(yīng)用水平也會上升,用起來會更加熟練、得心應(yīng)手。從易到難這是一個準(zhǔn)則,總之,貪吃蛇小游戲的研究會對增長程序閱讀能力、編寫程序能力等起到了意想不到的作用。摘 要 本文首先對小游戲的發(fā)展前景進(jìn)行了展望,并對其研究現(xiàn)狀與研究目標(biāo)進(jìn)行了介紹。然后對編寫程序用的工具軟件 VC+進(jìn)行了介紹。接著進(jìn)入主題,對貪吃蛇這個游戲進(jìn)行了介紹然后又對游戲總體設(shè)計(jì)與分
7、析。最后詳細(xì)地介紹了游戲中各個細(xì)節(jié)的具體實(shí)現(xiàn),并進(jìn)行了細(xì)致的分析。行云流水般地將在游戲編寫過程中遇到的問題以及相應(yīng)的解決方法表述的清清楚楚。在實(shí)踐中我獲得到了許多寶貴的知識和編程的經(jīng)驗(yàn)!關(guān)鍵字:貪吃蛇,VC+,小游戲。ABSTRACT In this paper, At the we saw the future of the development of little game.and then we introduced the situation and target of game research . afterwards, we peovided the programming t
8、ool which is called VC+ made by Microsoft . Next lets get down to business . in the first place . we introduced the gamegreedy snake .in the second place ,we designed and analyzed the overall game .At last , we vividly provided the particular realization of game details, and analyzed those detail me
9、ticulous. In the process of game programming. I came up against lots of trouble, but I didnt give it up, by the contrary. I overcame them one by one ,and at last I met with success ,I have got many precious knowledge and programming experience in the practice.Key words :Greedy snake, VC+, little gam
10、e. 項(xiàng)目背景貪吃蛇簡介蛇傳說中的圣靈之物,仰頭為神,俯首為魔。蛇是月亮國膜拜的神,月亮國的子民們都認(rèn)為蛇是萬能的主宰派來保護(hù)他們的守護(hù)者。蛇在這個島嶼就像空氣一樣自然的出現(xiàn)在各個角落,有些還成為居民的寵物,陪伴孩子長達(dá),和年輕人一起去探險(xiǎn),守護(hù)者散步的老人。在善良的女神女媧神保佑下,人們的生活安寧平靜。為了答謝女媧神的庇佑,每年月亮果的國民們都會舉辦一個守護(hù)蛇大賽,大人家都會拿出自己最強(qiáng)、最炫、最快、最稀有的蛇來參加比賽,獲得第一名的人將得到國王的特別嘉獎。所以國民一生都在培養(yǎng)更有威力、更長、更壯的蛇?!柏澇陨摺笔窃谝粋€產(chǎn)生于1970年代中后期的計(jì)算機(jī)游戲。也叫貪吃蛇。該游戲在1990年代由
11、于一些手機(jī)將其引入而一時間再度流行起來。在游戲中,玩家操作一條細(xì)長的蛇爬行與一個帶邊界的平面上,一路拾起觸碰到之事或其它類似的物件,并要避免觸碰到自身或者包圍者游戲區(qū)的“墻”。每次貪吃蛇吃掉一件食物,它的身體變增長一些,這讓游戲的難度漸漸變大。操控貪吃蛇時,玩家操控貪吃蛇的頭部的朝向(上、下、左、右)操控貪吃蛇的進(jìn)行方向 貪吃蛇的身體將跟隨其頭部行進(jìn)。另外,玩家不可在游戲中途停止貪吃蛇的行進(jìn)。隨著貪吃蛇的成功移植到手機(jī)系統(tǒng),貪吃蛇的操作按鍵要求與手機(jī)按鍵完美匹配,使貪吃蛇游戲風(fēng)靡起來。 需求分析 現(xiàn)在小游戲很是流行在手機(jī)以及互聯(lián)網(wǎng)上都是很火熱的,這引起了我的興趣。查看了而幾個小游戲網(wǎng)站,其實(shí)也
12、沒有什么,只不過是寫以FLASH為主開發(fā)的Flash小游戲,確實(shí)沒有什么非同凡響的地方。但你仔細(xì)思考想一下,就不難發(fā)現(xiàn),這些東西還真有一定的市場,只是現(xiàn)在還默默地沒有被人們所關(guān)注。首先,不斷擴(kuò)大的網(wǎng)絡(luò)愛好者和電腦應(yīng)用者隊(duì)伍,帶來了很多“新手”,這些新手還會像以前我們剛開始接觸是一樣,對一些相對簡單,操作也方便、娛樂性強(qiáng)東西很感興趣。源源不斷的加入者,組成了“小游戲”玩家的新主力軍。其次,“小游戲”很方便下載,而且現(xiàn)在的數(shù)碼小產(chǎn)品被越來越多的青年所青睞,擁有許多超強(qiáng)功能來支持這些小游戲。再次,隨著電視上網(wǎng)絡(luò)上進(jìn)程的推進(jìn),網(wǎng)絡(luò)走進(jìn)千家萬戶的時代為期不遠(yuǎn)。因?yàn)殡娨暦直媛逝c內(nèi)存大小的限制,以及遙控器操
13、作要求簡單,這種小游戲?qū)幸粋€巨大而潛在的市場。今后小游戲的發(fā)展趨勢:1,體積小,小游戲一般都占硬盤空間相當(dāng)小,方便下載傳播;2,內(nèi)容好,體積小并不代表沒有內(nèi)容,相反小游戲的內(nèi)容還是比較豐富的;3,耐玩,正是因?yàn)樾∮螒蛘伎臻g不大,它也是在電腦上占據(jù)比較長的游戲了;4,娛樂性高,小游戲玩起來還是蠻有趣的,擁有一定的娛樂性;5,無年齡層次,不分老少、男女小游戲面向的晚間范圍廣。概要設(shè)計(jì) 貪吃蛇游戲的額基本規(guī)則:通過鍵盤上的1、2、3、4鍵來控制蛇的運(yùn)行方向,當(dāng)蛇將食物吃到了后身體長度自動增加,當(dāng)蛇撞到墻或吃到自身則蛇死,此時將退出貪吃蛇游戲;當(dāng)蛇向左運(yùn)行時,按向右鍵將不會改變蛇的運(yùn)行方向,蛇將繼
14、續(xù)前進(jìn);同理其他方向一樣。 在編寫貪吃蛇游戲時有一下幾個技術(shù)要點(diǎn)。第一、 如何實(shí)現(xiàn)蛇在吃到食物后食物消失,這里用到的方法是采用背景色在出現(xiàn)事物的地方將食物重畫,這樣食物就消失不見了。第二、 、如何實(shí)現(xiàn)蛇的移動且在移動過程中不留下痕跡,實(shí)現(xiàn)蛇的移動也是貪吃蛇游戲最核心的技術(shù),主要方法是將蛇頭后面的每一節(jié)逐次移動到前一節(jié)的位置,然后按蛇的運(yùn)行方向不同對蛇頭的位置作出相應(yīng)調(diào)整,蛇每向前運(yùn)行一步,相應(yīng)的將其為不宜結(jié)用背景色重畫,及去掉其尾部。第三、 當(dāng)蛇向上運(yùn)行時,從鍵盤中輸入向下鍵,此時蛇的運(yùn)行方向不變,其他幾個方向以此類推,之力我是采用if.eles語句來實(shí)現(xiàn)該功能。第四、 食物出現(xiàn)的位置這里采用
15、隨機(jī)產(chǎn)生,但這種隨機(jī)產(chǎn)生也是有一定限制條件的即食物出現(xiàn)位置的橫縱坐標(biāo)必須能被10整除,只有這樣才能保證蛇能夠吃到食物。 詳細(xì)設(shè)計(jì)與測試601定義蛇身的數(shù)據(jù)結(jié)構(gòu) 對于蛇身在某一瞬間的位置標(biāo)識,我們采用一個一維的數(shù)組來標(biāo)識出來,即用動態(tài)增長的數(shù)組來存儲每一節(jié)蛇身的位置(包括蛇頭和蛇尾)。 也就是說,用存儲單位空間存儲當(dāng)前蛇身某部位的位置來對整個蛇身的位置進(jìn)行標(biāo)識,因此每個存儲空間的內(nèi)容就是一個點(diǎn)的坐標(biāo)值(row,col),而蛇身以從左到右的方式進(jìn)行編號,最左邊是蛇的尾部,最右邊是蛇的額頭不。如表6-1為三節(jié)蛇的數(shù)據(jù)結(jié)構(gòu)。表6-1三節(jié)蛇的數(shù)據(jù)結(jié)構(gòu)(snake0.row,snake0.col)(sna
16、ke1.row,snake1.col)(snake2.row,snake2.col)snake0.row和snake0.col是第0號蛇身也就是蛇尾的橫坐標(biāo)row和縱坐標(biāo)col:以此類推,snake2.row和snake2.col則是第二號蛇身也就是蛇頭的橫坐標(biāo)row和縱坐標(biāo)col。602 算法設(shè)計(jì)與程序流程圖602.1 貪吃蛇算法設(shè)計(jì) Snake game :1:初始化游戲,游戲界面的繪制、游戲速度的設(shè)置、食物產(chǎn)生2:while 玩家不按退出鍵3: if 玩家按下某方向鍵4: 蛇身按照玩家按下方向移動5: eles蛇身按照默認(rèn)方向(右)移動6: end if7: if 蛇頭碰到墻壁8: 游戲
17、結(jié)束9; end if10: if 蛇頭碰到自身11: 游戲結(jié)束12: end if13: if 蛇碰到食物14: 蛇身增長、分?jǐn)?shù)增加、產(chǎn)生新食物 15; end if 16: end whlile17: 游戲結(jié)束=602.2程序流程圖 602.2程序流程圖603光標(biāo)移動的設(shè)計(jì)與實(shí)現(xiàn) 在游戲過程中,對于光標(biāo)的移動相當(dāng)重要。首先,食物的產(chǎn)生是隨機(jī)產(chǎn)生的,可能出現(xiàn)在游戲界面的任何一個地方,因此生成隨機(jī)坐標(biāo)后,就要將光標(biāo)移動到該坐標(biāo),然后進(jìn)行顯示食物操作。其次,游戲界面的顯示也需要移動光標(biāo)。譬如,縱向的圍欄的顯示。再次,就是蛇身的移動了,蛇尾部要不斷清空,這樣蛇就動起來了。其中X為縱坐標(biāo),Y為橫坐標(biāo)
18、,(X,Y)對應(yīng)于屏幕上的像素點(diǎn)。COORD這個數(shù)據(jù)結(jié)構(gòu)、SetConsoleCurorPosition()、GetStdHandle()這2個函數(shù)都是位置,GetStdHandle()得到標(biāo)準(zhǔn)輸入輸出的句柄。Gotoxy()這個函數(shù)是布爾型的,返回真或假。 下面將光標(biāo)移動應(yīng)用到貪吃蛇游戲中603.1顯示水平圍墻的實(shí)現(xiàn) 水平圍墻就是在游戲區(qū)域中,限制蛇行動的上下界,即活動的對打邊界。這里用一系列“=”連續(xù)顯示,直到設(shè)定的最大活動范圍。 水平圍墻如圖603.1所示圖603.1水平圍墻603.2顯示分?jǐn)?shù)的實(shí)現(xiàn) 對于玩家的得分,是在游戲當(dāng)中,玩家控制貪吃蛇每當(dāng)吞掉一個食物,相應(yīng)的分?jǐn)?shù)就會增加一分。游
19、戲結(jié)束時,分?jǐn)?shù)會清零,再下一盤游戲中從0分開始計(jì)數(shù)玩家的分?jǐn)?shù)顯示如圖603.2所示603.2分?jǐn)?shù)顯示圖603.3接受玩家按鍵信息的實(shí)現(xiàn) 為了接受來自鍵盤的信息,之力用到了conio.h這個頭文件。通過一個布爾函數(shù)kbhit()的真假來判斷是否有按鍵被敲擊,如果沒有,游戲正常運(yùn)行;否則通getch()得到那個char變量的按鍵信息,然后修改蛇的運(yùn)動方向。603.4游戲結(jié)束時顯示信息的實(shí)現(xiàn) 當(dāng)游戲介紹時,屏幕上要顯示“Game over”的字樣,還有“another game(y/n)?”的字樣來讓玩家選擇繼續(xù)游戲還是退出游戲。這里是通過使用gotoxy()函數(shù),是上述的字樣在想要顯示的位置出現(xiàn)的
20、。游戲結(jié)束的而顯示信息如圖603.4所示圖603.4游戲結(jié)束顯示604貪吃蛇游戲主干的設(shè)計(jì) 604.1游戲的初始化與加載的實(shí)現(xiàn) 游戲開始的時候,初始化蛇的長度為4節(jié),行進(jìn)方向?yàn)橛?。并定義2維數(shù)組screengridrowcol,該數(shù)組的作用是產(chǎn)生食物用。蛇開始移動的坐標(biāo)是哦(2,2)。然后繪制圍墻橫的圍墻用一排“=”顯示,縱的圍墻用一列“|”顯示,這樣游戲的框架就出來了,初始化游戲分?jǐn)?shù),并顯示游戲的一些幫助,如按鍵設(shè)置等。 游戲初始化,包括蛇的初始長度,蛇初始行進(jìn)的方向,游戲區(qū)域的顯示。 游戲加載完成后,效果如圖604.1所示 圖604.1貪吃蛇的初始化604.2食物隨機(jī)產(chǎn)生的實(shí)現(xiàn) 對于前面提
21、到過的一個二維數(shù)組screengridrowcol這里要用到。用rand()函數(shù)生成2個隨機(jī)生成的整數(shù)作為食物的橫坐標(biāo)和縱坐標(biāo),并判斷食物是否出去圍墻,如果在游戲區(qū)域外面,則對隨機(jī)生成的橫縱坐標(biāo)進(jìn)行修改。然后移動光標(biāo)到此處坐標(biāo)進(jìn)行輸入“*”操作。(用“*”代表食物)這里的c和r會在判斷蛇頭是否碰到食物用到。這里要應(yīng)用到time.h這個頭文件,用于產(chǎn)生隨機(jī)數(shù)。 食物隨機(jī)產(chǎn)生,如圖602.2所示 圖604.2隨機(jī)食物產(chǎn)生604.3蛇身的增長設(shè)計(jì) 對于蛇身增長的設(shè)計(jì)要考慮到蛇頭的運(yùn)行方向。如果蛇頭向右行進(jìn),新增加的蛇身橫坐標(biāo)不變,縱坐標(biāo)增加1;如果蛇頭向左行進(jìn),新增加的蛇身橫坐標(biāo)不變,縱坐標(biāo)減1;如
22、果蛇頭向上行進(jìn),新增加的蛇身縱坐標(biāo)不變橫坐標(biāo)減1;如果蛇頭向下行進(jìn),新增加的蛇身縱坐標(biāo)不變橫坐標(biāo)加1. 604.4蛇身的顯示與移動的設(shè)計(jì)實(shí)現(xiàn) 對于蛇身的顯示屬于本程序設(shè)計(jì)的難點(diǎn)之一,因?yàn)樯呱硎且粋€運(yùn)動的物體,每個時刻的某一節(jié)所在的位置是變化的。就像一個動畫過程,需要每隔一個固定的時間,對蛇進(jìn)行顯示一次,并將蛇尾部的一節(jié)消掉,使蛇頭向前增進(jìn)一節(jié)。這是一個動態(tài)的過程,當(dāng)然設(shè)置的固定顯示蛇身時間是能讓人眼來得及反應(yīng)的時間,也就是不能太快,否則在人看到就是頻閃的一串了。其中addsegment()這個函數(shù)是用來為蛇頭的前移賦值的。604.5蛇的頭部與物體的碰撞的設(shè)計(jì)實(shí)現(xiàn)對于蛇的頭部與物體碰撞的檢測同樣
23、屬于本程序設(shè)計(jì)的難點(diǎn)。1、首先來關(guān)注蛇的額頭不與游戲區(qū)域圍墻的碰撞檢測。如果檢測到有碰撞,則游戲結(jié)束;否則游戲正常運(yùn)行。這個是通過判斷蛇的頭部的橫、縱坐標(biāo)是否超過設(shè)定的額最大的界限或是低于最小的下限來判斷的如圖604.5.1所示為碰壁情況 圖604.5.1為碰壁情況2、其次,考慮蛇的頭部是否與自己身體的某個部位產(chǎn)生的碰壁檢測。如果檢測到有碰壁,則游戲結(jié)束;否則游戲正常運(yùn)行。這個是通過一個循環(huán)將蛇的頭部的橫、縱坐標(biāo)值與每節(jié)蛇身(處蛇頭外)知道蛇的尾部的橫、縱坐標(biāo)值與蛇的頭部的橫、縱值一致,則游戲結(jié)束;否則游戲正常運(yùn)行。如圖604.5.2所示為蛇碰到自身的情況,蛇頭與距蛇尾長度一致的蛇身處相撞。
24、圖604.5.2蛇碰到自身的情況 3、最后,就是蛇的頭部是否與食物碰撞的檢測了。如果檢測到?jīng)]有碰到則游戲正常運(yùn)行;否則首先將二維數(shù)組screengridrowcol里有食物的那個數(shù)據(jù)元素清空,以便生成下一個食物。然后在游戲區(qū)域再隨機(jī)產(chǎn)生一個食物,分?jǐn)?shù)和蛇的長度分別增加1,最后在游戲區(qū)域下方顯示分?jǐn)?shù)。這里是通過令蛇的頭部的橫、縱坐標(biāo)與先前產(chǎn)生食物時設(shè)置的2個變量進(jìn)行比較判斷的,這2個變量分別是r,c(r表示食物的橫坐標(biāo),c表示食物的縱坐標(biāo)),如果2者分別相等,則成功吞掉食物;否則游戲繼續(xù)進(jìn)行。 如圖604.5.3所示為將要碰到食物的情況,食物用“*”表示圖604.5.3蛇碰到食物的情況結(jié)論通過理
25、論與實(shí)踐的完美結(jié)合,我的貪吃蛇游戲成功的編制完成了。雖然所編寫的而這個游戲很簡單,又因?yàn)樽约耗芰τ邢蓿螒虍嬅嫦喈?dāng)粗糙,沒有經(jīng)過美化的界面美感就談不上了,只能用簡陋形容了。但是值得驕傲的是整個游戲的編寫是自己親手,并且依靠自己的智慧獨(dú)立完成的。在編寫游戲過程中,遇到了許多難題,例如,蛇的頭部與食物的檢測問題,蛇的移動與顯示問題,蛇的轉(zhuǎn)向問題,食物的隨機(jī)生成問題等等,這些個難題擺在面前,讓人實(shí)在有些招架不住。經(jīng)過查閱大量的文獻(xiàn)資料閱讀相關(guān)書籍,最后決定了采用分治算法的思想來對擺在面前的問題一一擊破。在解決的是蛇的移動與顯示問題的時候,通過大量的研究、實(shí)驗(yàn)與調(diào)試,試驗(yàn)過多種移動與顯示的方法,最后決
26、定了一種簡單易用的算法。解決難題的時候,仿佛是撥了一層云,又見一層云,但是日光也越來越閃耀了,最終看到了陽光,取得了成功。自己感覺通過這次學(xué)習(xí)研究,自己受益匪淺。不僅自己揭開了游戲程序神秘的面紗,而且在實(shí)際的程序編寫與調(diào)試過程中,自己成長了不少,實(shí)戰(zhàn)的能力提高了不少。萬丈高樓平地起,能夠編寫復(fù)雜的游戲都是在編寫簡單的游戲基礎(chǔ)上演變過來的能力。然而像貪吃蛇這樣的簡單游戲,就自然成了設(shè)計(jì)者的入門之選,因?yàn)槠浣缑婧唵?,操作、玩法一目了然,所以編寫起來就不會很困難,而且需要考慮的問題也不用太多,就是蛇的顯示、移動、碰撞3個游戲的主塊,攻破這3個主塊,程序就自然編寫出來了,不會一開始就把游戲設(shè)計(jì)初學(xué)者拒
27、之門外。編成之后就感覺就會油然而生,并使之對游戲設(shè)計(jì)產(chǎn)生強(qiáng)烈的興趣。成為向游戲設(shè)計(jì)之路成功邁進(jìn)的第一步,同時對于VC+的運(yùn)用水平也會上升,用起來會更加?jì)故臁⒌眯膽?yīng)手。從易到難這是喲個準(zhǔn)則,總之,貪吃蛇小游戲的研究會對增長程序閱讀能力、程序編寫能力等起到了意想不到的作用。當(dāng)然,自己的程序不足之處到處都是,譬如可以講畫面設(shè)計(jì)的美觀一點(diǎn),可以設(shè)置一下游戲的難度,可以令算法的執(zhí)行效率再高一點(diǎn)并不滿足編寫出來就行。字啊以后漫漫的研究學(xué)習(xí)道路上,我還有很遠(yuǎn)的璐要走,迎接我的是一個嚴(yán)峻的挑戰(zhàn)。參考文獻(xiàn)1.C語言程序設(shè)計(jì). 朱立華 王立柱 . 人民郵電出版社。2.C語言程序開發(fā)范例寶典. 王娣 安劍 孫秀梅
28、. 人民郵電出版社。3.數(shù)據(jù)結(jié)構(gòu). 姜梅 趙堅(jiān) . 中國水利水電出版社4.高級語言C+程序設(shè)計(jì) . 劉璟 周玉龍 . 高等教育出版社5.C+實(shí)戰(zhàn)操作100例 . 蔣衛(wèi)華 李偉華 . 清華大學(xué)出版社6.游戲設(shè)計(jì)基礎(chǔ) . Emest Adams . 機(jī)械工業(yè)出版社7.游戲設(shè)計(jì)概論 . 潛龍 . 科學(xué)出版社 致謝 2012.6附錄 編碼#define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define
29、DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戲速度自己調(diào)整*/struct Foodint x;/*食物的橫坐標(biāo)*/int y;/*食物的縱坐標(biāo)*/int yes;/*判斷是否要出現(xiàn)食物的變量*/food;/*食物的結(jié)構(gòu)體*/struct Snakeint xN;int yN;int node;/*蛇的節(jié)數(shù)*/int direction;/*蛇移動方向*/int life;/* 蛇的生命,0活著,1死亡*/snake;void Init(void
30、);/*圖形驅(qū)動*/void Close(void);/*圖形結(jié)束*/void DrawK(void);/*開始畫面*/void GameOver(void);/*結(jié)束游戲*/void GamePlay(void);/*玩游戲具體過程*/void PrScore(void);/*輸出成績*/*主函數(shù)*/void main(void)Init();/*圖形驅(qū)動*/DrawK();/*開始畫面*/GamePlay();/*玩游戲具體過程*/Close();/*圖形結(jié)束*/*圖形驅(qū)動*/void Init(void)int gd=DETECT,gm;initgraph(&gd,&gm
31、,"c:tc");cleardevice();/*開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/void DrawK(void)/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/for(i=50;i<=600;i+=10)/*畫圍墻*/rectangle(i,40,i+10,49); /*上邊*/rectangle(i,451,i+10,460);/*下邊*/for(i=40;i<=450;i+=10)rec
32、tangle(50,i,59,i+10); /*左邊*/rectangle(601,i,610,i+10);/*右邊*/*玩游戲具體過程*/void GamePlay(void)randomize();/*隨機(jī)數(shù)發(fā)生器*/food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/snake.life=0;/*活著*/snake.direction=1;/*方向往右*/snake.x0=100;snake.y0=100;/*蛇頭*/snake.x1=110;snake.y1=100;snake.node=2;/*節(jié)數(shù)*/PrScore();/*輸出得分*/while(1)/*可以重復(fù)
33、玩游戲,壓ESC鍵結(jié)束*/while(!kbhit()/*在沒有按鍵的情況下,蛇自己移動身體*/if(food.yes=1)/*需要出現(xiàn)新食物*/food.x=rand()%400+60;food.y=rand()%350+60;while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/food.x+;while(food.y%10!=0)food.y+;food.yes=0;/*畫面上有食物了*/if(food.yes=0)/*畫面上有食物了就要顯示*/setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);for(i=snake.node-1;i>0;i-)/*蛇的每個環(huán)節(jié)往前移動,也就是貪吃蛇的關(guān)鍵算法*/snake.xi=snake.xi-1;snake.yi=snake.yi-1;/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/switch(snake.direction)case 1:snake.x0+=10;break;case 2: snake.x0-=10;break;case 3: snake.y0-=10;break;case 4: snake.y0+=10;break;for(i=3;i<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026安徽淮南市壽縣職業(yè)中專學(xué)校機(jī)電專業(yè)職教高考教師招聘2人考試參考試題及答案解析
- 2026年安康市漢濱區(qū)第一醫(yī)院招聘(17人)考試參考試題及答案解析
- 2026江蘇揚(yáng)州錦耀置業(yè)有限公司招聘專業(yè)工作人員1人考試參考題庫及答案解析
- 2026鞍鋼工程發(fā)展公司高校畢業(yè)生招聘(遼寧)考試備考題庫及答案解析
- 2026日照銀行見習(xí)人員招聘10人考試備考試題及答案解析
- 2026浙江臺州恩澤醫(yī)療中心(集團(tuán))招聘高層次衛(wèi)技人員51人考試參考題庫及答案解析
- 北京市豐臺區(qū)東鐵匠營街道蒲黃榆社區(qū)衛(wèi)生服務(wù)中心招聘1人考試參考試題及答案解析
- 2026云南保山市昌寧縣融媒體中心招聘公益性崗位人員1人考試參考題庫及答案解析
- 2026福建福州市閩侯縣教育局研究生招聘44人考試參考試題及答案解析
- 2026年安徽醫(yī)科大學(xué)臨床醫(yī)學(xué)院人才招聘124名考試參考題庫及答案解析
- 2026秋招:澳森特鋼集團(tuán)試題及答案
- 哲學(xué)史重要名詞解析大全
- 2026年寧夏黃河農(nóng)村商業(yè)銀行科技人員社會招聘備考題庫及答案詳解(易錯題)
- 銀行借款抵押合同范本
- DB37-T4975-2025分布式光伏直采直控技術(shù)規(guī)范
- 兒童糖尿病的發(fā)病機(jī)制與個體化治療策略
- 脫硫廢水零排放項(xiàng)目施工方案
- 2026年海南衛(wèi)生健康職業(yè)學(xué)院單招綜合素質(zhì)考試題庫參考答案詳解
- 水泥產(chǎn)品生產(chǎn)許可證實(shí)施細(xì)則2025
- 急性心梗合并急性心衰護(hù)理
- 肺原位腺癌病理課件講解
評論
0/150
提交評論