Processing3.5.4です。
簡便な玉当てゲームを作成
基本的な動作
実行すると、ウィンドウ内に動くボール(円)とバーがある
ボールがウィンドウの下側へ出たら(消えれば)、ウィンドウ内の
再スタート用の位置から、再び動き始める
バーがウィンドウの下の壁に沿うようにあり、マウスの操作で左右
に動くようにする
マウスの動作による限界は、そのまま許容(バーの左端の位置など)
ボールがバーの上部に当たれば、ボールを上へ跳ね返す
得点は開始時において0点とする
ボールがバーに当たれば +1点
ボールがウィンドウの下へ出れば(バーで打ち返せず消えれば)-1点
停止ボタンで終了
これを次のような条件で作らなければいけません。
(1) ウィンドウサイズは横480ピクセル、縦480ピクセルとする。
(2) 動く円(ボールとも記述)の動作における開始位置について、x座標100ピクセル、
y座標240ピクセルとする。※ボールの色は任意に変更して可
(3) 速度に関する変数の値について、横方向2、縦方向3とする。
(4) 左右の壁に当たった場合、横方向の向きを変え、上の壁に当たった場合、縦方
向の向きを変えるとする。
(5)マウスで操作可能な横棒(以下バーと記述する)をlineメソッドを用いて、下の壁に
描画する。バーの左の端のx座標の位置をマウスのx座標の位置とする。またバーの
横幅は100ピクセルとする。strokeCapメソッドの利用については任意とする。
(6) 前面・背面の関係において、ボールはバーより前面とする。また得点の表示は
ボールより前面とする。
(7) バーの太さは30ピクセルとする。今回の題材ではウィンドウの下側の境界線上に
線を描画しているので、実際に目に見えるのは、半分の15ピクセルであるとする。
(8) 上から下へ動くボールにバーの上部が当たると、縦方向の向きを変えて跳ね返る
ようにする。
(9) バーの横側(左右)にボールが衝突した場合については、簡単のため扱わない。
(10) マウスのクリックにより、何らかの変化をもたらす。
(11) 得点を右上に表示させる。文字の大きさや位置は、任意に変更しても可。
この条件の(1)から(4)までは出来ました。
/* *ball6_4 *簡単な玉当てゲームの準備 */ float bx = 100, by = 240; //ball_x,ball_y,(ボールのとして利用する)円の中心のx座標とy座標の値 float diameter = 30;// float vx = 2, vy = 3; float restartX = 240, restartY = 15; //再スタートの際のボールの位置 /* adjustment_parameter ,調節用パラメータ、壁やバーへのめり込み防止に用いる値、 動作を確認しながら値を調節*/ float ap = 0.5; int score = 0; //得点 void setup() { size(480,480); textSize(32);//表示させる得点の文字の大きさ } void draw() { background(204); //再スタート処理 if (bx < 0 || width < bx || by < 0 || height < by ) { bx = restartX; by = restartY; } // (ボールとして利用する)円 fill(0,255,0); ellipse(bx,by,diameter,diameter); //ボールが右の壁に当たると、横方向の向きを変える if (bx + diameter / 2 > width){ vx = -vx; bx = width - diameter / 2 - ap; //念のため壁の内側にボールの中心を戻しておく } //ボールが左の壁に当たると、横方向の向きを変える if (bx - diameter / 2 < 0){ vx = -vx; bx = diameter / 2 + ap; //念のため壁の内側にボールの中心を戻しておく } //ボールが上の壁に当たると、縦方向の向きを変える if (by - diameter / 2 < 0){ vy = -vy; by = diameter/ 2 + ap; //念のため壁の内側にボールの中心を戻しておく } // (ボールとして利用する)円の位置の変化 bx += vx; by += vy; //ボールの中心のy座標が下の壁を越えればスコア(得点)を1減らす if (height < by) { score -= 1; // score = score -1; } //得点の表示 fill(255,255,255); text("Score: "+score,300,60); // 横300ピクセル、縦60ピクセルの位置に得点を表示 }
(5)から(11)までが出来ません。
続きを教えてください。
回答1件
あなたの回答
tips
プレビュー