基于Python的貪吃蛇游戲設計與實現(xiàn)_第1頁
基于Python的貪吃蛇游戲設計與實現(xiàn)_第2頁
基于Python的貪吃蛇游戲設計與實現(xiàn)_第3頁
基于Python的貪吃蛇游戲設計與實現(xiàn)_第4頁
基于Python的貪吃蛇游戲設計與實現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、緒論(一)研究現(xiàn)狀與背景游戲是如今社會非常火熱的娛樂活動之一,特別是在進入網絡時代之后,各種各樣的游戲如雨后春筍般的涌現(xiàn)。有些游戲如日中天,讓游戲公司賺的盆滿缽滿,而有些游戲的壽命卻如曇花一現(xiàn)般短暫,隱于塵埃。但是不管哪款游戲,都一定有它存在的價值,或是推動游戲行業(yè)的發(fā)展,或是給人們帶來歡樂。當然,對于人們來說,影音視頻、電子閱讀、K歌娛樂,旅游都是不錯的娛樂選擇。但是隨著現(xiàn)代化建設的不斷加快,這些傳統(tǒng)的娛樂方式,早已滿足不了人們的需求,而游戲也就是在這個時候漸漸走入人們的視野。不管是出于打發(fā)閑暇時光的想法,還是放松在忙碌一天之后的疲憊身心,游戲已經是很多人的第一選擇。換一種說法,現(xiàn)在年輕人的生活之中也越來越離不開游戲。早在1976年,美國街機游戲生產商\t"/item/%E8%B4%AA%E9%A3%9F%E8%9B%87/_blank"Gremlin便推出了在后來引領了游戲行業(yè)的這么一款經典街機游戲,Blockade。玩法就如同它的名字一樣,封鎖,屏幕上會有兩個游戲角色,而兩位玩家分別去控制自己角色的左右行進方向,經過的地方則會生成障礙物,誰先碰到障礙物則誰輸掉了游戲。Blockade游戲一經推出便受到大眾追捧,游戲公司紛紛效仿開發(fā)類似游戲,也出現(xiàn)在各種操作平臺上。但是真正讓這種游戲形式家喻戶曉,走向世界的還是諾基亞公司在21年之后推出的手機產品上搭載的貪吃蛇游戲——Snake。貪吃蛇的規(guī)則是,用鍵盤操控屏幕里小蛇的行進方向去吃豆子,吃的豆子越多小蛇的身體則會越來越長,蛇頭觸碰到蛇身或是障礙物時則游戲結束。由于貪吃蛇游戲玩法簡單、硬件要求低,無論是上廁所時、排隊時、等待汽車時,它都能滿足各種需求場景下的應用。而在那個游戲行業(yè)競爭并不大的時代,使得它能做到人盡皆知。相對于其它游戲來說,貪吃蛇是一個帶有悲劇性的游戲。很多游戲都是的規(guī)則是玩家打到通關,以游戲操縱者的勝利而告終,但是貪吃蛇確是以小蛇的死亡結束游戲。不管你玩法多么嫻熟,有多高超的技藝,隨著小蛇的身體增長只會離死亡越來越近,離游戲的結束也越來越近,在蛇身越來越長的時候肯能你考慮的不再是如何去吃到豆子,而是如何避免蛇頭碰到蛇身或是障礙?;蛟S貪吃蛇想告訴我們的道理是不要疲于奔命,要做到生活和事業(yè)兼顧。樹大招風,福兮禍倚,隨時面對生活中可能發(fā)生的一切。我相信每款游戲都能給我們帶來一定的積極意義。(二)行性分析科學性、預見性、公正性、可靠性是一個項目可行性分析必須具備的特點。但是由于此次的項目并不會上線或作商用盈利,所以本文的可行性分析僅對我個人而言闡述。本次畢業(yè)設計的可行性分析大致包括以下三個方面。經濟可行性,此次畢業(yè)設計開發(fā)的是一個小型單機貪吃蛇游戲系統(tǒng),對于現(xiàn)在的個人筆記本電腦硬件來說完全可以承擔此次系統(tǒng)開發(fā)的語言編寫、測試以及運行等任務。而開發(fā)人員分配方面,個人足以完成此次系統(tǒng)開發(fā)的全部任務,所需預算不大。綜上,此次的系統(tǒng)設計經濟可行性通過。技術可行性指的是開發(fā)者所擁有的技術以及資源是否能滿足項目的開發(fā)任務。此次貪吃蛇小游戲的開發(fā)語言,我選擇的是Python。Python是一種面向對象的編程語言,同時具有低級語言與高級語言的優(yōu)點[1]。整個系統(tǒng)完全可以依靠Python強大的標準庫以及第三方庫來實現(xiàn),它在代碼的模塊化要求上也有一定的保證,方便游戲在各個平臺上的移植,減少不必要的工作量,也有利于代碼的讀寫與修改。本系統(tǒng)所需語言技術開發(fā)層面不高,而且Python語法簡單明了,開發(fā)人員完全可以單獨實現(xiàn)整個系統(tǒng)的開發(fā)。運行可行性,單機版貪吃蛇小游戲所消耗的各類資源非常小。無論是公共場所的電腦還是個人電腦,以及移植到其他類型的平臺上,在軟件和硬件上都能夠滿足運行所需要的基本條件。而且游戲操作簡單,玩家只需在知道游戲規(guī)則的情況下便能進行游戲。二、需求分析(一)功能性需求不管一款什么樣的軟件都應該實現(xiàn)它相對的功能,而此次的貪吃蛇作為一款小型的單機游戲作用就是為人們提供多樣化休閑娛樂的選擇之一。簡單性,毋庸置疑這是貪吃蛇應有的特點,不論是操作簡單還是游戲內容簡單,都能使得它能面向各個年齡階段的人群。對于那些全身心投入工作、整日奔波的人來說,他們不可能投入過多的時間和精力在游戲上,所以貪吃蛇這類小游戲是一個不錯的選擇,也能滿足其娛樂需求。也正是因為簡單性,貪吃蛇沒有像其他大型游戲的趣味性和豐富度。所以,為了增加游戲的競爭力,本次的系統(tǒng)將加入游戲難度選擇模塊。(二)非功能性需求軟件產品開發(fā)設計不僅僅只是把滿足用戶業(yè)務需求作為第一要素,而且還應該具備其他一些重要的特性,比如系統(tǒng)的可靠性、可擴充性、適應性以及性能等。而這就是非功能性需求。貪吃蛇作為此次畢業(yè)設計的論題,它應該具備的就是可靠性和比較好的系統(tǒng)UI界面。對于可靠性來說,此次運用的是Python來編寫系統(tǒng),所以不管是代碼的維護性還是程序響應速度都能夠得到很好的保證。而一個好的系統(tǒng)UI界面能夠讓用戶在除了享受游戲帶來的樂趣之外,帶來更好的一個觀感,也從另一方面增加了產品的競爭力。三、游戲及開發(fā)工具簡介(一)游戲簡介本次設計的游戲——貪吃蛇,是一種消遣益智類的小游戲。在用戶進入游戲開始界面時選擇對應游戲難度即可開始游戲,游戲之初是一條很短的小蛇在屏幕上行進,而用戶則是通過方向鍵控制小蛇的方向去吃掉游戲中的食物,吃到的食物越多蛇的身體就會越長、分數也會越高。游戲進行到中后期時,越來越長的小蛇更需要用戶小心的操控,不僅在給玩家?guī)硪欢ǖ膴蕵沸缘耐瑫r也是對大腦反應速度的一種鍛煉。當蛇頭觸碰到蛇身或是屏幕邊緣時,則游戲結束。(二)Python簡介1.Python的運行原理作為一種解釋型腳本語言,Python的運行原理和C與C++相比大不相同。那解釋型腳本語言又是什么呢?大家都知道高級語言對于計算機而言是不能直接識別的,所以當開發(fā)者想要運行一個由高級語言編寫的程序的時候就需要一個合適的“翻譯器”來作為一個中間介質,把編寫程序的高級語言轉變成計算機能直接識別的機器語言。這個轉換過程也大致可以分為兩類,一是編譯,二是解釋[2]。在我們運行以.py結尾的Python程序時,Python解釋器會把由高級語言組成的源代碼編譯成字節(jié)碼然后提交到PVM(PythonVirtualMachine,Python虛擬機,它是Python的運行引擎)中做進一步處理之后執(zhí)行程序,最后由Python輸出結果[3]。運行原理如圖3-1所示。圖3-1Python運行原理圖2.Python的特點“簡單、明確、優(yōu)雅”是Python遵循的設計理念[4],相較于其他編程語言更容易上手,代碼也更具可讀性。因為Python開源的本質,使得它的移植性很高,開發(fā)人員只需做少許修改便可將程序移植到其它平臺,這包含了市面上大部分主流平臺,如Windows、Linux、OS/2、FreeBSD、Solaris、VMS等。其次,Python具有良好的可擴展性,如果開發(fā)者由于某種原因并不想程序中的部分算法被公開,則這部分可以用C或C++來編寫,它們同樣可以在Python程序中運行,要是想提高某一段代碼的運行速度也可以使用同樣的方法來實現(xiàn)[5]。再者,Python也因其可嵌入性被人們經常戲稱為膠水語言,不同語言編寫的不同模塊都能通過Python而結合在一起,從而給用戶提供高效能的腳本功能,而在那些真正需要運用其他語言優(yōu)化的地方,Python都有強大的庫和API支持[6]。Python豐富的庫更是讓其成為“黃金語言”的一大因素,除了內置的標準庫以外,Python社區(qū)更是提供了海量的第三方庫Twisted、wxPython、Python圖像庫等。這些庫在處理電子郵件、文檔生成、正則表達式、密碼系統(tǒng)、數據庫、圖形用戶界面(GUI)、FTP、單元測試等眾多工作上提供了不少便攜。這也是為什么眾多項目選擇Python作為核心語言的原因,它被廣泛運用于大數據分析、圖像處理、爬蟲、Web、自動化測試等領域。我相信當大家熱衷于某一款軟件時,并不單單是因為它所帶來的各種利好,還因為有一群與你志同道合的人,你們可以探討使用時的心得、可以暢想軟件的迭代。人生不是孤獨的旅行,編程也不會是。每個人都會在項目開發(fā)中遇到不同的問題,大多數程序員都渴望有那么一個互幫互助、聯(lián)系緊密的社區(qū)或是平臺。程序員可以在這里向解決過類似問題的人尋求幫助或是建議,而Python社區(qū)對我這種初學者而言無疑是堅強的后盾[7]。3.PyGame簡介PyGame是Python眾多庫中的一個,PyGame可以用來繪制圖形、實現(xiàn)動畫以及讓游戲按照設定幀率平穩(wěn)運行。它是基于SDL(SimpleDirectMediaLayer)寫就的游戲庫。而與DirectX(微軟公司創(chuàng)建的多媒體營運程序接口)相當的SDL的用途是用來控制多媒體的跨平臺庫,被用于數百種游戲之中。開發(fā)者在最初的目標是讓做困難的事情變簡單,讓容易的事情變得更容易,于是將SDL和Python兩者結合起來組建成了現(xiàn)在的PyGame。由于PyGame讓游戲變得動態(tài)起來所采用的是幀更新和輪詢的方式(幀更新就是不斷地更新畫面,輪詢則是不斷地詢問用戶輸入),在繪制比較復雜的圖像的時候會出現(xiàn)“卡幀”現(xiàn)象,所以PyGame并不適合制作大型游戲以及3D游戲,而對于2D游戲則能起到不小幫助[8,9]。本次貪吃蛇游戲系統(tǒng)設計所需要用到的框架以及常用函數都包含在PyGame之中,處于開發(fā)時間成本的考慮,本項目會直接調用PyGame。PyGame的使用步驟如下:首先是導入PyGame庫及其中所包含的常量至Python程序中,然后經過初始化之后我們就可以在代碼中訪問并調用PyGame中的所有資源。importpygame#導入pygame模塊frompygame.localsimport*#導入pygame中的常量pygame.init()#初始化pygame(三)PyCharm簡介所謂工欲善其事必先利其器,PyCharm從眾多程序開發(fā)應用中脫穎而出。它不僅擁有其他類似IDE的功能,如調試、項目管理、語法高亮、版本控制、單元測試等,還提供了供Web開發(fā)人員使用的Django框架,大大增加了開發(fā)人員的生產效率[10]。在本次的系統(tǒng)開發(fā)中可能用到最多的兩個功能就是代碼補全和智能重構,所以PyCharm在本次項目中也起到不小作用。四、概要設計(一)功能介紹本貪吃蛇游戲系統(tǒng)的實現(xiàn)就是在屏幕顯示區(qū)域內繪制出一條小蛇,同時在與小蛇身體不重合的屏幕顯示區(qū)域內繪制出一個食物,游戲玩家通過鍵盤上的方向鍵來操控小蛇的行進方向去吃掉食物,食物被吃掉后又會在顯示區(qū)域內隨機出現(xiàn)另一個食物,而小蛇每吃下一個食物身體便會增長一段,如此反復,蛇越長時則對游戲玩家來說越難操作。當蛇的頭部撞擊到屏幕邊緣或是蛇身的任意一個部位的時候,游戲結束[11]。貪吃蛇游戲實現(xiàn)的關鍵就在于蛇身圖形組建和蛇行進軌跡的繪制。我們可以通過畫小矩形塊(rect屬性)的方式來畫出小蛇,在小蛇的每次移動的時候,刪掉蛇身的最后一個矩形塊,在蛇頭增加一個新的矩形塊,就相當于把蛇的最后一個矩形塊加在蛇頭的位置。小蛇每移動一個單位,屏幕就重新繪制一次,這樣就可以實現(xiàn)小蛇行進的動態(tài)效果。而在蛇吃下食物的時候,蛇頭覆蓋食物,在蛇尾加上一個小矩形塊,同時利用random模塊隨機繪制另一個食物(上一個食物此時消失)[12]。(二)程序流程設計1.程序流程圖本次設計的游戲程序運行的流程框圖如圖4-1所示。圖4-1程序流程框圖2.界面設計首先定義程序運行界面的大小,背景色等,便于在各個界面顯示統(tǒng)一,為玩家提供更好的觀感。游戲界面分為:開始界面、游戲界面和結束界面。在開始界面時,程序運行窗口左上角顯示自定義的游戲名稱,居中位置顯示導入的背景圖片,下方顯示玩法說明及操作指南;在游戲界面時,整個程序窗口用于游戲,小蛇可在窗口中任意行進,食物顯示為藍色圓形,右上角顯示玩家分數,每吃掉一個食物增加一分;當游戲結束時,顯示結束界面,窗口居中位置為“GameOver”字樣圖片,下方則顯示游戲提示“請按任意鍵重新游戲或Esc鍵退出游戲”。3.功能設計除了游戲的基本功能實現(xiàn)之外,為了增加游戲的可玩性設置了F1加速、F2減速、F3無敵等功能。在游戲中還添加了暫停功能,玩家可通過SPACE鍵來暫停/繼續(xù)游戲。每當玩家吃到5個食物時隨機生成一堵長度在1-5之間的障礙物,而且速度也會增加。在游戲結束時,可按除ESC以外的任意鍵來重新開始游戲,按ESC鍵則退出程序。(三)游戲過程游戲開始時小蛇會有一個初始方向,如果玩家不輸入有效的方向操作,小蛇則會一直按次方向前進,而且小蛇的不能反方向移動,也就是說不能將蛇尾當作蛇頭來移動。當用戶鍵入有效的方向之后,蛇頭會率先朝玩家給定的方向移動,而蛇身隨著蛇頭的移動而移動(覆蓋此前的軌跡)。貪吃蛇移動實現(xiàn)的方式就是在移動的方向繪制一個矩形塊當作蛇頭,而蛇尾則刪掉一個矩形塊,整條蛇重新繪制刷新在屏幕中,這樣看起來蛇就向前移動了一個單位的距離。在本系統(tǒng)中游戲的碰撞檢測包含了三種情況:一是蛇吃到食物,此時蛇身增加一個矩形塊;二是蛇頭和蛇身的碰撞,此時游戲結束;三是蛇頭與障礙物的碰撞,正常情況下游戲也會結束(無敵模式下貪吃蛇不會死亡)。五、系統(tǒng)實現(xiàn)本次系統(tǒng)設計用到的主要模塊及作用如下表5-1所示。表5-1貪吃蛇系統(tǒng)主要模塊 模塊作用pygamePython的跨平臺模塊,用于游戲開發(fā)os操作系統(tǒng)相關的操作和調用sys系統(tǒng)信息和接口random生成隨機實數time時間模塊,控制游戲幀率(一)功能概覽本次系統(tǒng)設計用到的主要函數及作用如下表5-2所示。表5-2貪吃蛇系統(tǒng)主要函數函數作用main()主函數,控制游戲進程running_game游戲運行主體draw_food畫出食物draw_snake畫出貪吃蛇move_snake貪吃蛇的移動snake_is_alive貪吃蛇的碰撞檢測get_random_location生成隨機食物show_start_info顯示開始信息show_gameover_info顯示結束信息event.get()監(jiān)聽鍵盤事件draw_wall生成障礙物(二)構建開始界面游戲的開始界面應該首先定義好窗口的大小,所需要用到的顏色、字體,導入歡迎界面的背景圖片。接下來就是界面的布局以及鍵盤和鼠標的監(jiān)聽檢測。主要代碼如下:defshow_start_info(screen):#設置游戲提示,導入背景圖片font=pygame.font.Font(base+'\\myfont.ttf',40)tip=font.render('請選擇游戲難度',True,(65,105,225))gamestart=pygame.image.load(base+'\\111.jpg')#將各個模塊繪制到相應位置screen.blit(gamestart,(140,30))screen.blit(tip,(240,550))pygame.display.update()#定義蛇的初始速度globalsnake_speed#鼠標以及鍵盤的監(jiān)聽事件,在開始界面按下除了ESC鍵之外的任意鍵即可開始游戲。鼠標點擊按鈕也會立即開始游戲,且小蛇擁有不同的行進速度。whileTrue:foreventinpygame.event.get():ifevent.type==QUIT:quitgame()elifevent.type==KEYDOWN:if(event.key==K_ESCAPE):quitgame()else:returnelifevent.type==pygame.MOUSEBUTTONDOWN:ifb1.pressed(pygame.mouse.get_pos()):snake_speed=5returnifb2.pressed(pygame.mouse.get_pos()):snake_speed=10returnifb3.pressed(pygame.mouse.get_pos()):snake_speed=15return(三)蛇與食物的繪制因為在游戲運行主體的函數中已經定義好了使用random()函數生成的貪吃蛇、初始坐標和食物坐標,這一段只需將貪吃蛇和食物在屏幕上使用.draw屬性繪制出來并給蛇和食物加上顏色即可。#定義draw_snake()函數將貪吃蛇畫出來defdraw_snake(screen,snake_coords):#設定蛇的位置forcoordinsnake_coords:x=coord['x']*snake_sizey=coord['y']*snake_size#蛇身的第一層顏色wormSegmentRect=pygame.Rect(x,y,snake_size,snake_size)pygame.draw.rect(screen,Green,wormSegmentRect)#蛇身的第二層顏色wormInnerSegmentRect=pygame.Rect(x+4,y+4,snake_size-8,snake_size-8)pygame.draw.rect(screen,blue,wormInnerSegmentRect)#食物的坐標位置等于食物的相對坐標乘以蛇的單位大小defdraw_food(screen,food):x=food['x']*snake_sizey=food['y']*snake_sizeappleRect=pygame.Rect(x,y,snake_size,snake_size)#使用.draw屬性畫出食物pygame.draw.rect(screen,Red,appleRect)(四)蛇的移動這里只對蛇的行進坐標的改變做出說明,蛇的行進方向在其他模塊中做了鍵盤監(jiān)聽檢測的對應定義。如果蛇的移動方向是向上(這里的“上”指的是玩家視角的“上”),則蛇的新頭坐標x值不變,y減一;如果蛇的移動方向是向下,則蛇的新頭坐標x值不變,y加一;如果蛇的移動方向是向左,則蛇的新頭坐標x值減一,y不變;如果蛇的移動方向是向右,則蛇的新頭坐標x值加一,y不變。defmove_snake(direction,snake_coords):ifdirection==UP:newHead={'x':snake_coords[HEAD]['x'],'y':snake_coords[HEAD]['y']-1}elifdirection==DOWN:newHead={'x':snake_coords[HEAD]['x'],'y':snake_coords[HEAD]['y']+1}elifdirection==LEFT:newHead={'x':snake_coords[HEAD]['x']-1,'y':snake_coords[HEAD]['y']}elifdirection==RIGHT:newHead={'x':snake_coords[HEAD]['x']+1,'y':snake_coords[HEAD]['y']}#插入蛇新頭的坐標,以實現(xiàn)蛇的動態(tài)效果snake_coords.insert(0,newHead)(五)游戲運行主體在running_game()函數中定義了蛇的初始位置及初始方向、速度。還對鍵盤監(jiān)聽事件做了對應的綁定,四個方向鍵控制蛇的前進方向,在游戲中按下SPACE鍵可使游戲暫?;蚶^續(xù),按下ESC鍵退出程序。F1貪吃蛇加速,F(xiàn)2貪吃蛇減速,F(xiàn)3開啟/關閉無敵模式。同時,running_game()函數也是整個游戲的運行主體,集合了程序中的大部分函數來控制游戲的進程。defrunning_game(screen,snake_speed_clock):#貪吃蛇的生成:貪吃蛇的的初始位置由random()生成,并且是在坐標在3與地圖的寬高間隔8個單位的位置之內,定義貪吃蛇的初始長度為3節(jié)startx=random.randint(3,map_width-8)starty=random.randint(3,map_height-8)snake_coords=[{'x':startx,'y':starty},{'x':startx-1,'y':starty},{'x':startx-2,'y':starty}]#開始時向右移動,初始化蛇的行進速度direction=RIGHTfood=get_random_location()globalsnake_speed#如果在游戲不是暫停的情況下按下“ESC”鍵則退出游戲whileTrue:pause=Falseforeventinpygame.event.get():ifevent.type==QUIT:quitgame()#使用鍵盤監(jiān)聽檢測事件實現(xiàn)對應按鍵的功能綁定elifevent.type==KEYDOWN:if(event.key==K_LEFTorevent.key==K_a)anddirection!=RIGHT:direction=LEFTelif(event.key==K_RIGHTorevent.key==K_d)anddirection!=LEFT:direction=RIGHTelif(event.key==K_UPorevent.key==K_w)anddirection!=DOWN:direction=UPelif(event.key==K_DOWNorevent.key==K_s)anddirection!=UP:direction=DOWNelifevent.key==K_ESCAPE:quitgame()elifevent.key==window.EVENT_ADD:snake_speed=snake_speed+1elifevent==window.EVENT_SUB:snake_speed=snake_speed-1#無敵模式的開啟/關閉elifevent==window.EVENT_KING:ifsnake.s_king==True:snake.s_king=Falseelse:snake.s_king=Trueelifevent.key==K_SPACE:whilenotpause:foreventinpygame.event.get():ifevent.type==KEYDOWN:ifevent.key==K_SPACE:pause=notpause#調用move_snake()函數來實現(xiàn)貪吃蛇的移動move_snake(direction,snake_coords)ret=snake_is_alive(snake_coords)ifnotret:breaksnake_is_eat_food(snake_coords,food)screen.fill(BG_COLOR)draw_snake(screen,snake_coords)draw_food(screen,food)draw_score(screen,len(snake_coords)-5)pygame.display.update()#控制游戲幀率,這里也就是貪吃蛇的速度,因為程序繪制的速度越快貪吃蛇看起來運動地也就越快snake_speed_clock.tick(snake_speed)5.6碰撞檢測碰撞檢測分為三種情況(蛇與障礙物的碰撞、蛇頭與蛇身之間的碰撞、蛇頭吃到食物時的碰撞),而這里只對貪吃蛇存活狀態(tài)產生影響的兩種情況進行了定義,也就是蛇碰到障礙物和蛇碰到自己的身體,蛇吃到食物的碰撞在snake_is_eat_food()中定義。defsnake_is_alive(snake_coords):#蛇的存活狀態(tài)tag=True#如果蛇頭坐標中的x或是y與地圖邊緣的坐標相等的話就判定蛇撞墻了,此時將蛇的存貨狀態(tài)tag的值改為Falseifsnake_coords[HEAD]['x']==-1orsnake_coords[HEAD]['x']==map_widthorsnake_coords[HEAD]['y']==-1or\snake_coords[HEAD]['y']==map_height:tag=False#蛇自身的碰撞檢測則是蛇頭的坐標x,y不能與蛇身坐標中的任何一個相等forsnake_bodyinsnake_coords[1:]:ifsnake_body['x']==snake_coords[HEAD]['x']andsnake_body['y']==snake_coords[HEAD]['y']:tag=Falsereturntag6系統(tǒng)測試6.1開始游戲游戲開始的時候會在程序窗口內隨機位置生成一個長度為5的貪吃蛇,蛇頭為醒目的紅色,而蛇身是綠色。同樣地,會在地圖內隨機生成長度在1-5之間的黑色障礙物,普通模式下貪吃蛇觸碰到障礙物則游戲結束。為了區(qū)分貪吃蛇和食物,食物是用圓形的形式畫出,并采用藍色。游戲開始界面截圖如圖6-1所示。圖6-1游戲開始界面6.2生成障礙物為了增加游戲的可玩性,特別加入了生成障礙物的功能,障礙的生成位置隨機,長度在1-5個小方塊,以黑色填充。每當玩家吃到5個食物時,障礙物就會多一個,并且貪吃蛇的行進速度也會增加一級。當玩家需要調節(jié)速度的時候,可通過F1加速、F2減速來實現(xiàn)。障礙物的固定長度為5,但是在生成時碰到屏幕邊緣時會停止生成,所以就會有長度1-5的障礙物出現(xiàn)的情況,也更加增添了游戲的豐富性。游戲生成障礙物界面截圖如圖6-2所示。(1) (2)圖6-2生成障礙物界面6.3無敵功能考慮到貪吃蛇會隨著吃到的食物變得越來越長,速度也越來越快,玩家不便控制很容易會導致游戲結束。所以特別加入了無敵功能,玩家只需按下F3鍵則可開啟/關閉無敵模式。在無敵模式下,貪吃蛇可在地圖中任意穿行,碰到障礙物和蛇身也不會死亡。游戲無敵功能界面截圖如圖6-3所示。(1)(2)圖6-3無敵功能界面6.4系統(tǒng)測試程序運行良好,運行中不報錯、不卡頓,本系統(tǒng)對電腦內存以及CPU的占用率也比較小,滿足了貪吃蛇游戲隨時運行的特點,且基本能在每臺電腦端運行,對硬件設備要求較小。系統(tǒng)對CPU以及內存的占用截圖如圖6-4所示。圖6-4CPU以及內存的占用七、優(yōu)化與總結(一)優(yōu)化升級設想此次貪吃蛇游戲系統(tǒng)的設計只是簡單的實現(xiàn)了游戲的運行與部分功能,在試玩過市面上其他版本的貪吃蛇之后,我覺得在升級優(yōu)化時可以加入關卡設置,選擇不同的關卡則在游

溫馨提示

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

評論

0/150

提交評論