Hey Guys!
Below is my code of Battleship game. I keep getting "Process terminated due to StackOverflowException." error. It keeps pointing to

char[,] Grid = new char[10, 10];

and i have no idea what it's asking to fix.
Please help me.
Thanks!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BattleShip_Jamshid_Berdimuratov
{
    class BattleshipBoard
    {
        Player p = new Player();
        public void Randomize()
        {

            p.SetGrid(1, 2);
            p.SetGrid(2, 2);
            p.SetGrid(3, 2);

        }

        public void DisplayBoard(char[,] Board)
        {
            int Row;
            int Column;

            Console.WriteLine("  ¦ 0 1 2 3 4 5 6 7 8 9");
            Console.WriteLine("--+--------------------");
            for (Row = 0; Row <= 9; Row++)
            {
                Console.Write((Row).ToString() + " ¦ ");
                for (Column = 0; Column <= 9; Column++)
                {
                    Console.Write(Board[Column, Row] + " ");
                }
                Console.WriteLine();
            }

            Console.WriteLine("\n");
        }
    }

    class Player
    {
        char[,] Grid = new char[10, 10];
        public int HitCount = 0;
        public int MissCount = 0;
        int x = 0;
        int y = 0;
        BattleshipBoard b = new BattleshipBoard();

        public int getHitCount()
        {
            return HitCount;
        }
        public int getMissCount()
        {
            return MissCount;
        }
        public void AskCoordinates()
        {
            Console.WriteLine("Enter X");
            string line = Console.ReadLine();
            int value;
            if (int.TryParse(line, out value))
            {
                x = value;
            }
            else
            {
                Console.WriteLine("Not an integer!");
            }

            Console.WriteLine("Enter Y");
            line = Console.ReadLine();
            if (int.TryParse(line, out value))
            {
                y = value;
            }
            else
            {
                Console.WriteLine("Not an integer!");
            }

            try
            {
                if (Grid[x, y].Equals('S'))
                {
                    Grid[x, y] = 'H';
                    Console.Clear();
                    Console.WriteLine("Hit!");
                    HitCount += 1;
                }
                else
                {
                    Grid[x, y] = 'M';
                    Console.Clear();
                    Console.WriteLine("Miss!");
                }
            }
            catch
            {
                Console.Clear();
                Console.WriteLine("Error: Please enter numbers between 0 and 9. (Inclusive)");
            }
        }
        public char[,] GetGrid()
        {
            return Grid;
        }
        public void SetGrid(int x, int y)
        {
            Grid[x, y] = 'S';
        }

    }

    class Program
    {

        static void Main(string[] args)
        {
          
            Console.Title = "BerdShip!";
            Console.WriteLine("Welcome to Berdship!\r\n\r\n");
            Console.WriteLine("What is your name?");
            string name = System.Console.ReadLine();
            Console.WriteLine();
            BattleshipBoard b = new BattleshipBoard();
            Player p = new Player();
            b.Randomize();
            while (p.getHitCount() < 12)
            {
                b.DisplayBoard(p.GetGrid());
                p.AskCoordinates();
            }
            Console.WriteLine("Congratulations, "+name+"! You Win!");
            Console.WriteLine("Thanks for playing BerdShip. Press enter to quit.");
        }


    }
}

Recommended Answers

All 2 Replies

There's an infinite recursion going on. Here's what is happening.

Line 127: You make a BattleshipBoard object called 'b' giving it the value of a new BattleshipBoard class. It's going to go through and assign any variables you tell it to and make its methods available to the object you assign it to.

Line 10: You create a new Player object called 'p' with the value of a new Player class. It will assign values and make the methods available to 'p'.

Line 48: Inside the Player class, you create another new BattleshipBoard.

The program will now go back to BattleshipBoard, which creates a new player, which creates a new BattleshipBoard, which creates a new player, and so on.

commented: Nice observation and explanation! +14

Thanks! i fixed it

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.