GameLogic マップチップの管理について

アバター
TOMY
記事: 53
登録日時: 12年前
住所: 愛知県
連絡を取る:

GameLogic マップチップの管理について

投稿記事 by TOMY » 11年前

今日は一週間に一回のゲームロジックゼミの日だったが、いろんな意味で力尽き、爆睡してしまったため夜分遅くに先生に盛大に謝り、渋々ながら、もう一度だけ授業内容を(要約して)教えてもらった。先生、本当にごめんなさい。
さて本題。今回は回帰処理の使い方についてやっていたのだがその中で番外編としてマップチップの処理について実際によく使われる手法を語っていただけたのでその手法について(自分が忘れないために)書き記しておこうと思う。
まずマップチップでよく使われるこの書き方

CODE:


int chip[][] = {{0,0,0,0,0},
				{0,1,1,1,0},
				{0,0,2,0,0},
				{0,3,2,4,0},
				{0,0,0,0,0},};


数字だと非常に見難いことがしばしば。
人はだいたい数字より文字で表示したほうが見やすい。
そのための対処法はいくつかあるけどその中でよく使われるのが

*char型多次元配列にして文字列として記載する方法

CODE:

char chip2[][5][5] = {	{"X","X","X","X","X"},
						{"X","I","I","I","X"},
						{"X","X","L","X","X"},
						{"X","P","L","S","X"},
						{"X","X","X","X","X"},};

でもこれだと配列の要素数が増えたりとめんどくさいので手っ取り早く

CODE:

#define  X 0
#define  I  1
#define  P 2

int chip[5][5]={{X,X,X,X,X},
				{X,I,I,I,X},
				{X,X,L,X,X},
				{X,P,L,S,X},
				{X,X,X,X,X},};

と定数化してしまうのが配列の型を変えずに文字列的な書き方ができるいい方法。

でも更に楽な方法があり、エクセルを持っていれば

CODE:

int chip3[][]={#include"hentai.csv"};
という、配列内でcsvファイルをインクルードするという滅茶苦茶な使い方が出来る・・・はずなんだけど何故か自家用MyPCのvisual studio2010 だと文句言われたので今度原因を解明する。(忘れてなければ。)

それ以外にはよく

CODE:

int x=5;
int y=5;
int chip4[x][y]={}  //以下略
と、配列の大きさを別で保持することだろうが、
これは裏を返せば、『x*y+1』以上の値は絶対に使用されないということであり、
これを

CODE:

#define NOT_USE (x*y+1)
と定数化しておくと色々便利だったりする。

今回色々書いたが、これからも、ノートに書き貯めてあるゲームロジックの内容は(自分が忘れないために)ちょくちょくあげていこうかと思う。
あと、先生。ゼミ中寝てしまった挙句もう一度ゼミ内容を聞いたりなんかして、ほんとうに今日はごめんなさい。
最後に編集したユーザー TOMY on 2012年10月03日(水) 23:49 [ 編集 1 回目 ]

nil
記事: 428
登録日時: 12年前

Re: GameLogic マップチップの管理について

投稿記事 by nil » 11年前

コメント失礼します。

ふと気になったのですが、

CODE:

char chip2[][5][5] = {  {"X","X","X","X","X"},
                        {"X","I","I","I","X"},
                        {"X","X","L","X","X"},
                        {"X","P","L","S","X"},
                        {"X","X","X","X","X"},};
//  よりも、
char chip2[5][5] = {  {'X','X','X','X','X',},
                        {'X','I','I','I','X',},
                        {'X','X','L','X','X'},
                        {'X','P','L','S','X'},
                        {'X','X','X','X','X'},};
//  と一文字単位で管理したほうが良いような気がします。
//  書きやすさを求めるのならば
char chip[5][5+1]={
    "XXXXX",
    "XIIIX",
    "XXLXX",
    "XPLSX",
    "XXXXX",
};
//  もいいかもしれません
コンパイルの手間を省ける外部ファイルをプログラムで読み取るのが
より編集がしやすいとは思うのですが……。

アバター
へにっくす
記事: 634
登録日時: 12年前

RE: GameLogic マップチップの管理について

投稿記事 by へにっくす » 11年前

TOMY さんが書きました:でも更に楽な方法があり、エクセルを持っていれば

CODE:

int chip3[][]={#include"hentai.csv"};
という、配列内でcsvファイルをインクルードするという滅茶苦茶な使い方が出来る・・・はずなんだけど何故か自家用MyPCのvisual studio2010 だと文句言われたので今度原因を解明する。(忘れてなければ。)
ほい。
2010-09-04 #includeでcsv読み込み(C, C++)- katetyanの日記
上のリンクにあるように、
#ではじまるディレクティブは一行で書くべし。


今度は寝ないようにね。(笑)
最後に編集したユーザー へにっくす on 2012年10月04日(木) 22:10 [ 編集 1 回目 ]

アバター
MoNoQLoREATOR
記事: 284
登録日時: 13年前

Re: GameLogic マップチップの管理について

投稿記事 by MoNoQLoREATOR » 11年前

マップ編集ソフトを作ってファイルにマップ情報を保存→ファイルを読み込んで使用
が最も良い方法だと思います。
ゲーム実行中にマップ情報を編集できる機能を付けると、なお良いと思います。
テストプレイの時に「あ、ここ直したいな」と思ったらすぐに編集できるからです。
マップ情報編集モードと通常モードを切り替えられるようにするとテストプレイもやり易くなるでしょう。

編集機能部分のコードは #ifdef DEBUG と #endif で囲んでおいて必要なときだけ #define DEBUG すればプログラムが無駄に重くなることもないですし。

アバター
TOMY
記事: 53
登録日時: 12年前
住所: 愛知県
連絡を取る:

RE: GameLogic マップチップの管理について

投稿記事 by TOMY » 11年前

お三方ともわざわざ日記に返信いただきありがとうございます。あのあと、先生に直接聞いたら自分の組み方が悪かったという答えが出ました。以下は実際に動いたほうのプログラムです。

CODE:

#include 

int test[6][5] ={			//ファイル内の”,”を含めて6つ。あとエクセル側で何か注意点があったはずだったけど忘れた。
	#include "chip.csv"
};

int main(void){
	printf("%d\n",test[3][1]);
	return 0;
}
ちゃんと話が頭に入ってなかっただけという恥かしいオチ。