下面是我的戰艦遊戲代碼。我不斷收到以下錯誤:調試C# - 堆棧溢出異常?
Process terminated due to StackOverflowException. .
它一直指向
char[,] Grid = new char[10, 10];
如何這個問題能解決?
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.");
}
}
}
+1 for StackOverflowException – Mehrdad 2011-06-06 01:48:55
第一個問題:爲什麼Player類有一個板的副本? (以及固定大小)。創建一個單獨的Board類... – 2011-06-06 01:52:53
WOW感謝Mitch哈哈固定它 – 2011-06-06 01:56:17