貪吃蛇設計報告(共57頁)_第1頁
貪吃蛇設計報告(共57頁)_第2頁
貪吃蛇設計報告(共57頁)_第3頁
貪吃蛇設計報告(共57頁)_第4頁
貪吃蛇設計報告(共57頁)_第5頁
已閱讀5頁,還剩52頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上目錄2. 2.1.1 算法設計分析.5 2.1.2 數據結構分析.8 2.1.1 流程框圖 .92.2.1 工具類.92.2.2 載入類.112.2.3 蛇類.122.2.4 食物類.132.2.5 地圖類.142.2.6 運行類.153. 6790 摘要貪吃蛇游戲作為一款簡單游戲,是手機游戲的代表,在十多年前風靡全世界,時至今日,貪吃蛇游戲任然活躍的網絡的各個角落。本次編寫的便是一款經典的貪吃蛇游戲,任務確定為實現貪吃蛇游戲過程。作為游戲的組成,通過必要的圖形,文字界面來引導游戲者參與到這款游戲中,更有效的吸引游戲者的興趣,為了拓展游戲者對高分和刺激的追求,設定各種

2、難度的關卡也成為了游戲的必需品,貪吃蛇游戲的編寫共有八個類,其中,主要包括游戲的控制與游戲界面的建立兩個方面,對于前者,需要通過控制臺來獲取輸入,而對于后者,要求應用合適的數據結構和算法,通過編寫本次課程設計,對理論知識與實際作品之間的關系有了更加深刻影響。關鍵字:貪吃蛇,界面,難度控制,數據結構1 課題析與方案選擇1.1課題分析本次設計為貪吃蛇游戲,一款游戲就必須要與使用者擁有良好的交互界面,使用C+對DOS界面顯示的處理需要細致和精細,在游戲過程中,那么就會有游戲載入界面,游戲進行界面,和結束界面,在輸入方面,這款游戲采用上下左右四個按鍵進行控制,需要用到回車鍵進行選擇確定,而游戲的目標,

3、則是獲取更高分數,挑戰更高難度。功能設計框圖1.2方案選擇1.1.1 軟件選擇本次編寫軟件為CODEBLOCKS 16.011.1.2 設計選擇 通過分析,將游戲分為輸入,游戲運行,輸出三大部分,對于每個部分需要用不同的類進行實現和聯系,大概將其分為五個類,分別為工具類,載入類,蛇體類,游戲界面類和運行類。系統模塊-功能表模塊名稱功能工具模塊在游戲中需要對界面進行不同的顯示,比如輸出位置和形狀和顏色等,為了界面和諧美觀,同時也需要控制DOS界面大小等,為了方便使用,需要一個工具模塊,用于在編寫過程中合理的運行和調試蛇體模塊做為游戲的主要承載者,蛇本身也是游戲的重點,蛇的移動,轉動方向,蛇體吃到

4、食物變長,蛇撞到邊界障礙物或者自己死亡等,需要用一個類對其進行詳細的描述界面模塊用于和使用者進行交互,譬如在游戲載入時,有難度選擇,同時也會顯示出選擇的難度是什么,合理的使用字符讓程序更美觀。運行模塊這個模塊用于協調各個類之間的運行, 做為游戲的主要控制,根據輸入和現有數據,對游戲運行做出正確的判斷等,是游戲的處理和控制中心。2 總體設計2.1 理論分析2.1.1 算法設計分析(1) 在載入界面時,在界面上設計顯示出一個英文單詞SNAKE,為了美觀,便將其出現的方式進行改變,不再是按照行列進行單調的輸出,采用隨機在屏幕上打點的方式進行輸出,為了實現這一目標,需要將SNAKE點陣的所有的坐標點保

5、存到代碼中,在輸出時,隨機取點,隨機取顏色進行輸出,通過控制延時,使整個單詞顯得游戲而且漂亮的輸出,使游戲顯得更有獨特性。 載入動畫流程圖 控制方向流程圖 (2)在游戲選擇難度和控制方面,選用了通過鍵盤讀取輸入字符的方式來獲得使用者的輸入,如何顯示出被選擇的項目,通過用->標記以外,還使用了改變其背景底色的方式,明顯且符號使用者的習慣。通過上下左右四個按鍵來控制菜單欄,是在各個程序都常用的方式。難度屬性控制得分權重簡單難度蛇運動反應時間為1351普通難度蛇運動反應時間為1102困難難度蛇運動反應時間為80,隨機增加障礙物3(3)如何控制蛇的移動,仔細分析蛇的移動可以看出,在蛇的每一次移動

