貪食蛇遊戲的結構程式設計流程

2022-04-01 23:21:12 字數 1416 閱讀 5126

關於遊戲的介紹:

貪食蛇遊戲是一條不停游動的蛇不斷的捕食來達到自身的增長,但是若蛇碰到自身的身體或者碰到了任何障礙物,則遊戲結束。

在該篇文章中,我並不討論遊戲的規則,而只是實現乙個游動的蛇。通過該實現來看關於物件導向的設計。

尋找規律,建立物件模型:

首先從物理的角度來分析蛇得運動規律。它是蠕動的,像水一樣流動。他有個特性就是身體的每乙個點都經過他頭部所在的點,他每乙個時刻骨節所要運動的目的地是他前乙個骨節所在的位置。

不難看出,其中的物件模型為:蛇,骨骼,骨節,頭。抽象的介面為:蛇,骨骼,骨節,頭,圖元。

結構圖:

介面結構圖

物件結構圖

給介面新增行為:

圖元(graphicobject)

繪畫:進行圖元自身的繪畫操作

當前矩形:得到圖元當前所在的矩形,也可考慮使用region,這樣使得對圖元範圍得描述更加具體。

骨節(condyle)

前乙個骨節:提供前序訪問

後乙個骨節:提供後序訪問

流動:進行骨節運動詭計得計算。

骨骼(cadre)(管理骨節鏈)

得到頭:得到蛇頭

得到尾:得到蛇尾

新增骨節:在骨節鏈中新增骨骼

刪除骨節:在骨節鏈中刪掉指定骨節

頭(head)

方向:能夠設定和訪問當前運動方向。

蛇(snake)

增長:蛇進行自身得增長

完善模型,引入訪問者模式

存在的問題:

當前是由具體的骨骼物件來負責圖元的繪畫以及處理流動的,而骨骼只是管理骨節,沒有提供任何訪問骨節的方法,我們應該怎樣訪問骨節呢?比如我們要每個骨節畫出自己的形態,我們可能會這樣做。在骨骼上提供乙個繪畫方法,然後通過遍歷骨節鏈,呼叫每個骨節的繪畫方法。這樣似乎可以解決問題。那麼,我們要進行骨節流動計算呢?我們再在骨骼上提供流動方法,然後同樣的遍歷骨節,呼叫每個的流動方法。我們要是加入統計骨節個數功能呢?我們要是加入其他的需要遍歷骨骼的方法呢?……

這樣做的缺點是什麼?

1、 相似的**有多份

2、 如果骨節的訪問結構發生變化,後果會怎樣?

3、 有新功能需要遍歷骨節鏈該怎麼辦?

這樣會迫使我們拷貝**.

解決辦法,引入訪問者模式:

新增加介面如下:

加入行為:

訪問者:(空,無方法,屬性)

被訪問者:

接受訪問者

骨節訪問者:繼承自訪問者

訪問骨節

完整的結構圖:

介面結構圖:

物件結構圖:

小遊戲,貪食蛇

include include include include struct coor struct snake handle hconsole getstdhandle std output handle 獲取標準輸出控制代碼 int food x,food y 食物座標 int score 0 ...

as貪食蛇小遊戲(二)

先在建構函式裡面新增監聽事件 stage.addeventlistener keyboardevent.key down,onkeydownhandler snakegame類裡面新增2個全域性變數 private varisstop boolean true private varisover b...

貪食蛇的程式

無聊,分析了乙個用c語言寫的貪食蛇的程式。寫的非常簡練,就是函式的名字起得不是很好。include include define kuan 20 地圖的大小 int iz kuan kuan 地圖 struct jiedian 蛇的結點位置,使用鍊錶結構來儲存蛇身上各結點的位置 point ptsh...