Java基礎知識へ戻る | サンプル集目次へ戻る

実行結果
JavaCurryサンプルソース
JavaCurryの表示は、「四角」「文字」「円」の3つのクラスから構成されています。黄色い箱がBoxクラス。文字はTextクラスで、同心円はCircleクラスのインスタンスを4つ重ねたもの。ふざけているようで、じつは深い味わいのソースコード。256ノックの真骨頂っす。
JavaCurry.java
Box.java
Text.java
Circle.java
DrawPanel.java
Parts.java
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "JavaCurry"
 * JavaCurry.java 「カレーのパッケージをオブジェクト指向で表現」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac *.java
 *     >java JavaCurry
 * 【キーワード】
 *     大塚食品, ボンカレーゴールド
 * 【試してみよう】
 *     Box、Circle、Textを上手く組み合わせ、右下にJASマークを入れる。
 *     http://www.jasnet.or.jp/
 */
import java.awt.Color;
import java.lang.String;
import java.lang.System;
import javax.swing.JFrame;

public class JavaCurry extends JFrame {

    public JavaCurry() {
        add(new DrawPanel());
    }

    public static void main(String[] A00) {
        JFrame L00 = new JavaCurry();
        L00.setTitle("オブジェクト指向レトルトカレー");
        L00.setDefaultCloseOperation(EXIT_ON_CLOSE);
        L00.setBackground(Color.white);
        L00.pack();
        L00.setResizable(false);
        L00.setVisible(true);
    }
}

/* ■ クラスの外でちょっと一言 ■
本当は、ハウス『ジャワカレー』のパッケージをやりたかったんですが、かなり
複雑で、とてもプリミティブな図形の組み合わせでは表現不可能なため、断腸の
思いで、大塚食品『ボンカレー ゴールド』を題材にしました。

レトルトカレーマニアにつっこまれる前に、言い訳しておきます。
 */
↑ 先頭へ戻る
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "JavaCurry"
 * Box.java 「カレーのパッケージをオブジェクト指向で表現」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac *.java
 *     >java JavaCurry
 * 【キーワード】
 *     矩形(rectangle)の描画
 * 【試してみよう】
 *     JavaCurry.java参照
 */
import java.awt.Color;
import java.awt.Graphics;

public class Box implements Parts {
    int I00;
    int I01;
    int I02;
    int I03;
    Color I04;

    Box(int A00, int A01, int A02, int A03, Color A04) {
        this.I00 = A00;
        this.I01 = A01;
        this.I02 = A02;
        this.I03 = A03;
        this.I04 = A04;
    }

    public void M00(Graphics A00) {
        A00.setColor(I04);
        A00.fillRect(I00, I01, I02, I03);
    }
}

/* ■ クラスの外でちょっと一言 ■
ちなみに、僕は辛いのは苦手な方です。というか、すごく汗をかいてしまいま
す。「ココイチ」のカレーでいえば、辛さ普通で結構汗だく。でも、好きなん
で、ちょくちょく食べに行ってます。よく注文するのは「チキンカツカレー」で
すね。
 */
↑ 先頭へ戻る
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "JavaCurry"
 * Text.java 「カレーのパッケージをオブジェクト指向で表現」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac *.java
 *     >java JavaCurry
 * 【キーワード】
 *     論理(logical)フォントと物理(physical)フォント
 * 【試してみよう】
 *     JavaCurry.java参照
 */
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.lang.String;

public class Text implements Parts {
    String I00;
    int I01;
    int I02;
    Color I03;
    int I04;

    Text(String A00, int A01, int A02, Color A03, int A04) {
        this.I00 = A00;
        this.I01 = A01;
        this.I02 = A02;
        this.I03 = A03;
        this.I04 = A04;
    }

    public void M00(Graphics A00) {
        A00.setColor(I03);
        A00.setFont(new Font("SansSerif", Font.BOLD, I04));
        A00.drawString(I00, I01, I02);
    }
}

/* ■ クラスの外でちょっと一言 ■
福岡ローカルの話になって申し訳ないんですが、天神西通りのケンタッキーの上
に、「ツナパハ」というカレー屋さんがあります。そこの「ドライカリー」は
(少なくとも自分にとっては)かなり辛いんですが、とっても美味しいです。デ
ジハリ福岡校が大名にあった頃、ランチでよく食べましたね。

その店に、辛さの指定で「デビルレッド」という項目があります。いかにも辛そ
うな名前で、実際にすごく辛いです。あと、昔、親不孝通りにあった「タージ」
という店には「青酸カリー」というメニューがありました。死ぬほど辛いんで
しょうね。で、これも今はなくなった店ですが、天神ビル地下の「サムソン」に
は、「W死に辛」という辛さ指定がありました。もちろん、どれも食べたことは
ありません。
 */
↑ 先頭へ戻る
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "JavaCurry"
 * Circle.java 「カレーのパッケージをオブジェクト指向で表現」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac *.java
 *     >java JavaCurry
 * 【キーワード】
 *     楕円(oval)の描画
 * 【試してみよう】
 *     JavaCurry.java参照。
 */
import java.awt.Color;
import java.awt.Graphics;

public class Circle implements Parts {
    int I00;
    int I01;
    int I02;
    Color I03;

