SlideShare uma empresa Scribd logo
1 de 50
接龍遊戲
由上而下的物件導向程
  式設計(上)

      依瑪貓/楊士青
imacat@mail.imacat.idv.tw
       2012/6/15
「接龍遊戲—由上而下的物件導向程式設計」簡報由 依瑪貓╱楊士青 製作,
 以 創用CC Attribution-ShareAlike 3.0 Unported 授權條款 釋出。
自我介紹
依瑪貓╱楊士青
臺灣師範大學資訊教育研究所碩一研究生
物件導向程式設計
Object-Oriented Programming
           (OOP)
物件導向程式設計的特色
 「物件導向程式設計」的設計單位是「物
  件」,貼近我們對實體世界的概念理解。
     「程序性程式設計 Procedural
      Programming 」的設計單位是「程序
      Procedures 」:
         流程 Flow
         函式 Functions
         副程式 Subroutines


Pokkunuri, B. P. (1989, November). Object oriented programming. ACM
SIGPLAN Notices, 24(11), 96-101. doi:10.1145/71605.71612
物件導向程式設計的特色
「物件導向程式設計」的設計單位是「物
 件」,貼近我們對實體世界的概念理解,
 比較容易把我們的概念理解,直接轉換為
 程式碼。
 「程序性程式設計」的設計單位是「程序」,比
  物件抽象,較難由設計理解的概念,轉換為程
  式碼。
物件導向程式設計的特色
程序性程式設計的單   開始            結束

 位是程序。
             輸      判
             入      斷     處理 3
             1      2




            程式 1   程式 2   程式 3
            ……     ……     ……
            ……     ……     ……
物件導向程式設計的特色
物件導向程式設計,          物
 較容易支援由上           件2

 (觀念)而下(程   物
            件1
                          物
                          件3
 式碼)的程式設計
 。


            程式 1   程式 2   程式 3
            ……     ……     ……
            ……     ……     ……
實例說明
請新建專案「 solitaire 」,
並將隨附圖片複製到 images 目錄下。
請先回憶一下接龍怎麼玩。
上網搜尋 Solitaire Flash 遊戲試玩,
        回憶一下。
接龍遊戲
如何撰寫接龍遊戲的程式?
一、設計類別 (Class) 和物件 (Object)
接龍的牌桌
牌桌上有什麼?
牌桌上有什麼?
52 張撲克牌
未翻開的牌疊
已翻開的牌疊
暫放的牌疊(共七疊)
歸整好的牌疊(共四疊)
牌桌上有什麼?
牌桌上有什麼?
牌桌上有什麼?
牌桌上有什麼?
撲克牌
未翻開的牌疊(共一疊)
已翻開的牌疊(共一疊)
暫放的牌疊(共七疊)
歸整好的牌疊(共四疊)
牌桌上有什麼?
撲克牌
撲克牌疊
 未翻開的牌疊(共一疊)
 已翻開的牌疊(共一疊)
 暫放的牌疊(共七疊)
 歸整好的牌疊(共四疊)
步驟一:建立類別
牌桌
撲克牌
撲克牌疊
 未翻開的牌疊
 已翻開的牌疊
 暫放的牌疊
 歸整好的牌疊
步驟一:建立類別
牌桌上的每個東西,都對應到我們建立的一
 個 class 。
 物件導向程式設計,把我們理解的抽象概念,直
  接對應到 class ,寫成 class 。
接下來為方便進行分享,
請載入隨附的 solitaire-start 專案。
建好類別後,接下來要建立物件。
  我們把剛剛建好的牌疊,
   產生物件加到牌桌上。
步驟二:加上撲克牌疊
import greenfoot.*;    // ( World 、 Actor 、 GreenfootImage 、 GreenfootSound 、 Greenfoot 及 MouseInfo )

import java.util.ArrayList;



/**

 * 牌桌。

 *

 * @author 依瑪貓

 * @version 2012/6/15

 */

public class Table extends World

{

      /** 未翻開的撲克牌疊。 */

      public UnflippedPile unflippedPile = null;

      /** 已翻開的撲克牌疊。 */

      public FlippedPile flippedPile = null;

      /** 暫放區的撲克牌疊。 */

      public ArrayList<WorkingPile> workingPiles = new ArrayList<WorkingPile>();

      /** 歸整區的撲克牌疊。 */

