それぞれがいくつかのプロパティを持つ構造体のリストを作成しました。私の意図は、基本的な 10x10 マップを使用して、ツールを開発しているゲームの A* 検索アルゴリズムを練習/作成することを学ぶことです。基本的に、次のプロパティを持つ Tile オブジェクトの配列としてマップ構造を取得しました。
public struct Tile
{
public int x { get; set; }
public int y { get; set; }
public int cost { get; set; }
public bool walkable { get; set; }
}
ノードの構造体もありますが、この質問とは関係ありませんが、本当に、誰かが私に叫ぶことがある場合に備えて投稿します。
public struct Node
{
public int x { get; set; }
public int y { get; set; }
public int total { get; set; }
public int cost { get; set; }
public Tile parent { get; set; }
}
私の formload イベントは次のようになります。
private void Form1_Load(object sender, EventArgs e)
{
CheckBox[] chbs = new CheckBox[100];
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
Map = new Structs.Tile[100];
Map[x + y].x = x;
Map[x + y].y = y;
Map[x + y].cost = 100;
Map[x + y].walkable = true;
//MessageBox.Show(Convert.ToString(Map[x + y].x) + " : " + Convert.ToString(Map[x + y].y));
if ( x == 5 )
{
if (y == 4 | y == 5 | y == 6)
{
Map[x + y].walkable = false;
}
}
}
}
int i = 0;
foreach (Structs.Tile tile in Map)
{
CheckBox chb = new CheckBox();
chb.Location = new Point(tile.x * 20, tile.y * 20);
chb.Text = "";
chbs[i] = chb;
i++;
}
this.Controls.AddRange(chbs);
}
そして、このクラスを介してグローバルに使用するために、これを事前に宣言しました。
Structs.Tile[] Map;
問題は、なぜこれでチェック ボックスが 2 つしか追加されないのかということです。X: 0、Y: 0、X: 1、Y: 1 にあるものとほぼ同じ位置に追加されているように見えますが、他には追加されていませんか? フォームをばかげたサイズに拡張しましたが、まだ何もありません。私はそれに完全に困惑しています。
乗数をそれぞれ 2 に設定した結果は次のとおりです。
正しく設定したと思いますが、なぜ機能しないのかわかりません。フォームがフリーズしているかどうかは理解できましたが、そうではなく、値をばかげた高い値 (100+) に設定しても違いはありません。WinForms のオフセットは、乗数が約 12 である必要があることを示唆しています...
いつものように、アドバイスは大歓迎です。素晴らしい方々から多くのことを学んだので、ここでもすぐにいくつかの質問に答えようと思います!
ありがとう!
FormLoad の改訂:
private void Form1_Load(object sender, EventArgs e)
{
int ind = 0;
CheckBox[] chbs = new CheckBox[100];
Map = new Structs.Tile[100];
for (int x = 1; x < 11; x++)
{
for (int y = 1; y < 11; y++)
{
Map[ind].x = x;
Map[ind].y = y;
Map[ind].cost = 100;
Map[ind].walkable = true;
//MessageBox.Show(Convert.ToString(Map[x + y].x) + " : " + Convert.ToString(Map[x + y].y));
if ( x == 5 )
{
if (y == 4 | y == 5 | y == 6)
{
Map[ind].walkable = false;
}
}
ind++;
}
}
int i = 0;
foreach (Structs.Tile tile in Map)
{
CheckBox chb = new CheckBox();
chb.Location = new Point(tile.x * 12, tile.y * 12);
chb.Text = "";
chbs[i] = chb;
i++;
}
this.Controls.AddRange(chbs);
}