次にBasic Graphics ライブラリの基本的な構成と利用方法を説明する。
全公開メソッドについては、API レファレンスを参照。
パッケージ名: jp.ac.tuis.basic
クラス名: BasicGraphics
jarファイル: basic.jar
公開 コンストラクタ:
public BasicGraphics ();
公開 メソッド:
public void cls();
public void locate(int x, int y);
public void print(String string);
public void print(char c);
public void println(String string);
public void println(char c);
public void sleep(long millis);
Basic Graphics ライブラリを利用するアプリケーションは、クラスを一つ呼び出す
(BasicGraphicsクラス)のみで良い。
BasicGraphicsクラスを生成するには、以下の一行をプログラムに入れる必要がある。
BasicGraphics g = new BasicGraphics();
この一行で、デフォルトのサイズの黒い背景のウィンドウが表示される。
もちろん、BasicGraphicsクラスが存在する jp.ac.tuis.basic パッケージも import
する必要がある。
import jp.ac.tuis.basic.*;
以下は、サンプルプログラム
import jp.ac.tuis.basic.*;
public class Test{
public static void main(String[] args){
BasicGraphics g = new BasicGraphics();
}
}
これをコンパイルし、実行させるためには、Basic Graphicsクラスライブラリ
(jarファイル)が必要になる。事前準備として、basic.jarを作業ディレクトリ
にコピーし、コンパイル・実行時に読みこめるようにクラスパス
(CLASSPATH環境変数)を設定する必要がある。クラスパスについては、以下に
示すように、実行時にオプション設定するのがとりあえず簡単である。
以下は、Linux で上記のサンプルプログラム Test.java をコンパイル、実行する例である。
%javac -classpath basic.jar:. Test.java
%java -classpath basic.jar:. Test
※ -classpath オプションで、"basic.jar" (Basic Graphicsクラスライブラリ) と
"." (カレントディレクトリ) を設定している。
以下は、Windowsで上記のサンプルプログラム Test.java をコンパイル、実行する例である。
%javac -classpath basic.jar;. Test.jar
%java -classpath basic.jar;. Test
※ Windowsの場合は、classpath のデリミタが :(コロン) でなく ;(セミコロン)
という点に注意する。
Basic Graphics のテキスト描画機能は全て、画面の一文字のサイズを基本として
計算される。デフォルトのウィンドウのサイズは、横40文字、縦20文字である。
表示されたウィンドウを閉じるには、タイトルバーの[X]ボタンを押すか、
javaコマンドを実行したコンソール上で Ctrl + C を押せば良い。
画面に文字を表示させるには、printまたはprintlnメソッドを利用する。
print(およびprintln)メソッドは、System.out.print()メソッド
(およびSystem.out.println()メソッド)と利用方法は同じである。
以下に HelloWorld と表示するサンプルを示す。
import jp.ac.tuis.basic.*;
public class HelloWorld{
public static void main(String[] args){
BasicGraphics g = new BasicGraphics();
g.println("HelloWorld!");
}
}
これだけウィンドウ上の左上に"HelloWorld!"の文字が表示される。
今までの System.out.print()を g.print()に起きかえるだけで同じように
ウィンドウに表示させることができる。また、20行を超えた場合、
通常のコンソールと同じようにスクロールしながら表示行を一行づつ追加
していく。
今までのコンソール出力と違うのは、画面の任意の位置に文字を表示できる
点である。文字の出力場所を指定するには、locate()メソッドを使う。
locate()メソッドは、出力を開始する画面上の位置を、文字数の座標で
指定する。座標は、(x座標、y座標)として、指定する。
デフォルトの40x20文字の画面の場合、左上が(0,0)、右下が(39,19)となる。
locate()は、表示を指定したいprint()文の前に呼ぶ必要がある。
以下が画面の中央付近に、'X' を表示した例である。
import jp.ac.tuis.basic.*;
public class Cross{
public static void main(String[] args){
BasicGraphics g = new BasicGraphics();
g.locate(20,10);
g.print('X');
}
}
最後に、画面に表示された文字を全て消したい場合は、cls()メソッドを利用する。
cls は CLear Screen の略である。以下の例では、描画された文字例を
きれいさっぱり消している。cls()後に、locate()を指定しなかった場合、
次にprintされた文字列は、左上の(0,0)から表示される。
import jp.ac.tuis.basic.*;
public class Cross{
public static void main(String[] args){
BasicGraphics g = new BasicGraphics();
g.locate(20,10);
g.print('X');
g.cls();
}
}
だが、画面全部ではなく、一部だけ消したい場合は、print()メソッドを利用して、
消したい文字の上に空白を描画することによって、「消す」ことが出来る。
以下は、上の例と同じく、描画した文字列を消している。
import jp.ac.tuis.basic.*;
public class Cross{
public static void main(String[] args){
BasicGraphics g = new BasicGraphics();
g.locate(20,10);
g.print('X');
g.locate(20,10);
g.print(' ');
}
}
最後に、簡単なアニメーションを行う例を説明し、sleep()メソッドの利用方法に
ついて触れる。sleep()メソッドは、引数で指定したミリ秒の間、プログラムが
一時的に動作を止める。指定したミリ秒が過ぎると、sleep()の次の文から制御が
続行する。
アニメーションの基本は、ある画面を短い時間表示して、
次に少し違った(描かれたものが少し動いた)画面を短い時間表示して、
また少し違った(描かれたものが少し動いた)画面を短い時間表示して、という処理を
繰り返し、見ている人に描かれたものが連続的に動いているかのように
見せる手法である。
よって、print()で描画した文字をsleep()で指定した一定時間表示したあと、
文字を一度消してから少し移動した位置で文字を表示してsleep()し、
また文字を消して少し移動した位置で文字を表示してsleep()という処理を
繰り返せば、簡単なアニメーションが実現できる。
以下は、電車のように、文字が画面を左から右へ少し移動する例である。
import jp.ac.tuis.basic.*;
public class HelloWorld{
public static void main(String[] args){
BasicGraphics g = new BasicGraphics();
g.locate(10,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(11,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(12,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(13,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(14,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(15,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(16,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(17,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(18,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(19,10);
g.print(" HelloWorld!");
g.sleep(200);
g.locate(20,10);
g.print(" HelloWorld!");
g.sleep(200);
}
}
上記の例では、文字を消す代わり、文字列の一番左に空白を入れて、
この空白で前の文字列の'H' を消しています。
また、for ループや、while ループを利用すれば、簡単に
無限のアニメーションが作成できることに気がついたと思います。
課題 1
上記に説明したBasicGraphicsクラスのメソッドを利用して、
文字(または文字で描いた絵)を上下左右に様々なアニメーションを
繰り返すプログラムを作成せよ。
ヒントとしては、locate()で指定する座標を変数で設定し、
この変数をうまく変化させることによって、簡単に
繰り返しアニメーションを実現できる。