ここまでの冒険を記録しますか?スマートフォン用の表示で見るここまでの冒険を記録しますか?長岡技大ソフトウェア開発サークルの開発ブログこの広告は、90日以上更新していないブログに表示しています。書き手:肥田野DXライブラリでRPGのベースになるマップ画面やデータ管理などのあれこれの制作に挑戦してみます。RPGとして完成する保証はありませんが、途中経過だけでも参考になれば幸いです。この連載は前回までの内容を理解していることを前提に進めていきます。前回CSVファイルの使い方を解説したので、今回はそれを応用してもう一つ情報を追加します。追加するのは、そのマスをプレイヤーが歩行可能かどうかという情報です。canwalk;これが新たに追加した情報です。true(=1)の時は歩行可能で、false(=0)なら侵入不可です。情報の追加に従って、CSVは次のように修正します。前回は区切りの文字に「,」を使っていましたが、今回からは「;」をセルの区切りに、「,」は項目の区切りに使います。≪注意≫Exelではセルの区切りが「,」でしかつけられないという報告がありました(筆者はOpenOffice使用)。その場合、セルの区切りは「,」のままで、項目の区切りを「;」にすると上手くいくかと思います。そのため、CSVファイルの形式を事前に変更しておく必要があります。表計算ソフトからの変更方法がわからない方は、メモ帳で開いて「Ctrl+h」で「,」を「;」に置換するのが手っ取り早いです。メモ帳で開くとこんな感じになります。0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,00,0;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;7,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;0,00,0;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;4,1;0,00,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0;0,0マップの外周をぐるりと侵入不可(0)で囲んでいます。それではCSVの形式が変わったので、読み込むためのコードも変更していきます。技術的には前回解説した内容と変わりありませんので、詳細な説明は省略します。要するに1つ目の内容(グラフィックハンドル)と2つ目の内容(侵入可否)を別々のwhile文で読み込ませているんです。注意する点は、EOFの処理ぐらいでしょうか。EOFを読み取るのは必ず1番目のwhile文となるので、外側のwhile文と抜ける処理1番目のwhile文の直下におかないといけません。しないと、2番目のwhile文で無限ループしてしまいますからね。各マス目に侵入の可否が設定されたら、今度はプレイヤーにもそれを判定させないといけません。walkVec;//歩く方向。targetX,targetY;//プレイヤーが次に向かうべき座標。}};if(animState==0)DrawExtendGraph(x,y-(height-width),x+CELL_WIDTH,y+CELL_WIDTH,gh[firstNum],TRUE);今回の内容とは関係ないのですが、DrawExtendGraphに指定する座標の計算方法を変更しました。前回までのは実際にプレイヤーが踏んでいるマスよりずれた位置に表示されていたようなので......(-_-;)歩行していないときのDrawExtendGraphも同様に修正しておきました。map){まず大前提として、マップの情報が必要ならば、それを引数として受け取ってやらなければなりません。ここで引数にMapのポインタ型が使えるのは、Map.hをインクルードしているからですね。引数の名前は、Main.cppで定義したポインタの変数名と同じにしています。違っても問題なく動きますが、この場合は同じにしておいたほうが混乱しにくいと考えました。if(map->cell[x/CELL_WIDTH][y/CELL_HEIGHT+1].canwalk)targetY+=CELL_HEIGHT;今回対応させたのがこの行です。これは下に進ませる時の処理なので、配列の二つ目の添え字は+1されます。同じように残り3方向にも処理を追加してください。map){そしてMove関数に引数が加わったので、All関数も同様に引数を追加してやります。最終的にはWinMainの方でも引数を追加します。いうわけで最後はMain.cppです。CELL_WIDTH;プレイヤーの初期位置は(0,0)ですが、CSVを見るとここは侵入不可のマス目になっていますね。一応侵入不可のマスから脱出はできますが、ゲーム上不自然なので1マスずらしています。pl->All(map);All関数を呼び出すところにも引数を追加します。変更しないとコンパイルエラーのなるのでここはすぐ理解できると思いますが......さて、無事に侵入不可の判定が実装できたでしょうか。次回は......そうですね、実はまだ未定なのですが、マップ生成をフレームごとに分割できるようにしようかなと考えています。参加グループプログラミングはてなブログをはじめよう!NUT_SoftwareDevelopperさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。