プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4

Slides:



Advertisements
Similar presentations
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
Advertisements

システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
JavaScript プログラミング入門 2006/11/10 神津.
情報処理演習C2 ファイル操作について (2).
プログラミング基礎I(再) 山元進.
IO - 入出力 小西 亨.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
Excel による データベース入門 Ver /9.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング基礎I(再) 山元進.
第13回 プログラミングⅡ 第13回
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
プログラミング 平成24年10月30日 森田 彦.
CSVファイルとは? CSVとは、Comma Separated Value(カンマで区切られた値)の頭文字をとったものです。つまり、CSVファイルとは、値(数値や文字等)をカンマ(,)で区切って書いたテキストファイルのことを指しています。 メリットは、異なるソフト間でデータの受け渡しをする時によく使われます。
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
インタラクティブ・ゲーム制作 <プログラミングコース>
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング 平成25年11月5日 森田 彦.
プログラミング言語入門 手続き型言語としてのJava
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
Cプログラミング演習 第6回 ファイル処理と配列.
プログラミング 2 ファイル処理.
プログラミング応用 printfと変数.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
プログラミング 4 記憶の割り付け.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
はぐれたメルでプログラムを 担当した一人の仁藤が 授業開始前の2時間くらいで作成
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
プログラミング基礎B 文字列の扱い.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
プロジェクト演習Ⅱ インタラクティブゲーム制作
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
Cプログラミング演習資料.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
統計ソフトウエアRの基礎.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
プログラミング入門 電卓を作ろう・パートI!!.
ニューラルテスト理論分析ソフト「neutet」の特徴と使い方
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
標準入出力、変数、演算子、エスケープシーケンス
コンパイラ 2012年10月11日
プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
Cプログラミング演習資料.
情報処理Ⅱ 第2回 2004年10月12日(火).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング 平成28年10月25日 森田 彦.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プロジェクト演習Ⅳ インタラクティブゲーム制作 プログラミング4 2011/10/18 ファイル読み込みと リソースマネージャ

今日の内容 ファイルの読み書きができるようになろう 読み込み系の処理を統括しよう もうパラメータとかをプログラム中で ゴリゴリ代入するのはまっぴらだ! 「ハードコーディング」と言われて、 現場では忌み嫌われる行為 読み込み系の処理を統括しよう XNAでは「コンテントパイプライン」として最初から用意されている アーカイバの利用方法

とりあえず音付けをしてみて あちこちにファイル読み込み処理を書く 後でファイル名を変えて別のファイルを読み込みたい ファイル名を直接ハードコーディングすることになる ばっちい! 後でファイル名を変えて別のファイルを読み込みたい いちいちファイル名だけ書き換えてリビルドとかださすぎて死にそう

ファイルリストを テキストで用意する 音を鳴らしたいイベントをenumで列挙 enumに対して対応するファイル名を記述したテキストを読み込む 後はマネージャクラスにお任せ

こんな風にしたい enum SEEvent { SE_JUMP, SE_PUNCH }; … seMan.load(SE_JUMP); seMan.play(SE_JUMP); [SE File List] SE_JUMP,se0001.wav SE_PUNCH,se0002.wav

今の発想が大事 「こういう風に出来たらいいのにな」というイメージを描き、それが実現できるようにクラスを自作する 提供されるクラスを直接つかって何とかしようとすると、無駄な苦労を重ねることが多い まずは「こういう風にしたいな」をイメージするところから始めるべし

読み書きのターゲットは とりあえずテキストファイル マップデータ、キャラクタパラメータ、 シナリオデータ、セーブデータなどなど 特にCSVやタブ区切りテキストは扱えると 超便利 マップデータ、キャラクタパラメータ、 シナリオデータ、セーブデータなどなど 「テキストファイルとか見られたら  恥ずかしいし…」とか言うのは後だ!

とりあえず使うもの C++の標準機能だけでやってみよう インクルードは以下の通り 読み込みは「ifstream」 書き込みは「ofstream」 インクルードは以下の通り #include <iostream> #include <fstream> 両方必要なので気をつける 必要に応じてusing namespace std;も

