タイミングゲーム「荒野のガンマン」
やってみよう
敵は強いです。
がんばって倒すか、プログラムを直して敵を弱くして倒してください。
素材準備
下記の音声ファイル、画像ファイルが必要になります。
用意が難しい場合は、適宜コメントアウトやコードの改変をして、素材なしでも動くようにしてください。
-
bgm.mp3
ゲームに合いそうなお好きな曲を
-
gunPrepare.mp3
銃を撃つ準備の音(リロード音)
-
gunShot.mp3
銃を撃つ音
-
background.png
荒野の背景画像

-
chara_1_right.png
プレイヤーキャラの画像(右向き)

-
chara_2_left.png
敵キャラの画像(左向き)

import ddf.minim.*;
PImage backgroundImage;PImage playerImage;PImage enemyImage;int keikaJikan = 0;int faze = 1; // 1 = START, 11 = READY, 21 = GO, 31 = RESULTint result = 0; // 1 = win, 2 = lose
Minim minim;AudioPlayer bgm;AudioPlayer gunPrepare;AudioPlayer gunShot;
void setup(){ size(600, 400); minim = new Minim(this); bgm = minim.loadFile("bgm.mp3"); gunPrepare = minim.loadFile("gunPrepare.mp3"); gunShot = minim.loadFile("gunShot.mp3"); backgroundImage = loadImage("background.png"); playerImage = loadImage("chara_1_right.png"); enemyImage = loadImage("chara_2_left.png");
bgm.loop();}void draw(){ background(0); image(backgroundImage, 0, 0); keikaJikan += 1; println(keikaJikan); if(faze == 1){ drawImage(playerImage, 60, 300, 0); drawImage(enemyImage, 480, 300, 0); textAlign(CENTER); fill(0); textSize(64); text("CLICK TO START", width/2, height/2); } if(faze == 11){ drawImage(playerImage, 60, 300, 0); drawImage(enemyImage, 480, 300, 0); if(keikaJikan < 200){ textAlign(CENTER); fill(0); textSize(64); text("READY", width/2, height/2); } if(keikaJikan > 500){ changeFaze(21); } } if(faze == 21){ drawImage(playerImage, 60, 300, 0); drawImage(enemyImage, 480, 300, 0); textAlign(CENTER); fill(0); textSize(64); text("GO", width/2, height/2); if(keikaJikan > 10){ if(result == 0){ result = 2; gunShot.play(); gunShot.rewind(); } } if(keikaJikan > 300){ changeFaze(31); } } if(faze == 31){ if(result == 1){ // win drawImage(playerImage, 60, 300, 0); drawImage(enemyImage, 480, 300 + 80, 270); } if(result == 2){ // lose drawImage(playerImage, 60 + 60, 300 + 10, 90); drawImage(enemyImage, 480, 300, 0); } textAlign(CENTER); fill(0); textSize(64); if(result == 1){ text("WIN!!", width/2, height/2); } if(result == 2){ text("LOSE...", width/2, height/2); } }}void drawImage(PImage pImage, int x, int y, int kakudo){ pushMatrix(); translate(x, y); rotate(radians(kakudo)); image(pImage, 0, 0); popMatrix();}void changeFaze(int newFaze){ faze = newFaze; keikaJikan = 0; if(newFaze == 11){ gunPrepare.play(); gunPrepare.rewind(); }}void mousePressed(){ switch(faze){ case 1: changeFaze(11); break; case 21: if(result == 0){ result = 1; gunShot.play(); gunShot.rewind(); } break; case 31: result = 0; changeFaze(1); break; }}