したがって、Playerがラビリンスを通過できるように、キーを押すと、Form1クラスのLabyrinthクラスのインスタンスをPlayerクラスに渡す必要があります衝突なし。 まず、Labyrinthオブジェクトをグローバルに宣言して、OnMouseClick関数で作成するとクラスのどこでも使用できるようにし、OnKeyPress関数でPlayerクラスのインスタンスに渡し、Move関数と衝突チェックで移動を実行します。
"オブジェクト参照がオブジェクトのインスタンスに設定されていません"という例外が発生し、なぜ動作しないのかわかりません。多分私はラビリンスクラスの宣言やインスタンス化のどこかを台無しにしてしまったかもしれませんが、私はそれを行うための他の方法を知らないだけです。助言がありますか?クラスのインスタンスをC#のパラメータとして渡す
namespace Labyrinth
{
public partial class Form1 : Form
{
Player player = new Player();
Labyrinth labyrinth;
private void OnMouseClick(object sender, MouseEventArgs e)
{
if (window=="lvlSelect")
string clicked = levelMenu.Click(e);
switch (clicked)
{
case "1":
level = 1;
Labyrinth labyrinth = new Labyrinth(level);
break;
case "2":
level = 2;
Labyrinth labyrinth = new Labyrinth(level);
break;
case "3":
level = 3;
Labyrinth labyrinth = new Labyrinth(level);
break;
}
}
private void OnKeyPress(object sender, KeyPressEventArgs e)
{
char key = e.KeyChar;
if (window == "game")
{player.Move(k = key.ToString(), labyrinth)}
}
}
}
namespace Labyrinth
{
class Player
{
int playerPosX;
int playerPosY;
public void Move(string key, Labyrinth labyrinth)
{
switch (key)
{
case "a":
if (!(playerPosX - 1 < 0) &&
(labyrinth.CheckCollision(playerPosX - 1, playerPosY)==false)) //I get the exception here
playerPosX--;
break;
case ...
}
}
}
}
'ラビリンスラビリンス=新しいラビリンス(レベル); ';' 'だけラビリンス=新しいラビリンス(レベル)であるべきです。 –
あなたの問題はおそらく 'クリックされた 'が' 1'、 '2'または' 3'と等しくなく、 'labyrinth'が初期化されないためです。あなたの 'switch'ステートメントに' default'を追加してみてください。また、 'labyrinth labyrinth = new Labyrinth(int.Parse(clicked));と書くだけで' switch'ステートメントを完全に省略することができます; – Icemanind
あなたの答えをありがとう。 OnKeyPress関数とMove関数でLabyrinthを初期化すると、完全に動作するように初期化する必要があるため、スイッチは期待どおりに動作します。私はラビリンスを世界的に宣言し、いくつかの問題を避けるためにそれを渡そうとしました。 –