SlideShare a Scribd company logo
1 of 55
Greenfoot 接龍(一)
由上而下的物件導向程
    式設計(上)

      依瑪貓/楊士青
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 遊戲試玩,
        回憶一下。
Solitaire 接龍遊戲
請先回憶一下接龍怎
 麼玩。上網搜尋
 Solitaire Flash遊
 戲試玩,回憶一下
 。



rbell rbell@21cn.com. Solitaire. Retrieved from
http://www.thepcmanwebsite.com/media/flash_solitaire/
接龍遊戲
如何撰寫接龍遊戲的程式?
一、設計類別 (Class) 和物件 (Object)
接龍的牌桌
牌桌上有什麼?
牌桌上有什麼?
52 張撲克牌
未翻開的牌疊
已翻開的牌疊
暫放的牌疊(共七疊)
歸整好的牌疊(共四疊)
牌桌上有什麼?
牌桌上有什麼?
牌桌上有什麼?
牌桌上有什麼?
撲克牌
未翻開的牌疊(共一疊)
已翻開的牌疊(共一疊)
暫放的牌疊(共七疊)
歸整好的牌疊(共四疊)
牌桌上有什麼?
撲克牌
撲克牌疊
 未翻開的牌疊(共一疊)
 已翻開的牌疊(共一疊)
 暫放的牌疊(共七疊)
 歸整好的牌疊(共四疊)
步驟一:建立類別
牌桌
撲克牌
撲克牌疊
 未翻開的牌疊
 已翻開的牌疊
 暫放的牌疊
 歸整好的牌疊
步驟一:建立類別
牌桌上的每個東西,都對應到我們建立的一
 個 class 。
 物件導向程式設計,把我們理解的抽象概念,直
  接對應到 class ,寫成 class 。
接下來為方便進行分享,
請載入隨附的 solitaire-1 專案。
建好類別後,接下來要建立物件。
  我們把剛剛建好的牌疊,
   產生物件加到牌桌上。
步驟二:加上撲克牌疊
import greenfoot.*;   // ( World 、 Actor 、 GreenfootImage 、 GreenfootSound 、 Greenfoot 及 MouseInfo )

import java.util.ArrayList;



/**

 * 牌桌。
 *

 * @author 依瑪貓

 * @version 2012/6/15

 */

public class Table extends World

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

      private UnflippedPile unflippedPile = null;

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

      private FlippedPile flippedPile = null;

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

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

      /** 歸整區的撲克牌疊。 */
      private ArrayList<ResultPile> resultPiles = new ArrayList<ResultPile>();
步驟二:加上撲克牌疊(續)
public class Table extends World
{
    /** 取得未翻開的撲克牌疊。 */
    public UnflippedPile getUnflippedPile() {
        return unflippedPile;
    }
    /** 取得已翻開的撲克牌疊。 */
    public FlippedPile getFlippedPile() {
        return flippedPile;
    }
    /** 取得暫放區的撲克牌疊。 */
    public ArrayList<WorkingPile> getWorkingPiles() {
        return workingPiles;
    }
    /** 取得歸整區的撲克牌疊。 */
    public ArrayList<ResultPile> getResultPiles() {
        return resultPiles;
    }
}
步驟二:加上撲克牌疊(續)
public class Table extends World
{
    public Table() {
        // 建立 600x400 方格的新世界,方格大小為 1x1 像素。
        super(600, 400, 1);
        // 加上牌牌桌上的牌疊。
        addPiles();
    }
}
步驟二:加上撲克牌疊(續)
public class Table extends World

{

    /**

     * 加上牌牌桌上 的牌 疊。

     */

    private void addPiles()

    {

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

          addObject(unflippedPile, 48, 57);

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

          addObject(flippedPile, 132, 57);

          for (int i = 1; i <= 7; i++) {            // 加上 暫 放區 的撲 克 牌疊 。

              WorkingPile pile = new WorkingPile();

              workingPiles.add(pile);

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

          }

          for (int i = 1; i <= 4; i++) {            // 加上 歸 位區 的撲 克 牌疊 。

              ResultPile pile = new ResultPile();

              resultPiles.add(pile);

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

          }

    }

}
步驟二:加上撲克牌疊
   (結果)
接下來我們要加上撲克牌。
撲克牌洗牌後,放在未翻開的牌疊上。
先看 Card 撲克牌和 Pile 牌疊的文件,
    看看有哪些方法可以用。
Card 撲克牌的文件說明
Pile 牌疊的文件說明
步驟三:加上撲克牌
用 Card(Card.Suit suit, int value) 建立撲
 克牌。