    Circle(int A00, int A01, int A02, Color A03) {
        this.I00 = A00;
        this.I01 = A01;
        this.I02 = A02;
        this.I03 = A03;
    }

    public void M00(Graphics A00) {
        A00.setColor(I03);
        A00.fillOval(I00, I01, I02, I02);
    }
}

/* ■ クラスの外でちょっと一言 ■
このサンプルを作るにあたり、「ボンカレーのパッケージってどんなんだっ
け?」ということで、早速、近所のスーパー(ゆめタウン宗像店)へ調査に行き
ました。しかし、僕の記憶にある『ボンカレー ゴールド』はもうそこにはな
く、『ボンカレー ゴールド21』へとバージョンアップしてるではないです
か! しかも、パッケージの「丸」が、微妙に立体的で、テカリまで入ってる
じゃないですか!

とりあえず見なかったことにして、スーパーを後にしました……。
 */
↑ 先頭へ戻る
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "JavaCurry"
 * DrawPanel.java 「カレーのパッケージをオブジェクト指向で表現」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac *.java
 *     >java JavaCurry
 * 【キーワード】
 *     アンチエイリアス(antialias)
 * 【試してみよう】
 *     JavaCurry.java参照。
 */
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import static java.awt.RenderingHints.KEY_ANTIALIASING;
import static java.awt.RenderingHints.VALUE_ANTIALIAS_ON;

public class DrawPanel extends JPanel {
    static final int C00 = 280;
    static final int C01 = 360;
    static final Color C02 = new Color(170, 0, 0);
    static final Color C03 = new Color(250, 190, 20);
    static final Color C04 = new Color(240, 30, 0);
    static final Color C05 = new Color(240, 70, 0);
    List<Parts> I00;

    public DrawPanel() {
        setBackground(Color.white);
        setPreferredSize(new Dimension(C00, C01));

        I00 = new ArrayList<Parts>();

        I00.add(new Box(10, 10, 260, 340, C03));
        I00.add(new Text("ジャバカレー", 25, 62, C02, 36));
        I00.add(new Text("JAVA CURRY GOLD ゴールド", 30, 84, C02, 16));
        I00.add(new Text("辛さ256倍", 176, 100, Color.red, 16));
        I00.add(new Text("200g・1人分", 25, 330, Color.black, 10));
        I00.add(new Circle(30, 105, 220, C02));
        I00.add(new Circle(60, 135, 160, C04));
        I00.add(new Circle(80, 155, 120, C05));
        I00.add(new Circle(100, 175, 80, C03));
    }

    public void paintComponent(Graphics A00) {
        super.paintComponent(A00);
        Graphics2D L00 = (Graphics2D)A00;
        L00.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);

        for (Parts L01 : I00) {
            L01.M00(L00);
        }
    }
}

/* ■ クラスの外でちょっと一言 ■
「Javaカレーゴールド」の表示は、「四角」「文字」「円」の3種類のパーツを
組み合わせて実現しています。表示されている文字は、すべてTextクラスのイン
スタンスで、同心円は、Circleクラスのインスタンスを4つ重ねたものです。

そんな具合に、違うクラスから派生したインスタンスですが、最終的にはどれも
Parts型として一括管理されています。これは、Box, Text, Circleそれぞれのク
ラスがPartsインターフェースを実装しているからこそなせるわざ。別々のクラ
スでも、共通要素をインターフェースに抽出することで「同じ種類もの」として
管理することが出来ます。

とにかく、オブジェクト指向を理解してもらうのに、こんなサンプル作るのは、
自分くらいのもんだろうと、つくづく(でもちょっぴり誇りに)思っています。
何年か後に「JavaCurryでオブジェクト指向の意味を理解しました」というプロ
グラマが現れることを、心より願ってやみません。
 */
↑ 先頭へ戻る
/**
 * 愛のJava256本ノック for Java 5.0
 * Javaサンプルソース ver0.2C "JavaCurry"
 * Parts.java 「カレーのパッケージをオブジェクト指向で表現」
 *
 * 2005/09/23 制作:安永ノリカズ
 *
 * 【コンパイル&実行方法】
 *     >javac *.java
 *     >java JavaCurry
 * 【キーワード】
 *     インターフェース(interface)
 * 【試してみよう】
 *     JavaCurry.java参照。
 */
import java.awt.Graphics;

public interface Parts {
    public void M00(Graphics A00);
}

/* ■ クラスの外でちょっと一言 ■
インターフェースとは、クラスの「振る舞い方」のみを定義するものです。この
Partsインターフェースは、「Graphicsオブジェクトを受け取って、描画する」
という動作を定義していますので、M00には「いかにも描画しそう」な名前をつ
けてあげてください。
具体的にどのように描画するかは、このインターフェースを実装している、Box,
Circle, Textの各クラスでそれぞれ記述してます。

JavaCurryでは、このPartsインターフェースが、ピリッと効いたスパイスになっ
てますので、DrawPanel.javaにて、このインターフェースがどのように利用され
てるのか、その風味をじっくりご賞味ください。
 */
↑ 先頭へ戻る

安永ノリカズのゲーム制作&Javaサンプル集 / Java初心者用サンプル集『愛のJava256本ノック』