      public ArrayList<ResultPile> resultPiles = new ArrayList<ResultPile>();
步驟二:加上撲克牌疊(續)
    public Table() {

        // 建立 600x400 方格的新世界,方格大小為 1x1 像素。

        super(600, 400, 1);

        unflippedPile = new UnflippedPile();           // 加上未翻開的撲克牌疊。

        addObject(unflippedPile, 48, 60);

        flippedPile = new FlippedPile();               // 加上已翻開的撲克牌疊。

        addObject(flippedPile, 132, 60);

        workingPiles = new ArrayList<WorkingPile>();   // 加上暫放區的撲克牌疊。

        for (int i = 1; i <= 7; i++) {

            WorkingPile pile = new WorkingPile();

            workingPiles.add(pile);

            addObject(pile, -36 + 84 * i, 168);

        }

        resultPiles = new ArrayList<ResultPile>();     // 加上歸整區的撲克牌疊。

        for (int i = 1; i <= 4; i++) {

            ResultPile pile = new ResultPile();

            resultPiles.add(pile);

            addObject(pile, 216 + i * 84, 60);

        }

    }

}
步驟二:加上撲克牌疊
   (結果)
接下來我們要加上撲克牌。
撲克牌洗牌後,放在未翻開的牌疊上。
先看 Card 撲克牌和 Pile 牌疊的文件,
    看看有哪些方法可以用。
Card 撲克牌的文件說明
Pile 牌疊的文件說明
步驟三:加上撲克牌
用 Card(Card.Suit suit, int value) 建立撲
 克牌。
用 addCard(Card card) 把牌放到牌堆。
步驟三:加上撲克牌
import greenfoot.*;     // ( World 、 Actor 、 GreenfootImage 、 GreenfootSound 、 Greenfoot 及 MouseInfo )

import java.util.ArrayList;

import java.util.Collections;

……

     public Table() {
         ……

         // 加上撲克牌。

         ArrayList<Card> cards = new ArrayList<Card>();     // 建立撲克牌

         for (Card.Suit suit : Card.Suit.values()) {

              for (int value = 1; value <= 13; value++) {

                  cards.add(new Card(suit, value));
              }

         }

         Collections.shuffle(cards);                        // 洗牌

         for (Card card : cards) {                          // 放在未翻開的牌疊上

              unflippedPile.addCard(card);

         }

     }
}
步驟三:加上撲克牌
放好牌後,
下面的暫放區,要先發好一些牌。
發牌的時候
 第一疊發一張,第二疊發兩張,
第三疊發三張,依此類推發七疊。
  每疊最後一張牌要翻開。
步驟四:發牌到下面的暫放區
用 takeTopCard() 抽出最上面的撲克牌。
用 turnFaceUp() 翻正面,或用
 turnFaceDown() 翻背面。
用 addCard(Card card) 把牌放到暫放區的
 牌堆。
步驟四:發牌到下面的暫放區
public Table() {
    ……
    // 發牌到暫放區。
    for (int i = 1; i <= workingPiles.size(); i++)
    {
         WorkingPile pile = workingPiles.get(i - 1);
         for (int j = 1; j <= i; j++)                   // 第幾疊,就發幾張牌。
         {
             Card card = unflippedPile.takeTopCard();
             pile.addCard(card);
         }
         Card card = pile.getTopCard();                 // 最後一張牌要翻開。
         card.turnFaceUp();
    }
}
步驟四:發牌到下面的暫放區
問題
暫放區的撲克牌,
下面的牌被上面的牌蓋掉了,
     怎麼辦?
第二張牌要放在第一張下面一點,
第三張牌要放在第二張下面一點,
第四張牌要放在第三張下面一點,
     依此類推。
繼承 (Inheritance) 和覆寫
        (Override)
子類別 (subclass) 要是沒有覆寫掉父類別
 (superclass) 的方法,就會繼承 (inherit)
 父類別的方法。
 我們原來在 WorkingPile 沒有覆寫
  addCard() ,所以會繼承自 Pile 的
  addCard() ,新加的牌會放到牌疊的正上方。
繼承 (Inheritance) 和覆寫
       (Override)
子類別可以覆寫 (override) 父類別的方法。
 這樣可以在不改寫呼叫者程式的情況下,
 子類別做一些自己特有的調整。
 現在我們要在 WorkingPile 覆寫 addCard() ,
  來蓋掉父類別 Pile 的 addCard() 方法,把新
  加的牌往下面放一點,露出前面的牌。
繼承 (Inheritance) 和覆寫
        (Override)
