アクションゲーム
boolean jump = false; //ジャンプ中ならtrue boolean hit = false; float x=10, y=300, w=32, h=32, vx=1, vy=0; float gravity = 0.1; //重力加速度(簡易版) float t1x = 0, t1y = 350, t1w = 200, t1h = 20, t1Vx = 1, t1Vy = 1; float t2x = 200, t2y = 315, t2w = 180, t2h = 10, t2Vx = 1, t2Vy = 1; void setup() { size(400, 400); } void draw() { hit = false; background(255); fill(0, 0, 0); //自キャラの移動 //マウスの方向に移動、自動的に右に移動など、動きを記述 x++; //ジャンプ時の上下方向の移動 if (jump==true) { vy = vy + gravity; y = y + vy; } //y方向についても同様の処理を記述 //ひな形プログラムを各自で埋めること //足場1の処理 rect(t1x, t1y, t1w, t1h); if (isOnGround(x, y, w, h, t1x, t1y, t1w, t1h)) { vy = 0; y = t1y-h; jump = false; hit = true; } //足場2の処理 t2y+=t2Vy; if (t2y < 300) { t2Vy = 1; } else if (t2y > 330) { t2Vy = -1; } rect(t2x, t2y, t2w, t2h); if (isOnGround(x, y, w, h, t2x, t2y, t2w, t2h)) { vy = 0; y = t2y-h; jump = false; hit = true; } //他の足場の処理を書く //足場を動かしても良い //衝突していないなら下に移動する if (hit==false) { y+=2; } rect(x, y, w, h); //自キャラ //画面端-自キャラの幅まで行けばクリア if (x > width-w) { text("Game Clear!!", 100, 50); noLoop(); } //画面下までいけばゲームオーバー if (y > height) { text("Game Over!!", 100, 50); noLoop(); } } //プレイヤーが足場に乗っているかを判定するメソッド boolean isOnGround(float x1, float y1, float w1, float h1, float x2, float y2, float w2, float h2) { boolean hit = false; if ((x1+w1) >= x2 && x1 <= (x2+w2)) { if ((y1+h1) >= y2 && y1 <= (y2+h2)) { if ( (y1+h1) <= (y2+h2/2)) { hit = true; } } } return hit; } boolean checkCollisionRectVsRect(float x1, float y1, float w1, float h1, float x2, float y2, float w2, float h2) { boolean hit = false; if ((x1+w1) >= x2 && x1 <= (x2+w2)) { if ((y1+h1) >= y2 && y1 <= (y2+h2)) { hit = true; } } return hit; } void mousePressed() { if (jump == false) { jump = true; vy = -5; } } void keyPressed() { if (keyCode == ENTER) { saveFrame("image-####.png"); } }
Copy