999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C#版貪吃蛇游戲的設計與實現

2015-01-18 01:46:01商利華
電腦與電信 2015年11期
關鍵詞:游戲

商利華

(無錫城市職業技術學院,江蘇 無錫 214153)

C#版貪吃蛇游戲的設計與實現

商利華

(無錫城市職業技術學院,江蘇 無錫 214153)

本文基于C#開發環境,開發了一個界面美觀、操作簡單、功能更為齊全的貪吃蛇游戲。整個游戲包括單人游戲、聯機對戰、地圖選擇、音效播放等功能。通過本游戲的開發,達到學習C#技術和熟悉軟件開發流程的目的。

貪吃蛇;C#;GDI+

1 引言

貪吃蛇是一款經典的小游戲。游戲規則是玩家使用方向鍵操控一條長長的蛇不斷吞下金蛋,同時蛇身隨著吞下的金蛋不斷變長,當蛇頭撞到蛇身或者蛇身撞壁時則游戲結束,如圖1所示。

圖1 蛇身及貪吃蛇游戲界面

2 設計思路

貪吃蛇的核心算法是如何實現移動和吃掉道具,從而解決蛇身移動、吃到道具后身體增長、減短、反向、減速、撞墻、死亡等問題,并且能夠隨時暫?;蜷_始游戲。程序的關鍵是表示蛇的圖形以及蛇的移動。本游戲用一個小矩形表示蛇的一節身體,身體每長一節,增加一個矩形塊,蛇頭用兩節表示。移動時必須從蛇頭開始,所以蛇不能向相反方向移動,也就是蛇尾不能改作蛇頭。如果不按任何鍵,蛇自行在當前方向上前移,當游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節身體,所以當按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實現是從蛇頭的新位置開始畫出蛇。食物的出現和消失也是畫矩形塊和覆蓋矩形塊。

本游戲主要設計了snakeClass和snakeFood兩個類。snakeClass是模型類,有長度、顏色、速度、方向、狀態等屬性,有蛇的移動snakeMove()、蛇的碰撞判斷SnakeCollide()、蛇吃道具SnakeEatFood()等方法;snakeFood是食物道具類,其基本屬性包括位置及狀態,主要方法為道具的新建foodCreate()過程。道具的位置是隨機的,蛇頭每次觸碰到道具,蛇身在加長的同時成績加分數,這樣累加,直到游戲結束,在顯示結果的文本框內顯示玩家最終的成績[1]。

游戲的開始、結束、暫停以及加分功能均在窗體的代碼事件中完成定義過程。開始是由用戶通過單擊命令按鈕實現的;游戲過程中的任意時刻玩家只要按下空格鍵均可進行游戲的暫停狀態,再次按下空格游戲繼續進行;另外每吃掉一個道具,玩家的總成績會加分,最終可以在文本框控件內累積出當前玩家的最高分。

3 游戲實現

本游戲在繼承傳統同類游戲規則的基礎上,添加了地圖選擇、地圖解鎖、雙人游戲、鼠標特效等功能,游戲規則包括蛇的運動范圍、蛇的生命周期、分數統計、關卡判斷,具體設計如下:

地圖:蛇的運動范圍是一個地圖,蛇運動的地圖抽象成為一個40*40的二維整形數組,每個數組值代表一個小方塊的坐標值,這樣,蛇只能在規定好的二維數組內運動。當蛇遇到數組左右邊界值時,宣告蛇生命周期結束,貪吃蛇死亡。

蛇的生命周期:當蛇自己吃到自己身體的某一部分時,也宣告游戲結束,在程序里通過循環判斷蛇頭下一個前進方向的節點是不是蛇身上的某一部分節點即可,如果是那樣蛇死亡,否則繼續運行游戲。當蛇撞上地圖上任意一個障礙物時要么蛇死亡,否則繼續運行游戲。當蛇穿過閃電并且身體長度少于3時則蛇死亡,否則繼續運行游戲。

分數統計:分數統計算法的思想是每次蛇吃到一個果實時,相加的分數為自身的長度,這樣可以隨著游戲難度的增加,分數值也隨之增多。關卡功能設置通過與分數相關聯體現,初始化游戲分數為0,關卡由玩家自己選擇,地圖預先設置在程序中。地圖中包含了閃電,但蛇移動到閃電區域觸發閃電時會截去閃電以后的身體部分,當身體長度小于3時則判定死亡。

3.1 游戲界面設計

圖2 游戲LOGO、游戲主菜單、游戲子菜單、游戲初始化、游戲排名

本游戲在傳統貪吃蛇的功能基礎上,進行了全新的界面設計和音效設計,整款游戲界面簡潔美觀,色彩鮮明,音效豐富,部分界面效果如圖2所示。

//地圖選擇,游戲的初始化代碼,蛇的坐標初始化

3.2 蛇的顯示

游戲中完整蛇形狀的繪制:主要通過一個鏈表,其中存儲蛇身體的每一節所需的坐標,當蛇移動時,將取出尾坐標將它變為頭坐標加到頭上實現蛇的移動,并創建一個平行的鏈表存儲蛇對應每節所需顯示的圖片,再通過下述代碼實現繪制,最后就是一條完美的蛇了,效果如圖1蛇身所示。

3.3 道具

游戲中每當蛇吃到道具時,需要重置道具。道具分為八種,分別為:普通,加兩格,加三格,減一格,減兩格,加速,減速,隱身。如圖3所示。

圖3 道具

3.4 游戲開發過程中的問題

(1)畫面的閃爍問題