用 addCard(Card newCard) 把撲克牌放到
 牌堆。
步驟三:加上撲克牌
public class Table extends World
{
    public Table() {
        // 建立 600x400 方格的新世界,方格大小為 1x1 像素。
        super(600, 400, 1);
        // 加上牌牌桌上的牌疊。
        addPiles();
        // 加上撲克牌。
        addCards();
    }
}
步驟三:加上撲克牌(續)
import java.util.Collections;



public class Table extends World

{

    /**

    * 加上撲克牌。

    */

    private void addCards()

    {

          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 class Table extends World
{
    public Table() {
        // 建立 600x400 方格的新世界,方格大小為 1x1 像素。
        super(600, 400, 1);
        // 加上牌牌桌上的牌疊。
        addPiles();
        // 加上撲克牌。
        addCards();
        // 發牌到暫放區。
        dealToWorkingPiles();
    }
}
步驟四:發牌到下面的暫放區
public class Table extends World

{

    /**

     * 發牌到暫放區。

     */
    private void dealToWorkingPiles()

    {

          for (int i = 1; i <= workingPiles.size(); i++)

          {

              WorkingPile target = workingPiles.get(i - 1);

              for (int j = 1; j <= i; j++) {          // 第 i 疊牌要發 i 張牌。
                  Card card = unflippedPile.takeTopCard();

                  target.addCard(card);

              }

              // 最上面一張撲克牌要翻開。

              Card card = target.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 newCard 要加上去的撲克牌
      */
      public void addCard(Card newCard)
      {
            super.addCard(newCard);
            // 把新加上的牌放下面一點,露出前面的牌。
            newCard.setLocation(newCard.getX(), newCard.getY() + (getSize() - 1) * 16);
      }
}
步驟五:覆寫 addCard() 方法
中場休息
歡迎提出問題

More Related Content

Viewers also liked

Mailing Lists and IRC
Mailing Lists and IRCMailing Lists and IRC
Mailing Lists and IRCimacat .
 
Addressing Password Creep
Addressing Password CreepAddressing Password Creep
Addressing Password CreepDigitalPersona
 
Naya presentation
Naya presentationNaya presentation
Naya presentationifcaonline
 
Flower Portfolio
Flower PortfolioFlower Portfolio
Flower Portfolioallenaba
 
SugarCRM Project Management Enhancements
SugarCRM Project Management EnhancementsSugarCRM Project Management Enhancements
SugarCRM Project Management EnhancementsAtcore Systems
 
Flower portfolio
Flower portfolioFlower portfolio
Flower portfolioallenaba
 
SugarCRM Pivotal Tracker Integration - SugarCRM Project Management
SugarCRM Pivotal Tracker Integration - SugarCRM Project ManagementSugarCRM Pivotal Tracker Integration - SugarCRM Project Management
SugarCRM Pivotal Tracker Integration - SugarCRM Project ManagementAtcore Systems
 

Viewers also liked (20)

Mailing Lists and IRC
Mailing Lists and IRCMailing Lists and IRC
Mailing Lists and IRC
 
Julie Kofod Hansen - en vandrehistorie fra københavns museum
Julie Kofod Hansen -  en vandrehistorie fra københavns museumJulie Kofod Hansen -  en vandrehistorie fra københavns museum
Julie Kofod Hansen - en vandrehistorie fra københavns museum
 
Karin Poulsen - håndværkerbebyggelse
Karin Poulsen -  håndværkerbebyggelseKarin Poulsen -  håndværkerbebyggelse
Karin Poulsen - håndværkerbebyggelse
 
Addressing Password Creep
Addressing Password CreepAddressing Password Creep
Addressing Password Creep
 
Maria Løkke Rasmussen
Maria Løkke RasmussenMaria Løkke Rasmussen
Maria Løkke Rasmussen
 
Spor 2, Trine Grøne, Formidlingsseminar museer på tværs
Spor 2, Trine Grøne, Formidlingsseminar museer på tværsSpor 2, Trine Grøne, Formidlingsseminar museer på tværs
Spor 2, Trine Grøne, Formidlingsseminar museer på tværs
 
Anne Garhøj Rosenberg, Kirkeby vænge
Anne Garhøj Rosenberg, Kirkeby vængeAnne Garhøj Rosenberg, Kirkeby vænge
Anne Garhøj Rosenberg, Kirkeby vænge
 
Naya presentation
Naya presentationNaya presentation
Naya presentation
 
Flower Portfolio
Flower PortfolioFlower Portfolio
Flower Portfolio
 
61 Janne Laursen, Kulturmøder
61 Janne Laursen, Kulturmøder61 Janne Laursen, Kulturmøder
61 Janne Laursen, Kulturmøder
 
10x7 09 Odense Bysmuseer Ellen Warring
10x7 09 Odense Bysmuseer Ellen Warring10x7 09 Odense Bysmuseer Ellen Warring
10x7 09 Odense Bysmuseer Ellen Warring
 
Arabic bible 27-daniel
Arabic bible 27-danielArabic bible 27-daniel
Arabic bible 27-daniel
 
10 ens chr moesgaard møntskattefund
10 ens chr moesgaard møntskattefund10 ens chr moesgaard møntskattefund
10 ens chr moesgaard møntskattefund
 
SugarCRM Project Management Enhancements
SugarCRM Project Management EnhancementsSugarCRM Project Management Enhancements
SugarCRM Project Management Enhancements
 
Future Markets
Future MarketsFuture Markets
Future Markets
 
Flower portfolio
Flower portfolioFlower portfolio
Flower portfolio
 
21 Kamilla Terkildsen Kærgård toftum
21 Kamilla Terkildsen Kærgård toftum21 Kamilla Terkildsen Kærgård toftum
21 Kamilla Terkildsen Kærgård toftum
 
69 Ingelise Nielsen, Vandmærker
69 Ingelise Nielsen, Vandmærker69 Ingelise Nielsen, Vandmærker
69 Ingelise Nielsen, Vandmærker
 
17 Hanna Dahlstrøm, Søren Bak Jensen, Metro cityringen
17 Hanna Dahlstrøm, Søren Bak Jensen, Metro cityringen17 Hanna Dahlstrøm, Søren Bak Jensen, Metro cityringen
17 Hanna Dahlstrøm, Søren Bak Jensen, Metro cityringen
 
SugarCRM Pivotal Tracker Integration - SugarCRM Project Management
SugarCRM Pivotal Tracker Integration - SugarCRM Project ManagementSugarCRM Pivotal Tracker Integration - SugarCRM Project Management
SugarCRM Pivotal Tracker Integration - SugarCRM Project Management
 

Similar to Solitaire with Greenfoot #1

Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4imacat .
 
Solitaire with Greenfoot #3
Solitaire with Greenfoot #3Solitaire with Greenfoot #3
Solitaire with Greenfoot #3imacat .
 
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 .
 
Behind Tetris5
Behind Tetris5Behind Tetris5
Behind Tetris5Junwen Sun
 
Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定吳錫修 (ShyiShiou Wu)
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I吳錫修 (ShyiShiou Wu)
 
Unity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理IIUnity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理II吳錫修 (ShyiShiou Wu)
 

Similar to Solitaire with Greenfoot #1 (10)

Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4Solitaire with Greenfoot #2/4
Solitaire with Greenfoot #2/4
 
Solitaire with Greenfoot #3
Solitaire with Greenfoot #3Solitaire with Greenfoot #3
Solitaire with Greenfoot #3
 
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
 
XNA遊戲程式框架
XNA遊戲程式框架 XNA遊戲程式框架
XNA遊戲程式框架
 
Behind Tetris5
Behind Tetris5Behind Tetris5
Behind Tetris5
 
Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定Unity遊戲程式設計(09) 3D物件與光源設定
Unity遊戲程式設計(09) 3D物件與光源設定
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
Unity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理IUnity遊戲程式設計 - 2D運動與碰撞處理I
Unity遊戲程式設計 - 2D運動與碰撞處理I
 
Unity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理IIUnity遊戲程式設計(05) 2D移動與碰撞處理II
Unity遊戲程式設計(05) 2D移動與碰撞處理II
 

More from 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 .
 
Crossing Office Applications
Crossing Office ApplicationsCrossing Office Applications
Crossing Office Applicationsimacat .
 
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 .
 
OpenOffice.org Magic Sandbox
OpenOffice.org Magic SandboxOpenOffice.org Magic Sandbox
OpenOffice.org Magic Sandboximacat .
 
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 .
 

More from 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計算機
 
Crossing Office Applications
Crossing Office ApplicationsCrossing Office Applications
Crossing Office Applications
 
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
 
OpenOffice.org Magic Sandbox
OpenOffice.org Magic SandboxOpenOffice.org Magic Sandbox
OpenOffice.org Magic Sandbox
 
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
 

Solitaire with Greenfoot #1