public void DoMove(int[,] fieldUser, int[,] radarComp, ref BlownDeckCount bdc) { var xy = RemoveMissFromList(radarComp); var tmpX = PossibleLoc[xy].X; var tmpY = PossibleLoc[xy].Y; if (fieldUser[tmpX, tmpY] > 0 && fieldUser[tmpX, tmpY] < 5) { fieldUser[tmpX, tmpY] += 5; radarComp[tmpX, tmpY] = fieldUser[tmpX, tmpY]; bdc.CompCount++; DeckCount++; if (DeckCount == DeckNum) { Killed = true; return; } PossibleLoc = new List <Point>(); LastHit = true; if (tmpY == Y) { if ((X < tmpX ? X - 1 : X + 1) > -1 && (X < tmpX ? X - 1 : X + 1) < 10) { PossibleLoc.Add(new Point((X < tmpX ? X - 1 : X + 1), Y)); } if ((X < tmpX ? tmpX + 1 : tmpX - 1) > -1 && (X < tmpX ? tmpX + 1 : tmpX - 1) < 10) { PossibleLoc.Add(new Point((X < tmpX ? tmpX + 1 : tmpX - 1), Y)); } } else { if ((Y < tmpY ? Y - 1 : Y + 1) > -1 && (Y < tmpY ? Y - 1 : Y + 1) < 10) { PossibleLoc.Add(new Point(X, (Y < tmpY ? Y - 1 : Y + 1))); } if ((Y < tmpY ? tmpY + 1 : tmpY - 1) > -1 && (Y < tmpY ? tmpY + 1 : tmpY - 1) < 10) { PossibleLoc.Add(new Point(X, (Y < tmpY ? tmpY + 1 : tmpY - 1))); } } } if (fieldUser[tmpX, tmpY] == 0) { fieldUser[tmpX, tmpY] = -1; radarComp[tmpX, tmpY] = -1; PossibleLoc.RemoveAt(xy); LastHit = false; } }
static bool CompMove(int[,] fieldUser, int[,] radarComp, ref Hit hitXY, ref BlownDeckCount bdc) { int x = 2; int y = 7; //do while (radarComp[x, y] > 4 || radarComp[x, y] == -1) { x = new Random().Next(Z); y = new Random().Next(Z); } //while (radarComp[x, y] > 4 || radarComp[x, y] == -1); if (fieldUser[x, y] > 0 && fieldUser[x, y] < 5) { fieldUser[x, y] += 5; radarComp[x, y] = fieldUser[x, y]; bdc.CompCount++; if (fieldUser[x, y] > 6) { hitXY = new Hit(x, y, fieldUser[x, y] - 5); } PrintMove("Hit ", ConsoleColor.Red, 2); TestFlooding(radarComp); TestFlooding(fieldUser); for (var i = x - 1; i < x + 2; i += 2) { for (var j = y - 1; j < y + 2; j += 2) { if (i > radarComp.GetLength(0) - 1 || j > radarComp.GetLength(1) - 1 || i < 0 || j < 0) { continue; } radarComp[i, j] = -1; } } return(false); } else { radarComp[x, y] = -1; fieldUser[x, y] = -1; return(true); } }
static bool UserMove(int[,] fieldComp, int[,] radarUser, int x, int y, ref BlownDeckCount bdc) { int X = x - 1; int Y = y / 2; if (fieldComp[X, Y] > 0) { radarUser[X, Y] = fieldComp[X, Y] + 5; bdc.UserCount++; PrintMove("Hit ", ConsoleColor.Red, 2); Thread.Sleep(500); return(false); } else { radarUser[X, Y] = -1; return(true); } }
static void FinishOffShip(int[,] fieldUser, int[,] radarComp, ref Hit hitXY, ref BlownDeckCount bdc) { hitXY.DoMove(fieldUser, radarComp, ref bdc); }
static void Start() { var bdc = new BlownDeckCount(); var fieldUser = ReadArrayFromFile(); var radarUser = new int[Z, Z]; var fieldComp = CreateCompArray(); var radarComp = new int[Z, Z]; int x = 1; int y = 1; Hit hitXY = new Hit(0, 0, 0) { Killed = true }; bool endUserMove = false; Console.SetWindowSize(50, 40); ConsoleKeyInfo info; Console.WriteLine("Press any key to start"); info = Console.ReadKey(true); do { PrintField(radarUser, fieldUser); PrintMove("User Move ", ConsoleColor.Green, 1); PrintMove(" ", ConsoleColor.Red, 2); if (bdc.TestWin()) { break; } Console.SetCursorPosition(y, x); if (!endUserMove) { info = Console.ReadKey(true); switch (info.Key) { case ConsoleKey.DownArrow: { if (TestXY(x + 1, y)) { continue; } x++; break; } case ConsoleKey.UpArrow: { if (TestXY(x - 1, y)) { continue; } x--; break; } case ConsoleKey.RightArrow: { if (TestXY(x, y + 1)) { continue; } y += 2; break; } case ConsoleKey.LeftArrow: { if (TestXY(x, y - 1)) { continue; } y -= 2; break; } case ConsoleKey.Enter: { if (TestUserMove(radarUser, x, y)) { continue; } endUserMove = UserMove(fieldComp, radarUser, x, y, ref bdc); TestFlooding(radarUser); break; } } } else { if (!hitXY.Killed) { if (hitXY.LastHit) { FinishOffShip(fieldUser, radarComp, ref hitXY, ref bdc); TestFlooding(radarComp); TestFlooding(fieldUser); Thread.Sleep(1000); } else { endUserMove = false; hitXY.LastHit = true; } } else { PrintMove("Computer Move", ConsoleColor.Red, 1); endUserMove = CompMove(fieldUser, radarComp, ref hitXY, ref bdc) ? false : true; Thread.Sleep(1000); } } } while (info.Key != ConsoleKey.Escape); }