在游戲開發前期圖片采用多線程來分別繪制,然而在游戲編譯運行的過程中發現,GDI+如果使用多線程來繪制圖片,會產生非常嚴重的閃爍問題,后使用了雙緩沖技術,把所有的圖像刷新都放在內存中的一個緩沖區(Buffer)中,然后在游戲畫面需要刷新的時候只需輸出緩沖區中最終的圖像信息就能夠解決閃爍的問題[2-3]。下面是本游戲中采用的圖像繪制代碼:

//以Bitmap為緩沖載體:Bitmap FBuffer=new Bitmap (_ScreenWidth,_ScreenHeight);

//graphics繪制圖像到Bitmap中:Graphics FPainter= Graphics.FromImage(FBuffer);

//繪制圖片:Image map01=Image.FromFile("..//..//images// map01.png");

//繪 制 文 字:FPainter.DrawString(FMessage,FMessage-Font,FMessageBrush,new PointF(X,Y));

//最后在主程序中繪制包涵圖片信息的Bitmap:FScreen. DrawImage(FBuffer,0,0);

(2)音頻播放及內存資源占用過大的衍生問題

游戲先后使用了WindowsMediaPlayClass,winmm.dll的非托管方式來播放音頻。后來發現如果使用WindowsMediaPlayClass提供的音頻播放方法,一個音頻文件還好,多個音頻文件一起播放就會讓內存占用量顯著升高,在有的電腦上還會導致內存溢出的情況,初步認為是托管方式對于內存的回收方面并不是很完美,而且無法使用多線程播放音頻。又使用了winmm.dll的非托管播放方式,發現內存占有量顯著降低,但是沒有前者所提供的音量操控等方法。最后取彼之長補彼之短,使用WindowsMediaPlayClass播放背景音樂這種非隨機事件,用winmm.dll來播放菜單音效這種隨機高頻度事件,來達到中和的效果。

4 結語

本文開發的升級版貪吃蛇游戲除實現基本功能外,附加了許多趣味性新功能,牽涉到了圖形界面的顯示與更新、數據的收集與更新等,對開發類似的GDI+游戲有很好的借鑒作用。

[1](英)夏普.Visual C#2005從入門到精通[M].周靖,譯.北京:清華大學出版社,2006.

[2]楊睿娜.C#開發貪食蛇游戲[J].電腦知識與技術,2011(18).

[3]雷麗娟,鄭永彬.使用Java制作貪吃蛇游戲[J].科技視界,2013 (4).

Design and Implementation of Snake Game in C#Version

Shang Lihua
(Wuxi City College of Vocational Technology,Wuxi 214153,Jiangsu)

In this paper,based on C#development environment,a snake game is developed with beautiful interface,simple operation and complete functions.The game includes a single player game,online game,online map selection,audio playback and other functions.Through the development of the game,it can achieve the purpose to learn C#technology and familiar with the software development process.

snake game;C#;GDI+

TP311.52

A

1008-6609(2015)11-0065-03

商利華,女,江蘇無錫人,本科,講師,研究方向:.NET平臺開發,數據庫應用。

猜你喜歡
游戲
游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
第八章 直接逃出游戲
小學科學(2015年6期)2015-07-01 14:30:14
主站蜘蛛池模板: 久久久久夜色精品波多野结衣| 四虎永久在线视频| 日本欧美一二三区色视频| 久久动漫精品| 日本AⅤ精品一区二区三区日| 免费在线看黄网址| 国产探花在线视频| 国产大全韩国亚洲一区二区三区| 日韩东京热无码人妻| 青青青国产精品国产精品美女| 看你懂的巨臀中文字幕一区二区| 亚洲成人精品久久| 国产欧美在线观看一区| 2020久久国产综合精品swag| 狼友av永久网站免费观看| 日韩黄色大片免费看| 亚洲开心婷婷中文字幕| 国产流白浆视频| 美女扒开下面流白浆在线试听| 视频二区亚洲精品| 欧美精品不卡| 亚洲精品天堂自在久久77| 国产精品免费电影| 国产高清毛片| 日本一区二区三区精品视频| 国产网友愉拍精品视频| 免费又爽又刺激高潮网址| 九色在线观看视频| 精品免费在线视频| 日韩123欧美字幕| 亚洲欧美h| 日韩欧美国产另类| 在线免费无码视频| 国产在线一区视频| 国产欧美性爱网| 一区二区理伦视频| 国产另类视频| 美女无遮挡免费视频网站| 久久中文字幕2021精品| 精品国产污污免费网站| 欧美亚洲另类在线观看| 精品国产污污免费网站| 国产免费久久精品99re不卡| 国产精品美人久久久久久AV| 亚洲中文精品人人永久免费| 免费一级无码在线网站| 国产精品美女自慰喷水| 亚洲专区一区二区在线观看| 亚洲色图欧美激情| 国产熟睡乱子伦视频网站| 在线观看免费黄色网址| 日韩AV手机在线观看蜜芽| 久草国产在线观看| 日韩无码白| 国产精品视频3p| 色综合天天综合中文网| 国产成人高清在线精品| 久久美女精品国产精品亚洲| 国产一区二区丝袜高跟鞋| 欧美日韩一区二区在线播放| 伊人久久大香线蕉aⅴ色| 99999久久久久久亚洲| a亚洲天堂| 色爽网免费视频| 日韩在线成年视频人网站观看| 又大又硬又爽免费视频| 中文字幕第1页在线播| 成年女人a毛片免费视频| 国产精品久久久久婷婷五月| 国产女人18毛片水真多1| 人人91人人澡人人妻人人爽| 婷婷五月在线视频| 伊人久久大香线蕉成人综合网| 亚洲国产成人自拍| 成年人福利视频| 亚洲乱码视频| 天天摸夜夜操| 久久www视频| 国产成人乱无码视频| 欧美国产综合色视频| 国产乱子伦精品视频| 日韩免费视频播播|