物件導向的方法在遊戲中的應用的一個例子(上)(轉)

post0發表於2007-08-12
物件導向的方法在遊戲中的應用的一個例子(上)(轉)[@more@]

  接觸過計算機高階語言的人都聽說過物件導向程式設計(即OOP),但究竟什麼是物件導向程式設計呢?這個問題就不是剛剛接觸計算機的初學者所能完全理解的了.為了幫助大家理解物件導向的程式設計,我們這裡用VB作為開發工具,以一個相對較小的例子來看一看VB中怎樣使用物件導向的程式設計方法。

  

  什麼是物件導向的程式設計方法呢?

  

  總的說來物件導向的程式設計方法的核心就是:封裝性、繼承性和多型性。下面我們作一個簡單的介紹:

  

  封裝性也就是說要將物件的資訊(也就是物件的屬性)和物件所能執行的動作(也就是物件的方法)包裝起來,這樣就可以讓使用者可以用深入不瞭解內部的運作原理,就可以對其進行操作。舉個簡單的例子,在v b中我們要使用的一個控制元件,我們不必瞭解其中給一個屬性是怎樣傳給物件的,也不要知道當我們呼叫一個物件控制元件的方法時,物件在其中為我們作了些什麼,我們所要作的僅僅是要符合它的使用規範對其進行簡單的使用即可。

  

  繼承性則是說,一個物件可以在一個或多個已有物件的基礎上,透過繼承這些物件具有的屬性,方法和事件,並新增自己的屬性方法和事件,使其功能更加強大。而其中對已有物件的屬性,方法和事件的擁有,就是繼承性的精髓所在。比如在V B中有一個TEXTBOX控制元件可以處理簡單的文字資訊,同時還有一個RICH TEXTBOX控制元件,很明顯後一個控制元件是在前一個的基礎上建立起來的,但在功能上後一個除了具備前一個控制元件的功能外,還具有遠遠強於前者的更加豐富的功能。

  

  多型性,簡單的說,就是在許多種不同的物件中,可以使用相同的方法,但是同樣的方法能為各個物件執行不同的任務.也就是說程式能在執行時根據不同的物件,執行是用於當前物件的方法.例如,幾乎所有的控制元件都包含一個move方法.當一個控制元件呼叫這個方法時,程式能夠準確的知道是那一個控制元件在使用這個方法,從而執行此控制元件特定的任務.

  

  可以看到物件導向的程式設計方法關鍵就是為了提高程式碼的可重用性,從而減少程式碼的長度,減輕程式設計師的負擔。

  

  那麼在V B 中怎樣進行物件導向的程式設計呢?其實說出來也很簡單。在V B的工具箱中的每一個控制元件從實質上說都是一個類,其中包含了這個類的所有的屬性,事件和方法。當你將一個控制元件放置在V B工程的窗體上時,開發工具自動為你建立這個控制元件類的一個例項,透過這個例項你可以方便的使用它的另一種屬性,事件和方法。另一種,就是不使用可見的控制元件而是從“工程”中“引用”一個類的,並在程式碼中顯示的定義這個類的一個例項,就可以想用控制元件一樣對其屬性,事件和方法進行靈活的控制了。

  

  我們這篇文章將用類的方法完成一個掃雷遊戲的編寫,更主要的是在其中我們可以看到怎樣建立一個自己的類,以及在工程中使用這個類。

  

  一、我們現來看一看怎樣建立一個類.

  在VB中建立一個類要使用Class Module(類模組).一個類模組相當於一個簡單的程式物件.當一個類模組建立起來後,我們就可以在程式的其他窗體中,定義一個類的例項,然後就像使用一個物件一樣訪問它的屬性,呼叫它的方法.下面是一個簡單的例子.

  

  對於掃雷遊戲來說,每一個地雷都有一個位置,這些地雷按位置緊密排列在窗體上,所以我們可以先建立一個包含地雷x , y軸位置的類.具體過程如下:

  

  1、建立一個類模組。首先在v b的[工程]選單上選擇[新增類模組]。這樣就在工作區中顯示了一個新的類模組,其預設的名字為Class1。

  

  2、設定類的屬性和事件。當建立一個新的類之後,就需要設定類的三個屬性值。

  

  屬性:

  Name屬性:也就是類的名字,可以在程式中區別於其他的類。

  Public屬性:用來確定該類在當前的專案之外能否被其他程式使用。只有兩個值:True和False。當該屬性值為True時,其他應用程式可以對該類進行某種型別的訪問。其訪問型別由下面的Instancing決定。當該屬性值被設定為False時,表示該類只能在定義類的程式中使用。

  Instancing屬性:用來確定其他的應用程式何時能夠訪問該類。該屬性只有在Public屬性設定為真時才起作用。(不是太重要,我們省略)

  事件:類模組主要有兩個事件:Initialize和Terminate。在建立類的時候,我們可以在這些事件中新增程式碼,這樣就可以在類的例項被建立或被析構時使程式採取一些動作。類似於c / c + +中的建構函式和解構函式。

  

  在這裡我們主要修改了新類的Name屬性:設定為clsCoords,這樣我們就可以用這個名字來作為類的名字,定義它的例項,並訪問它的屬性和事件了.

  

  3、向類中新增屬性

  

  在設定了類的屬性和事件之後,我們就需要為類新增使用者自己定義的屬性了.要向類中新增屬性有兩種方法:一種是在類中定義public變數.在這裡Public關鍵字表明在類中建立的變數是在任何模組中都可以使用的公共變數,也正因為這一點,所以程式的任何部分無須進行任何資料檢查就能修改變數的值,這樣如果傳給物件的是一個壞資料,那麼就可能產生問題(不過也因為使用簡單,所以我們這裡就使用這種方法);另一種是使用Property過程.這種方法類似於使用一個過程,透過呼叫過程時,將引數傳遞的資料,經過驗證後,賦給類中的私有屬性,(或者將私有屬性傳遞給引數).透過使用這種方法,程式為訪問和修改物件屬性提供了介面,這樣程式設計師就可以編寫程式碼來驗證向類傳遞的資料是否正確,使類的函式不會因傳遞了壞資料而崩潰.下面是對可以使用的三種屬性過程及其作用的總結:

  

  屬性類別

  作 用

  

  Property Let

  從呼叫的程式接收屬性值,用來設定屬性值

  

  Property Get

  向呼叫的程式傳送屬性值,用來獲取屬性值

  

  Property Set

  特殊情況的Let過程,用來設定物件變數的值

  

  下面是具體個實現方法:

  

  要建立類的屬性過程,我們先要進到類的程式碼視窗,然後從[工具] ( Tool )選單中選擇[新增過程] ( Add Procedure ).在顯示的”新增過程”對話方塊中,輸入過程的名字,以及”型別”中的[屬性]選項,單擊[確定],這樣就在類模組中建立了Property Let和Property Get過程。

  

  4、向類中新增方法

  

  任何程式都要實現一定的動作才能體現它的用處,因此,我們也要給類建立一些方法.它實質上也就是透過在類中編寫公共過程實現的.這些過程與為程式的其他部分編寫的過程類似.所有在類模組中的過程都以宣告語句開始.如果這一語句使用Public關鍵字,那麼該過程就是類的方法,並且該過程可以被在任何模組中建立的該類的例項所呼叫;如果該過程用Private關鍵字開始,那麼該過程只能在定義該類的模組中呼叫.(方法同上)

  

  5、向類中新增事件

  

  為了在類中建立事件,需要完成下面兩個步驟:

  

  (1)在類中宣告事件。若要宣告事件,只要提供事件名和在事件中要傳遞的引數,方法和定義屬性類似,只是關鍵字使用Event ,並且開始的關鍵字必須為Public,這樣才能使在不同模組中定義的類的例項能觸發該方法。

  

  (2)使用Raise Event語句觸發事件。宣告瞭事件之後,就可以使用Raise Event語句在類的程式碼的任何地方觸發該事件。

  

  我們這裡不使用物件的事件,所以省略。

  

  二、怎樣在程式中使用定義的類呢?

  1、建立類的物件

  

  要使用一個已經定義的類,首先要建立一個該類的物件。有兩種方法可以從使用者開發的類中建立物件:使用宣告語句或使用Set語句。一旦用這兩種方法建立了該類的物件後,就可以在程式中使用該物件,並能透過給物件訪問物件的屬性和方法。

  

  當一個類的物件被建立後,類模組中的Initialize事件首先執行,為了的屬性方法的訪問做準備,相當於C++語言中的建構函式。

  

  (1)使用宣告語句: 當定義了一個類之後,我們就可以像使用一般的型別一樣使用這個類.形式上唯一不同之處就是,在dim . . . as ..之後,還要加一個New關鍵字,形式變為 Dim . . . As New . . . 使用這種方式時,宣告語句直接建立物件的例項,我們可以透過這個物件的例項在程式中訪問物件的屬性和方法.

  

  (2)使用Set語句:這是建立物件的第二種方法.使用這種方法時,首先要宣告物件變數,然後用Set語句建立物件的例項.如我們在遊戲中使用了以下程式碼定義了一個clsCoords型別的例項objCoords 。

  

  Dim objCoords As New clsCoords

  

  同樣,在我們用Set語句建立了物件變數之後,我們可以透過這個物件的例項在程式中訪問物件的屬性和方法.與前一種方法的不同之處在於,雖然我們先建立了一個物件的型別,但是我們還是不能使用這個物件,直到使用Set語句時才實際建立了物件的例項,這是我們才可以透過這個物件的例項在程式中訪問物件的屬性和方法.

  

  2、設定和讀取屬性值:

  

  物件的例項建立了,必然要對它的屬性進行訪問.對於這一步其實很簡單,

  

  例如我們在coords.cls類模組中定義的兩個變數

  

  '定義了一個物件用來儲存被錯誤標記的地雷的x , y軸座標

  

  Public mintX As Integer

  

  Public mintY As Integer

  

  當我們要訪問它的值時,我們只要使用像下面的方式即可.

  

  Dim objCoords As New clsCoords

  

  '在新建的clsCoords類的例項中儲存被標記錯誤的地雷的X , Y座標位置

  

  objCoords.mintX = intX

  

  objCoords.mintY = intY

  

  這裡我們給clsCoords類的新的例項objCoords的兩個屬性mintX和mintY賦予了新值.

  

  3、使用物件的方法

  

  要使用使用者自己建立的物件的方法,與在v b中使用內在物件和控制元件的方法一樣.只要提供要執行物件的名稱和方法名,以及方法

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951873/,如需轉載,請註明出處,否則將追究法律責任。

相關文章