#1
by JJJuto » 2年前
以前に質問した五目並べのプログラムを書いているものです。
以下のコードの☆の部分がRangeオーバーになってしまい、処理落ちしてしまいます。
色々調べて直したりしたのですが、直らず、原因がわからず困っています。
使用言語はC#です。
コード:
class Program
{
static void Main(string[] args)
{
Gomoku gomoku = new Gomoku();
gomoku.Start();
}
}
class Gomoku
{
const int rowMax = 8, colMax = 8;//縦、横
Stone[,] board = new Stone[rowMax, colMax];
enum Stone
{
None,
White,
Black
}
public void Start()
{
const string endKeyword = "end";
string str;
int row, col;
Gomoku mc = new Gomoku();
Console.WriteLine("-------------------------");
for (int i = 0; i < board.GetLength(0); i++)
{
Console.Write("|");
for (int m = 0; m < board.GetLength(1); m++)
{
Console.Write(" |");
}
Console.WriteLine("");
Console.WriteLine("-------------------------");
}
ArrayList al = new ArrayList();
int array=8;
for (array = 0; array < 8; array++)
{
al.Add(array);
}
while (true)
{
//プレイヤーのターン
Console.WriteLine("\nboard[縦][横]のどこに石を置きますか。(endを入力すると終了します)");
Console.Write("縦[1-8]=");
str = Console.ReadLine();
if (str == endKeyword)
{
break;
}
if (!int.TryParse(str, out row))
{
continue;
}
row--;
if (!(0 <= row && row < board.GetLength(0)))
{
continue;
}
Console.Write("横[1-8]=");
str = Console.ReadLine();
if (!int.TryParse(str, out col))
{
continue;
}
col--;
if (!(0 <= col && col < board.GetLength(1)))
{
continue;
}
Console.WriteLine("-------------------------");
board[row, col] = Stone.White;
for (int i = 0; i < board.GetLength(0); i++)
{
Console.Write("|");
for (int m = 0; m < board.GetLength(1); m++)
{
if (board[i, m] == Stone.White)
{
Console.Write("〇|");
}
else
{
Console.Write(" |");
}
if (board[i, m] == Stone.White && board[i + 1, m] == Stone.White && board[i + 2, m] == Stone.White && board[i + 3, m] == Stone.White && board[i + 4, m] == Stone.White)
{
Console.WriteLine("あなたの勝利です!");
break;
}
else if (board[i, m] == Stone.White && board[i, m + 1] == Stone.White && board[i, m + 2] == Stone.White && board[i, m + 3] == Stone.White && board[i, m + 4] == Stone.White)
{
Console.WriteLine("あなたの勝利です!");
break;
}
else if (board[i, m] == Stone.White && board[i + 1, m + 1] == Stone.White && board[i + 2, m + 2] == Stone.White && board[i + 3, m + 3] == Stone.White && board[i + 4, m + 4] == Stone.White)
{
Console.WriteLine("あなたの勝利です!");
break;
}
}
Console.WriteLine("");
Console.WriteLine("-------------------------");
}
//COMのターン
Random r1 = new Random();
board[array,array] = Stone.Black;
for (int i = 0; i < al.Count; i++)//☆ここがエラーになってます
{
Console.WriteLine("-------------------------");
for (int m = 0; m < al.Count; m++)
{
if (board[i, m] == Stone.Black)
{
Console.Write("●|");
}
else
{
Console.Write("|");
}
if (board[i, m] == Stone.Black && board[i + 1, m] == Stone.Black && board[i + 2, m] == Stone.Black && board[i + 3, m] == Stone.Black && board[i + 4, m] == Stone.Black)
{
Console.WriteLine("敵の勝利です!");
}
else if (board[i, m] == Stone.Black && board[i, m + 1] == Stone.Black && board[i, m + 2] == Stone.Black && board[i, m + 3] == Stone.Black && board[i, m + 4] == Stone.Black)
{
Console.WriteLine("敵の勝利です!");
}
else if (board[i, m] == Stone.Black && board[i + 1, m + 1] == Stone.Black && board[i + 2, m + 2] == Stone.Black && board[i + 3, m + 3] == Stone.Black && board[i + 4, m + 4] == Stone.Black)
{
Console.WriteLine("敵の勝利です!");
}
}
}
Console.WriteLine("");
Console.WriteLine("-------------------------");
}
Console.WriteLine("push any key");
Console.ReadLine();//入力待ち
}
}
助けてください、よろしくお願いします。
以前に質問した五目並べのプログラムを書いているものです。
以下のコードの☆の部分がRangeオーバーになってしまい、処理落ちしてしまいます。
色々調べて直したりしたのですが、直らず、原因がわからず困っています。
使用言語はC#です。
[code]
class Program
{
static void Main(string[] args)
{
Gomoku gomoku = new Gomoku();
gomoku.Start();
}
}
class Gomoku
{
const int rowMax = 8, colMax = 8;//縦、横
Stone[,] board = new Stone[rowMax, colMax];
enum Stone
{
None,
White,
Black
}
public void Start()
{
const string endKeyword = "end";
string str;
int row, col;
Gomoku mc = new Gomoku();
Console.WriteLine("-------------------------");
for (int i = 0; i < board.GetLength(0); i++)
{
Console.Write("|");
for (int m = 0; m < board.GetLength(1); m++)
{
Console.Write(" |");
}
Console.WriteLine("");
Console.WriteLine("-------------------------");
}
ArrayList al = new ArrayList();
int array=8;
for (array = 0; array < 8; array++)
{
al.Add(array);
}
while (true)
{
//プレイヤーのターン
Console.WriteLine("\nboard[縦][横]のどこに石を置きますか。(endを入力すると終了します)");
Console.Write("縦[1-8]=");
str = Console.ReadLine();
if (str == endKeyword)
{
break;
}
if (!int.TryParse(str, out row))
{
continue;
}
row--;
if (!(0 <= row && row < board.GetLength(0)))
{
continue;
}
Console.Write("横[1-8]=");
str = Console.ReadLine();
if (!int.TryParse(str, out col))
{
continue;
}
col--;
if (!(0 <= col && col < board.GetLength(1)))
{
continue;
}
Console.WriteLine("-------------------------");
board[row, col] = Stone.White;
for (int i = 0; i < board.GetLength(0); i++)
{
Console.Write("|");
for (int m = 0; m < board.GetLength(1); m++)
{
if (board[i, m] == Stone.White)
{
Console.Write("〇|");
}
else
{
Console.Write(" |");
}
if (board[i, m] == Stone.White && board[i + 1, m] == Stone.White && board[i + 2, m] == Stone.White && board[i + 3, m] == Stone.White && board[i + 4, m] == Stone.White)
{
Console.WriteLine("あなたの勝利です!");
break;
}
else if (board[i, m] == Stone.White && board[i, m + 1] == Stone.White && board[i, m + 2] == Stone.White && board[i, m + 3] == Stone.White && board[i, m + 4] == Stone.White)
{
Console.WriteLine("あなたの勝利です!");
break;
}
else if (board[i, m] == Stone.White && board[i + 1, m + 1] == Stone.White && board[i + 2, m + 2] == Stone.White && board[i + 3, m + 3] == Stone.White && board[i + 4, m + 4] == Stone.White)
{
Console.WriteLine("あなたの勝利です!");
break;
}
}
Console.WriteLine("");
Console.WriteLine("-------------------------");
}
//COMのターン
Random r1 = new Random();
board[array,array] = Stone.Black;
for (int i = 0; i < al.Count; i++)//☆ここがエラーになってます
{
Console.WriteLine("-------------------------");
for (int m = 0; m < al.Count; m++)
{
if (board[i, m] == Stone.Black)
{
Console.Write("●|");
}
else
{
Console.Write("|");
}
if (board[i, m] == Stone.Black && board[i + 1, m] == Stone.Black && board[i + 2, m] == Stone.Black && board[i + 3, m] == Stone.Black && board[i + 4, m] == Stone.Black)
{
Console.WriteLine("敵の勝利です!");
}
else if (board[i, m] == Stone.Black && board[i, m + 1] == Stone.Black && board[i, m + 2] == Stone.Black && board[i, m + 3] == Stone.Black && board[i, m + 4] == Stone.Black)
{
Console.WriteLine("敵の勝利です!");
}
else if (board[i, m] == Stone.Black && board[i + 1, m + 1] == Stone.Black && board[i + 2, m + 2] == Stone.Black && board[i + 3, m + 3] == Stone.Black && board[i + 4, m + 4] == Stone.Black)
{
Console.WriteLine("敵の勝利です!");
}
}
}
Console.WriteLine("");
Console.WriteLine("-------------------------");
}
Console.WriteLine("push any key");
Console.ReadLine();//入力待ち
}
}
[/code]
助けてください、よろしくお願いします。