覆寫時,子類別 (subclass) 可以呼叫
 super ,呼叫父類別 (superclass) 中被覆
 寫掉的方法,例如 super.addCard() 。
 要呼叫父類別 (superclass) 的父類別
  (superclass) 時,則用
  super.super.addCard() 。
 super() 則是指父類別的建構子。
   super(600,400,1) 為 World 的建構子,可查
    World 的 API 文件說明。
步驟五:覆寫 addCard() 方法
/**
 * 暫存區的撲克牌疊。
 */
public class WorkingPile extends Pile
{
      /**
      * 加一張撲克牌。覆寫(蓋掉)繼承的方法。
      *
      * @param card 要加上去的撲克牌
      */
      public void addCard(Card card)
      {
            super.addCard(card);
            // 把新加上的牌放下面一點,露出前面的牌。
            card.setLocation(card.getX(), card.getY() + (getSize() - 1) * 16);
      }
}
步驟五:覆寫 addCard() 方法
中場休息
歡迎提出問題

Mais conteúdo relacionado

Destaque

Enhancing SugarCRM with Addons
Enhancing SugarCRM with AddonsEnhancing SugarCRM with Addons
Enhancing SugarCRM with AddonsAtcore Systems
 
Egyptian Society of Cardiology,Thrombosis conference 2014 final program
Egyptian Society of Cardiology,Thrombosis conference 2014 final programEgyptian Society of Cardiology,Thrombosis conference 2014 final program
Egyptian Society of Cardiology,Thrombosis conference 2014 final programAlexandria University, Egypt
 
Crossing Office Applications
Crossing Office ApplicationsCrossing Office Applications
Crossing Office Applicationsimacat .
 
Informatica jeka
Informatica jekaInformatica jeka
Informatica jekaGaznatiiTha
 
OpenOffice.org Magic Sandbox
OpenOffice.org Magic SandboxOpenOffice.org Magic Sandbox
OpenOffice.org Magic Sandboximacat .
 
LOphoto dic2010
LOphoto dic2010LOphoto dic2010
LOphoto dic2010LOphoto
 

Destaque (20)

Janet marstine - Museum ethics and museum change
Janet marstine  - Museum ethics and museum changeJanet marstine  - Museum ethics and museum change
Janet marstine - Museum ethics and museum change
 
43 Lars Ewald Jensen, Mesolitisk bebyggelse i et neolitisk landskab
43 Lars Ewald Jensen, Mesolitisk bebyggelse i et neolitisk landskab43 Lars Ewald Jensen, Mesolitisk bebyggelse i et neolitisk landskab
43 Lars Ewald Jensen, Mesolitisk bebyggelse i et neolitisk landskab
 
Enhancing SugarCRM with Addons
Enhancing SugarCRM with AddonsEnhancing SugarCRM with Addons
Enhancing SugarCRM with Addons
 
Kate Chatfield Comminity Gallery exhib.
Kate Chatfield Comminity Gallery exhib.Kate Chatfield Comminity Gallery exhib.
Kate Chatfield Comminity Gallery exhib.
 
Egyptian Society of Cardiology,Thrombosis conference 2014 final program
Egyptian Society of Cardiology,Thrombosis conference 2014 final programEgyptian Society of Cardiology,Thrombosis conference 2014 final program
Egyptian Society of Cardiology,Thrombosis conference 2014 final program
 
Crossing Office Applications
Crossing Office ApplicationsCrossing Office Applications
Crossing Office Applications
 
Mathilde Schytz Marvit - co produktioner
Mathilde Schytz Marvit - co produktionerMathilde Schytz Marvit - co produktioner
Mathilde Schytz Marvit - co produktioner
 
Jakob Walløe Hansen geopark odsherred
Jakob Walløe Hansen   geopark odsherredJakob Walløe Hansen   geopark odsherred
Jakob Walløe Hansen geopark odsherred
 
Medicinsk Museion - Ikke bare et museum med ting
Medicinsk Museion - Ikke bare et museum med tingMedicinsk Museion - Ikke bare et museum med ting
Medicinsk Museion - Ikke bare et museum med ting
 
Ned med våbnene
Ned med våbneneNed med våbnene
Ned med våbnene
 
steen hvass
steen hvasssteen hvass
steen hvass
 
Charlie Christensen
Charlie ChristensenCharlie Christensen
Charlie Christensen
 
Title sequences
Title sequencesTitle sequences
Title sequences
 
Democraciasinpartidos
DemocraciasinpartidosDemocraciasinpartidos
Democraciasinpartidos
 
Informatica jeka
Informatica jekaInformatica jeka
Informatica jeka
 
