シューティングゲーム
int gameOver = 0; //ゲームオーバーかどうかを管理する変数。1ならゲームオーバー。 int gameClear = 0; //クリアしたかを管理する変数。1ならゲームクリア。 float x = 200, y = 750; //プレイヤー座標 float bx1 = x, by1 = y; //弾(Bullet)の座標 int bShot1 = 0; //1なら弾を描画する float bx2 = x, by2 = y; //弾(Bullet)の座標 int bShot2 = 0; //1なら弾を描画する float tx1 = 50, ty1 = 600, tf1 = 1; //敵を描画するかを管理する変数を追加 float tx2 = 50, ty2 = 400, tf2 = 1; //tfnが1のときのみ描画する int count = 0; int coolingTime = 0; void setup() { size(400, 800); //縦長 rectMode(CENTER); //長方形の座標指定を中心に imageMode(CENTER); //画像の座標指定を中心に } void draw() { count++; if (gameOver == 1) { //もしも、ゲームオーバーなら background(255); textSize(40); text("GameOver", 50, 400); return; } if (gameClear == 1) { //もしも、ゲームクリアなら background(255); textSize(40); text("GameClear", 50, 400); return; } background(255); //背景(変数を使わない図形)を描く場合は、ここにプログラムを記述 fill(0, 0, 255); rectMode(CORNER); //これまで通りに背景を書くために、長方形の描画モードを変更 rect(0, 0, 400, 10); //ゴールライン rectMode(CENTER); //長方形の座標指定を中心に //1体目の敵の動きと当たり判定 if (tf1 == 1) { fill(255, 0, 0); ellipse(tx1, ty1, 32, 32); //敵のサイズは32に固定 tx1 += 2; if (tx1 > 250) { tx1 = 50; } float td1 = dist(x, y, tx1, ty1); if (td1 < 32) { gameOver = 1; } } //2体目の敵の動きと当たり判定 if (tf2 == 1) { fill(0, 255, 0); ellipse(tx2, ty2, 32, 32); //敵のサイズは32に固定 tx2 -= 2; if (tx2 < 0) { tx2 = 250; } float td2 = dist(x, y, tx2, ty2); if (td2 < 32) { gameOver = 1; } } //プレイヤーの移動 //マウス座標に向かってプレイヤーが動くようにする if ( mouseY < y ) { y -= 1; } else { y += 1; } if ( mouseX < x ) { x -= 1; } else { x += 1; } fill(255, 0, 0); rect(x, y, 32, 32); //プレイヤーを描画 if (y < 10) { //もしも、プレイヤーのy座標が10未満なら gameClear = 1; //ゲームクリアにする } //ここから弾1の処理 if (bShot1 == 1) { //bShot1が1のときだけ、弾の処理を実行 coolingTime++; fill(0, 0, 0); //弾1の色 ellipse(bx1, by1, 10, 10); //弾1の描画 by1 -= 5; if (by1 < 0) { //もし,by1が0未満なら bShot1 = 0; //弾の描画を終了 coolingTime=0; } //敵と弾の当たり判定 float d = dist(tx1, ty1, bx1, by1); if (d < 5+16) { tf1 = 0; } d = dist(tx2, ty2, bx1, by1); if (d < 5+16) { tf2 = 0; } } //ここから弾2の処理 if (bShot2 == 1) { //bShot1が1のときだけ、弾の処理を実行 fill(0, 0, 0, 50); //弾1の色 ellipse(bx2, by2, 30, 30); //弾1の描画 by2 -= 5; if (by2 < 0) { //もし,by1が0未満なら bShot2 = 0; //弾の描画を終了 } //敵と弾の当たり判定 float d = dist(tx1, ty1, bx2, by2); if (d < 5+16) { tf1 = 0; } d = dist(tx2, ty2, bx2, by2); if (d < 5+16) { tf2 = 0; } } } void mousePressed() { //クリックしたときに if (bShot1 == 0) { //bShot1が0なら(弾が発射されていなければ) bShot1 = 1; //弾を発射 bx1 = x; //弾の座標をプレイヤーの座標に by1 = y; } if (bShot2 == 0 && coolingTime > 10) { //bShot1が0なら(弾が発射されていなければ) bShot2 = 1; //弾を発射 bx2 = x; //弾の座標をプレイヤーの座標に by2 = y; coolingTime = 0; } } void keyPressed() { if (keyCode == ENTER) { saveFrame("image-####.png"); } }
Copy