6、中,蛇頭向前拓展一個單位,而后所有的蛇體都向前拓展一個單位,再把蛇尾去掉,倘若吃掉一個食物,那么就不用再把蛇尾去掉,蛇體的長度就又長了一個單位,為了描述當前蛇頭的運動方向,還要用一個變量來保存,用其值表示當前蛇頭的運動方向。(4)用循環來實現蛇的移動,假設當前不對蛇體進行轉向,那么在界面上蛇就會按照當前運動方向進行移動,如果通過鍵盤輸入了方向,也將其指令分為三種類別,第一種是與當前蛇的運動相同,那么就加速,使蛇更快的朝著當前方向運動,第二種就是與當前蛇的運動相反,此時應該忽略掉這種指令,不能進行實現,第三種就是剩下的方向,那么就按照輸入的方向,對現在蛇的方向進行修改。(5)游戲結束的判斷,貪吃

7、蛇游戲結束存在兩種判斷,第一種是蛇頭撞到障礙物比如地圖邊界,那么游戲結束,第二種是蛇頭撞到自己的蛇體,游戲也會結束,那么就在蛇移動后判斷,蛇頭的坐標與障礙物和自己蛇體的所有點是否相同,如果存在一個相同的點,那么游戲結束,反之,游戲繼續。(6)游戲難度控制,如何控制游戲的難度,是使用者有不同的刺激體驗,為此,結合了許多貪吃蛇游戲,我將難度控制放在了蛇移動速度和地圖障礙物上面,蛇體的移動速度越快,那么留給游戲者的反應時間也就越短,而添加地圖障礙物,則使得難度加大,地圖不在是普通的長方形地圖,存在與地圖的障礙物也是游戲者需要用心注意,于是將簡單難度控制為普通速度,在普通難度時,會增加速度,在困難難度

8、時會在增加速度的同事,增加障礙物。(7) 食物和障礙物的控制,食物的出現必須在游戲開始界面,或者當蛇吃掉前一個食物的時候,才會生成下一個食物,也就是說整個地圖只會有一個食物,這里引入隨機,讓下一個食物隨機出現在地圖的每一個地方,而障礙物的出現,便是在難度選擇之后進行出現,且在這一局游戲中改變。但是食物和障礙物都會出現沖突,比如下一個食物的出現,用隨機生成了一個坐標,但是這個坐標卻是蛇體的一部分或者是某個障礙物,那么這就不合理,于是在隨機的前提下,要確保生成數據的合理性,同時為了使障礙物更加規范,障礙物也不一定是一個點,可能是一堵墻,或者兩堵墻挨在一起,這些都需要通過細節控制。障礙物生成流程圖2

9、.1.2 數據結構分析在本次設計中,蛇需要有合適的數據結構進行保存和使用,為了方便對蛇的移動進行處理,蛇的移動會對蛇頭和蛇尾頻繁操作,而且為了更形象的描述蛇,需要數據結構有著線性結構,而為了保存地圖,障礙物載入動畫,需要對該數據結構有著較高讀取方便的要求。名稱簡介說明功能雙端隊列deque雙端隊列是指兩段都可以進行入隊和出隊操作的隊列,其元素的邏輯結構仍是線性結構。將隊列的兩段分別稱為前端和后端,兩段都可以入隊和出對雙端隊列是適用于保存蛇坐標的數據結構,從其邏輯結構來看,與本次程序對蛇體的操作非常類似,蛇頭可以看做是隊列的前端,蛇尾則是后端,能夠對兩端進行操作Push_back()Push_f

10、ront()Pop_back()Pop_front()容器vectorvector是可以實自動增長的對象數組,用于多種功能,能夠操作多種數據結構和算法的模板類和函數庫在不知道地圖等數據的多少時,采用容器進行儲存有許多的便利,能過快速的測定其大小和遍歷容器內所有內容Push_back()Pop_back()Size()2.1.3 流程框圖2.2 代碼編寫2.2.1 工具類void SetCursorPosition(int x,int y); /設置鼠標位置void Setcmdsize(int wide,int high); /設置CMD大小void Setcolour(int colour)

