2023/07/31(Mon) 11:58:50 編集(投稿者)
■No102229 (ゆい さん) に返信
> C#で簡単なマップで 例 ■壁 〇プレイヤーで十字キーで動かす
> を作りたいのですが どうやるのですか。
やりたいことの(とてもざっくりとした)説明があるだけで、
「何が分からないのか」や「何を相談したいのか」が
一切書かれていないので、質問になっていない…。
とりあえず、こんな感じで良いでしょうか?
.NET 6 製の「コンソール アプリ」で書いてみたものです。
※Windows 10 のコマンドプロンプトなら動くけれど、
Win10 や Win11の「Windows Terminal」で動かすと、
レイアウトが崩れて残念な結果になることが発覚…。orz
// .NET 6
string[] map =
{
"■■■■■■■■■■■",
"■ ■ ■■",
"■ ■S ■ ■",
"■■ ■■■■■ ■",
"■ ■■",
"■ ■ ■■ ■",
"■■■ ■ ■ ■■",
"■ ■ ■",
"■■ ■■ ■■ ■",
"■ ■ ■",
"■■■■G■■■■■■",
};
Console.Clear();
Console.WriteLine(string.Join("\n", map));
Console.SetCursorPosition(8, 2);
Console.Write("○");
Console.SetCursorPosition(8, 2);
while (true)
{
(int x, int y) offset = Console.ReadKey(true).Key switch
{
ConsoleKey.LeftArrow => (-2, 0),
ConsoleKey.RightArrow => (2, 0),
ConsoleKey.UpArrow => (0, -1),
ConsoleKey.DownArrow => (0, 1),
_ => (0, 0),
};
(int x, int y) current = Console.GetCursorPosition();
var (x, y) = (Math.Clamp(current.x + offset.x, 0, 18), Math.Clamp(current.y + offset.y, 0, 10));
// Debug.WriteLine($"x: {x}, y: {y}");
if (map[y][x / 2] == '■') { (x, y) = current; }
// Console.Clear();
Console.SetCursorPosition(0, 0);
Console.WriteLine(string.Join("\n", map));
Console.SetCursorPosition(x, y);
Console.Write("○");
Console.SetCursorPosition(x, y);
}