<4D F736F F D2089A E838D815B838B B838082C582C D834F F08A7782D42E646F6378>

Similar documents
スライド 1

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

情報システム設計論II ユーザインタフェース(1)

pp2018-pp9base

プログラミング演習 Ⅰ 第 14 回 2017/6/5( 月 ) ゲームを作る クイズ 担当 : 紅林林

Processingをはじめよう

Microsoft PowerPoint P演習 第5回 当たり判定(2)【課題】.pptx

Processingをはじめよう

pp2018-pp4base

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

課題

プログラム言語及び演習Ⅲ

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

配付資料

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

アクション講座 第1回目

模擬試験問題(第1章~第3章)

Microsoft PowerPoint - 10.ppt [互換モード]

プログラミングA

cp-7. 配列

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - C4(反復for).ppt

プログラミングA

情報システム設計論II ユーザインタフェース(1)

Microsoft PowerPoint - 11.pptx

PowerPoint Presentation

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

もう少し詳しい説明 1. アルゴリズムを構築するための 4 枚のサンプル画像を次々と読み込むここで重要なことは画像を順番に読み込むための文字列操作 for 文の番号 i を画像の番号として使用している strcpy は文字列のコピー,sprinf は整数を文字列に変換,strcat は文字列を繋げる

イントロダクション

Microsoft Word - VB_10.doc


Microsoft Word - no11.docx

Microsoft Word - 3new.doc

ポインタ変数

やさしくPDFへ文字入力 v.2.0

14.event-handling

JavaプログラミングⅠ

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Java講座

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

Microsoft PowerPoint - kougi7.ppt

スライド 1

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

課題

人工知能入門

Microsoft PowerPoint - prog07.ppt

CG

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - lec06 [互換モード]

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft Word - 415Illustrator

Mapmakerfor の手順下絵を準備 作者の設定した大きさで作成する場合 下絵にする地図を挿入 トリミングと大きさの調整 大きさを調整した画像を保存 下絵を背景に設定 作成画面の大きさを調整 1 自分で用意した下絵を背景にする場合 下絵を背景に設定 作成画面の大きさを調整 画像が大きい場合シート

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Taro-テキスト.jtd

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

メンバ変数とインスタンス

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

PowerPoint2007基礎編

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識

動画 静止画コンテンツの単純再生 ~ ディスプレイを使ったコンテンツ配信 ~ USB メモリーを使って コンテンツをディスプレイに配信する方法です ディスプレイ USB メモリー コンピューター 2

Microsoft Word - VBA基礎(6).docx

< F2D D E6A7464>

データ構造

Microsoft PowerPoint - algo ppt [互換モード]

プログラミング実習I

PowerPoint2003基礎編

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

画像参照画像送り 5 画像下部に再生ボタンが表示されます 再生ボタンをクリックすると 自動コマ送りされます 1

メソッドのまとめ

医用工学概論  Medical Engineering (ME)   3年前期の医用工学概論実習と 合わせ、 医療の現場で使用されている 医用機器を正しく安全に使用するために必要な医用工学(ME)の 基礎知識を習得する。

PowerPoint プレゼンテーション

2/10 ページ 対象画像の選択 エルスプローラなどで対象の ( 縮小する ) 画像が入っているフォルダーを開きます 例えば 次の通りです 例では 下のフォルダーから反転しているファイル ( つまり 2006_ JPG ) を縮小するものとします 以下の説明では 対象画像 と呼びます

memo

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

情報システム設計論II ユーザインタフェース(1)

情報処理Ⅰ

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

PowerPoint プレゼンテーション

DVDを再生する 176 を観るDVD を観る 本機では 市販されているDVDビデオ またご家庭などで録画されたDVD-VRをお楽しみいただけます DVDビデオとDVD-VRでは操作方法が異なります ご利用になるDVDの種類に該当する箇所をご覧ください 市販のDVD(DVDビデオ ) の再生 176

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 ゲームプログラミング スプライト スプライト Pygame では pygame.sprite を用いる事でスプライトの管理 描画 衝突判定等を簡単に行う事が出来る 此れを利用してキャラクター操作に関する各種機能をスプライトクラスとして 1 個

Microsoft PowerPoint - diip ppt

情報システム設計論II ユーザインタフェース(1)

ToDo: 今回のタイトル

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Microsoft PowerPoint - 03Scratchㆮæfi“作説柔+間帅è³⁄挎;.pptx

バスケットボール

Microsoft Word - no103.docx

Microsoft Word - P doc

Microsoft PowerPoint - OOP.pptx

Microsoft Word - 平成サロン09年2月21日一筆箋作成.doc

■ ジャストスマイルワープロ講座 ■ 新聞を作ってみよう

第2章 Macintoshの基本操作

講習No.9

Transcription:

横スクロールゲームでプログラムを学ぶ キーボードイベント スクロール 速度の異なるアニメーション管理 ここでは 横スクロールゲームを題材にして Processing でキーイベントを扱う方法と 画面をスクロールする方法 ( アルゴリズム ) について学ぶ ゲームを作る流れ 1. どのようなゲームか ルール ゲーム進行などについて大まかな構想を練る 今回は 下図のような横方向に移動するキャラをキーボードで操作して障害物をよけるゲームとする 2. どのように画面上にゲームを表現するか ユーザーインターフェースをどうするか考える (2D 3D 一人称視点 三人称視点 etc.) 今回は 2D で三人称視点 キーボード操作のみでゲームする ( ア ) ウインドウサイズ (800 400) を決める ( イ ) ウインドウ背景画像 ( 両端が繋がったもの スクロール速度を調整できるよう約数の多い大きさを幅に使う 今回は 1600 400) キャラアニメーション画像 障害物画像 得点用文字 数字画像などを用意する ( ウ ) BGM や効果音を用意する コンピューター基礎 Ⅲa 1

3. ルール ゲーム進行 ( ライフ 時間 フラグやハイスコアなど ) をどう管理するか考える ( ア ) 異なる速度の複数アニメーションをどう管理するか?( アニメーションカウンター ) ( イ ) 衝突したかどうかの判定は? 中心間距離? ( ウ ) 壁の扱いをどうするか? 反射させるか ダメージを与えるか? ( エ ) 操作感をどうするか? 慣性系か? 非現実か? 移動速度制限するか? ( オ ) 生存時間やライフ数計算 4. プログラムを機能別に分けて 部分ごとにプログラムを作成する ( ア ) ウインドウにゲーム背景画面を描く ( スクロール画像 ) ( イ ) ゲーム画面にキャラをアニメーションさせる ( ウ ) キーボードを読み取る ( キーボードイベント処理 ) ( エ ) 衝突判定 ( オ ) ゲーム終了を実現する ( カ ) BGM 効果音を鳴らす 5. 難易度 ユーザビリティを調整する プログラミングの整理 setup() draw() stop() と自前の関数内部と関数外部に何を記述するか決める 大域変数の名前や各機能の関数名決める 1. 欄外に import する機能や大域変数を記述する ( ア ) 音声を使うので ミニオーディオライブラリを import し 音声用の大域変数を宣言する BGM を sndbgm という名前の AudioPlayer クラスにする ( エンドレスで鳴らす必要があるから ) 壁にぶつかった時の音を sndtap という名前の AudioSample クラスにする 障害物にぶつかった音を sndcrash という名前の AudioSample クラスにする ゲーム終了の BGM を sndend という名前の AudioPlayer クラスにする コンピューター基礎 Ⅲa 2

( イ ) ゲーム画面サイズを定数で記述する ( ウ ) ゲーム終了判定フラグを大域変数 isgameover として宣言する ( エ ) ゲームの経過時間 ( 秒 :pasttime) やライフポイントを大域変数として宣言する ( オ ) 今回は PNG 画像をアニメーションに使うので PImage とその配列を用意する ( アニメーション画像数を定数 ANIME_FRAMES として宣言する ) 背景用 文字 得点用画像用 PImage を宣言 (imgback imgtext) 2 枚の画像からのなるアニメーション用に要素数 2 の PImage 配列を用意する 2. setup() のなかに初期化作業を記述する ( ア ) ウインドウを作る ( イ ) フレームレートを設定する ( ウ ) 背景画像を PImage に読み込む 画像縦横サイズを変数に格納する ( エ ) アニメーション画像を順番に PImage 配列に読み込む 画像縦横サイズを変数に格納する ( オ ) サウンドを初期化し サウンドファイルを読み込む BGM をループ再生する 3. draw() に実行順に注意して 繰り返し処理を記述する ( ア ) ゲーム終了フラグを調べ 終わってなかったらゲームを進行 そうでなかったらゲームを停止し終了画面を表示する と書く ( イ ) ゲーム進行の部分には スクロール背景を描く ( 今回は関数 void drawscroll() として書く ) 経過時間 ライフ数など文字情報を描く キャラを描く ( 関数 void drawchara() として 見通しをよくする ) キー操作処理を行う 衝突判定を行う ゲーム終了条件を調べる もし終わっていたらゲーム終了フラグを立て ゲーム進行を止める操作 (BGM を止める 終了効果音を流す ) を行う ( ウ ) ゲーム終了画面は 終了画面や終了メッセージを描く 4. stop() に終了操作を書く ( サウンド系の消去 ) コーディング コンピューター基礎 Ⅲa 3