Anders Hartvig
Anders HartvigAnders Hartvig
Anders Hartvig
 
OpenOffice.org Magic Sandbox
OpenOffice.org Magic SandboxOpenOffice.org Magic Sandbox
OpenOffice.org Magic Sandbox
 
LOphoto dic2010
LOphoto dic2010LOphoto dic2010
LOphoto dic2010
 
Hans Mikkelsen - ferslev kirke
Hans Mikkelsen -  ferslev kirkeHans Mikkelsen -  ferslev kirke
Hans Mikkelsen - ferslev kirke
 
16 jens chrmoesgaard_danef+ªm+©nter2016
16 jens chrmoesgaard_danef+ªm+©nter201616 jens chrmoesgaard_danef+ªm+©nter2016
16 jens chrmoesgaard_danef+ªm+©nter2016
 

Semelhante a Object-Oriented Programming Design with Greenfoot 01

Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4imacat .
 
Object-Oriented Programming Design with Greenfoot 02
Object-Oriented Programming Design with Greenfoot 02Object-Oriented Programming Design with Greenfoot 02
Object-Oriented Programming Design with Greenfoot 02imacat .
 
Solitaire with Greenfoot #3
Solitaire with Greenfoot #3Solitaire with Greenfoot #3
Solitaire with Greenfoot #3imacat .
 
Behind Tetris5
Behind Tetris5Behind Tetris5
Behind Tetris5Junwen Sun
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 
Unity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理IIUnity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理II吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定吳錫修 (ShyiShiou Wu)
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Derek Lee
 
Pycontw2013x
Pycontw2013xPycontw2013x
Pycontw2013xweijr
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构裕波 周
 
Effective java 摘選條目分享 1 - 物件、複合、可變性、leak
Effective java   摘選條目分享 1 - 物件、複合、可變性、leakEffective java   摘選條目分享 1 - 物件、複合、可變性、leak
Effective java 摘選條目分享 1 - 物件、複合、可變性、leakKane Shih
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 

Semelhante a Object-Oriented Programming Design with Greenfoot 01 (14)

Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4
 
Object-Oriented Programming Design with Greenfoot 02
Object-Oriented Programming Design with Greenfoot 02Object-Oriented Programming Design with Greenfoot 02
Object-Oriented Programming Design with Greenfoot 02
 
Solitaire with Greenfoot #3
Solitaire with Greenfoot #3Solitaire with Greenfoot #3
Solitaire with Greenfoot #3
 
Behind Tetris5
Behind Tetris5Behind Tetris5
Behind Tetris5
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
XNA遊戲程式框架
XNA遊戲程式框架 XNA遊戲程式框架
XNA遊戲程式框架
 
Unity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理IIUnity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理II
 
Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 
Pycontw2013x
Pycontw2013xPycontw2013x
Pycontw2013x
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构
 
Effective java 摘選條目分享 1 - 物件、複合、可變性、leak
Effective java   摘選條目分享 1 - 物件、複合、可變性、leakEffective java   摘選條目分享 1 - 物件、複合、可變性、leak
Effective java 摘選條目分享 1 - 物件、複合、可變性、leak
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 

Mais de imacat .

A Room of WikiWomen's Own
A Room of WikiWomen's OwnA Room of WikiWomen's Own
A Room of WikiWomen's Ownimacat .
 
Office寶可夢GO IV計算機
Office寶可夢GO IV計算機Office寶可夢GO IV計算機
Office寶可夢GO IV計算機imacat .
 
OpenOffice Application with Python
OpenOffice Application with PythonOpenOffice Application with Python
OpenOffice Application with Pythonimacat .
 
從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docs從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docsimacat .
 
More Girls – Creating a Community of Diversity
More Girls – Creating a Community of DiversityMore Girls – Creating a Community of Diversity
More Girls – Creating a Community of Diversityimacat .
 
Welcome to Apache OpenOffice 4
Welcome to Apache OpenOffice 4Welcome to Apache OpenOffice 4
Welcome to Apache OpenOffice 4imacat .
 
OpenOffice, Open Business
OpenOffice, Open BusinessOpenOffice, Open Business
OpenOffice, Open Businessimacat .
 
Multimedia Fun with OpenOffice Calc
Multimedia Fun with OpenOffice CalcMultimedia Fun with OpenOffice Calc
Multimedia Fun with OpenOffice Calcimacat .
 
