public void Button_Click(object sender, EventArgs e) { Button knapp = (Button)sender; int knappIndex = Array.IndexOf(knappar, knapp); //får index int[] kordinater = spel.fåKordinater(knappIndex); //{x, y} if (spel.ärTom(kordinater[0], kordinater[1])) { spel.görDrag(kordinater[0], kordinater[1]); knapp.Text = spel.bräda[kordinater[1], kordinater[0]].ToString(); kollaEfterVinst(); antalTillgängligaDrag -= 1; //Ett mindre tillgängligt drag if (spelarMotBot) { görBotDrag(); } } }
public int[] fåDragMinimax(int maxDjup) { egetSpel.kopieraAnnatSpel(spel); bool maximize = (egetSpel.tur == 'X'); //X är maximera O är minimera int bästaScore = -10000; int[] bästaDrag = new int[] { 0, 0 }; if (!maximize) //om minimera ska bästa score vara högt { bästaScore = 10000; } //Loopa genom alla rutor for (int y = 0; y < egetSpel.storlek; y++) { for (int x = 0; x < egetSpel.storlek; x++) { if (egetSpel.ärTom(x, y)) { egetSpel.görDrag(x, y); int score = minimax(1, -10000, 10000, !maximize, maxDjup); //Få score för draget egetSpel.taBortDrag(x, y); //Ta bort draget så att nästa drag kan testas //Om score är bättre än bästaScore if ((score > bästaScore && maximize) || (score < bästaScore && !maximize)) { bästaScore = score; bästaDrag = new int[] { x, y }; } } } } //Console.WriteLine("Djup " + maxDjup + " score " + bästaScore); return(bästaDrag); }