11、; /設置字符顏色void Setbackcolour(); /設置黑底void Clear_colour(); /清空顏色void HideCursor(); /光標隱藏void Clearpoint(int x,int y); /清空字符在工具類中,為了編寫適用整個程序的工具,將需要的函數分為控制光標等七個子函數,其中使用到的大多數是對DOS界面的操作,主要函數為控制光標位置和修改輸出格式。(1) 控制光標位置調用計算機函數SetConsoleCursorPosition,通過定義COORD pos,修改pos.x和pos.y的值就可以實現光標的位置控制(2) 修改字符顏色使用SetCon

12、soleTextAttribute,這是一個可以在應用程序編程接口中設置控制窗口字體演示和背景色的計算機函數。原型:BOOL SetConsoleTextAttribute(HANDKE hConsoleOutput,WORD wAttributes); 功能表wAttributes顏色對應的值FOREGROUND_BLUE字體顏色:藍1FOREGROUND_GREEN字體顏色:綠2FOREGROUND_RED字體顏色:紅4FOREGROUND_INTENSITY前景色高亮顯示8BACKGROUND_BLUE背景顏色:藍16BACKGROUND_GREEN背景顏色:綠32BACKGROUND_

13、RED背景顏色:紅64BACKGROUND_INTENSITY背景色高亮顯示1282.2.2 載入類void Select(); /選擇難度void show_first(); /顯示第一行被選中void show_second(); /顯示第一行被選中void show_third(); /顯示第一行被選中void show_fourth(); /顯示第一行被選中void add_score(); /增加分數int chooseend(int score); /游戲結束 void show_YES(); /選擇YESvoid show_NO(); /選擇NOvoid show_load();

