Author: maurundog

講義メモ:ゲーム開発演習 後半

演習34 自機と敵機の衝突判定とゲームオーバー画面 ・自機と敵機が衝突したら自機とその敵機を消そう ・そして、ゲームオーバーとし、ゲームオーバー画面に遷移しよう ・ゲームオーバー画面でも背景のスクロールや敵機の出現は続くものとする ・しかし、自機の移動や自弾の発射はできないようにする ・Enterキーが押されたら、リプレイできるようにしよう 手順と仕様 ①各データをゲーム開始時の値にするメソッド void initData() を追加する  対象はコンストラクタにあった下記を移動: player.i = playeri; //自機の画像 player.x = 320; //自機の中心X座標 player.y = 410; //自機の中心Y座標 player.hv = 0; //自機の左右方向の速度  加えて下記を追加: player.v = 1; //自機を表示 waitpb = 0; //自弾発射の待ち時間 waitpb = 0; //自弾発射の待ち時間 ②描画処理:プレイ画面において表示していたものはゲームオーバー画面でも表示する ③描画処理:自機の向きによって分岐する処理と、自機を描画する処理は、自機が表示状態の時のみにする ④描画処理:ゲームオーバー時に「GAME OVER」と(210,150)から25ポイントで表示し、  「Hit Enter Key」と(200,300)から25ポイントで表示 ⑤キー入力時処理:タイトル画面でEnterキーが押されていたら、①を呼んでからゲームモードを1にする ⑥キー入力時処理:ゲームオーバー画面でEnterキーが押されていたら、①を呼び、全敵機と全自弾を非表示にし、  ゲームモードを1にする処理を追加 ⑦タイマーイベント処理:スペースキーのチェックはプレイ画面の時のみにする ⑧タイマーイベント処理:全敵機について自弾との衝突判定をする前に、自機との衝突判定を行い、衝突していたら自機を消し、  ゲームモードを9にして抜ける処理を追加 作成例 //演習34 自機と敵機の衝突判定とゲームオーバー画面 using System; //フォームアプリケーションに必須 using System.Windows.Forms; //フォームアプリケーションに必須 using System.Drawing; //Image用 struct Item { //アイテムを表す構造体     public Image i; //画像     public int x;  //中心X座標     public int y;  //中心Y座標     public int hv; //左右方向の速度(左向きは負の数、右向きは正の数)     public int vv; //上下方向の速度(上向きは負の数、下向きは正の数)     public int v;  //表示状態(0:非表示、1以上:表示) } class Program : Form { //Formクラスを継承     [System.Runtime.InteropServices.DllImport("user32.dll")] //外部DLLのインポート     private static extern short GetKeyState(int nVirtKey); //メソッドの外部定義指定     int gamemode…

Read the full article

講義メモ:ゲーム開発演習

:敵機の出現と移動、衝突判定、ゲームオーバー など 演習32 敵機の出現と移動 ・一定間隔ごとに敵機が自機の直上の上端範囲外に出現し、下方向に移動するようにしよう ・敵機の最大数は20機とし、これ以上は出現させない ・出現間隔はタイマーインターバルの50倍とする ・下方向移動速は5とする ・自弾と同様に画面下部から先で見えなくなったら出現前の状態に戻すこと ・敵機の画像は下記を利用可能   enemy.gif 手順と仕様 ① 敵機画像の読み込みを追記。Image enemyi 等 ② 敵機の最大数を初期化。int maxenemy 等 ③ 敵機の構造体オブジェクト配列を生成 Item[] enemya 等 ④ 敵機の出現待ち時間を初期化 waitenemy 等 ⑤ 敵機の出現間隔を初期化 enemyint 等 ⑥ 描画処理:全敵機について、表示状態であるものを表示する処理 ⑦ タイマーイベント処理:敵機出現待ち時間がゼロであれば、非表示である敵機要素を表示状態にし、  自機と同じX座標、上端の直上のY座標などを設定  また、敵機の出現待ち時間に敵機の出現間隔をセット ⑧ タイマーイベント処理:全敵機について、下へ移動し、下端より下に出たら非表示にする ⑨ タイマーイベント処理:敵機出現待ち時間がセットされていたらカウントダウン 作成例 //演習32 敵機の出現と移動 using System; //フォームアプリケーションに必須 using System.Windows.Forms; //フォームアプリケーションに必須 using System.Drawing; //Image用 struct Item { //アイテムを表す構造体     public Image i; //画像     public int x;  //中心X座標     public int y;  //中心Y座標     public int hv; //左右方向の速度(左向きは負の数、右向きは正の数)     public int vv; //上下方向の速度(上向きは負の数、下向きは正の数)     public int v;  //表示状態(0:非表示、1以上:表示) } class Program : Form { //Formクラスを継承     [System.Runtime.InteropServices.DllImport("user32.dll")] //外部DLLのインポート     private static extern short GetKeyState(int nVirtKey); //メソッドの外部定義指定     int gamemode = 0; //0:スタート画面、1:プレイ画面     int score = 0; //スコア     Image backi =…

