1 / 25

ゲームプログラミング

ゲームプログラミング. 第7回:ボールとバーを同時に動かそう  (複数の物体の移動). ボールとバーを動かそう. 前々回の課題   =ボールを動かす 前回の課題   =バーを動かす 前回と前々回の課題を組み合わせる   →ボールとバーが動く. 処理の流れ. main() {   変数の宣言   キー、画像の準備 while(){    バーの移動    ボールの移動    ボールとバーの表示 } }. 変数の宣言. ボールの座標を示す x,y; ボールの移動量を示す dx,dy; バーの座標を示す barx;

birch
Download Presentation

ゲームプログラミング

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2002年度ゲームプログラミング ゲームプログラミング 第7回:ボールとバーを同時に動かそう  (複数の物体の移動)

  2. 2002年度ゲームプログラミング ボールとバーを動かそう • 前々回の課題   =ボールを動かす • 前回の課題   =バーを動かす • 前回と前々回の課題を組み合わせる   →ボールとバーが動く

  3. 2002年度ゲームプログラミング 処理の流れ main() {   変数の宣言   キー、画像の準備 while(){    バーの移動    ボールの移動    ボールとバーの表示 } }

  4. 2002年度ゲームプログラミング 変数の宣言 • ボールの座標を示すx,y; • ボールの移動量を示すdx,dy; • バーの座標を示すbarx; • バーの移動量を示すbardx; • スプライトの識別に使うsp,bg; • for文で使うi; • その他(p,message等)

  5. 2002年度ゲームプログラミング キー入力と画像表示の準備 • スプライトを読むload_bmp() • キャラの設定def_char()   ボール、バー、壁、背景の設定が必要 • キー入力の設定joy_keymap() • その他(def_trans()等)

  6. 2002年度ゲームプログラミング ボールとバーの移動 • バー(操作できるものを先に)   キー入力に応じてbardxを変化 barxをbardxだけ増やす   左右の壁の処理 • ボール xをdxだけ増やす yをdyだけ増やす   上下左右の壁の処理

  7. 2002年度ゲームプログラミング ボールとバーの表示 • 背景の表示 • 枠の表示   →バーと重ならないよう下辺をなくす • ボールの表示 • バーの表示 • その他(文字等)

  8. 2002年度ゲームプログラミング ボールをバーで跳ね返そう(1) • 画面下の跳ね返り処理の条件を変える  旧:ボールが画面下に来たら      跳ね返り            ↓  新:ボールが画面下に来た時に、    ボールのある場所にバーがあったら      跳ね返り

  9. 2002年度ゲームプログラミング ボールをバーで跳ね返そう(2) • 重なりはx座標を比較して判断 barxbarx+96 ↓ ↓   ■■■   ←―→   この範囲内にボールがあるか • xがbarxより大きくbarx+96より小さかったら   跳ね返り処理を行う • ボールの大きさも考慮しよう

  10. 2002年度ゲームプログラミング ボールをバーで跳ね返そう(3) • 処理の流れ if(ボールが画面下まで来た){ if(ボールの場所にバーがある){      跳ね返り処理 } }

  11. 2002年度ゲームプログラミング バーで受けられなかったら • ボールが画面の下に来た時に、   ボールの場所にバーがあったら、     →跳ね返り処理   それ以外の場合     →終了処理 • もし○○ならA、そうでなければBという  処理には、 if とelse を使う

  12. 2002年度ゲームプログラミング if文の文法(追加) if ( 条件 ) {     命令A; } else {     命令B; } • 条件を満たしている場合は命令Aを、満たしていない場合は命令Bを実行する

  13. 2002年度ゲームプログラミング プログラムを終わらせる • プログラム実行中はwhile文の中を   無限に繰り返している • プログラムを終了させるにはwhile文の   ループから脱出することが必要 • ループからの脱出にはbreak;を使う break; 直前のfor,while文のループから脱出

  14. 2002年度ゲームプログラミング 処理の流れ if(ボールが画面下に){ if(ボールの場所にバーが){       跳ね返り処理 } else { break; //while脱出 } }

  15. 2002年度ゲームプログラミング while文を抜けた後の処理 • whileを抜けると抜けた直後の命令 prog_end();が実行され、  プログラム終了へ • ウインドウが一瞬で閉じてしまうので、  キー入力を待って、キーが押されたら  終了するよう手を加える

  16. 2002年度ゲームプログラミング キー入力待ちループ • whileを抜けた直後、prog_endの前に置く while(…){ // ()内の条件は前と同じ if(joy_bt(1,1))break; sp_update(); wait(10); } • Zキーが押されたらループ脱出→終了

  17. 2002年度ゲームプログラミング 終了条件の見直し(1) • 受け逃した瞬間はまだボールがバーの高さにある   →ボールが画面の底についたら    ゲームが終わるようにしてみよう       ●        ←跳ね返る高さ__■■■__●_ ←終了する高さ

  18. 2002年度ゲームプログラミング 終了条件の見直し(2) • 跳ね返りの条件 if ( y>= 416 ){ if(ボールとバーが重なる)跳ね返り   } • 終了の条件 if( y >= 448 ) break;//ループ脱出

  19. 2002年度ゲームプログラミング 複数のボールを動かそう • ボールの座標を示す変数x,y、動く量を示す変数dx,dyが、ボールの数だけ必要 • 複数個分の情報の保存に配列変数を使う • 変数:値を入れておく箱 int x;    □ • 配列変数:箱の集まり int x[3];  □□□ • 何番目の箱かは[ ]の中の数値で区別する [0][1][2] ←3個だと0~2まで

  20. 2002年度ゲームプログラミング 配列変数の使い方(1) • 宣言   型 名前 [ 個数 ] ; int x[3]; これで、x[0],x[1],x[2]の3個の変数が 使えるようになる • 初期値を入れたい場合 int x[3]= {100,200,300}; //{ }でくくる x[0]=100,x[1]=200,x[2]=300になる。

  21. 2002年度ゲームプログラミング 配列変数の使い方(2) • 値の代入等   名前 [ 番号 ] のように、[]の中に数値を   入れて何番目の変数かを特定する   それ以外は普通の変数と一緒 x[0]=100;// x[0]に100を代入 x[1]++;// x[1]=x[1]+1; if(x[2]<32) // もしx[2]が32未満なら

  22. 2002年度ゲームプログラミング 配列変数の使い方(3) • for文と組み合わせる for(i=0;i<3;i++){//3回繰り返し x[i]=x[i]+dx[i]; // xにdxを足す } 3回くり返す間に i が1ずつ増えていく。 1回目はx[0]の移動処理、2回目はx[1]、 3回目はx[2]についての移動処理になる

  23. 2002年度ゲームプログラミング 配列変数の使い方(4) • 宣言 int x[3]={100,200,300}; //(y,dx,dyも) • 移動 for(i=0;i<3;i++){//3回繰り返し x[i]にdx[i]を足す y[i]にdy[i]を足す     跳ね返りの処理 } • 登録 for(i=0;i<3;i++)sp_set(sp,0,x[i],y[i],1);

  24. 2002年度ゲームプログラミング 配列を用いた場合の終了処理(1) • breakは一番内側のループしか抜けない  →終了処理でbreakを置いてもfor文から抜けるだけでwhileからは出ない while(){ for(i=0;i<3;i++){ if(…)break; } A; // ←breakからここに飛ぶ }

  25. 2002年度ゲームプログラミング 配列を用いた場合の終了処理(2) • ミスした回数を記憶する変数を宣言して、for文を抜けてからミスを判断してbreakする。 while(){ for(I=0;I<3;I++){ if(…)miss++; } if(miss>=1)break; }  A;// ←breakからここに飛ぶ

More Related