14、 /載入界面顯示int show_pause(); /游戲暫停void show_returnmeniu(); /返回菜單void show_continue(); /游戲繼續在載入類中,主要解決的是顯示載入界面和選擇難度兩大部分,載入界面為閃爍顯示字符點陣SNAKE,選擇難度則是通過上下移動顯示被選中狀態。(1) 顯示點陣:int cnt = 1;while(v.size() /顯示所有位置 int tmp = 0; int now = rand() % v.size(); /隨機選定 if(vnow.first > 40) /控制點陣字符距離 tmp += 2; SetCursorP

15、osition(vnow.first + 12 + tmp, vnow.second + 2); cnt+; cnt = cnt % 15 + 1; /循環字符演示 Setcolour(cnt); cout << "*" /輸出 Sleep(5); /休眠,達到閃爍效果 v.erase(v.begin() + now); /刪除該點(2) 顯示選擇難度在子函數中,為了達到顯示某一行被選中的狀態,通過先標記當前在第幾行,然后以輸入來控制上移動或者下移動,最后通過函數調用顯示該行被選中狀態。while(ch = getch() /獲取鍵盤輸入 if(ch = 224

16、) ch = getch(); /處理出上下左右 if(ch = 72) /通過輸入處理出移動 key-; else if(ch = 80) key+; if(key = 0) show_fourth(), key = 4; else if(key = 1) show_first(); else if(key = 2) show_second(); else if(key = 3) show_third(); else if(key = 4) show_fourth(); else if(key = 5) show_first(), key = 1; if(ch = 13) break; /E

17、NTER鍵確認2.2.3 蛇類 蛇類的主要功能分為展示蛇體,控制蛇的移動與判斷蛇是否與障礙物邊界重合三大功能,而蛇的移動又分為,按照方向移動和改變運動方向,蛇體增加三個部分,需要分別實現。 void show_snake(); /輸出蛇在界面void add_snake(); /向前移動一個單位void move_snake(); /尾部去掉一個單位int check_snake(vector<Cursor> v); /檢測是否相撞int change_snake(); /改變方向int eat_food(int tmpx, int tmpy); /能否吃掉地圖上的食物(1) 蛇移

18、動根據蛇的運動方向,將頭增加一個點,然后再將尾部去掉,就完成了蛇的一次移動int dir42 = 0, -1, 0, 1, -1, 0, 1, 0; /方向數組int dx = snake.back().Getx() + dirflag0; /增加新點int dy = snake.back().Gety() + dirflag1;snake.push_back(dx, dy);SetCursorPosition(dx, dy);SetCursorPosition(snake.front().Getx(), snake.front().Gety();snake.front().Clear_poi

19、nt(); /去掉尾巴坐標snake.pop_front(); Setcolour(14); snake.back().Print_round();(2) 檢查是否相撞為了檢查蛇是否與邊界和障礙物還有自身相撞,需要傳入障礙物參數,遍歷所有障礙物的點坐標和蛇頭坐標,如果存在一個點重合,那么此時游戲已經結束。for(int i = 0; i < v.size(); i+) if(vi.Getx() = snake.back().Getx() && vi.Gety() = snake.back().Gety() return 0; /判斷蛇頭與自身是否相撞for(int i =

20、 0; i < snake.size(); i+) /遍歷所有障礙物 int x = snakei.Getx(); int y = snakei.Gety(); if(x <= 0 | x >= 33 | y <= 0 | y >= 24) /判斷邊界 return 0; if(i != snake.size() - 1) if(x = snake.back().Getx() && y = snake.back().Gety() return 0; return 1;2.2.4 食物類食物類的功能主要是在地圖上隨機生成一個可以給蛇吃的食物,但是隨機

21、過種仍然有需要多限制,生成的食物不能是非法的坐標,比如邊界外,或者是障礙物,或者是蛇體,這些都是不合法的位置,所以需要通過循環生成的方式,不斷的判斷,直到生成正確的食物的坐標。while(flag != -1) int tmpx = rand() % 32 + 1; /在地圖范圍能隨機生成一個坐標 int tmpy = rand() % 23 + 1; int cnt = 0; for(int i = 0; i < qu.size(); i+) /確定這個不與所有蛇坐標重合 int dx = qui.Getx(); int dy = qui.Gety(); if(tmpx = dx |

22、tmpy = dy) cnt+; for(int i = 0; i < v.size(); i+) /確定這個坐標不與所有障礙物重合 int dx = vi.Getx(); int dy = vi.Gety(); if(tmpx = dx | tmpy = dy) cnt+; if(cnt = 0) /滿足條件,生成食物坐標成功 this->x = tmpx; this->y = tmpy; break ; 2.2.5 地圖類 地圖類的功能主要為繪制地圖障礙物,更新分數,顯示時間閃爍動畫三大部分。(1) 繪制地圖和障礙物 根據障礙物參數,將障礙物顯示在地圖上,繪制地圖,根據所

23、確定的地圖范圍,通過循環將所有坐標用容器保存下來,再進行輸出。(2) 更新分數當蛇吃掉一個食物,會得到一個得分,該得分為:當前得分+權重*10,其中的權重便是所選中的難度,每吃掉一個食物就會通過地圖類更新得分。(3) 顯示時間和閃爍動畫為了方便使用者,在地圖的右下角增加了顯示系統時間,并且在地圖的右上角增加閃爍小動畫,使得整個界面更有動感。int ret=rand()%15+1; /隨機生成字符顏色Setcolour(ret); SetCursorPosition(2 * 37, 2); /設定顏色和位置cout << "貪 吃 蛇" /輸出字符time_t t

24、t = time(NULL); tm* t = localtime(&tt); /獲取系統時間Setcolour(10);SetCursorPosition(2 * 42, 22); /設定位置printf("%02d:%02d:%02dn", t->tm_hour, t->tm_min, t->tm_sec);SetCursorPosition(2 * 41, 23);printf("%04d/%02d/%02d%n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday

25、); /通過數學處理輸出當前時間Clear_colour();2.2.6 運行類 運行類的功能是程序的控制中心,游戲從這里開始和結束,運行類通過調用其余所有類,依次顯示載入動畫,選擇難度,進行游戲,游戲控制和判斷結束游戲等。3 游戲測試3.1 載入界面測試 載入界面圖在載入界面,閃爍出現點陣動畫,控制延時時間,整體圖形在2秒內顯示完全,且點陣顏色隨機,載入界面下放選擇欄,通過獲取鍵盤輸入上下左右,模擬選擇效果,回車鍵確認,載入界面功能基本實現。3.2 簡單模式測試 簡單模式界面圖在簡單模式中,蛇運動速度較慢,難度控制合理,在地圖上隨機生成食物,食物生成未出現不合法情況,得分和時間更新正確,簡單

26、模式游戲功能完成,即使是新手玩家也能快速上手。3.3 普通模式測試 普通模式界面圖在簡單模式中,蛇運動速度適中,難度控制合理,在地圖上隨機生成食物,食物生成未出現不合法情況,得分和時間更新正確,相比簡單模式,速度提高明顯,適合有一定游戲基礎的人進行游戲。3.4 困難模式測試 苦難模式界面圖在苦難模式中,蛇的移動速度加快,并且在地圖中隨機出現障礙物,給游戲的操作帶來了難度,需要有快速的反應力,困難模式功能基本實現。3.5 游戲暫停與繼續游戲測試 游戲暫停界面圖 當在游戲中按下空格鍵,則表示暫停游戲,在暫停游戲后,在界面中間彈出提示框,表示當前游戲暫停,需要進行選擇是否繼續游戲,該功能成功實現,在

27、三種模式下測試均為發現異常。3.6 游戲結束界面測試 游戲結束界面圖當游戲結束后,會在界面的中央彈出提示框,表面游戲結束和最終得分,并且能夠選擇是否繼續游戲,在簡單,普通,困難三種不同難度的模式下進行測試,均未發現異常,游戲結束界面功能基本實現。4 問題分析與解決(1) 載入動畫點陣問題描述:如何將點陣顯示在DOS界面上解決辦法:根據設想,需要將SNAKE以*號點陣的樣式輸出到界面上,首先就要出處理好點陣坐標問題,為了更好的顯示,需要將所有坐標保存下來,因此通過文件讀入的方式,將點陣在文本中描繪好,在程序中預處理讀入,保存在一個二維數組里面,通過遍歷該數組中所有是*號的點,然后輸出該坐標,就能

28、得到所有點的坐標,再將所有坐標存入容器中,便可以輸出到DOS界面上。(2)載入界面設計問題描述:在設計載入動畫時,將坐標存入容器后,隨機選點然后輸出在界面上,因為隨機性的問題,選的點可能會不斷選到重復的點,也就是會有一些點選中的時間會變長,若想要將所有點都完整的展現在界面上,所需要的時間大大增加,并且不能確定具體時間,與最初的設想相違背。解決辦法:思考容器的功能,為了保證不選取已經輸出的點,當選中一個點后,就將該點從容器中刪除,這樣就能保證每次選中的點都是為出現的點,從整體上控制了載入動畫的時間,使該功能能夠完美實現。(3)地圖繪制問題描述:為了描繪出整個地圖,需要將所有邊界坐標都顯示出來,如

29、何快速的處理出所有坐標解決辦法:通過for循環方式,兩重for循環,第一重遍歷橫坐標,第二重遍歷縱坐標,然后加入判斷,就可以很方便快速的描繪出整個地圖邊界。(4)蛇運動方向控制問題描述:在蛇類中,一個重要屬性就是蛇的運動方向,但是如何保存蛇的方向,便于程序使用。解決辦法:用一個整型變量,其數值為0,1,2,3分別代表當前蛇的方向是上,下,左,右,在使用上面,可以配合建立一個方向數組為 0, -1, 0, 1, -1, 0, 1, 0,通過調用方向變量,對當前坐標進行運算,就可以便利的獲得當前方向的下一個坐標。5 總結通過本次設計,首先對自己的編程能力有了一次較大的提高,將課堂上學到的東西用于實

30、際也是一次巨大的進步,通過不斷地使用和學習C+,更加熟悉了解了C+這門語言,同時,在設計中遇到了許多的問題,這些問題使得自己的思考方式更加貼近機器語言,有時候能夠通過自己的思考能過解決的問題,提高了自己的邏輯思維能力,當遇到不能解決的問題,例如如何控制光標的位置和字符顏色,可以通過網上查找相關資料,然后加以調試實驗,主動學習的效果使得自己提高了很多,在編程中也遇到了許多代碼上的問題,學會了如何使用codeblock單步調試,更加熟練的使用這款軟件,由于本次設計是一款小游戲,也讓自己對游戲的概念深刻了許多,在玩游戲的同時,也會不停思考,如何實現這個功能,為什么要怎么寫,收益巨大。在編寫程序前,在

31、腦海里建立整個游戲的大概框架,將游戲抽象為不同的類,深刻的理解到了C+面對對象編程的思想,當抽象為類后再對事物的屬性功能依次實現,最后再通過函數統一調用,使程序不再僅僅只是冷漠的代碼,更像是一個有著生命的實體。當代碼量不再是課題上的幾十排后,數百近千排的代碼需要有著嚴謹的邏輯性,如何通過代碼,將頭腦中思考的游戲過程實現,是需要花很多時間去學習,通過不同的方法實現,代碼量加大后,考慮得更多的就是自己對代碼的注釋說明,一步步的設計可以通過參考文檔進行記錄參數,實現方法和過程結果,提高了自己對解決問題的開拓性,能夠積極的去解決問題,而不再是一味的詢問他人。同時,也對程序等于算法加數據結構這句話有了更

32、深刻的理解,實現過程有多種方法,但是好的算法和數據結構能夠讓頭腦更清晰,使代碼更加簡潔易懂。參考文獻:1姚庭寶. C+語言及編程技巧, 長沙:國防科技大學出版社,2003.10:15-212李春葆,蘇光奎. 數據結構與算法教程, 北京:清華大學出版社,2005.06:47-643劉汝佳.算法競賽入門經典第二版,北京:清華大學出版社,2014.06:13-17代碼清單:#include "Play.h"#include"Food.h"#include"Cursor.h"#include"Load.h"#include

33、"Tool.h"#include"map.h"#include"Snake.h"#include"windows.h"#include"bits/stdc+.h"using namespace std;void Playgame() int flag = 0; while(1) system("cls"); HideCursor(); srand(0); Setcmdsize(47, 25); Load ld; ld.Select(); if(ld.getkey() = 4)

34、 break; while(1) iscore(); Clear_colour(); Map mp; mp.show_time(); mp.show_map(ld.getkey(), 1, ld.getscore(); Snake sk; sk.show_snake(); Food fd; fd.show_food(sk.snake, mp.stone, 1); flag = 0; while(sk.check_snake(mp.stone) mp.show_time(); int change = sk.change_snake(); if(change = -1) if(ld.

35、show_pause() = 2) flag = 2; break; else mp.show_map(ld.getkey(), -1, ld.getscore(); sk.show_snake(); fd.show_food(sk.snake, mp.stone, -1); if(sk.eat_food(fd.Getx(), fd.Gety() sk.add_snake(); fd.show_food(sk.snake, mp.stone, 1); ld.add_score(); mp.updatescore(ld.getscore(); else sk.move_snake(); int

36、speed; if(ld.getkey() = 1) speed = 135; else if(ld.getkey() = 2) speed = 110; else if(ld.getkey() = 3) speed = 80; if(change = -2) speed = 5; Sleep(speed); if(flag = 2) break; if(ld.chooseend(ld.getscore() = 2) break; #include "Snake.h"#include"Cursor.h"#include"Tool.h"

37、#include<bits/stdc+.h>#include<conio.h>#include <thread>using namespace std;void Snake:show_snake() for(int i = 0; i < snake.size(); i+) Setcolour(14); snakei.Print_round(); void Snake:add_snake() int dir42 = 0, -1, 0, 1, -1, 0, 1, 0; int dx = snake.back().Getx() + dirflag0; int

38、 dy = snake.back().Gety() + dirflag1; snake.push_back(dx, dy); SetCursorPosition(dx, dy); Setcolour(14); snake.back().Print_round();void Snake:move_snake() add_snake(); SetCursorPosition(snake.front().Getx(), snake.front().Gety(); snake.front().Clear_point(); snake.pop_front();int Snake:check_snake(

39、vector<Cursor> v) for(int i = 0; i < v.size(); i+) if(vi.Getx() = snake.back().Getx() && vi.Gety() = snake.back().Gety() return 0; for(int i = 0; i < snake.size(); i+) int x = snakei.Getx(); int y = snakei.Gety(); if(x <= 0 | x >= 33 | y <= 0 | y >= 24) return 0; if(i

40、 != snake.size() - 1) if(x = snake.back().Getx() && y = snake.back().Gety() return 0; return 1;int Snake:change_snake() int ch, key = 0; if(kbhit() ch = getch(); if(ch = 72) if(flag = 1) return 0; if(flag = 0) return -2; else flag = 0, key = 1; else if(ch = 80) if(flag = 0) return 0; if(flag

41、 = 1) return -2; else flag = 1, key = 1; else if(ch = 75) if(flag = 3) return 0; if(flag = 2) return -2; else flag = 2, key = 1; else if(ch = 77) if(flag = 2) return 0; if(flag = 3) return -2; else flag = 3, key = 1; else if(ch = 32) return -1; return key;int Snake:eat_food(int tmpx, int tmpy) if(sn

42、ake.back().Getx() = tmpx && snake.back().Gety() = tmpy) return 1; return 0;#include"Play.h"int main() Playgame(); return 0;#include "Cursor.h"#include "Tool.h"#include<iostream>void Cursor:Print_square() SetCursorPosition(2 * x, y); std:cout << "" ;void Cursor:Print_round() SetCursorPosition(2*x, y); std:cout << "" ;void Cursor:Clear_point() SetCursorPosition(2*x, y); std:cout << " " ;void Cursor:Change_point(int x, int y) this->x = x; this->y = y;#i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論