Presentation is loading. Please wait.

Presentation is loading. Please wait.

第6回:ラケットを動かそう! (キーボードによる物体の操作)

Similar presentations


Presentation on theme: "第6回:ラケットを動かそう! (キーボードによる物体の操作)"— Presentation transcript:

1 第6回:ラケットを動かそう! (キーボードによる物体の操作)
2002年度ゲームプログラミング ゲームプログラミング 第6回:ラケットを動かそう!  (キーボードによる物体の操作)

2 キーボードの入力を処理する ライブラリーのパッド入力関数を使用
2002年度ゲームプログラミング キーボードの入力を処理する ライブラリーのパッド入力関数を使用 ゲーム機のパッド入力に対応していて、方向キーとボタン(4個)の入力情報を得られる プレイヤーごとに方向キー(4種類)、ボタン(4種類)をあらかじめ登録しておくことが必要 ※ボタンを沢山使いたい人は、ライブラリーを使用せず別途プログラムを書くことも可能

3 使用するキーの登録 使用キーを登録する関数 joy_keymap(1,VK_UP,VK_DOWN, VK_LEFT, VK_RIGHT,
2002年度ゲームプログラミング 使用するキーの登録 使用キーを登録する関数 joy_keymap(1,VK_UP,VK_DOWN,            VK_LEFT, VK_RIGHT,            'Z', 'X', 'C', 'V'); 最初の引数:登録するプレイヤー 続く4つ:上下左右の方向にあたるキー 最後の4つ:ボタン1~4(英数字は‘で囲む) whileループの前に登録しておこう

4 ボタン入力情報の取得 ボタン情報を取得する関数 int joy_bt(1,1);
2002年度ゲームプログラミング ボタン入力情報の取得 ボタン情報を取得する関数    int joy_bt(1,1); 最初の引数がプレイヤー番号、二つ目の引数がボタン番号(1,1だとZキー) int型の関数なので、整数の値が返ってくる  返り値は2種類    1:ボタンが押されている    0:ボタンが押されていない

5 キー入力に対応する文を表示 処理の流れ if(Zキーが押されている){ Hello!と表示 } if(Xキーが押されている){
2002年度ゲームプログラミング キー入力に対応する文を表示 処理の流れ  if(Zキーが押されている){    Hello!と表示  }  if(Xキーが押されている){    Good evening! と表示

6 if文の条件 もしZキーが押されていたら if( joy_bt(1,1)==1) // joy_btが1なら 以下のようにも書ける
2002年度ゲームプログラミング if文の条件 もしZキーが押されていたら   if( joy_bt(1,1)==1) // joy_btが1なら 以下のようにも書ける   if( joy_bt(1,1)!=0) // joy_btが0以外なら 条件に等号、不等号ではなく単独の値を入れると、入れた値が0かそうでないかで判断する。(!=0に相当)   if( joy_bt(1,1)) // joy_btが0以外なら

7 文字の表示(おさらい) 表示準備 #include “stdio.h” //プログラムの頭に
2002年度ゲームプログラミング 文字の表示(おさらい) 表示準備   #include “stdio.h” //プログラムの頭に   char message[256]; //関数の頭に 実際の表示   sprintf(message,”hello”),   txt_window(0,0,640,480), txt_print(message);

8 バーを動かそう バーもボールと同様に、どこにあるかを示すのに変数を使う。 左右にしか動かないので、barxだけ宣言
2002年度ゲームプログラミング バーを動かそう バーもボールと同様に、どこにあるかを示すのに変数を使う。 左右にしか動かないので、barxだけ宣言   int barx=100;  //宣言と初期値代入 gp1.bmpの3段目に、横に並べて美しいバー用のキャラクターがある   →それを横に3つ並べてバーに

9 バーの表示 バーのキャラクターをdef_char()で設定する 0番はボール(0,0) 1、2番は壁(0,32)、(32,32)だったので、
2002年度ゲームプログラミング バーの表示 バーのキャラクターをdef_char()で設定する    0番はボール(0,0)    1、2番は壁(0,32)、(32,32)だったので、    3番をバー(0,64)に設定   def_char(sp,3,0,64,32,32); for文で3回繰り返して横に並べよう   for(i=0;i<3;i++){     sp_set(sp,3,barx+i*32,448,1);   }

10 方向キーの入力を得る 方向キーの入力を得る関数 int joy_dir(1); //引数:プレイヤー番号
2002年度ゲームプログラミング 方向キーの入力を得る 方向キーの入力を得る関数   int joy_dir(1);  //引数:プレイヤー番号 返り値は押されている方向によって1~9が返る     789     456   (キーボードのテンキーに対応)     123 例:↑を押している:返り値8   ←と↓を押している:返り値1   何も押していない:返り値5

11 joy_dirを判定に使う 上が押されていたら if(joy_dir(1)==8) // 返り値が8
2002年度ゲームプログラミング joy_dirを判定に使う 上が押されていたら    if(joy_dir(1)==8)  // 返り値が8 斜め上(左右との同時押し)にも対応させたい場合は    if(joy_dir(1)>=7) // 返り値7以上 左が押されていたら    if(joy_dir(1)==4) // 返り値が4 斜め左(上下と同時)にも対応させたい場合は    if(joy_fir(1)%3==1) // 3で割ると1余る

12 方向キーでバーを動かす バーを動かす →barxの値を変える 右が押されていたら →barxの値を増やす 左が押されていたら
2002年度ゲームプログラミング 方向キーでバーを動かす バーを動かす    →barxの値を変える 右が押されていたら    →barxの値を増やす 左が押されていたら    →barxの値を減らす バーが画面からはみ出ないように注意

13 押した回数をカウント(1) 回数の保存と表示(前回の復習) int p = 0; // 宣言
2002年度ゲームプログラミング 押した回数をカウント(1) 回数の保存と表示(前回の復習)   int p = 0; // 宣言   sprintf(message,”%3d”,p);     //変数の値をmessageに書く ボタンを押したらpを足す  →単純にif (joy_bt(1,1))p++;とするのは×  →押しっぱなしの状態と、押した瞬間とを区別することが必要

14 押した回数をカウント(2) 直前に押されていたかで状態を判別 今押されていて、直前にも押されていた →押しっぱなし
2002年度ゲームプログラミング 押した回数をカウント(2) 直前に押されていたかで状態を判別 今押されていて、直前にも押されていた    →押しっぱなし 今押されていて、直前に押されていない    →新しく押した、回数を1増やす 直前に押されていたかを保存する変数を用意    int oldbutton=0; // 宣言(関数の頭に)    oldbutton=joy_bt(1,1); //状態の保存            (毎回更新→whileの中に)

15 押した回数をカウント(3) 処理の流れ while(){ if(今押されている && oldbutton==0) p++;
2002年度ゲームプログラミング 押した回数をカウント(3) 処理の流れ while(){   if(今押されている && oldbutton==0) p++;   キーの状態をoldbuttonに保存   表示   wait(10);   // キー情報更新 }

16 左右に動き続ける 常に動いている物を表現したい場合、 毎回どれくらい動くかを示す変数を用意する。 (ボールx,yにおけるdx,dyと同様)
2002年度ゲームプログラミング 左右に動き続ける 常に動いている物を表現したい場合、  毎回どれくらい動くかを示す変数を用意する。  (ボールx,yにおけるdx,dyと同様)  int bardx=0;      //宣言と初期値代入 押したキーに対応してbardxを変えてやる  if(右を押したら) bardx=1;  if(左を押したら) bardx=-1;  if(下を押したら) bardx=0;  barx=barx+bardx; //barxをbardxだけ足す

17 バーの動くスピードを変える バーのスピードを示す変数を準備 int barspeed=1; スピードを示す変数使ってバーを動かす
2002年度ゲームプログラミング バーの動くスピードを変える バーのスピードを示す変数を準備   int barspeed=1; スピードを示す変数使ってバーを動かす   if(右を押した) bardx=barspeed;   if(左を押した)bardx=-barspeed; ボタンを押したらスピードを変更   if(ボタン1押した)barspeed=1;   if(ボタン2押した)barspeed=2;

18 おまけ 方向キー以外の特殊キー VK_SHIFT :シフトキー VK_SPACE :スペースキー(‘ ’でもOK)
2002年度ゲームプログラミング おまけ 方向キー以外の特殊キー   VK_SHIFT :シフトキー   VK_SPACE :スペースキー(‘ ’でもOK) 沢山のキーを使いたい場合に。  if ( GetKeyState(‘A’) & 0x80 )    // aキーが押されていたら


Download ppt "第6回:ラケットを動かそう! (キーボードによる物体の操作)"

Similar presentations


Ads by Google