Arduboy ゲームプログラム 「ケイブ」
Arduboyでゲーム開発へ戻る
●操作方法とルール
・上下キーで自機(小さな円)を上下に移動
・洞窟の天井と床にぶつからないように飛び続ける
・プログラムの行数 100行
●ゲームサンプルコード03「ケイブ」
#include <Arduboy2.h>
Arduboy2 arduboy;
BeepPin1 beep;
const int WALLMAX = 32;
int y[WALLMAX];
int h[WALLMAX];
int scene = 0;
int cntr = 0;
int score = 0;
int pl_x = 30;
int pl_y = 32;
void scroll() { // 洞窟をスクロールする
int last = WALLMAX-1;
for(int i=0; i<last; i++) {
y[i] = y[i+1];
h[i] = h[i+1];
}
h[last] = 48-score/20;
if(h[last]<10) h[last] = 10;
int r = rand()%3;
if(r==0 && y[last]-h[last]/2> 1) y[last]--;
if(r==1 && y[last]+h[last]/2<62) y[last]++;
}
void cave() { // 洞窟を描く
for(int i=0; i<WALLMAX; i++) arduboy.fillRect(i*4, y[i]-h[i]/2, 4, h[i], WHITE);
arduboy.drawCircle(pl_x, pl_y, 1, BLACK);
arduboy.setTextColor(WHITE);
arduboy.setCursor(74, 0);
arduboy.setTextSize(1);
arduboy.print("SC ");
arduboy.print(score);
}
void setup() {
arduboy.begin();
arduboy.setFrameRate(30);
beep.begin();
}
void loop() {
if (!(arduboy.nextFrame())) return; // 次のフレームまで処理をスキップ
int x;
cntr++;
beep.timer();
arduboy.clear();
switch(scene) {
case 0:
for(int i=0; i<WALLMAX; i++) {
y[i]=32;
h[i]=62-i/2;
}
pl_x = 30;
pl_y = 32;
scene = 1;
break;
case 1: // タイトル
cave();
arduboy.setTextColor(BLACK);
arduboy.setCursor(22, 12);
arduboy.setTextSize(2);
arduboy.print("C A V E");
arduboy.setCursor(25, 48);
arduboy.setTextSize(1);
arduboy.print("Press[A]or[B]");
if(arduboy.pressed(A_BUTTON) || arduboy.pressed(B_BUTTON)) {
scene = 2;
score = 0;
}
break;
case 2: // ゲーム
score++;
scroll();
if(arduboy.pressed(UP_BUTTON) && pl_y>2) pl_y -= 2;
if(arduboy.pressed(DOWN_BUTTON) && pl_y<60) pl_y += 2;
x = pl_x/4;
if(pl_y<y[x]-h[x]/2 || y[x]+h[x]/2<pl_y) {
scene = 3;
cntr = 0;
}
cave();
break;
case 3: // ゲームオーバー
cave();
arduboy.setCursor(37, 24);
arduboy.setTextColor(BLACK);
if(cntr%24<12) arduboy.setTextColor(WHITE);
arduboy.print("GAME OVER");
arduboy.drawCircle(pl_x, pl_y, 1+cntr%4, WHITE);
arduboy.drawCircle(pl_x, pl_y, 2+cntr%4, BLACK);
if(cntr%4==1) beep.tone(beep.freq(30+rand()%200), 3);
if(cntr==30*4) scene = 0;
break;
}
arduboy.display();
}
Arduboyでゲーム開発のページへ移動