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

Slides:



Advertisements
Similar presentations
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
Advertisements

復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
HSPでのミニゲーム作成 早稲田実業学校PC班 Y氏.
基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520.
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
6/26 前回復習 for文、while文による繰り返し計算
基礎プログラミングおよび演習 第9回
前回の復習 課題: ある動物の t 年における数は、前年と前々年の数の 合計で表わされるという。すなわち
基礎プログラミングおよび演習 第8回.
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
第4回:ボールを画面内で弾ませよう! (オブジェクトの移動、二次元)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
C言語講座 第4回 ポインタ.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
情報理論2 第6回 小林 学 湘南工科大学 2011年11月15日 〒 神奈川県藤沢市辻堂西海岸1-1-25
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
情報学部 プログラミング体験教室 (初級編)
情報 第2回:状態遷移 その2.
配列(1) 第9回目 [6月15日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題
第7回 条件による繰り返し.
C言語講座 第3回 ポインタ、配列.
DirectX勉強会 第5回.
プログラミング応用 printfと変数.
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
プログラミング入門 電卓を作ろう・パートIV!!.
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
ゲームプログラミング講習  第3章 ゲーム作成 ブロック崩しを作ります ゲームプログラミング講習 第3章 ゲーム作成.
CG2 第3回 小林 学 湘南工科大学 2013年4月22日 〒 神奈川県藤沢市辻堂西海岸1-1-25
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
プログラミング入門第6回 ~レゴロボットのプログラミング6~
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
疑似乱数, モンテカルロ法によるシミュレーション
プログラムの基本構造と 構造化チャート(PAD)
C言語 はじめに 2016年 吉田研究室.
プログラミング序論演習.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
プログラミングⅡ 第2回.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング入門 電卓を作ろう・パートI!!.
某有名落ちものゲーム っぽいものを作ってみる
某有名落ちものゲーム っぽいものを作ってみる
第6回:得点を表示しよう! (文字の表示、乱数)
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

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

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

使用するキーの登録 使用キーを登録する関数 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ループの前に登録しておこう

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

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

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以外なら

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

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

バーの表示 バーのキャラクターを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);   }

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

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余る

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

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

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

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

左右に動き続ける 常に動いている物を表現したい場合、 毎回どれくらい動くかを示す変数を用意する。 (ボール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だけ足す

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

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