控制台c#-tik tak toe-拯救球场?

控制台c#-tik tak toe-拯救球场?,c#,C#,我刚开始学习C#,我接到了通过控制台应用程序构建“Tik Tak Toe”游戏的任务;但我在代码中看到错误时遇到了一个巨大的问题:当我输入一行和一列时,程序只会打印第一个玩家的棋子和颜色。不知何故,我的第二个问题是,当涉及到下一个玩家时,游戏机不会保存当前的游戏数据,而是会绘制一个新的场 我的代码错了什么 namespace Tik_Tak_Toe_ { class Program { static int[,] field = new int[3, 3];

我刚开始学习C#,我接到了通过控制台应用程序构建“Tik Tak Toe”游戏的任务;但我在代码中看到错误时遇到了一个巨大的问题:当我输入一行和一列时,程序只会打印第一个玩家的棋子和颜色。不知何故,我的第二个问题是,当涉及到下一个玩家时,游戏机不会保存当前的游戏数据,而是会绘制一个新的场

我的代码错了什么

namespace Tik_Tak_Toe_
{
    class Program
    {
        static int[,] field = new int[3, 3];
        static Player[] p;
        static int i;
        static bool gamerunning = true;
        static Random rnd = new Random();
        static int currentplayer = 0;
        static int column;
        static int line;
        static int playercolumn = 7;
        static int playerline = 7;

        static void Main(string[] args)
        {
            INITIALIZE();
            Console.Clear();
            DrawField();
            currentplayer = rnd.Next(1, 2);

            while (gamerunning==true)
            {
                UPDATE();
            }

            Console.ReadLine();
        }

        static void INITIALIZE()
        {
            playerconfiguration();
            DrawField();
        }

        static void playerconfiguration()
        {
            p = new Player[2];
            for (i = 0; i <= 1; i++)
            {
                Console.WriteLine("Player " + (i + 1) + ", enter your name!");
                p[i].name = Console.ReadLine();
                Console.WriteLine(p[i].name + ", choose a color: ");
                ColorConfiguration();
                Console.WriteLine("... and your symbol example: X or O: ");
                p[i].pawn = Console.ReadKey().KeyChar;
                Console.WriteLine();
            }            
        }

        static void ColorConfiguration()
        {
            Console.WriteLine("Type one of the following colors: blue, pink, yellow, white, red oder darkblue");
            bool whatcolorinput = true;

            while (whatcolorinput == true)
            {
                string whatcolor = Console.ReadLine();

                switch (whatcolor)
                {
                    case "blue":
                        p[i].color = ConsoleColor.Cyan;
                        whatcolorinput = false;
                        break;

                    case "pink":
                        p[i].color = ConsoleColor.Magenta;
                        whatcolorinput = false;
                        break;

                    case "yellow":
                        p[i].color = ConsoleColor.Yellow;
                        whatcolorinput = false;
                        break;

                    case "white":
                        p[i].color = ConsoleColor.White;
                        whatcolorinput = false;
                        break;

                    case "red":
                        p[i].color = ConsoleColor.Red;
                        whatcolorinput = false;
                        break;

                    case "darkblue":
                        p[i].color = ConsoleColor.DarkCyan;
                        whatcolorinput = false;
                        break;

                    default:
                        Console.WriteLine("Type one of the following colors: blue, pink, yellow, white, red oder darkblue");
                        break;
                }
            }
        }

        static void UPDATE()
        {
            DrawField();
            Console.WriteLine(p[currentplayer].name + ", it's your turn!");
            PlayerInput();
            UpdateField();
            currentplayer = (currentplayer + 1) % 2;
        }

