ゲームを中断

2008年度ゲームプログラミング
ゲームプログラミング
第4回:ラケットを動かそう!
(方向キーによる物体の操作)
2008年度ゲームプログラミング
方向キーでバーを動かそう
 バーを描く
→前回までに習ったことの応用
 キーの入力処理
→今回新しく学ぶ
2008年度ゲームプログラミング
バーの表示
 塗りつぶし四角形を描くメソッド
fillRect(x,y,w,h)を使う。
gc.setColor(バーの色);
gc.fillRect(x座標,y座標、幅、高さ);
2008年度ゲームプログラミング
バーの移動

左右に動くのでバーのx座標を変数に。
int barx; //宣言
barx=80; //初期化
gc.fillRect(barx,237,36,2);
//barxの場所にバーを描く

barxの値を変化させるとバーが動く
2008年度ゲームプログラミング
キーの入力を処理する
 gc.isKeyPress()
でキーが押されたか
を判断できる
 どのキーが押されたかを判断して、左右
が押された時のみbarxの値を変える
2008年度ゲームプログラミング
方向キーの入力を得る

updateGameの中を以下のように書く
if(gc.isKeyPress(gc.KEY_RIGHT)) {
右が押された時の処理;
} if(gc.isKeyPress(gc.KEY_LEFT)){
左が押された時の処理;
}
2008年度ゲームプログラミング
ボールを逃したらゲームを中断

ゲームをストップさせる
→updateGame()内で
ボール等の動きの処理を
行わないようにする

ゲームが中断しているかどうかを判断する為に
、ゲームの状態を示す変数を使う
int gameState;//宣言
gameState=0;//初期化(0:ゲーム中 1:中断)
2008年度ゲームプログラミング
ゲームを中断

updateGameは自動的に呼ばれるので、
中断している時は何もしないで終了する

メソッドの最初に以下を加える
if(gameState!=0)return;
※return
そのメソッドの実行を終了する。
以後の命令は実行されない
2008年度ゲームプログラミング
ボールを逃したかどうかの判定
 ボールが下の壁に来た時にボールのあ
る場所にバーがなかったら、ゲームを中
断(gameStateを1に)
 ボールとバーの座標を比較して、ボー
ルが落ちてきた場所にバーがあるか判
断する
2008年度ゲームプログラミング
ボールを逃したかどうかの判定
if (ボールが下に来た){
if(ボールのある場所にバーがある){
跳ね返り処理;
}
else {
gameState=1; //中断
}
}
2008年度ゲームプログラミング
ボールを逃したかどうかの判定

ボールがバーの左端にある場合
○
=== → x == barx

ボールがバーの右端にある場合
○
=== → x == barx+24

xがbarxとbarx+24の間なら、跳ね返す
2008年度ゲームプログラミング
バーの動くスピードを変える
バーのスピードを示す変数を準備
int barspeed; barspeed=1;
 スピードを示す変数使ってバーを動かす
if(右を押している) barx+=barspeed;
if(左を押している)barx-=barspeed;
 ボタンを押したらスピードを変更
if(ボタン1押している)barspeed=1;
if(ボタン2押している)barspeed=2;

2008年度ゲームプログラミング
方向キー以外のボタンの判定

gc.isKeyPress()に渡す値を変えてやる
if(gc.isKeyPress(gc.KEY_0))
0が押されている
If(gc.isKeyPress(gc.KEY_4))
4が押されている
「*」はgc.KEY_ASTERISK
「#」はgc.KEY_SHARP
2008年度ゲームプログラミング
その他のキー入力処理

gc.isKeyPress()はキーを押しているかどう
かを判定しました。他にも以下の三種類の命
令があります。
– gc.isKeyPushed()
• キーを押した瞬間か調べる
– gc.isKeyReleased()
• キーを離した瞬間か調べる
– gc.getKeyPressLength()
• キーを押している長さを調べる
2008年度ゲームプログラミング
その他のキー入力
if(gc.isKeyPushed(gc.KEY_SELECT) ) {
決定キーが押された時の処理
}
If(gc.isKeyReleased(gc.KEY_0) ){
0キーが離された時の処理
}
if(gc.getKeyPressLength(gc.KEY_1) > 10){
1キーを一秒以上押し続けた時の処理
}
2008年度ゲームプログラミング
3回受け損ねたら終了

受け損ねた回数を保存する変数を用意
int miss; //宣言
miss=0; //初期化
受け損ねたらmissを増やし、3回以上ならゲ
ームを中断、3回未満なら跳ね返してやる
2008年度ゲームプログラミング
下壁の跳ね返り処理を改造
if(バーが有る){
跳ね返り処理
}
else{
miss数を1増やす;
if(missが3以上)ゲーム中断;
else{
跳ね返り処理
}
}
2008年度ゲームプログラミング
「0」を押すと初期化
初期化するメソッドを作って、0が押された時に呼ぶ
 メソッドの書き方
型 名前(引数){
命令1
命令2
、、、
}
void init(){
x=10;dx=1;barx=・・・; などなど
}


メソッドの使い方
if(0が押された) init();
※コンストラクタ(game())内からも呼んでおくと、起動時にも初期化される
2008年度ゲームプログラミング
受け逃してもいい回数を表示
 ボールを描く関数を適宜呼ぶ
動かしているボールを描画
if(miss<=1) 左上に書く
if(miss==0) 左上の1個分隣に書く