プログラミング実習I : 課題 R7
目標
- 教科書の 6 章(特に,6.1 節および 6.2 節)の内容を理解し,クラスやオブジェクトについての基礎知識を得る
R7_1
準備
- 教科書 p.101 から p.112 までをよく読み,6.1 節および 6.2 節の内容を理解する
課題
- 以下の質問とその回答( 1 〜 3 行程度 )をレポートにまとめよ(プログラムの作成は行わなくてよい)
- リスト 6.1 と 6.3 のそれぞれの DisplayFace クラスを比較して,変数を利用することのメリットとしてどのようなことが説明されていたか?
- 6.1 節で,クラスはオブジェクトの何であると説明されていたか?
- 6.1 節で,フィールドはどのように説明されていたか?
- オブジェクトとの関係が分かるように答えよ
- フィールドはクラスのどこに定義しなければならないか?
- リスト 6.7 にある Face.java を見たり,Web 検索で調べたりして答えよ
- Student クラスのオブジェクト st が定義されている.Student クラスの外から,オブジェクト st のフィールド name (文字列型)に "Taro Kangaku" を代入するにはどのように記述したらよいか?
- リスト 6.8 を参考にせよ
- コンストラクタを使うと何ができるか?
- 教科書にどのように書かれていたか答えよ
- Student クラスが定義されている.Student クラスのコンストラクタにおいて,フィールド name (文字列型)に "Taro Kangaku" を代入するにはどのように記述したらよいか?
- リスト 6.11 を参考にせよ
- this とは何か?
- 教科書を参考にしたり,Web 検索をしたりして答えよ.
- デフォルトコンストラクタとは何か?また,どのような時に追加されるか?
- 教科書にどのように書かれていたか答えよ.
R7_2
準備
- 以下を作成して,実行せよ.
- リスト 6.11 の Face.java
- リスト 6.12 の DisplayFaceObject.java
- ※ リスト 6.9 の Start.java にある main メソッドは,DisplayFaceObject クラスに含めること
- ※ MyFrame クラスではなく MyFrame2 クラスを用いること
課題
- リスト 6.11 の Face.java を修正し,Face クラスが R7_2 で作成する Face クラスの仕様 を満たすように変更せよ
- リスト 6.12 の DisplayFaceObject.java を修正し,以下の図のように 2 つの顔マーク(1 と 2) が描画されるようにせよ
- この条件 を満たすように DisplayFaceObject.java を修正すること
実行例
図1: R7_2 で作成するプログラムで表示されるウィンドウの例 (学籍番号を 5 で割った余り n = 4)
条件
- 顔マーク 1 は,以下を満たす
- 左端と上端の座標 (50, 50)
- 顔マーク 1 の幅 w と高さ h は (w, h) = (50 + 10*n, 60 + 10*n) である
- ※ ただし n は学籍番号を 5 で割った余りとする
- 顔マーク 2 は,以下を満たす
- 左端と上端の座標 (200, 100)
- 顔マーク 2 の幅 w と高さ h は (w, h) = (100 + 10*n, 80 + 10*n) である
- ※ ただし n は学籍番号を 5 で割った余りとする
- それぞれの顔マークの色は好きなものでよい
提出物
- 作成した Face.java
- 作成した DisplayFaceObject.java
R7_2 で作成する Face クラスの仕様
フィールド
- x : 顔マークの左端 \(x\) 座標(int)
- y : 顔マークの上端 \(y\) 座標(int)
- w : 顔マークの幅(int) (R7_2 で追加)
- h : 顔マークの高さ(int) (R7_2 で追加)
コンストラクタ
- public Face(int x, int y, int w, int h)
- 引数
- x : 顔マークの左端の \(x\) 座標
- y : 顔マークの上端の \(y\) 座標
- w : 顔マークの幅 (R7_2 で追加)
- h : 顔マークの高さ (R7_2 で追加)
- 動作
- 引数で与えられた値を,各フィールドに代入する
- 引数
メソッド
- public void draw(MyFrame2 frame)
- 引数
- frame: MyFrame2 クラスのオブジェクト
- 動作
顔マークを以下の図のレイアウトで描画する (R7_2 で変更)
図2: 顔マークのレイアウト
- 引数
Face クラスのテスト
- draw メソッド
Face.java に以下の main メソッド(テストコード)を追加して実行し,図 3 のように描画されれば ok
public static void main(String[] Args) { int ww = 400, wh = 400; // ウィンドウの幅と高さ int x = 150; // 顔の左端 x 座標 int y = 150; // 顔の上端 y 座標 int w = 100; // 顔の幅 int h = 120; // 顔の高さ MyFrame2 f = new MyFrame2(); Face face = new Face(x, y ,w, h); face.draw(f); int wu = w/5; int hu = h/6; f.setColor(255, 0, 0); for (int i = 0; i <= 5; i++) { f.drawLine(x + i*wu , 0, x+ i*wu, wh); } for (int i = 0; i <= 6; i++) { f.drawLine(0, y + i*hu, ww, y + i*hu); } }
テストの実行結果
図3: Face クラスの draw メソッドのテスト結果
R7_3
課題
- R7_2 で作成した Face.java を修正し,Face クラスが R7_3 で作成する Face クラスの仕様 を満たすように変更せよ
- リスト 6.14 を参考にして R7_2 で作成した DisplayFaceObject.java を修正し,以下の図のように 2 つの顔マーク(1 と 2) が拡大・縮小を行うアニメーションを実行するようにせよ
- この条件 を満たすように DisplayFaceObject.java を修正すること
- レポートには,a を以下の値に設定した場合の実行結果(スクリーンショット)を貼り付けること
- a = 1.1 + 0.05*(学籍番号を 5 で割った余り)
- レポートには,a を以下の値に設定した場合の実行結果(スクリーンショット)を貼り付けること
実行例
図4: R7_3 で作成するプログラムで表示されるアニメーション(ループ再生)の例 (学籍番号を 5 で割った余り n = 4 の場合)
- この条件 を満たすように DisplayFaceObject.java を修正すること
条件
- アニメーション総コマ数は 150 とする
- ※ リスト 6.14 では,for の条件にある 30 がアニメーション総コマ数となっている
- 顔マーク 1 は,以下を満たす
- 左端と上端の座標 (50, 50)
- ※ リスト 6.14 では x が増加する(顔マークが右に移動する)が,作成するプログラムでは x の値は固定される
- アニメーション開始時における顔マーク 1 の幅 w1 と高さ h1 は (w1, h1) = (20, 24) である (R7_3 で変更)
- 顔マーク 1 の幅 w と高さ h は,各時刻で a 倍に変化する (R7_3 で追加)
- ※ ただし,a の値を変えられるようにすること
- 顔マーク 1 の幅 w が 10 × w1 以上もしくは w1 未満になったら,a に 1/a を代入する(逆数にする)
- 例えば,a = 1.3 の場合,顔マーク 1 の幅 w は以下のように変化する
- \(20\) → \(20\times1.3\) → \(20\times1.3^2\) → … → \(20\times1.3^8\) → \(20\times1.3^9 (\approx 212.1)\) → \(20\times1.3^8\) → \(20\times1.3^7\) → … → \(20\times1.3\) → \(19\) → \(20\times1.3\) → \(20\times1.3^2\) → …
- 左端と上端の座標 (50, 50)
- 顔マーク 2 は,以下を満たす
- 左端と上端の座標 (200, 100)
- ※ リスト 6.14 では x が増加する(顔マークが右に移動する)が,作成するプログラムでは x の値は固定される
- アニメーション開始時における顔マーク 2 の幅 w2 と高さ h2 は (w2, h2) = (240, 200) である (R7_3 で変更)
- 顔マーク 2 の幅 w と高さ h は,各時刻で 1/a 倍に変化する (R7_3 で追加)
- a の値は,顔マーク 1 と同じものを用いる
- 左端と上端の座標 (200, 100)
- それぞれの顔マークの色は好きなものでよい
注意事項
- 顔マークの重なりや,ウィンドウの外へのはみだしは気にしなくてよい
提出物
- 作成した Face.java
- 作成した DisplayFaceObject.java
- 図 4 では,時刻 i を表示しているが,提出するプログラムでは表示する必要はない
R7_3 で作成する Face クラスの仕様
フィールド
- x : 顔マークの左端の \(x\) 座標(int)
- y : 顔マークの上端の \(y\) 座標(int)
- w : 顔マークの幅(double) (R7_3 で型を変更)
- h : 顔マークの高さ(double) (R7_3 で型を変更)
コンストラクタ
- public Face(int x, int y, double w, double h)
- 引数
- x : 顔マークの左端の \(x\) 座標
- y : 顔マークの上端の \(y\) 座標
- w : 顔マークの幅
- h : 顔マークの高さ
- 動作
- 引数で与えられた値を,各フィールドに代入する
- 引数
メソッド
- public void draw(MyFrame2 frame)
- 引数
- frame : MyFrame2 クラスのオブジェクト
- 動作
顔マークを以下の図のレイアウトで描画する
図5: 顔マークのレイアウト
- 引数
R7_4
課題
- リスト 6.20 を参考に,R7_4 で作成する Car クラスの仕様 を満たす Car クラスを作成せよ
- ※ Car クラスのオブジェクトは,ウィンドウ上を移動する自動車を表す
- リスト 6.21 を参考に,以下の図のように垂直線を越えるまで 2 台の自動車が移動するアニメーションを実行する DisplayCarObject.java を作成せよ
- 垂直線(x = b) を境に左側のエリアを 0,右側のエリアを 1 としている
- x < b を満たす座標 (x, y) は,エリア 0 に存在する
- x > b を満たす座標 (x, y) は,エリア 1 に存在する
- 以下の 条件 を満たすように DisplayCarObject.java を作成すること
実行例
図6: R7_4 で作成するプログラムで表示されるアニメーション(2倍速,ループ再生)の例 (学籍番号を 5 で割った余り n = 4 の場合)
- 垂直線(x = b) を境に左側のエリアを 0,右側のエリアを 1 としている
条件
- ウィンドウの幅と高さを (600, 500) にすること
- run メソッドの冒頭で setSize(600, 500) を実行すること
- 垂直線(x = b) の b は 300 とすること
- drawLine を用いて,垂直線 (x = 300) を描画すること (※ drawLine は MyFrame2 クラスを継承すると標準で使える)
- 色は好きな色でよい
- drawLine(300, 0, 300, 500) と書けばよい
- ※ MyFrame2 クラスの drawLine の引数は R5_6 で作成する drawLine と同じ
- drawLine を用いて,垂直線 (x = 300) を描画すること (※ drawLine は MyFrame2 クラスを継承すると標準で使える)
- 自動車 0 は以下を満たす
- 中心座標の初期値を (50+10*n, 350+10*n) とすること
- ※ n は,学籍番号を 5 で割った余り
- n によらず,初期状態で エリア 0 に存在することになる
- 幅と高さは (32, 24) とすること
- 中心座標の変化量を (n+5, -n-5) とすること
- ※ n は,学籍番号を 5 で割った余り
- 中心座標の初期値を (50+10*n, 350+10*n) とすること
- 自動車 1 は以下を満たす
- 中心座標の初期値を (450-10*n, 250-10*n) とすること
- ※ n は,学籍番号を 5 で割った余り
- n によらず,初期状態で エリア 1 に存在することになる
- 幅と高さは (32, 24) とすること
- 中心座標の変化量を (-n-5, n+5) とすること
- ※ n は,学籍番号を 5 で割った余り
- 中心座標の初期値を (450-10*n, 250-10*n) とすること
- 自動車が垂直線を越えた場合,その自動車の移動を停止させること
- car クラスの stop メソッドの呼び出せばよい
- アニメーションは,2 台の自動車が停止するまで続けること
- それぞれの自動車の色を好きな色で描画すること
提出物
- 作成した Car.java
- 作成した DisplayCarObject.java
- 図 6 では,以下を表示しているが,提出するプログラムでは表示する必要はない
- 垂直線(x = b) の b の値
- 時刻 i
- 各自動車の番号(0 or 1)
- 各自動車が存在するエリア番号
- 図 6 では,以下を表示しているが,提出するプログラムでは表示する必要はない
R7_4 で作成する Car クラスの仕様
フィールド
- x : 自動車の中心 \(x\) 座標(int)
- y : 自動車の中心 \(y\) 座標(int)
- w : 自動車の幅 (int)
- h : 自動車の高さ (int)
- vx : 自動車の中心 \(x\) 座標の変化量(int)
- vy : 自動車の中心 \(y\) 座標の変化量(int)
コンストラクタ
- public Car(int x, int y, int w, int h, int vx, int vy)
- 引数
- x : 自動車の中心 \(x\) 座標
- y : 自動車の中心 \(y\) 座標
- w : 自動車の幅
- h : 自動車の高さ
- vx : 自動車の中心 \(x\) 座標の変化量
- vy : 自動車の中心 \(y\) 座標の変化量
- 動作
- 引数で与えられた値を,各フィールドに代入する
- 引数
メソッド
- public void draw(MyFrame2 frame)
- 引数
- frame : MyFrame2 クラスのオブジェクト
- 動作
- 自動車を以下の図のレイアウトで描画する
- ※ タイヤの半径は h/6
- ※ フィールドの (x, y) は, 自動車の中心座標 であることに注意すること!
- 自動車を以下の図のレイアウトで描画する
以下のコードをコピーすればよい
public void draw(MyFrame2 frame) { int ux = w/8; int uy = h/6; frame.fillRect(x-ux*2, y-uy*3, ux*4, uy*2); frame.fillRect(x-ux*4, y-uy, ux*8, uy*2); frame.fillOval(x-ux*2-uy, y+uy, uy*2, uy*2); frame.fillOval(x+ux*2-uy, y+uy, uy*2, uy*2); }
図7: 自動車のレイアウト
- 引数
- public void move()
- 動作
- 中心座標の変化量 (vx, vy) だけ,中心座標 (x, y) を変化させる
- 動作
- public void stop()
- 動作
- 自動車を停止させる
- 中心座標の変化量 (vx, vy) を共に 0 にする
- 自動車を停止させる
- 動作
- public boolean isMoving()
- 戻り値
- 動いているかどうかを表す真偽値
- 動いている → true
- 動いていない → false
- 動いているかどうかを表す真偽値
- 動作
- 動いている場合(vx ! = 0 または vy != 0 の場合) は,true を返す
- そうでない場合は false を返す
- 戻り値
R7_5 (オプション)
課題
- R6_4 で作成した Animation.java をベースに,R7_5 で作成する Ball クラスの仕様 を満たす Ball クラスを作成せよ
- ※ Ball クラスのオブジェクトは,R6_4 における四角形にぶつかったら跳ね返る円(ボール)を表す
- R6_4 で作成した Animation.java を参考に,以下の図のように 2 つの円(A と B) が四角形の辺にぶつかると跳ね返るアニメーションを実行する BallGame クラスを作成せよ
- 注:円同士がぶつかっても跳ね返る必要はない
- この条件 を満たすように BallGame クラスを作成すること
実行例
図8: R7_5 で作成するプログラムで表示されるアニメーション(2倍速,ループ再生)の例 (学籍番号の下 1 ケタ n = 5 の場合)
条件
- BallGame クラスは MyFrame2 クラスを継承すること
- R6_4 と同様に,アニメーションに関して以下とすること
- アニメーション総コマ数 animeT = 300
- sleep に与える待機時間 wtime = 0.1
- R6_4 と同様に,四角形に関して以下とすること
- 左上の座標 (bx, by) = (50, 100)
- 幅と高さ (w, h) = (300, 230)
- 好きな色で描画すること
- ただし,円の色と背景色とは異なる色とすること
- 円に関して
- 円 A の初期値は以下とすること
- 円の中心座標 (x, y) = (55 + 5*n, 105 + 5*n)
- ※ n は学籍番号の下 1 ケタ
- 円の中心座標の変化量 (dx, dy) = (5, 5)
- 半径 = 5
- 円の色 = 赤
- 円の中心座標 (x, y) = (55 + 5*n, 105 + 5*n)
- 円 B の初期値
- 円の中心座標 (x, y) = (105 + 5*n, 155 + 5*n)
- ※ n は学籍番号の下 1 ケタ
- 円の中心座標の変化量 (dx, dy) = (-5, 5)
- 半径 = 5
- 円の色 = 黄緑
- 円の中心座標 (x, y) = (105 + 5*n, 155 + 5*n)
- R6_4 と同様に,四角形の辺に円がぶつかったら円が跳ね返ってみえるように,中心座標 (x, y) の変化量(dx, dy) を適切に変化させること
- ただし,跳ね返った後に,円の移動量は変化しないものとする
- R6_4 と同様に,四角形の辺に円がぶつかったら,円の色を別の色に変化させること
- 円 A の初期値は以下とすること
補足
- BallGame クラス内に,以下のような当たり判定を行う bound メソッドを作成すると,プログラムが書きやすくなる(※必要なければ作成しなくてよい)
- public void bound(Ball ball, int bx, int by, int w, int h)
- 引数
- ball : 当たり判定を行う Ball クラスのオブジェクト
- bx : 当たり判定を行う四角形の左上 \(x\) 座標
- by : 当たり判定を行う四角形の左上 \(y\) 座標
- w : 当たり判定を行う四角形の幅
- h : 当たり判定を行う四角形の高さ
- 動作
- 引数で与えられた円(Ball オブジェクト) ball が四角形の辺にぶつかっているかどうかを判定し,ぶつかっていた場合は R6_4 と同様にして以下を行う
- 円が跳ね返るように変化量 (dx, dy) を適切に変化させる
- 円の色を別の色に変化させる
- 引数で与えられた円(Ball オブジェクト) ball が四角形の辺にぶつかっているかどうかを判定し,ぶつかっていた場合は R6_4 と同様にして以下を行う
- 引数
- public void bound(Ball ball, int bx, int by, int w, int h)
- 考察のポイント
- クラスを作成するメリットなどを,Ball クラスを作らずに R6_4 を 2 つの円のアニメーションに変更した場合のことを想像してまとめてみよ
提出物
- 作成した Ball.java
- 作成した BallGame.java
- 図 8 では,時刻 t を表示しているが,提出するプログラムでは表示する必要はない
R7_5 で作成する Ball クラスの仕様
フィールド
- x : 円の中心 \(x\) 座標(int)
- y : 円の中心 \(y\) 座標(int)
- dx : 円の中心 \(x\) 座標の変化量(int)
- dy : 円の中心 \(y\) 座標の変化量(int)
- r : 円の半径(int)
- c : 円の色(int)
コンストラクタ
- public Ball(int x, int y, int dx, int dy, int r, int c)
- 引数
- x : 円の中心 \(x\) 座標
- y : 円の中心 \(y\) 座標
- dx : 円の中心 \(x\) 座標の変化量
- dy : 円の中心 \(x\) 座標の変化量
- r : 円の半径
- c : 円の色
- 動作
- 引数で与えられた値を,各フィールドに代入する
- 引数
メソッド
- public void draw(MyFrame2 frame)
- 引数
- frame : MyFrame2 クラスのオブジェクト
- 動作
- 中心座標 (x, y) および半径 r の円を fillOval を用いて frame 上に描画する (R6_4 の fillCircleWithCC メソッドと同じ)
- ただし,色は以下とすること(※ カッコ内は RGB 値)
- c が 0 の時 → 赤(255, 0, 0)
- c が 1 の時 → 黄緑(0, 255, 0)
- c が上記以外の時 → 青(0, 0, 255)
- ただし,色は以下とすること(※ カッコ内は RGB 値)
- 中心座標 (x, y) および半径 r の円を fillOval を用いて frame 上に描画する (R6_4 の fillCircleWithCC メソッドと同じ)
- 引数
- public void move()
- 動作
- 円の中心座標 (x, y) を変化量 (dx, dy) によって変化させる
- 動作
R7_6 (オプション)
準備
- R7_5 で作成した Ball.java および BallGame.java をコピーする
課題
- R7_5 で作成した BallGame.java を修正し,以下の図のように 3 つの円(A,B および C)が 2 つの四角形のどちらかの辺にぶつかると跳ね返るアニメーションを実行するようにせよ
- 赤い円は仕切りの左側の領域を移動する.
- 仕切りにぶつかると,仕切りの位置(仕切りの \(x\) 座標 mx)が右に移動する
- 青い円は仕切りの右側の領域を移動する.
- 仕切りにぶつかると,その仕切りの位置が左に移動する.
- この条件 を満たすように,BallGame クラスを作成すること
実行例
図9: R7_6 で作成するプログラムで表示されるアニメーション(2倍速,ループ再生)の例 (学籍番号の下 1 ケタ n = 5 の場合)
- 赤い円は仕切りの左側の領域を移動する.
条件
- R7_5 と同様に,BallGame クラスは MyFrame2 クラスを継承すること
- R7_5 と同様に,アニメーションに関して以下とすること
- アニメーション総コマ数 animeT = 300
- sleep に与える待機時間 wtime = 0.1
- 仕切りに関して,以下とすること
- 仕切りの \(x\) 座標 mx の初期値は 200 とすること
- 円が仕切りにぶつかると,以下のように mx を変化させること
- 赤い円がぶつかった場合 → mx を 5 増やす
- 青い円がぶつかった場合 → mx を 5 減らす
- 四角形に関して,以下とすること
- 仕切りを境に左側の四角形は,以下とすること
- 左上の座標 (50, 100)
- 幅および高さ (mx - 50, 230)
- 仕切りを境に右側の四角形は,以下とすること
- 左上の座標 (mx, 100)
- 幅および高さ (350 - mx, 230)
- 好きな色で描画すること
- ただし,円の色と背景色,他方の四角形とは異なる色とすること
- 仕切りを境に左側の四角形は,以下とすること
- 円に関して,以下とすること
- 円 A は以下で初期化すること
- 円の中心座標 (55 + 5*n, 105 + 5*n)
- ※ 左側の四角形内に存在する円
- ※ n は学籍番号の下 1 ケタ
- 円の中心座標の変化量 (dx, dy) = (5, 5)
- 半径 = 5
- 円の色 = 赤
- 円の中心座標 (55 + 5*n, 105 + 5*n)
- 円 B は以下で初期化すること
- 円の中心座標 (mx + 5 + 5*n, 105 + 5*n)
- ※ 右側の四角形内に存在する円
- ※ n は学籍番号の下 1 ケタ
- 円の中心座標の変化量 (dx, dy) = (-5, 5)
- 半径 = 5
- 円の色 = 青
- 円の中心座標 (mx + 5 + 5*n, 105 + 5*n)
- 円 C
- 円の中心座標 (mx + 5 + 5*n, 105 + 5*n)
- ※ 右側の四角形内に存在する円
- ※ n は学籍番号の下 1 ケタ
- 円の中心座標の変化量 (dx, dy) = (5, 5)
- 半径 = 5
- 円の色 = 青
- 円の中心座標 (mx + 5 + 5*n, 105 + 5*n)
- 円 A は以下で初期化すること
補足
- R7_5 で作成した BallGame クラス内の bound メソッドを作り変えたり,全く別の方法で作成していってもよい
- レポートで,どのような方法で作成したか簡単にまとめること
提出物
- 作成した Ball.java
- 作成した BallGame.java
- 図 9 では,時刻 t および仕切りの \(x\) 座標 mx を表示しているが,提出するプログラムでは表示する必要はない
R7_7 (オプション)
課題
- R7_6 で作成した BallGame.java を修正し,図 10 のように 6 つの円が仕切りのある四角形の中で跳ね返るアニメーションを作成せよ
- 赤い円は仕切りの左側の領域を移動する.
- 仕切りにぶつかると,仕切りの位置が右に移動する
- 黄緑の円は仕切りの左側の領域を移動する. (R7_6 との違い)
- ただし,仕切りの位置が以下より左にある場合は,ぶつかると仕切りの位置が右に移動する.
- 四角形の左端 + (四角形の幅 の 2/3)
- それ以外の場合は,仕切りを通過し,色が青に変化する.
- ただし,仕切りの位置が以下より左にある場合は,ぶつかると仕切りの位置が右に移動する.
- 青い円は仕切りの右側の領域を移動する.
- 仕切りにぶつかると,その仕切りの位置が左に移動する.
- この条件 を満たすように,BallGame クラスを作成すること
実行例
図10: R7_7 で作成するプログラムで表示されるアニメーション(2倍速,ループ再生)の例 (学籍番号の下 1 ケタ n = 5)
- 赤い円は仕切りの左側の領域を移動する.
条件
- R7_6 と同様に,BallGame クラスは MyFrame2 クラスを継承すること
- R7_6 と同様に,アニメーションに関して以下とすること
- アニメーション総コマ数 animeT = 300
- sleep に与える待機時間 wtime = 0.1
- 仕切りに関して,以下とすること
- R7_6 と同様に,仕切りの \(x\) 座標 mx の初期値は 200 とすること
- 円が仕切りにぶつかると,以下のように mx を変化させること
- 赤い円,または,黄緑の円がぶつかった場合 → mx を 5 増やす
- 青い円がぶつかった場合 → mx を 5 減らす
- R7_6 と同様に,四角形に関して,以下とすること
- 仕切りを境に左側の四角形は,以下とすること
- 左上の座標 (50, 100)
- 幅および高さ (mx - 50, 230)
- 仕切りを境に右側の四角形は,以下とすること
- 左上の座標 (mx, 100)
- 幅および高さ (350 - mx, 230)
- 好きな色で描画すること
- ただし,円の色と背景色,他方の四角形とは異なる色とすること
- 仕切りを境に左側の四角形は,以下とすること
- 6 つの円に関して,以下とすること
- ※ 6 つの円には,0, 1, …, 5 番の番号がつけられているとする
- i 番の円は以下で初期化すること
- 円の中心座標 (55 + 5*n, 105 + 5*n + 15*i)
- ※ n は学籍番号の下 1 ケタ
- 円の中心座標の変化量 (dx, dy)
- i = 2 および 5 の時 → (dx, dy) = (-5, 5)
- i が上記以外の場合 → (dx, dy) = (5, 5)
- 半径 = 5
- 円の色
- i が偶数の場合 → 赤
- i が奇数の場合 → 黄緑
- 円の中心座標 (55 + 5*n, 105 + 5*n + 15*i)
提出物
- 作成した Ball.java
- 作成した BallGame.java
- 図 10 では,時刻 t と仕切りの \(x\) 座標 mx を表示しているが,提出するプログラムでは表示する必要はない