Welcome to Apache OpenOffice 3.4 COSCUP 2012
Welcome to Apache OpenOffice 3.4 COSCUP 2012Welcome to Apache OpenOffice 3.4 COSCUP 2012
Welcome to Apache OpenOffice 3.4 COSCUP 2012imacat .
 
Mosaic Fun with OpenOffice Calc
Mosaic Fun with OpenOffice CalcMosaic Fun with OpenOffice Calc
Mosaic Fun with OpenOffice Calcimacat .
 
GNU Autoconf / Automake #4
GNU Autoconf / Automake #4GNU Autoconf / Automake #4
GNU Autoconf / Automake #4imacat .
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1imacat .
 
Welcome to Apache OpenOffice 3.4
Welcome to Apache OpenOffice 3.4Welcome to Apache OpenOffice 3.4
Welcome to Apache OpenOffice 3.4imacat .
 
OpenOffice UNO Application on Android
OpenOffice UNO Application on AndroidOpenOffice UNO Application on Android
OpenOffice UNO Application on Androidimacat .
 
Mailing Lists and IRC
Mailing Lists and IRCMailing Lists and IRC
Mailing Lists and IRCimacat .
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build Systemimacat .
 
patch和diff
patch和diffpatch和diff
patch和diffimacat .
 
OpenOffice.org UNO Magic
OpenOffice.org UNO MagicOpenOffice.org UNO Magic
OpenOffice.org UNO Magicimacat .
 
用OpenOffice.org加速企業生產力!
用OpenOffice.org加速企業生產力!用OpenOffice.org加速企業生產力!
用OpenOffice.org加速企業生產力!imacat .
 

Mais de imacat . (20)

A Room of WikiWomen's Own
A Room of WikiWomen's OwnA Room of WikiWomen's Own
A Room of WikiWomen's Own
 
Office寶可夢GO IV計算機
Office寶可夢GO IV計算機Office寶可夢GO IV計算機
Office寶可夢GO IV計算機
 
OpenOffice Application with Python
OpenOffice Application with PythonOpenOffice Application with Python
OpenOffice Application with Python
 
從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docs從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docs
 
More Girls – Creating a Community of Diversity
More Girls – Creating a Community of DiversityMore Girls – Creating a Community of Diversity
More Girls – Creating a Community of Diversity
 
Welcome to Apache OpenOffice 4
Welcome to Apache OpenOffice 4Welcome to Apache OpenOffice 4
Welcome to Apache OpenOffice 4
 
OpenOffice, Open Business
OpenOffice, Open BusinessOpenOffice, Open Business
OpenOffice, Open Business
 
Multimedia Fun with OpenOffice Calc
Multimedia Fun with OpenOffice CalcMultimedia Fun with OpenOffice Calc
Multimedia Fun with OpenOffice Calc
 
Welcome to Apache OpenOffice 3.4 COSCUP 2012
Welcome to Apache OpenOffice 3.4 COSCUP 2012Welcome to Apache OpenOffice 3.4 COSCUP 2012
Welcome to Apache OpenOffice 3.4 COSCUP 2012
 
Mosaic Fun with OpenOffice Calc
Mosaic Fun with OpenOffice CalcMosaic Fun with OpenOffice Calc
Mosaic Fun with OpenOffice Calc
 
GNU Autoconf / Automake #4
GNU Autoconf / Automake #4GNU Autoconf / Automake #4
GNU Autoconf / Automake #4
 
GNU Autoconf / Automake #1
GNU Autoconf / Automake #1GNU Autoconf / Automake #1
GNU Autoconf / Automake #1
 
Welcome to Apache OpenOffice 3.4
Welcome to Apache OpenOffice 3.4Welcome to Apache OpenOffice 3.4
Welcome to Apache OpenOffice 3.4
 
OpenOffice UNO Application on Android
OpenOffice UNO Application on AndroidOpenOffice UNO Application on Android
OpenOffice UNO Application on Android
 
Mailing Lists and IRC
Mailing Lists and IRCMailing Lists and IRC
Mailing Lists and IRC
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build System
 
patch和diff
patch和diffpatch和diff
patch和diff
 
OpenOffice.org UNO Magic
OpenOffice.org UNO MagicOpenOffice.org UNO Magic
OpenOffice.org UNO Magic
 
autoconf
autoconfautoconf
autoconf
 
用OpenOffice.org加速企業生產力!
用OpenOffice.org加速企業生產力!用OpenOffice.org加速企業生產力!
用OpenOffice.org加速企業生產力!
 

Object-Oriented Programming Design with Greenfoot 01