現在WindowsフォームとC#でレベル生成プログラムを作成しています。各レベルは、起動時にアレイにロードされる一連の「パターン」から作成されます。レベルを作成するとき、プログラムはこの配列からいくつかのパターンをランダムに選択し、ランダムに回転させてレベルを作成します。選択された各パターンはchosenPattern
変数に格納され、元のパターンを変更せずに回転させることができます。C#のコンストラクタでも参照が保持されています
ここでは、パターンを選択して回転するためのコードです。
int rand = randomNumber(0, patterns.Count - 1);
Level chosenPattern = new Level(patterns[rand]);
chosenPattern = rotatePattern(chosenPattern, randomNumber(0, 3));
次に、コピーコンストラクタを含むLevelコンストラクタを示します。コピーコンストラクタを使用した場合でも、保存されたパターンを回転させたとき
public class Level
{
public List<List<char>> grid;
public string solution;
public int difficulty;
public TimeSpan generationTime;
public Level()
{
grid = new List<List<char>>();
solution = "";
difficulty = 0;
generationTime = TimeSpan.MinValue;
}
public Level(Level level)
{
grid = level.grid;
solution = level.solution;
difficulty = level.difficulty;
generationTime = level.generationTime;
}
}
ただし、配列に格納されたパターンは、まだ回転し、その理由(注:私はかなり初心者のC#プログラマだ)私はわからないよ
とRotatePattern機能:あなたのコピーコンストラクタで
public Level rotatePattern(Level pattern, int rotation)
{
Level tempPattern = pattern;
switch (rotation)
{
case 1:
//Rotate 90 - Reverse Each Row
for(int i = 0; i < tempPattern.grid.Count; i++)
{
tempPattern.grid[i].Reverse();
}
break;
case 2:
//Rotate 180 - Reverse Each Row, then Each Column
for (int i = 0; i < tempPattern.grid.Count; i++)
{
tempPattern.grid[i].Reverse();
}
tempPattern.grid.Reverse();
break;
case 3:
//Rotate 270 - Reverse Each Column
tempPattern.grid.Reverse();
break;
}
return tempPattern;
}
ファンタスティック素晴らしい作品という、ありがとうございました! –