gc.drawString(文字列, x, y)

2006年度ゲームプログラミング
ゲームプログラミング
第6回:得点を表示しよう!
(文字の表示、乱数)
2006年度ゲームプログラミング
文字の表示

メソッドdrawStringを使います。
gc.drawString(文字列, x, y);
文字列:表示したい文字を“ ”で囲います。
画面左上に「A」という文字を表示させる
gc.drawString(“A”,0,0);

2006年度ゲームプログラミング
GAME OVERと表示

ゲームがストップしている状態
→gameState==1の時

paintメソッドの中で、gameStateが1の時の
みGAME OVERと表示する
if(gameState==1){
GAMEOVERと表示
}
2006年度ゲームプログラミング
バーに当たった回数を数える

回数の保存には、変数を使う。int point;

初期値は0

画面下でバーで跳ね返した時に、数を加算
if (バーに当たったら){
跳ね返りの処理
point++; // p=p+1; pを1増やす
}
point = 0;
2006年度ゲームプログラミング
数字の表示

メソッドdrawStringを使います。
文字列の指定で「文字列+変数」という形に
すると、文字列に続いて変数の値が表示され
ます。(変数部分は“ ”ではくくりません)
gc.drawString(“score:”+point, 0,0);
→pointが0の時はscore:0と表示
→pointが10の時はscore:10と表示
2006年度ゲームプログラミング
乱数を使おう
 メソッドrand(int
min,int max)を呼ぶと、
最小値min~最大値maxのうち、無作
為な値が返る。
 何の値が返ってくるかは、実行してみる
まで不明。実行するたびに値が変わる
(だから乱数と呼ぶ)
2006年度ゲームプログラミング
乱反射させよう
乱反射→進む方向をランダム(無作為)に
 跳ね返り処理の時に進む方向、つまり
dx,dyの値をランダムに指定。

(例:上壁の処理)
dx = gc.rand(1,2); →dx が1か2に
dy = gc.rand(-1,1); →dy が-1か 0 か 1に

dx も dy も0にすると停まってしまうので注意
2006年度ゲームプログラミング
スコアをランダムで増やそう
 point=point+1;ではなく、増える値を乱
数で指定
→point=point+乱数
 範囲は1~10;
→ gc.rand(1,10);
2006年度ゲームプログラミング
複数の的を表示しよう
 配列変数を使用。(変数の集まり)
 配列の宣言
int a[]=new int[3];
→a[0],a[1],a[2]の
3個の変数が使えるようになる。
※ a[3]は使えないので注意
2006年度ゲームプログラミング
複数の的の宣言

宣言
static final int BLOCK_NUM = 3;
//定数化しておくと数を増減しやすい
int block_x[]=new int[BLOCK_NUM];
int block_y[]=new int[BLOCK_NUM];
int blockflag[]=new int[BLOCK_NUM];
//座標(x,y)と有無を示す変数を
//BLOCK_NUMの数だけ用意する
2006年度ゲームプログラミング
For文で配列を効率的に使う

for文を使って繰り返し
for(int i=0;i<繰り返す回数;i++){
繰り返す内容。
}
指定した回数繰り返され、かつ、
1回繰り返すごとにiが1づつ大きくなる
→配列を[i]で指定することで、全ての的に同じ
処理を行うことが可能

2006年度ゲームプログラミング
複数の的の初期化

for文を使って繰り返し
for(int i=0;i<3;i++){
blockflag[i]=1;//開始時は的がある
block_x[i]= i *20 + 20;
//x座標を20づつずらす。
block_y[i]= 30;//高さは同じ
}
※座標が全く同じだと的が重なって複数になら
ないので注意(乱数を使っても良い)
2006年度ゲームプログラミング
複数の的を表示

for文を使って繰り返し
for(int i=0;i<3;i++){
if(blockflag[i]==1){
i番目の的を書く;
}
}
→(block_x[i],block_y[i])に描画
2006年度ゲームプログラミング
複数の的のあたり判定(1)

for文を使って繰り返し
for(int i=0;i<3;i++){
if(i番目の的が存在していて、かつ
i番目の的とボールが接触していたら){
blockflag[i]=0;//的を消す
point++;//得点を入れる
}
}
2006年度ゲームプログラミング
複数の的のあたり判定(2)

ボールと(30,50)にある的が接触する条件
→的(30,50)とx,y座標の差が12以内
x - 30 >= -12 && x - 30 <= 12 &&
y - 50 >= -12 && y - 50 <= 12
ボールとi番目の的が接触する条件
→(x,y)と(block_x[i],block_y[i])を比べる
x-block_x[i] >= -12 && x-block_x[i] <= 12 &&
y-block_y[i] >= -12 && y-block_y[i] >= 12
