コンテンツにスキップ

タイミングゲーム「荒野のガンマン」

やってみよう

敵は強いです。

がんばって倒すか、プログラムを直して敵を弱くして倒してください。

素材準備

下記の音声ファイル、画像ファイルが必要になります。

用意が難しい場合は、適宜コメントアウトやコードの改変をして、素材なしでも動くようにしてください。

  • bgm.mp3

    ゲームに合いそうなお好きな曲を

  • gunPrepare.mp3

    銃を撃つ準備の音(リロード音)

  • gunShot.mp3

    銃を撃つ音

  • background.png

    荒野の背景画像

    background.png

  • chara_1_right.png

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

    chara_1_right.png

  • chara_2_left.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 = RESULT
int 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;
}
}