SDL射擊遊戲講解

林品儒

2016/12/7

物件導向

物件導向

將程式的資料和操作分別封裝到所屬類別

類別可以產生能操作的物件

物件不只有專屬的資料型態還有專屬的方法

類別

英文為class

描述資料的形式以及對資料的操作

還需要實體化成物件才能操作

物件/實例

物件英文為object,實例為instance

能實際使用資料和對資料操作的單位

由類別實體化而來

所以我們要操作的是物件而不是類別

你不會拿電腦說明書上網的...

Ruby的物件導向

Ruby為完全物件導向

除了各種物件有所屬的類別

Ruby的各種類別其實是Class這個類的實體

類別的類別就是類別(!!)

使用類別

最簡單的方法就是使用class關鍵字

class Klass
  #這裏面的不能看到外面的變數歐
end

不過其實就只是在Klass這個常數裏面放入類別的實體

Klass=Class.new

實體變數

每個物件有自己專屬的資料

實體變數就可以用來存放這些資料

使用"@"開頭的變數就是實體變數

類別變數

用來存放這個類別共通可以操作的資料

目前暫且還用不到

可以用來存放所有物件共用的資料

使用"@@"開頭

實體方法

在class和end中間可以宣告實體的方法

一樣是使用def關鍵字

方法中可以操作自己的類別變數或類別的類別變數

實際範例

class C
  @class_inst_var = "C類別的實體變數"
  @@class_var = "C的類別變數"
  def 我是C的實體方法
    @inst_var = "我是C的實體變數"
  end
end

請注意C類別的實體變數只有C類別能用

建構子

在Ruby中實體產生可以設定初始化的方法

class C
  def initialize
    @inst_var = 100
  end
end

鴨子型別

英文為duck typing

"當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱為鴨子。"

在Ruby中只要能呼叫到有該名稱的方法

就能夠依照該方法來運作

你不會想讓呱呱叫的噴火龍進入池塘

產生物件

需要先宣告該類別的存在

使用類別的new方法產生物件

obj=Klass.new

這樣就會呼叫該類別的建構子進行初始化

射擊遊戲架構

基本架構

遊戲初始化

外部輸入←┐

進行計算 │

輸出畫面→┘

遊戲結束

遊戲情境

玩家要逃出充滿了小行星和起司的小行星帶

到底能在火力不足以及機體強度限制下逃多遠呢?

主要類別設計

基本上遊戲會有一個主要類別來控制遊戲機制

這次的程式中就是Game類別

該類別要整合所有物件的運作

玩家

會有玩家的類別用來處理玩家的操作

在這次遊戲中為Ship類別

這個類別只產生一個物件

敵人

敵人也需要用類別來包裝其資料和操作

這次的敵人是不會主動攻擊的Rock

但是概念上還是屬於有害於玩家

子彈

射擊遊戲不可少的投射物

獨立出來為一個類別

這次只玩家會攻擊因此只有Bullet類別

來看看這個遊戲該如何運行吧~