衝突判定 物体の衝突判定は 図のように物体間の距離と2つの物体サイズを比較することによって行うことが最も簡単である 円や球では この判定は中心間の距離と二つの半径合計との比較となるので計算が簡単である 実際のプログラムでは 各図形中心座標の x 座標の差の二乗と y 座標の差の二乗を加えたものと あらかじめ計算しておいた衝突距離の二乗とを比べる ( ピタゴラスの定理 ) それ以外の形状では 円に近似して考えるとよい 判定が多少甘くなるが ゲームに大きな影響がなければ気にしない どうしても気になるときは 画像の輪郭上で図形が重なっているかどうか ピクセルごとに色を調べればよい しかしこの方法は実行に時間がかかり 非力な PC では処理落ちや駒落ちが生じる原因となることがある スクロールのための画像表示アルゴリズム スクロール画面を作るためには スクロール方向で始まりと終わりが繋がった画像 ( 縦スクロールなら上下 横スクロールなら左右 ) を用意する ここでは 話を簡単にするため 横スクロール用の画像は ウインドウの横幅より大きく高さがウインドウと同じものを用意する スクロールプログラムの基本は 図のようにWindowが背景からはみ出す場合と はみ出さない場合に分けて考えるところにある まずは はみ出しが始まる条件を確定し これを判断文に反映させる はみ出していないときは スクロール画像から左上隅を指定してゲームウインドウへの copy 処理をする はみ出しが始まったら はみ出していない部分のcopy 処理と はみ出しコンピューター基礎 Ⅲa 4

部分に相当する範囲をスクロール画像の反対側から copy する処理を別々に行う コード例 screenpositionx += SCROLL_SPEED; // 画像から取り出す左上隅座標をずらす if(screenpositionx > BACK_WIDTH-W_WIDTH){ // はみ出している if(screenpositionx > BACK_WIDTH){ // はみ出しきった時の処理 screenpositionx = 0; // 画像の取り出し位置を左端に戻す else{ // 一部はみ出している時の処理 // はみ出していない部分を部分コピー copy(imgback, screenpositionx, 0, BACK_WIDTH-screenPositionX, W_HEIGHT, 0, 0, BACK_WIDTH-screenPositionX, W_HEIGHT); // はみ出した範囲と同じ大きさを 元画像の左端から部分コピー copy(imgback, 0, 0, W_WIDTH-(BACK_WIDTH-W_WIDTH- screenpositionx), W_HEIGHT, BACK_WIDTH-screenPositionX, 0, W_WIDTH-(BACK_WIDTH-W_WIDTH - screenpositionx), W_HEIGHT); コンピューター基礎 Ⅲa 5

else{ // はみ出しがまったくないときの処理 copy(imgback, screenpositionx, 0, W_WIDTH, W_HEIGHT, 0, 0, W_WIDTH, W_HEIGHT); キーボードイベント取り出しとキーコードの利用 キーボードイベントを扱うには 以下のカーソルキーを扱ったコード例のように決まり 文句がある if(keypressed){ // キーが押されたか? if(key = = CODED){ // そのキーは予約されたキーか? if(keycode = = UP){ ; // キーは 上向きカーソル キーか? else if(keycode = = DOWN){ ; else if(keycode = = RIGHT){ ; else if(keycode = = LEFT){ ; keypressed は Boolean 型の特別な変数で キーボードのキーが押されると TRUE になる 押されたキーの状態は 変数 key( キーの種類 ) と keycode( キーのコード番号 ) に格納される UP DOWN などの定数を使いたくないときは キーボードのキーコードを実行環境ごとに調べて そのコードを使う必要がある 注意点は draw に上記コードを書くと キーが押されている間はずっと三重目の if 分が 実行され続けることである キーを一度叩くたびに一つ何かをさせる場合は 工夫が必要 コンピューター基礎 Ⅲa 6

である たとえば 一つ前のキーコードを保存しておき 新たに入力されたキーコードが 変化した場合のみ処理を行うようにする ゲーム開始からの時間を計る プログラム中で経過時間を知りたい場合, 単純にFrame 数 (draw() を実行した数 ) を数えればよい. 秒 10フレームで実行中に3 秒後に何かをさせたければ, フレーム数を大域変数として保存しておき, その値が30になったことをif 文などで検出すればよい. この方法はあまり見た目がよろしくないので, 普通はmillis() 関数を使う.millis() は呼び出される度に, プログラム開始時からの時間をミリ秒単位の整数で返してくる. そこで, 特定の時間が経過したら実行するプログラムは, 1. 初めの時間を大域変数 ( 例えばint mystartmillis) に記録する int mystartmillis = millis(); 2. millis() を適当な間隔で繰り返し実行し, 得られた値からmyStartMillisを引いた値を手に入れる. int now = millis() - mystartmilli; 3. 得られた値 (now) をあらかじめ決めておいた時間と比較し, 時間になったらそのとき行うべき命令を実行する. この方法を使う時には, 得られた値の判断を 等しいか? で行ってはならない.draw() にかかる時間が一定とは限らないので, millis() - mystartmillis が狙った値(A) になることが保証できないからである ( つまり狙った値を跨いでしまうことがある ). 確実に処理をおこなうためには, 等しいかどうか now == A ではなく, 通過したか now >= A で判断すべきである. コンピューター基礎 Ⅲa 7