Example #1
0
        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;
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
 static void FinishOffShip(int[,] fieldUser, int[,] radarComp, ref Hit hitXY, ref BlownDeckCount bdc)
 {
     hitXY.DoMove(fieldUser, radarComp, ref bdc);
 }
Example #5
0
        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);
        }