public char snkalg(snake[] snakes, apple apl) { DisTO(snakes); int col = apl.appleX(); int row = apl.appleY(); if (Save == 'w' || Save == 's') { if (Ysnake[0] - row < up && Ysnake[0] - row > 0) { return('w'); } if (row - Ysnake[0] < down && row - Ysnake[0] > 0) { return('s'); } if (col - Xsnake[0] < right && Xsnake[0] - col < 0) { return('d'); } if (Xsnake[0] - col < left && Xsnake[0] - col > 0) { return('a'); } } else if (Save == 'a' || Save == 'd') { if (col - Xsnake[0] < right && Xsnake[0] - col < 0 && Save != 'a') { return('d'); } if (Xsnake[0] - col < left && Xsnake[0] - col > 0 && Save != 'd') { return('a'); } if (Ysnake[0] - row < up && Ysnake[0] - row > 0 && Save != 's') { return('w'); } if (row - Ysnake[0] < down && row - Ysnake[0] > 0 && Save != 'w') { return('s'); } } return(WhatToReturn(up, down, right, left)); }
public char AIsnkalg(snake[] snakes, apple apl) { IsAI = true; DisTO(snakes); int chosenOne; chosenOne = RunAI(snakes, apl); if (chosenOne == 0) { Left = true; } if (chosenOne == 1) { Straight = true; } if (chosenOne == 2) { Right = true; } return(RelativToNormal(chosenOne - 1)); }
public int RunAI(snake[] snakes, apple apl) { /*if(diagonalDownLeft > 1) * { * diagonalDownLeft = 1; * } * else * { * diagonalDownLeft = 0; * } * * if (diagonalDownRight > 1) * { * diagonalDownRight = 1; * } * else * { * diagonalDownRight = 0; * } * * if (diagonalUpLeft > 1) * { * diagonalUpLeft = 1; * } * else * { * diagonalUpLeft = 0; * } * * if (diagonalUpRight > 1) * { * diagonalUpRight = 1; * } * else * { * diagonalUpRight = 0; * }*/ double[] input = new double[inputLength]; for (int i = 0; i < snakes.Length; i++) { XsnakesHeads[i] = snakes[i].headX(); } for (int i = snakes.Length; i < snakes.Length * 2; i++) { YsnakesHeads[i - snakes.Length] = snakes[i - snakes.Length].headY(); } aplDisY = (Ysnake[0] - apl.appleY()); aplDisX = (Xsnake[0] - apl.appleX()); int counter = 0; double a = 1; double b = 1; double c = 0; if (Save == 'w') { counter = 0; input[8] = aplDisY; input[9] = -aplDisX; } else if (Save == 'a') { counter = 2; input[8] = aplDisX; input[9] = aplDisY; } else if (Save == 's') { counter = 4; input[8] = -aplDisY; input[9] = aplDisX; } else { counter = 6; input[8] = -aplDisY; input[9] = -aplDisX; } input[counter % 8] = down * a; counter++; input[counter % 8] = diagonalDownLeft * b; counter++; input[counter % 8] = left * a; counter++; input[counter % 8] = diagonalUpLeft * b; counter++; input[counter % 8] = up * a; counter++; input[counter % 8] = diagonalUpRight * b; counter++; input[counter % 8] = right * a; counter++; input[counter % 8] = diagonalDownRight * b; counter = 8; input[0] = 0; input[10] = c * ttl / 10; return(nn.Result(input)); }
public void advance(char dir, apple apl, snake[] snakes, bool printapl) { if (l > 2) { if (Save == 'w' && dir == 's') { dir = Save; } if (Save == 's' && dir == 'w') { dir = Save; } if (Save == 'a' && dir == 'd') { dir = Save; } if (Save == 'd' && dir == 'a') { dir = Save; } } ttl--; num++; if (!alive) { if (l > 0) { l--; } else { delete(); Xsnake[0] = -1; Ysnake[0] = -1; delete(); } } else { runTime++; for (int i = l; i > 0; i--) { Xsnake[i] = Xsnake[i - 1]; Ysnake[i] = Ysnake[i - 1]; } if (dir == 's') { Ysnake[0]++; } if (dir == 'w') { Ysnake[0]--; } if (dir == 'd') { Xsnake[0]++; } if (dir == 'a') { Xsnake[0]--; } if ((apl.appleX() == Xsnake[0]) && (apl.appleY() == Ysnake[0])) { l++; num = 0; apl.newCord(snakes, s); if (printapl) { apl.print(); } //ttl = ((ttl + ttlConst) * 6) / 10; ttl = ttl + ttlConst; } } Save = dir; }
// the evolution function for the machine learning. // gets the number of snakes that plays simultaneously (Competing with each other). static snake Evolution(int snknum) { snake[] snakes = new snake[snknum]; for (int i = 0; i < snakes.Length; i++) { snakes[i] = new snake(i, s); } for (int i = 0; i < snakes.Length; i++) { snakes[i].newCord(snakes, s); } bool erase = false; char dir = ' '; //snake diraction by the neural network results. bool life = true; bool othersLife = true; snakes1 = new snake[60]; // the number of snakes in every generation int numOfGeneration = 100000000; int evr = 1; // the num of iterations each snake do in one generation int a = 40; // snakes1.length - a = the num of new random snakes. int b = 5; // the num of parents snakes int c = 10; // the num of snakes that survives to the next generation (includes b) // a - (b + c) = the number of childrens. char pressedKey = ' '; // changes to the key pressed by the user for (int i = 0; i < snakes1.Length; i++) { snakes1[i] = new snake(0, s); snakes1[i].AIPrep(snakes); } Console.WriteLine("if you already have a saved version and want to keep training it, please write the version num. Otherwise write anything else."); int ErlySnk = int.Parse(Console.ReadLine()); Console.Beep(261, 50); Console.Clear(); PrintBoard(); //loading the save version to all the snakes. Also adding mutations. snakes1[0].Load(ErlySnk); snakes1[0].snksScore = 10000; for (int i = 1; i < snakes1.Length; i++) { snakes1[i].Load(ErlySnk); snakes1[i].Change(10); } for (int t = 0; t < numOfGeneration; t++) { Console.SetCursorPosition(0, s); Console.WriteLine("Press '*' to stop the learning and save the neural network to file."); Console.WriteLine("Press 'w' to watch the current snake."); Console.WriteLine((t / (numOfGeneration + 0.0)) * 100 + "% (epoch " + t + " ) "); for (int x = 0; x < snakes1.Length; x++) { if ((x / (snakes1.Length + 0.0)) * 100 % 10 == 0) { Console.SetCursorPosition(0, s + 3); Console.WriteLine((x / (snakes1.Length + 0.0)) * 100 + "% "); } //initialization of variables before the game begins for (int i = 0; i < snakes.Length; i++) { snakes[i] = new snake(i, s); snakes[i].newCord(snakes, s); snakes[i].l = 1; } life = true; apple apl = new apple(snakes, s); snakes[0] = snakes1[x]; snakes[0].newCord(snakes, s); double score = 0; for (int m = 0; m < evr; m++) { apl.newCord(snakes, s); // print the current game state to the screan if ((Console.KeyAvailable || pressedKey == 'w') && x > snakes1.Length - a) { if (Console.KeyAvailable) { pressedKey = Console.ReadKey().KeyChar; } Console.Clear(); PrintBoard(); Console.Write(x + " / " + snakes1.Length); apl.print(); } while (Console.KeyAvailable) { pressedKey = Console.ReadKey().KeyChar; } snakes[0].l = 1; //initial snake length //one game while (life) { if (erase && (pressedKey != 'w')) { Console.Clear(); PrintBoard(); erase = false; } for (int i = 0; i < snakes.Length; i++) { if (i == 0) { // one move of the tested snake, according to the neural network. dir = snakes[0].AIsnkalg(snakes, apl); snakes[i].advance(dir, apl, snakes, (Console.KeyAvailable || pressedKey == 'w') && x > snakes1.Length - a); life = snakes[0].isAlive(snakes); snakes[0].Save = dir; } else { //one move of snakes[i], according to the fixed algorithm dir = snakes[i].snkalg(snakes, apl); snakes[i].Save = dir; snakes[i].advance(dir, apl, snakes, (Console.KeyAvailable || pressedKey == 'w') && x > snakes1.Length - a); othersLife = snakes[i].isAlive(snakes); if (!othersLife) { snakes[i] = new snake(i, s); snakes[i].newCord(snakes, s); } } // print the current game state to the screan if ((Console.KeyAvailable || pressedKey == 'w') && x > snakes1.Length - a) { erase = true; if (Console.KeyAvailable) { pressedKey = Console.ReadKey().KeyChar; } snakes[i].delete(); Console.SetCursorPosition(0, 0); snakes[i].write(arrows); Console.SetCursorPosition(2 * s + 1, 0); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("score: " + snakes1[x].score()); if (i == 0) { Thread.Sleep(50); } apl.print(); } } } snakes[0].ttl = snakes[0].ttlConst; life = true; snakes[0].alive = true; snakes[0].runTime = 0; snakes[0].l = 1; snakes[0].bonus = 0; snakes[0].newCord(snakes, s); score += snakes[0].snksScore; snakes[0].snksScore = 0; } score = score / (evr * 1.0); double temp = -0.5; if (snakes1[x].Right) { temp += 0.5; } if (snakes1[x].Left) { temp += 0.5; } if (snakes1[x].Straight) { temp += 0.5; } score *= temp; snakes1[x].Right = false; snakes1[x].Left = false; snakes1[x].Straight = false; snakes1[x] = snakes[0]; snakes1[x].snksScore = score; } Console.WriteLine("last epoch's first place score in this epoch: " + snakes1[snakes1.Length - 1].snksScore + " "); Sort(0, snakes1.Length - 1); // sort snakes1 by score if (pressedKey == '*') { return(snakes1[snakes1.Length - 1]); // returning the snake with the best score } Console.SetCursorPosition(0, s + 5); Console.ForegroundColor = ConsoleColor.White; for (int i = 0; i < 10; i++) { Console.WriteLine((i + 1) + ": " + snakes1[snakes1.Length - i - 1].snksScore + " "); } Console.SetCursorPosition(0, s + 3); for (int x = 0; x < snakes1.Length; x++) { if (x < snakes1.Length - a)// create new random snakes { snakes1[x] = new snake(0, s); snakes1[x].AIPrep(snakes); } else if (x < (snakes1.Length) - c) // create snakes childs { snakes1[x] = new snake(0, s); snakes1[x].AIPrep(snakes); snakes1[x].Load(snakes1[snakes1.Length - x % b - 1].nn); // duplicating a snake into this snake snakes1[x].Change(rnd.NextDouble() * 8 + 4); // add mutations } snakes1[x].l = 1; snakes1[x].alive = true; snakes1[x].runTime = 0; snakes1[0].newCord(snakes, s); snakes1[x].snksScore = 0; } } return(snakes1[snakes1.Length - 1]); // returning the snake with the best score }
static void Main(string[] args) { int snknum; char dir = 's'; char dir2 = ' '; char temp = ' '; bool alive = true; bool othersAlive = true; int gameNum = 9999; int delay; int sum = 0; Random rnd = new Random(); Console.WriteLine(""); Console.Write("Silver Studios presents: "); Thread.Sleep(1000); Console.ForegroundColor = ConsoleColor.Green; Console.Write('S'); Thread.Sleep(200); Console.Write('n'); Thread.Sleep(200); Console.Write('a'); Thread.Sleep(200); Console.Write('k'); Thread.Sleep(200); Console.Write('e'); Thread.Sleep(1000); firstMenu: Console.Clear(); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("1. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Start"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("2. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Options"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("3. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Credits"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("4. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Quit game"); string menu = Console.ReadLine(); while (!(menu == "1" || menu == "2" || menu == "3" || menu == "4")) { Console.Beep(293, 500); Console.Clear(); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("1. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Start"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("2. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Options"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("3. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Credits"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("4. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Quit game"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("please try again, write '1', '2', '3' or '4'."); menu = Console.ReadLine(); } Console.Beep(261, 100); //Console.Beep(330, 50); if (menu == "4") { System.Environment.Exit(1); } if (menu == "2") { secondMenu: Console.Clear(); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("1. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Size (=" + (s - 2) + ")"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("2. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Snake body (arrows) (=" + arrows + ")"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("3. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Back"); string menu2 = Console.ReadLine(); while (!(menu2 == "1" || menu2 == "2" || menu2 == "3")) { Console.Beep(293, 500); Console.Clear(); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("1. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Size (=" + (s - 2) + ")"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("2. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Snake body (arrows) (=" + arrows + ")"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("3. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Back"); Console.WriteLine("Please try again, write '1', '2' or '3'."); menu2 = Console.ReadLine(); } if (menu2 == "1") { Console.Beep(261, 50); //Console.Beep(330, 50); Console.Clear(); Console.WriteLine("Please write a new size for the board. (current size is: " + (s - 2) + ")"); s = int.Parse(Console.ReadLine()) + 2; Console.Beep(261, 50); //Console.Beep(330, 50); goto secondMenu; } if (menu2 == "2") { Console.Beep(261, 50); //Console.Beep(330, 50); Console.Clear(); arrows = !arrows; goto secondMenu; } if (menu2 == "3") { Console.Beep(261, 50); Console.Beep(330, 50); goto firstMenu; } } if (menu == "3") { Console.Clear(); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(); Console.WriteLine(" ___"); Console.WriteLine(" /" + (char)(92) + " " + (char)(92)); Console.WriteLine(" / " + (char)(92) + " " + (char)(92)); Console.WriteLine(" / " + (char)(92) + " " + (char)(92)); Console.WriteLine(" / " + (char)(92) + " " + (char)(92)); Console.WriteLine(" / /" + (char)(92) + " " + (char)(92) + " " + (char)(92)); Console.WriteLine(" / / " + (char)(92) + " " + (char)(92) + " " + (char)(92)); Console.WriteLine(" / / / " + (char)(92) + " " + (char)(92) + " " + (char)(92)); Console.WriteLine(" / / /___" + (char)(92) + "___" + (char)(92) + " " + (char)(92)); Console.WriteLine(" / / / " + (char)(92)); Console.WriteLine(" / / /_______________" + (char)(92)); Console.WriteLine(" " + (char)(92) + " / /"); Console.WriteLine(" " + (char)(92) + "/___________________/"); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Magenta; Console.Write(" Made by: "); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("DANIEL SILVER"); /*int time = 3; * * Console.Beep(523, time * 240); * Console.Beep(523, time * 240); * Console.Beep(523, time * 240); * Console.Beep(392, time * 80); * Console.Beep(440, time * 160); * Console.Beep(392, time * 80); * Console.Beep(622, time * 160); * Console.Beep(622, time * 160); * Console.Beep(587, time * 240); * Console.Beep(392, time * 80); * Console.Beep(440, time * 160); * Console.Beep(392, time * 80); * * Console.Beep(523, time * 240); * Console.Beep(523, time * 240); * Console.Beep(523, time * 240); * Console.Beep(392, time * 80); * Console.Beep(440, time * 160); * Console.Beep(392, time * 80); * Console.Beep(311, time * 160); * Console.Beep(392, time * 80); * Console.Beep(311, time * 160); * Console.Beep(294, time * 240); * Console.Beep(196, time * 80); * Console.Beep(220, time * 160); * Console.Beep(196, time * 80); * * Console.Beep(262, time * 240); * Console.Beep(262, time * 240); * Console.Beep(262, time * 240); * Console.Beep(196, time * 80); * Console.Beep(220, time * 160); * Console.Beep(196, time * 80); * Console.Beep(622, time * 160); * Console.Beep(523, time * 80); * Console.Beep(622, time * 160); * Console.Beep(587, time * 240); * Console.Beep(523, time * 80); * Console.Beep(440, time * 160); * Console.Beep(392, time * 80); * Console.Beep(523, time * 160); * * Console.Beep(311, time * 80); * Console.Beep(330, time * 160); * Console.Beep(440, time * 80); * Console.Beep(392, time * 160); * Console.Beep(622, time * 80); * Console.Beep(659, time * 160); * Console.Beep(880, time * 80); * Console.Beep(784, time * 160); * Console.Beep(880, time * 80); * Console.Beep(988, time * 160); * Console.Beep(1047, time * 240); * Console.Beep(523, time * 240);*/ Thread.Sleep(5000); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(""); Console.WriteLine(" (Press enter to return to menu)"); Console.ReadLine(); Console.Beep(261, 50); Console.Beep(330, 50); goto firstMenu; } //Console.Beep(261, 500); //Console.Beep(330, 500); /*Console.Beep(293, 500); * Console.Beep(261, 500); * Console.Beep(293, 500); * Console.Beep(330, 500); * Console.Beep(330, 500); * * Console.Beep(261, 50); * Console.Beep(261, 50); * Console.Beep(261, 50); * Console.Beep(261, 50);*/ thirdMenu: Console.Clear(); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("1. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Machine learning"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("2. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Fixed algorithm"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("3. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("I want to play!"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("4. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Back"); string gameMod1 = Console.ReadLine(); while (!(gameMod1 == "1" || gameMod1 == "2" || gameMod1 == "3" || gameMod1 == "4" || gameMod1 == "123" || gameMod1 == "111")) { Console.Beep(293, 500); Console.Clear(); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("1. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Machine learning"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("2. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Fixed algorithm"); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("3. "); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("I want to play!"); Console.ForegroundColor = ConsoleColor.Red; Console.Write("4. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Back"); Console.WriteLine("Please try again, write '1', '2', '3' or '4'."); gameMod1 = Console.ReadLine(); } Console.ForegroundColor = ConsoleColor.White; Console.Beep(261, 50); //Console.Beep(330, 50); if (gameMod1 == "4") { Console.Beep(330, 50); goto firstMenu; } int gameMod = int.Parse(gameMod1); fourthMenu: Console.Clear(); Console.WriteLine(); Console.WriteLine("How many mili-seconds do you want between each step? (100 recomended) "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("b. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Back"); string str = Console.ReadLine(); Console.Beep(261, 50); if (str == "b") { Console.Beep(330, 50); goto thirdMenu; } //Console.Beep(330, 50); delay = int.Parse(str); if (gameMod == 123) { gameMod = 1; snknum = 10; } else if (gameMod == 111) { gameMod = 2; snknum = 1; } else { gameMod -= 1; Console.Clear(); Console.WriteLine(); Console.WriteLine("How many snakes do you want?(recommended no more then 10) "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("b. "); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Back"); str = Console.ReadLine(); Console.Beep(261, 50); //Console.Beep(330, 50); if (str == "b") { Console.Beep(330, 50); goto fourthMenu; } snknum = int.Parse(str); gameNum = 1000000000; } snake[] snakes = new snake[snknum]; for (int I = 0; I < gameNum; I++) { Console.Clear(); Console.ForegroundColor = ConsoleColor.White; PrintBoard(); Console.WriteLine("games left: " + (gameNum - I)); for (int i = 0; i < snakes.Length; i++) { if (gameMod == 0 && i == 0) { if (I == 0) { snakes[0] = Evolution(snknum); if (snakes[0].IsAI) { Console.Clear(); Console.WriteLine(); Console.WriteLine("(Befor saving, make sure you have a folder named 'snake_final' under 'c:')."); Console.Write("Do you want to save your snake to a file? ("); Console.ForegroundColor = ConsoleColor.Red; Console.Write("IMPORTANT:"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" you WON'T have another chance to save your snake!)"); Console.Write("If you do, "); Console.ForegroundColor = ConsoleColor.Green; Console.Write("press enter"); Console.ForegroundColor = ConsoleColor.White; Console.Write(", if you dont, please "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("write 'no'"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("."); str = Console.ReadLine(); if (str == "no" || str == "No" || str == "NO") { Console.WriteLine("..."); Console.Write("your snake was "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("not saved"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("."); } else { snakes[0].SaveSnk(); Console.WriteLine("..."); Console.Write("your snake was "); Console.ForegroundColor = ConsoleColor.Green; Console.Write("saved"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("."); } } Console.ReadLine(); Console.Beep(261, 50); Console.Clear(); PrintBoard(); } snakes[0].l = 1; snakes[0].runTime = 0; snakes[0].alive = true; } else { snakes[i] = new snake(i, s); } } for (int i = 0; i < snakes.Length; i++) { snakes[i].newCord(snakes, s); snakes[i].write(arrows); } apple apl = new apple(snakes, s); apl.print(); for (int h = 0; h < snakes.Length; h++) { snakes[h].write(arrows); Console.SetCursorPosition(2 * s, 0 + 3 * h); Console.Write('╔'); for (int z = 0; z < 6; z++) { Console.Write('═'); } Console.Write('╗'); Console.SetCursorPosition(2 * s, 1 + 3 * h); Console.Write("║ " + snakes[h].l); Console.SetCursorPosition(2 * s + 7, 1 + 3 * h); Console.Write("║"); Console.SetCursorPosition(2 * s, 2 + 3 * h); Console.Write('╚'); for (int z = 0; z < 6; z++) { Console.Write('═'); } Console.Write('╝'); } while (alive && othersAlive) { for (int h = 0; h < snakes.Length; h++) { snakes[h].write(arrows); Console.SetCursorPosition(2 * s + 2, 1 + 3 * h); Console.Write(snakes[h].l); Console.SetCursorPosition(2 * s + 7 + 2, 3 * h); if (snakes[h].l > 1) { if (snakes[h].l > (188 - 2 * s)) { Console.SetCursorPosition(2 * s + 9 + snakes[h].l - ((snakes[h].l / (188 - 2 * s))) * (188 - 2 * s) - 1, 3 * h + snakes[h].l / (188 - 2 * s)); Console.Write('0'); } else { Console.SetCursorPosition(2 * s + 9 + snakes[h].l - 2, 3 * h); Console.Write('0'); } } Console.Write('#'); } if (gameMod == 2) { while (Console.KeyAvailable) { Console.SetCursorPosition(0, 0); temp = dir; dir = Console.ReadKey().KeyChar; if (dir == 'b') //going back to main menu { goto firstMenu; } if (!((dir == 'a') || (dir == 's') || (dir == 'd') || (dir == 'w'))) { dir = temp; } } snakes[0].advance(dir, apl, snakes, true); snakes[0].delete(); snakes[0].write(arrows); alive = snakes[0].isAlive(snakes); if (!alive) { othersAlive = true; break; } if (snakes.Length > 1) { othersAlive = false; for (int i = 1; i < snakes.Length; i++) { dir2 = snakes[i].snkalg(snakes, apl); snakes[i].advance(dir2, apl, snakes, true); snakes[i].delete(); if (snakes[i].isAlive(snakes)) { snakes[i].write(arrows); } if (!othersAlive) { othersAlive = snakes[i].isAlive(snakes); } } } Console.SetCursorPosition(0, 0); Thread.Sleep(delay); } else if (gameMod != 0) { if (Console.KeyAvailable) { char key = Console.ReadKey().KeyChar; { if (key == 'k') //kills the current snake { alive = false; othersAlive = false; } if (key == 'b') //going back to main menu { goto firstMenu; } } } othersAlive = false; for (int i = 0; i < snakes.Length; i++) { Console.SetCursorPosition(0, 0); dir = snakes[i].snkalg(snakes, apl); snakes[i].advance(dir, apl, snakes, true); snakes[i].delete(); Console.SetCursorPosition(0, 0); if (snakes[i].isAlive(snakes)) { snakes[i].write(arrows); } Console.SetCursorPosition(0, 0); if (!othersAlive) { othersAlive = snakes[i].isAlive(snakes); } } Thread.Sleep(delay); } if (gameMod == 0) { for (int i = 0; i < snakes.Length; i++) { Console.SetCursorPosition(0, 0); if (Console.KeyAvailable) { char key = Console.ReadKey().KeyChar; { if (key == 'k') //kills the current snake { alive = false; othersAlive = false; } if (key == 'b') //going back to main menu { goto firstMenu; } } } while (Console.KeyAvailable) { char key = Console.ReadKey().KeyChar; } if (snakes[i].IsAI) { dir = snakes[i].AIsnkalg(snakes, apl); snakes[i].Save = dir; alive = snakes[i].isAlive(snakes); } else { dir = snakes[i].snkalg(snakes, apl); snakes[i].Save = dir; if (!snakes[i].isAlive(snakes)) { snakes[i] = new snake(i, s); snakes[i].newCord(snakes, s); } } snakes[i].advance(dir, apl, snakes, true); snakes[i].delete(); Console.SetCursorPosition(0, 0); snakes[i].write(arrows); Console.SetCursorPosition(0, 0); } Thread.Sleep(delay); } Console.SetCursorPosition(0, s + 1); Console.ForegroundColor = ConsoleColor.White; Console.Write("Press "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(" 'b'"); Console.ForegroundColor = ConsoleColor.White; Console.Write(" to go back to main menu"); } if (Console.KeyAvailable) { char key = Console.ReadKey().KeyChar; { if (key == 'b') //going back to main menu { goto firstMenu; } } } sum += snakes[0].l; Console.Clear(); PrintBoard(); if (othersAlive) { for (int i = 0; i < 10; i++) { Console.WriteLine("you lost!!!"); Thread.Sleep(100); } Thread.Sleep(250); } else if (gameMod == 2 && snknum != 1) { for (int i = 0; i < 10; i++) { Console.WriteLine("you Won!!!"); Thread.Sleep(100); } Thread.Sleep(550); } Thread.Sleep(2000); othersAlive = true; alive = true; snakes[0].ttl = snakes[0].ttlConst; } Console.SetCursorPosition(40, 40); Console.WriteLine(sum / gameNum); }