私はかなり初心者のC++コーダーであり、私はコンソールアドベンチャーゲームを作り始めています。 私のアドベンチャーゲームは、現在、コンソールアプリケーションのウィンドウ内を80文字幅×40行で歩いているプレイヤーキャラクターで構成されています。コンソールゲームマップ用の巨大なキャラクターか複数のキャラクター?
私のゲーム用のマップの保管方法にはわかりません。各マップは、色属性を持つ80×40のASCII文字で構成されます。
各80 x 40マップを独自の文字で保存する必要がありますか?これは完全に文字を表示するための正しい方法ですが、私はそれが中にちょうどcoutのすべての文字は良いアイデアだったと思うしていない場合ので、単一のマップが
int cHeight = 5; // Reduced size for this example
int cHeight = 10; // Reduced size for this example
// Set up the characters:
char map[cHeight][cWidth+1] = {
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
};
CHAR_INFO mapA[cWidth * cHeight];
for (int y = 0; y < cHeight; ++y) {
for (int x = 0; x < cWidth; ++x) {
mapA[x + cWidth * y].Char.AsciiChar = map[y][x];
mapA[x + cWidth * y].Attributes = FOREGROUND_BLUE | Black; //I have an enum setup with background colours.
}
}
// Set up the positions:
COORD charBufSize = {cWidth,cHeight};
COORD characterPos = {0,0};
SMALL_RECT writeArea = {0,0,cWidth-1,cHeight-1};
// Write the characters:
WriteConsoleOutputA(wHnd, mapA, charBufSize, characterPos, &writeArea);
イムわからない...のようになります。 forループ。
So ..私のコンソールウィンドウ(上記のコード内)は、幅10文字、高さ5行です。 上記のコードでは、Charに1つのマップがあるため、各マップをロードするときに、それぞれを独自の配列に配置します。
マップ全体を1つのCharにすることを考えていましたが、forループのxとyをオフセットして必要なものだけを表示しました。
mapA[x + cWidth * y].Char.AsciiChar = map[y+offset][x+offset];
このようにマップはこのようになります。私は5行の「ABCDEFGHIJ」とは別に5行に「1234567890」を表示することができオフセットと
char map[cHeight][cWidth+1] = {
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
"1234567890ABCDEFGHIJ",
};
。
私は複数のチャーを持っていれば、これを行う最も効果的な方法を知りたいと思います。私はクラスを作成する必要がありますか?文字を色で保存できますか? (クラス 'はまだC++で私にとって新しくなっています)。
地形を地図に描画し、オブジェクト(家、木)を追加する必要がありますか? または地図上に手動で描画するだけですか?
私はちょうどこれについて長すぎると思ったと思う少しの方向が必要です ありがとう!私はそれがこれはあなたが*の要素をノードへのポインタであるマップを作成します意味
Node* map[height][width]
のマップを作成することですだろうとあなたは*要素をノードのことを定義することができ
この質問は、http://gamedev.stackexchange.com/で尋ねるほうがはるかに良いでしょう。 –
それが存在するかどうかは知りませんでした。ありがとう。 – FallingReign
私はあなたの大きな問題は、あなたがC(あるいは次善の手続き型言語)をあまりにも多く考えていることだと思います。この演習が教育的でなければならないとすれば、私は配列なしで、b)生ポインタを使わずにc)キーワードforとnoを使わずにそれをしようと提案する。可能であれば(多少効率は低いかもしれませんが、アプリケーションで害を与えてはいけません)、C++のコンストラクトやライブラリを使用して習得する必要があります。 – bitmask