Processingで簡単なブロック崩しを作っています。
ブロックにボールが1回当たるとA~Zのうちランダムの一文字が表示され、その表示されたアルファベットを入力するとブロックが消えるという機能を付けたいです。(つまり2段階)
"表示されたアルファベットを入力すると消える"というのができていません。
教えていただけると幸いです。
該当のソースコード
float gameCR;//画面管理
float bx = 450, by = 340, br = 40;//ボールのx,y座標と直径
float bspx, bspy;//ボールの速度
float boast = 1.03;//ボール加速3%
int score;
void setup() {
size( 1200, 800 );//画面の大きさ
colorMode( HSB, 100, 100, 100 );
frameRate(100);
gameFS();//画面の初期化
//ボール速度定義
bspx = 2.0;
bspy = 2.0;
setupBlockLetter();
}
void draw() {
background( 55, 0, 60 );
if ( gameCR == 0 ) {
gameTitle();//タイトル画面
} else if ( gameCR == 1 ) {
gamePlay();//プレイ画面
} else {
gameSet();//終了画面
}
}
//各画面でのアクション
void gameFS() {
gameCR = 0;
bx = 450;
by = 340;
bspx = 2;
bspy = 2;
score = 0;
for (int i=0; i < block.length; i++) {
for (int j=0; j < block[i].length; j++) {
block[i][j] = 2;
}
}
}
void gameTitle() {
Maintitle();
}
void gamePlay() {
cursol();//カーソル自体
cursolmv();//カーソルの動き
ball();//ボール自体
ballmv();//ボールの動き
block();//ブロック自体
}
void gameSet() {
textSize(140);
fill(84, 69, 100);
text( "GAME OVER", 350, 300 );
textSize(80);
fill(78, 100, 74);
text( "CLICK TO RETRY", 420, 700 );
}
//画面移行
void mousePressed() {
if ( gameCR == 0 ) {
gameCR=1;
return;
}
if ( gameCR == 2 ) {
gameFS();
}
}
void Maintitle(){
textSize( 180 );
fill( 84, 69, 100 );
text("WARD BLOCK", 290, 300);
}
int a=0;
boolean plusFlg = true;
int iro2 = (int)random(0, 100);
void ball() {
int iro = a%101;
if (iro >= 100) {
iro2 = (int)random(0, 100);
}
fill(iro, iro2, 100);
circle(bx, by, br);
if (iro>=100) {
plusFlg = true;
}
if (plusFlg == true) {
a = a+1;
} else {
a = a-1;
}
}
void ballmv() {
nextx = bx;
nexty = by;
bx += bspx;
by += bspy;
if (by > height) {
gameCR = 2;
}
if ( bx + br/2 > width ) bspx *= -1;
if ( bx - br/2 < 0 ) bspx *= -1;
if ( by - br/2 < 0 ) {
by = br/2;
bspy *= -1;
}
//ボールとカーソルの当たり判定
if ( ( bx + br/2 > mouseX && bx - br/2 < mouseX + cw ) //x座標に対して
&&( cy < by+br/2 && by+br/2 < cy+ch ) ) { //y座標に対して
bspy = -bspy*boast;
}
}
int[][] block= new int[12][5];
char[][] blockLetter = new char[12][5];
float nextx, nexty;//ブロック判定を定義
//ブロック
void block() {
int blx, bly;//ブロックのx座標とy座標
for ( int i = 0; i < block.length; i++ ) {
for ( int j = 0; j < block[i].length; j++ ) {
if ( (i+j)%2 == 0 ) {
fill( 64, 46, 100 );
} else {
fill( 64, 20, 100 );
}
if (block[i][j] > 0) {
blx=100i;
bly=40(j+1);
blockHitCheck(i, j, blx, bly);//当たり判定を定義
rect( blx, bly, 100, 40); textSize( 20 ); fill(0); text(Character.toUpperCase(blockLetter[i][j]), blx+45, bly+25); stroke( 13, 76, 86 ); strokeWeight( 2 ); } }
}
}
//ブロックとボールの当たり判定
void blockHitCheck(int ii, int jj, int blx, int bly ) {
if ( !((blx < bx) && (blx+95 > bx) && (bly < by) && (bly+35 > by)) ) {
return;
}
block[ii][jj] = 1;
if (block[ii][jj] == 1 && blockLetter[ii][jj] == 0x0) {
int r = int(random(0, 25));
char letter = (char)(97+r);
blockLetter[ii][jj] = letter;
}
//ここから上、左右のブロック当たり判定
if ( (nextx > blx) && (blx+100 > nextx) ) {
bspy = -bspyboast;//上下のブロック当たり判定
return;
}
if ( (nexty > bly) && (bly+40 > nexty) ) {
bspx = -bspxboast;//左右のブロック当たり判定
return;
}
bspx = -bspxboast;
bspy = -bspxboast;
}
float cx = 600, cy = 700;//カーソルのx,y座標
float cw = 100, ch = 20;//カーソルの幅、高さ
//カーソル
void cursol() {
fill( 0, 0, 100 );
rect( cx, cy, cw, ch, 5);
}
void cursolmv() {
cx = mouseX;
if (( cx + cw > width )) {
cx = width - cw;
}
}
void setupBlockLetter() {
for(int i = 0; i < blockLetter.length; i++) {
for(int j = 0; j < blockLetter[i].length; j++) {
/*
int r = int(random(0, 25));
char letter = (char)(65+r);
blockLetter[i][j] = letter;
*/
blockLetter[i][j] = (char)0;
}
}
}
あなたの回答
tips
プレビュー