書き込みは絶望的に簡単だ! インスタンス生成時にファイル名指定 is_open()で開けているかチェック <<で書き込むデータを繋げて流し込む 最後はclose() ofstream out_file(“ファイル名”); if(out_file.is_open() == false) エラー処理; out_file << “書き込みたい文字” << endl; // int値やdouble値も<<で繋いで書ける // もちろんstring型やchar型もOK out_file << x << “,” << y << endl; //書き込み終わったらcloseして終了 out_file.close();

読み込みも ただ読み込むだけなら簡単だ! インスタンス生成時にファイル名指定 is_open()で開けて いるかチェック getlineで1行ずつ 取り出し、必要に 応じて処理する 最後はclose() ifstream in_file(“ファイル名”); string lineStr; vector<string> readBuffer; if(in_file.is_open() == false) エラー処理; // 1行ずつwhileループで読み出す while(getline(in_file, lineStr) == true) { // lineStrに1行分入る // とりあえず配列にしまうならこう readBuffer.push_back(lineStr); } in_file.close();

結局何が面倒って 読み込んだ後の文字列処理なんです C++のstringクラスはJavaに比べると 機能が正直貧弱です 最低限のものは揃っているので、うまく素材を組み合わせて関数を作ろう サンプルあります データを取り出しやすいファイル構造を作ろう

区切り取り出し関数実装例 vector<string> fk_StrSplit(string argStr, string argToken) { vector<string> retStrArray; string::size_type curPos = 0, nextPos = 0; while(nextPos != string::npos) { nextPos = argStr.find(argToken, curPos); retStrArray.push_back(argStr.substr(curPos, nextPos-curPos)); curPos = nextPos+argToken.size(); } return retStrArray;

区切って取り出す fk_StrSplit()関数 カンマ区切り、タブ区切りはExcelでの 編集が容易なので、出来ておいて損は ない JavaのStringクラスのsplit()のようなもの 正規表現は使えないけどカンマ区切り、 タブ区切り程度なら対応可能 カンマ区切り、タブ区切りはExcelでの 編集が容易なので、出来ておいて損は ない マップやシナリオのエディタをExcelで 代用しているソフトハウスもあります

整数値・実数値変換 Cの標準関数をなんだかんだで使う ただしstring型の変数は直接引数に 渡せないので、c_str()関数を使う atoi()がInteger.parseInt()にあたる atof()がDouble.parseDouble()にあたる ただしstring型の変数は直接引数に 渡せないので、c_str()関数を使う atoi(anyStr.c_str())のようにする 実数値は誤差に厳しいものだと変換時に値がズレることがあるので注意

ファイル形式の作り方のコツ FK Performerのモーションデータなどを見てみるとよい 「ファイルヘッダ」は必ず付けると ファイルの先頭でファイルの種類が 識別できるようにする [BEGIN]~[END]で囲っておくと、 データを読み込むべき範囲が 分かりやすくなるので処理しやすい

ファイル入出力のクラス化例 fkut_ConfigDataクラス 「A=B」という記述形式を読み書きすることに特化したクラス 元々はパッドのコンフィグデータ用に作ったが、パラメータ調整などにも使えそう ここまでの資料をもとにソースを読み解いてみると良いかも

読み込み内容に基づく データ生成 例えば読み込んだデータに基づいて 立方体を配置するプログラムを考える 個数が固定ならいいが、そうではない ケースの方が圧倒的に多い クラスオブジェクトの動的な生成が必須

一緒にやってみよう テキストデータの内容をもとに、 音再生を管理するクラスを作ってみよう

今日の課題 CSVテキストに基づいて、3D空間中に 立方体を配置するプログラムを作れ ファイル形式も自分で決める 位置、姿勢、大きさはデータによって決定 立方体の個数は任意(ファイル内容次第) マテリアルも指定できるならそれもよし 1行の文字列から””で囲まれた文字列を取り出す関数を作れ