コード例 #1
0
ファイル: Game.cs プロジェクト: Ajurgs/Battleship
        // add a ship to gameboard
        private Ship PlaceShip(int length, string type)
        {
            int  bowX      = rnd.Next(10);
            int  bowY      = rnd.Next(10);
            int  direction = rnd.Next(1, 5);
            bool validBow  = board.FreeSpace(bowX, bowY);
            int  stern;
            int  sternX = -1;
            int  sternY = -1;

            if (validBow == false)
            {
                while (validBow == false)
                {
                    bowX      = rnd.Next(10);
                    bowY      = rnd.Next(10);
                    direction = rnd.Next(1, 5);
                    validBow  = board.FreeSpace(bowX, bowY);
                }
            }
            if (validBow == true)
            {
                switch (direction)
                {
                case 1:     // stern is north of the bow
                    stern = (bowY - length + 1);
                    if (stern >= 0)
                    {
                        for (int i = stern; i <= bowY; i++)
                        {
                            if (board.FreeSpace(bowX, i) == false)
                            {
                                goto case 2;
                            }
                            else
                            {
                                sternX = bowX;
                                sternY = stern;
                                break;
                            }
                        }
                        break;
                    }
                    else
                    {
                        goto case 2;
                    }

                case 2:     // stern is east of the bow
                    stern = (bowX + length - 1);
                    if (stern <= 9)
                    {
                        for (int i = bowX; i <= stern; i++)
                        {
                            if (board.FreeSpace(i, bowY) == false)
                            {
                                goto case 3;
                            }
                            else
                            {
                                sternX = stern;
                                sternY = bowY;
                                break;
                            }
                        }
                        break;
                    }
                    else
                    {
                        goto case 3;
                    }

                case 3:     // stern is south of the bow
                    stern = (bowY + length - 1);
                    if (stern <= 9)
                    {
                        for (int i = bowY; i <= stern; i++)
                        {
                            if (board.FreeSpace(bowX, i) == false)
                            {
                                goto case 4;
                            }
                            else
                            {
                                sternX = bowX;
                                sternY = stern;
                                break;
                            }
                        }
                        break;
                    }
                    else
                    {
                        goto case 4;
                    }

                case 4:     // stern is west of the bow
                    stern = (bowX - length + 1);
                    if (stern >= 0)
                    {
                        for (int i = stern; stern <= bowX; i++)
                        {
                            if (board.FreeSpace(i, bowY) == false)
                            {
                                goto default;
                            }
                            else
                            {
                                sternX = stern;
                                sternY = bowY;
                                break;
                            }
                        }
                        break;
                    }
                    else
                    {
                        goto default;
                    }

                default:
                    if (direction != 1)
                    {
                        goto case 1;
                    }
                    else
                    {
                        sternX = 0;
                        sternY = 0;
                        Console.WriteLine("bow position failed to find valid positioning");
                        break;
                    }
                }
            }

            Ship temp = new Ship(length, bowX, bowY, sternX, sternY, type);

            board.AddShipIcon(bowX, bowY, sternX, sternY, temp);
            return(temp);
        }