Read the full article

講義メモ

テキスト篇:p.416「XMLデータとLINQ」から ゲーム開発演習:敵機の出現と移動、衝突判定、ゲームオーバー など p.416(XMLとは) ・XMLはエクステンシブル(拡張可能な)マークアップランゲージの略で、Webページの記述に用いるHTMLに近いマークアップ言語 ・マークアップ言語は文字列情報に<>で挟んだタグと呼ばれる制御情報を与える仕組み ・HTMLの場合は、Webブラウザで定められたタグを用いて、文字色や画像挿入などを指定できる  例: <HTML><HEAD>…<BODY>ここは<b>太字</b></BODY></HTML> ・XMLの場合は、汎用であり、作成者が自由に定めたタグを用いて、構造情報を持つ文書を作成できる  例: <?xml … ?><book><title>題名</title><bookbody>本文</bookbody></book> ・よって、ゲームなどの大量の文字列情報を用いるアプリにおいて、これをXML形式で表現する例が増えている ・XML形式の文書の先頭行には<?xml version="1.0" encoding="文字コード" ?>を置く ・文字コードは主にuft-8を用いることが多い p.416 XMLデータとLINQ ・LINQのクエリ対象としてXMLデータが利用可能 ・Visual Studioにおいて、下記の準備作業が必要  ①ソリューションエクスプローラで「参照」を右クリックし「参照の追加」  ②「System.Xml」と「System.Xml.Linq」のチェックをオンにして「OK」 ・外部のXMLファイルの読込には、System.Xml.Linq.XElementクラスの静的メソッド XElement Load("ファイル名")を用いる  例(using済): XElement x = Load("myxmlsfile.xml"); ・クエリ式ではin句において、XElementクラスのインスタンスメソッドElements()でコレクションを得て用いる ・where/orderby句では、XElementクラスのインスタンスメソッドElement("タグ名")でタグへの参照(コンテナ)を得て、  Valueプロパティで文字列を受け取る ・コンテナはXContainerクラス型なので、そこにValueプロパティがある ・クエリ結果の取り出しのforeachにおいても、Element("タグ名").Valueを用いる p.416 students.xml(プロジェクトのbin/debugフォルダに置く) <?xml version="1.0" encoding="utf-8" ?> <data>   <student>     <name>山田太郎</name>     <id>100</id>     <point>56</point>   </student>   <student>     <name>上野義男</name>     <id>101</id>     <point>80</point>   </student>   <student>     <name>岡田一郎</name>     <id>102</id>     <point>70</point>   </student>   <student>     <name>吉田和夫</name>     <id>103</id>     <point>95</point>   </student> </data> p.417 xml01.cs //p.417 xml01.cs using System; using System.Linq; //クエリ式用 using System.Xml.Linq; //XElementクラス用 class xml01 {   public static void Main() {     XElement students = XElement.Load("student.xml"); //XMLファイルの読込     var q =         from person in students.Elements() //XMLエレメンツから         where int.Parse(person.Element("point").Value) >= 60 //要素値の条件式         orderby person.Element("point").Value descending //要素値で整列(降順)…

Read the full article

今週の話題

今回トップは「ユニコーンオーバーロード(Switch)」GO! 【決算】ANYCOLORの3Q、2割の増収増益―コマース・ファンクラブ利用者は約120万人へ GO! 松竹とBrave groupがゲームメタバース事業で協業―『フォートナイト』内にオリジナルワールド制作、リアル連動イベントも GO! 「Snowflake」活用でパフォーマンス向上とコストダウンを同時に達成―『FF7 EC』開発のアプリボットがデータ分析基盤の構築事例を紹介【CAGC2024】GO! オンラインゲームにおけるハラスメントの放置はビジネス的損失をもたらす―米団体が無料レポート公開 GO!

前回のコメント

・今日やったLinqでは、見慣れない文法で書くので初めて見たときは  混乱しましたが、書き方も様々ありなおかつ、便利なものだな  と感じました。  C/C++/Javaにはない便利な機能ですので、是非、使いこなしてください。

講義メモ:ゲーム開発演習

