tre i rad
hej jag sitter med en tre i rad uppgift i c# men koden har blivit extremt ineffektiv, den kan inte heller avgöra vem som vinner och saknar felhantering, helt enkelt en kass kod haha. Min prio är att få "vinn" funktionen att fungera, den har inte varningar utan tror jag missat något med loopen eller liknande.
koden:
class Program
{
static void skrivaspelplan(string[,] spelplan)
{
for (int i = 0; i < spelplan.GetLength(0); i++) //den yttre for lopen går lodrätt
{
Console.WriteLine("-------");
Console.Write("|");
for (int j = 0; j < spelplan.GetLength(1); j++)
{
Console.Write(spelplan[i, j] + "|");
}
Console.WriteLine(" ");
}
Console.WriteLine("-------");
}
static void Main(string[] args)
{
string[,] spelplan = new string[3, 3]; //skapar en spelplan som är 3x3 stor
int i;
spelplan[0, 0] = "1"; // tilldelar värden till elementen
spelplan[0, 1] = "2";
spelplan[0, 2] = "3";
spelplan[1, 0] = "4";
spelplan[1, 1] = "5";
spelplan[1, 2] = "6";
spelplan[2, 0] = "7";
spelplan[2, 1] = "8";
spelplan[2, 2] = "9";
int spelare = 1;
int val;
//skapar spelplanens 9 rutor
skrivaspelplan(spelplan);
Console.WriteLine("Välkommen till Rebeckas luffarschack");
Console.WriteLine("Spelare 1: X Spelare 2: 0");
Console.WriteLine("spelare 1 var vänlig välj en siffra mellan 1-9");
string siffra1 = Console.ReadLine();
Convert.ToInt64(siffra1);
if (siffra1 == "1")
{
spelplan[0, 0] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "2")
{
spelplan[0, 1] = "x";
skrivaspelplan(spelplan); // gör likadant 1-9
}
else if (siffra1 == "3")
{
spelplan[0, 2] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "4")
{
spelplan[1, 0] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "5")
{
spelplan[1, 1] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "6")
{
spelplan[1, 2] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "7")
{
spelplan[2, 0] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "8")
{
spelplan[2, 1] = "x";
skrivaspelplan(spelplan);
}
else if (siffra1 == "9")
{
spelplan[2, 2] = "x";
skrivaspelplan(spelplan);
}
Console.WriteLine("spelare 2 var vänlig välj en siffra mellan 1-9");
string siffra2 = Console.ReadLine();
Convert.ToInt64(siffra2);
if (siffra2 == "1")
{
spelplan[0, 0] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "2")
{
spelplan[0, 1] = "O";
skrivaspelplan(spelplan); // gör likadant 1-9
}
else if (siffra2 == "3")
{
spelplan[0, 2] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "4")
{
spelplan[1, 0] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "5")
{
spelplan[1, 1] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "6")
{
spelplan[1, 2] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "7")
{
spelplan[2, 0] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "8")
{
spelplan[2, 1] = "O";
skrivaspelplan(spelplan);
}
else if (siffra2 == "9")
{
spelplan[2, 2] = "O";
skrivaspelplan(spelplan);
}
(har repeterat detta upp till siffra 9 men blev lite väl långt att skriva ut här, men då förstår ni vad jag menar med innefektiv)
//potentiella chanser för att 0 ska vinna
if (spelplan[0, 0] == "0" && spelplan[0, 1] == "0" && spelplan[0, 2] == "0")
{
Console.WriteLine("O vinner!");
}
else if (spelplan[1, 0] == "0" && (spelplan[1, 0] == spelplan[1, 1]) && (spelplan[1, 1] == spelplan[1, 2]))
{
Console.WriteLine("O vinner!");
}
else if (spelplan[2, 0] == "0" && (spelplan[2, 0] == spelplan[2, 1]) && (spelplan[2, 1] == spelplan[2, 2]))
{
Console.WriteLine("O vinner!");
}
else if (spelplan[0, 0] == "0" && (spelplan[0, 0] == spelplan[1, 0]) && (spelplan[1, 0] == spelplan[2, 0]))
{
Console.WriteLine("O vinner!");
}
else if (spelplan[0, 1] == "0" && (spelplan[0, 1] == spelplan[1, 1]) && (spelplan[1, 1] == spelplan[2, 1]))
{
Console.WriteLine("O vinner!");
}
else if (spelplan[0, 2] == "0" && (spelplan[0, 2] == spelplan[1, 2]) && (spelplan[1, 2] == spelplan[2, 2]))
{
Console.WriteLine("O vinner!");
}
else if (spelplan[0, 0] == "0" && (spelplan[0, 0] == spelplan[1, 1]) && (spelplan[1, 1] == spelplan[2, 2]))
{
Console.WriteLine("O vinner!");
}
else if (spelplan[0, 2] == "0" && (spelplan[0, 2] == spelplan[1, 1]) && (spelplan[0, 1] == spelplan[2, 0]))
{
Console.WriteLine("O vinner!");
}
//potentiella chanser för att X ska vinna
if (spelplan[0, 0] == "X" && (spelplan[0, 0] == spelplan[0, 1]) && (spelplan[0, 1] == spelplan[0, 2]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[1, 0] == "X" && (spelplan[1, 0] == spelplan[1, 1]) && (spelplan[1, 1] == spelplan[1, 2]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[2, 0] == "X" && (spelplan[2, 0] == spelplan[2, 1]) && (spelplan[2, 1] == spelplan[2, 2]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[0, 0] == "X" && (spelplan[0, 0] == spelplan[1, 0]) && (spelplan[1, 0] == spelplan[2, 0]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[0, 1] == "X" && (spelplan[0, 1] == spelplan[1, 1]) && (spelplan[1, 1] == spelplan[2, 1]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[0, 2] == "X" && (spelplan[0, 2] == spelplan[1, 2]) && (spelplan[1, 2] == spelplan[2, 2]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[0, 0] == "X" && (spelplan[0, 0] == spelplan[1, 1]) && (spelplan[1, 1] == spelplan[2, 2]))
{
Console.WriteLine("X Vinner");
}
else if (spelplan[0, 2] == "X" && (spelplan[0, 2] == spelplan[1, 1]) && (spelplan[0, 1] == spelplan[2, 0]))
{
Console.WriteLine("X Vinner");
}
}
}
}
Svårt att se exakt vad som är fel, men en sak du gör att du blandar stora och lilla X
"x" där du sätter värdet när spelaren väljer vs. "X" där du kolla om spelaren har vunnit.
Om du vill optimera (alla if loopar är jobbiga)
- Du behöver inte titta på alla rader och kolumner varje gång någon gör ett val för att se om någon har vunnit, om någon inte redan har vunnit, är det endast rader/kolumner/diagonal med den senaste O/X som kan vara vinnande.
- X kan inte vinna när O väljer och tvärtom.
DrMuld skrev:Om du vill optimera (alla if loopar är jobbiga)
if är ingen loop per definition!