        static void DrawField()
        {
            for ( column=0; column<field.GetLength(1); column++)
            {
                Console.ForegroundColor = ConsoleColor.DarkMagenta;
                Console.Write((column+1) + "|");
                Console.ResetColor();
                for ( line=0; line<field.GetLength(0); line++)
                {
                    if (field[column,line]==0 && (column != playercolumn || line != playerline))
                    {
                        Console.Write("   ");
                    }
                    else
                    {
                        Console.ForegroundColor = p[field[playercolumn, playerline]].color;
                        Console.Write(" " + p[field[playercolumn, playerline]].pawn + " ");
                        Console.ResetColor();
                    }
                }
                Console.WriteLine();
            }
            Console.ForegroundColor = ConsoleColor.DarkMagenta;
            Console.WriteLine("  ________");
            Console.WriteLine("   1  2  3");
            Console.ResetColor();
        }

        static void PlayerInput()
        {
            Console.WriteLine("First, choose a column: ");
            bool columninput = true;

            while (columninput == true)
            {
                try
                {
                    playercolumn = Convert.ToInt32(Console.ReadLine());

                    if (column < 1 || column > 3)
                    {
                        Console.WriteLine("Choose a column.");
                    }
                    else
                    {
                        columninput = false;
                    }
                }
                catch
                {
                    Console.WriteLine("Choose a column.");
                }
            }

            playercolumn -= 1;
            Console.WriteLine("... and now a line");
            bool lineinput = true;

            while (lineinput == true)
            {
                try
                {
                    playerline = Convert.ToInt32(Console.ReadLine());

                    if (line < 1 || line > 3)
                    {
                        Console.WriteLine("Choose a line.");
                    }
                    else
                    {
                        lineinput = false;
                    }
                }
                catch
                {
                    Console.WriteLine("Choose a line.");
                }
            }
            playerline -= 1;
        }

        static void UpdateField()
        {
        }