:自弾の移動、アニメーション、複数化 など 演習28 自弾の上移動(単独バージョン) ・自弾が出現状態であれば、上へ移動しよう ・完全に見えなくなったら、出現状態を無に戻して再発射可能にしよう ・上下方向の移動速度vvをItem構造体に追加しよう(値は適当に) 手順と仕様 ① アイテムを表す構造体に上下方向の速度(上向きは負の数、下向きは正の数)を持つint型変数vvを追加 ② タイマーイベント処理:スペースキーが押されている&自弾が非表示ならば、自弾の上移動速度に-5を代入 ③ タイマーイベント処理:自弾が存在したら、自弾を上へ移動し、画面上端より上に出たら自弾を消す 作成例 //演習28 自弾の上移動(単独バージョン) using System; //フォームアプリケーションに必須 using System.Windows.Forms; //フォームアプリケーションに必須 using System.Drawing; //Image用 struct Item { //アイテムを表す構造体     public Image i; //画像     public int x;  //中心X座標     public int y;  //中心Y座標     public int hv; //左右方向の速度(左向きは負の数、右向きは正の数)     public int vv; //【追加】上下方向の速度(上向きは負の数、下向きは正の数)     public int v;  //表示状態(0:非表示、1以上:表示) } class Program : Form { //Formクラスを継承     [System.Runtime.InteropServices.DllImport("user32.dll")] //外部DLLのインポート     private static extern short GetKeyState(int nVirtKey); //メソッドの外部定義指定     int gamemode = 0; //0:スタート画面、1:プレイ画面     int score = 0; //スコア     Image backi = Image.FromFile("backb.bmp"); //背景画像の読込     Image playeri = Image.FromFile("player.gif"); //自機画像の読込     Image playerl = Image.FromFile("playerl.gif"); //自機左寄画像の読込     Image playerr = Image.FromFile("playerr.gif"); //自機右寄画像の読込     Image bulleti = Image.FromFile("bullet.gif"); //自弾画像の読込     Font font1 = new Font("メイリオ", 20, FontStyle.Bold); //フォントを生成(メイリオ20P太字)…

Read the full article

講義メモ

テキスト篇:p.405「LINQとは」から ゲーム開発演習:自弾の移動、アニメーション、複数化 など p.405 LINQとは ・SQL(データベース操作言語)に近い構文によって、データ構造からの検索を行う仕掛け ・SQLの書式例:  SELECT 項目名,… FROM 構造名 WHERE 項目名 条件演算子 値など 例:  SELECT モンスター名,HP FROM モンスター表 WHERE HP > 100 ・SQLによる検索のポイント:値を返す関数やメソッドと異なり、データ構造が返される ・LINQの対象例: 配列、リストなどのコレクション、XML文書 など p.406 LINQのクエリ ・クエリとはSQLにおける問い合わせのことで、データ構造が返される ・C#が提供するジェネリックインターフェイスを用いると、SQLに近い構文が使える p.408 linq01.cs //p.408 linq01.cs using System; using System.Linq; //LINQ構文用 using System.Collections.Generic; //IEnumerable<T>インターフェイス用 class linq01 {     public static void Main() {         int[] numbers = new int[] { -3, 4, 1, 2, -6, 3, 100, -25}; //クエリ対象の配列         // クエリの作成         IEnumerable<int> q = from n in numbers //配列numbersから                 where n > 0 //要素値が正であるものを                 select n; //得た結果の構造を返す         // クエリの実行         foreach (int x in q) { //IEnumerable<T>インターフェイス型オブジェクトから全要素(int型)について繰返す             Console.WriteLine(x);         }     } } p.406 LINQのクエリ(続き) ・LINQ構文を用いるには「using System.Linq;」を記述する(必須) ・LINQ構文で得られるデータ構造は、IEnumerable<T>インターフェイス型になる ・このジェネリクスに、クエリ対象の型を指定する ・配列を対象とする場合は、配列の要素型を指定すれば良い ・得られたIEnumerable<T>インターフェイス型のオブジェクトから、foreachなどで要素を取り出す処理を繰返すと良い ・クエリ式の基本書式:  from 項目名 in…

Read the full article

今週の話題

今回トップは「ファイナルファンタジーVII リバース(PS5)」GO! 学生がもっと“eスポーツ”に触れる機会を―ヒューマンアカデミーが学校にゲーミングデバイスを寄贈するプランを展開する狙い GO! 広井王子氏が考えるeスポーツとゲームの未来、そして映画との深い繋がりとは―eスポーツ映画「PLAY! ~勝つとか負けるとかは、どーでもよくて~」公開直前インタビュー! GO! Unity、有償プランの値上げを日本でのみ実施―円安に伴う為替レート変更 個人向けの無料版であるUnity Personalに影響はありません GO! セガサミーのゲーム事業は新作軟調、過度な広告費で営業利益が急減【ゲーム企業の決算を読む】GO! 従業員の発言切っ掛けに議論が過熱。ゲームへの多様性導入巡り開発コンサル企業に海外で是非の声 GO! 【決算】gumi、3Qの売上高3割減、営業損失30億円―『アスタタ』不調やブロックチェーンゲーム宣伝費が重く GO!