Below is my code for a Battleship game. I keep getting the following error:
Process terminated due to StackOverflowException. .
It keeps pointing to
char[,] Grid = new char[10, 10];
How can this be fixed?
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.");
}
}
}
Your BattleshipBoard object creatse a Player object during construction, and your Player object creates a BattleshipBoard during construction. This iterates back and forth until you overflow the stack.
The call to:
BattleshipBoard b = new BattleshipBoard();
will never return and cause the overflow.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With