        static void FINISH()
        {
        }
    }
}
名称空间Tik_Tak_Toe_
{
班级计划
{
静态整数[,]字段=新整数[3,3];
静态播放器[]p;
静态int-i;
静态bool gamerunning=true;
静态随机rnd=新随机();
静态int currentplayer=0;
静态int列;
静态整数线;
静态int playercolumn=7;
静态int playerline=7;
静态void Main(字符串[]参数)
{
初始化();
Console.Clear();
DrawField();
currentplayer=rnd.Next(1,2);
while(gamerunning==true)
{
更新();
}
Console.ReadLine();
}
静态void初始化()
{
playerconfiguration();
DrawField();
}
静态无效播放配置()
{
p=新玩家[2];

对于(i=0;i而言,您只需使用全局变量来存储playercolumn和playerline

每次执行PlayerInput时,都将替换此变量的值

您需要一个3x3矩阵来存储玩家选择,然后将此矩阵打印为棋盘。如果已经选择了列和行,您需要拒绝用户输入

看起来您希望将用户移动存储在字段全局变量中,但并没有将其分配到任何位置

我修改了代码,在更新中,重复PlayerInput,直到更新有效:

do
{
    PlayerInput();
} while (!UpdateField());
在DrawField中仅检查字段变量中的值,而不是播放器输入

static void DrawField()
{
    for (column = 0; column < field.GetLength(1); column++)
    {
        Console.ForegroundColor = ConsoleColor.DarkMagenta;
        Console.Write((column + 1) + "|");
        Console.ResetColor();
        for (line = 0; line < field.GetLength(0); line++)
        {
            if (field[column, line] == 0)
            {
                Console.Write("   ");
            }
            else
            {
                Console.ForegroundColor = p[field[column, line] - 1].color;
                Console.Write(" " + p[field[column, line] - 1].pawn + " ");
                Console.ResetColor();
            }
        }
        Console.WriteLine();
    }
    Console.ForegroundColor = ConsoleColor.DarkMagenta;
    Console.WriteLine("  ________");
    Console.WriteLine("   1  2  3");
    Console.ResetColor();
}

它仍然需要检查游戏何时结束。

您的代码中有很多问题。首先,您从未将玩家输入存储在
字段
数组中,因此很明显,当您重新绘制表格时,只绘制了最后一个输入。您还交换了一些变量,如
玩家行
>.在解决了这个问题和一些小问题并添加了一个玩家类(我希望它或多或少是这样的,因为您没有提供),正确绘制棋盘的代码或多或少是这样的:

class Program
{
    static int[,] field = new int[3, 3];
    static Player[] p;
    static int i;
    static bool gamerunning = true;
    static Random rnd = new Random();
    static int currentplayer = 0;
    static int playercolumn = 7;
    static int playerline = 7;

    static void Main(string[] args)
    {
        INITIALIZE();
        Console.Clear();
        DrawField();
        currentplayer = rnd.Next(1, 2);
        while (gamerunning == true)
        {
            UPDATE();
        }
        Console.ReadLine();
    }

    public class Player
    {
        public string name { get; set; }
        public char pawn { get; set; }
        public ConsoleColor color { get; set;}
    }

    static void INITIALIZE()
    {
        playerconfiguration();
        DrawField();
    }

    static void playerconfiguration()
    {
        p = new Player[2];
        for (i = 0; i <= 1; i++)
        {
            p[i] = new Player();
            Console.WriteLine("Spieler " + (i + 1) + ", gib deinen Namen ein!");
            p[i].name = Console.ReadLine();
            Console.WriteLine(p[i].name + ", wähle deine Farbe: ");
            ColorConfiguration();
            Console.WriteLine("... und nun dein Symbol z.B. X oder O: ");
            p[i].pawn = Console.ReadKey().KeyChar;
            Console.WriteLine();
        }
    }

    static void ColorConfiguration()
    {
        Console.WriteLine("Gib eine der folgenden Farben ein: blau, pink, gelb, weiss, rot oder dunkelblau");
        bool whatcolorinput = true;
        while (whatcolorinput == true)
        {
            string whatcolor = Console.ReadLine();
            switch (whatcolor)
            {
                case "blau":
                    p[i].color = ConsoleColor.Cyan;
                    whatcolorinput = false;
                    break;
                case "pink":
                    p[i].color = ConsoleColor.Magenta;
                    whatcolorinput = false;
                    break;
                case "gelb":
                    p[i].color = ConsoleColor.Yellow;
                    whatcolorinput = false;
                    break;
                case "weiss":
                    p[i].color = ConsoleColor.White;
                    whatcolorinput = false;
                    break;
                case "rot":
                    p[i].color = ConsoleColor.Red;
                    whatcolorinput = false;
                    break;
                case "dunkelblau":
                    p[i].color = ConsoleColor.DarkCyan;
                    whatcolorinput = false;
                    break;
                default:
                    Console.WriteLine("Gib eine der folgenden Farben ein: blau, pink, gelb, weiss, rot oder dunkelblau");
                    break;
            }
        }
    }

    static void UPDATE()
    {
        DrawField();
        Console.WriteLine(p[currentplayer].name + ", du bist dran!");
        PlayerInput();
        UpdateField();
        currentplayer = (currentplayer + 1) % 2;
    }

    static void DrawField()
    {
        for (int line = 0; line < field.GetLength(1); line++)
        {
            Console.ForegroundColor = ConsoleColor.DarkMagenta;
            Console.Write((line + 1) + "|");
            Console.ResetColor();
            for (int column = 0; column < field.GetLength(0); column++)
            {
                if (field[line, column] == 0)
                {
                    Console.Write("   ");
                }
                else
                {
                    Console.ForegroundColor = p[field[line, column]-1].color;
                    Console.Write(" " + p[field[line, column] -1].pawn + " ");
                    Console.ResetColor();
                }
            }
            Console.WriteLine();
        }
        Console.ForegroundColor = ConsoleColor.DarkMagenta;
        Console.WriteLine("  ________");
        Console.WriteLine("   1  2  3");
        Console.ResetColor();
    }

    static void PlayerInput()
    {
        Console.WriteLine("Wähle zuerst eine Spalte: ");

        bool lineinput = true;
        while (lineinput == true)
        {
            try
            {
                playerline = Convert.ToInt32(Console.ReadLine());
                if (playerline < 1 || playerline > 3)
                {
                    Console.WriteLine("Wähle eine Spalte.");
                }
                else
                {
                    lineinput = false;
                }
            }
            catch
            {
                Console.WriteLine("Wähle eine Spalte.");
            }
        }

        bool columninput = true;
        while (columninput == true)
        {
            try
            {
                playercolumn = Convert.ToInt32(Console.ReadLine());
                if (playercolumn < 1 || playercolumn > 3)
                {
                    Console.WriteLine("Wähle eine Zeile.");
                }
                else
                {
                    columninput = false;
                }
            }
            catch
            {
                Console.WriteLine("Wähle eine Zeile.");
            }
        }
        playercolumn -= 1;
        Console.WriteLine("... und nun eine Spalte");


        //field[line-1, column] = new int();

        playerline -= 1;
        field[playerline, playercolumn] = currentplayer+1;
    }

    static void UpdateField()
    {

    }

    static void FINISH()
    {

    }
}
类程序
{
静态整数[,]字段=新整数[3,3];
静态播放器[]p;
静态int-i;
静态bool gamerunning=true;
静态随机rnd=新随机();
静态int currentplayer=0;
静态int playercolumn=7;
静态int playerline=7;
静态void Main(字符串[]参数)
{
初始化();
Console.Clear();
DrawField();
currentplayer=rnd.Next(1,2);
while(gamerunning==true)
{
更新();
}
Console.ReadLine();
}
公开课选手
{
公共字符串名称{get;set;}
公共字符当值{get;set;}
公共控制台颜色{get;set;}
}
静态void初始化()
{
playerconfiguration();
DrawField();
}
静态无效播放配置()
{
p=新玩家[2];
对于(i=0;i=3)
{
控制台写入线(“Wähle eine Spalte.”);
}
其他的
{
lineinput=false;
}
}
接住
{
控制台写入线(“Wähle eine Spalte.”);
}
}
bool columninput=true;
while(columninput==true)
{
尝试
{
playercolumn=Convert.ToInt32(Console.ReadLine());
如果(播放列<1 | |播放列>3)
{
Console.WriteLine(“Wähle eine Zeile.”);
}
其他的
{
columninput=false;
}
}
接住
{
Console.WriteLine(“Wähle eine Zeile.”);
}
}
playercolumn-=1;
控制台。写入线(“…和未写入线”);
//字段[line-1,column]=new int();
playerline-=1;
字段[playerline,playercolumn]=当前播放器+1;
}
静态void UpdateField()
{
}
静态空隙饰面()
{
}
}

研究此代码,并将其与您的代码进行比较,看看您的错误是什么。当然,您仍然必须检查是否已经采取了一个位置,当一名玩家赢了,并且没有剩余的动作时,游戏结果是平局。

请格式化您的代码。您的代码不完整。缺少玩家类。这是一个非常普遍的问题。最好选项是自己调试,并在遇到更具体的问题时提出一个问题。这篇关于调试的msdn文章应该是一个良好的开端:就目前情况而言,这个问题将以“寻求调试帮助的问题”(“此代码为什么不起作用?”)结束必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码”。谢谢你的回答,真的很有帮助!
class Program
{
    static int[,] field = new int[3, 3];
    static Player[] p;
    static int i;
    static bool gamerunning = true;
    static Random rnd = new Random();
    static int currentplayer = 0;
    static int playercolumn = 7;
    static int playerline = 7;

    static void Main(string[] args)
    {
        INITIALIZE();
        Console.Clear();
        DrawField();
        currentplayer = rnd.Next(1, 2);
        while (gamerunning == true)
        {
            UPDATE();
        }
        Console.ReadLine();
    }

    public class Player
    {
        public string name { get; set; }
        public char pawn { get; set; }
        public ConsoleColor color { get; set;}
    }

    static void INITIALIZE()
    {
        playerconfiguration();
        DrawField();
    }

    static void playerconfiguration()
    {
        p = new Player[2];
        for (i = 0; i <= 1; i++)
        {
            p[i] = new Player();
            Console.WriteLine("Spieler " + (i + 1) + ", gib deinen Namen ein!");
            p[i].name = Console.ReadLine();
            Console.WriteLine(p[i].name + ", wähle deine Farbe: ");
            ColorConfiguration();
            Console.WriteLine("... und nun dein Symbol z.B. X oder O: ");
            p[i].pawn = Console.ReadKey().KeyChar;
            Console.WriteLine();
        }
    }

    static void ColorConfiguration()
    {
        Console.WriteLine("Gib eine der folgenden Farben ein: blau, pink, gelb, weiss, rot oder dunkelblau");
        bool whatcolorinput = true;
        while (whatcolorinput == true)
        {
            string whatcolor = Console.ReadLine();
            switch (whatcolor)
            {
                case "blau":
                    p[i].color = ConsoleColor.Cyan;
                    whatcolorinput = false;
                    break;
                case "pink":
                    p[i].color = ConsoleColor.Magenta;
                    whatcolorinput = false;
                    break;
                case "gelb":
                    p[i].color = ConsoleColor.Yellow;
                    whatcolorinput = false;
                    break;
                case "weiss":
                    p[i].color = ConsoleColor.White;
                    whatcolorinput = false;
                    break;
                case "rot":
                    p[i].color = ConsoleColor.Red;
                    whatcolorinput = false;
                    break;
                case "dunkelblau":
                    p[i].color = ConsoleColor.DarkCyan;
                    whatcolorinput = false;
                    break;
                default:
                    Console.WriteLine("Gib eine der folgenden Farben ein: blau, pink, gelb, weiss, rot oder dunkelblau");
                    break;
            }
        }
    }

    static void UPDATE()
    {
        DrawField();
        Console.WriteLine(p[currentplayer].name + ", du bist dran!");
        PlayerInput();
        UpdateField();
        currentplayer = (currentplayer + 1) % 2;
    }

    static void DrawField()
    {
        for (int line = 0; line < field.GetLength(1); line++)
        {
            Console.ForegroundColor = ConsoleColor.DarkMagenta;
            Console.Write((line + 1) + "|");
            Console.ResetColor();
            for (int column = 0; column < field.GetLength(0); column++)
            {
                if (field[line, column] == 0)
                {
                    Console.Write("   ");
                }
                else
                {
                    Console.ForegroundColor = p[field[line, column]-1].color;
                    Console.Write(" " + p[field[line, column] -1].pawn + " ");
                    Console.ResetColor();
                }
            }
            Console.WriteLine();
        }
        Console.ForegroundColor = ConsoleColor.DarkMagenta;
        Console.WriteLine("  ________");
        Console.WriteLine("   1  2  3");
        Console.ResetColor();
    }

    static void PlayerInput()
    {
        Console.WriteLine("Wähle zuerst eine Spalte: ");

        bool lineinput = true;
        while (lineinput == true)
        {
            try
            {
                playerline = Convert.ToInt32(Console.ReadLine());
                if (playerline < 1 || playerline > 3)
                {
                    Console.WriteLine("Wähle eine Spalte.");
                }
                else
                {
                    lineinput = false;
                }
            }
            catch
            {
                Console.WriteLine("Wähle eine Spalte.");
            }
        }

        bool columninput = true;
        while (columninput == true)
        {
            try
            {
                playercolumn = Convert.ToInt32(Console.ReadLine());
                if (playercolumn < 1 || playercolumn > 3)
                {
                    Console.WriteLine("Wähle eine Zeile.");
                }
                else
                {
                    columninput = false;
                }
            }
            catch
            {
                Console.WriteLine("Wähle eine Zeile.");
            }
        }
        playercolumn -= 1;
        Console.WriteLine("... und nun eine Spalte");


        //field[line-1, column] = new int();

        playerline -= 1;
        field[playerline, playercolumn] = currentplayer+1;
    }

    static void UpdateField()
    {

    }

    static void FINISH()
    {

    }
}