[TIL] 2020-11-27
プロセス
五子棋種目(?)完成しました.今日はすべての勝利条件のアルゴリズムを実現し、正常にゲームを行うことができます.しかし、可読性の良いコードや簡潔なコードは考慮せず、実行可能コードとしてのみ符号化されるため、さらなる修正が必要となる.
今日やったこと
boolean win1_1(int x, char y, Player player) //첫번째 돌에서 끝
{
try {
if(board[x][y-97] == player.getPlayerStone() && board[x][y-96] == player.getPlayerStone() && board[x][y-95] == player.getPlayerStone() && board[x][y-94] == player.getPlayerStone() && board[x][y-93] == player.getPlayerStone())
{
return true;
}
else
return false;
}catch(ArrayIndexOutOfBoundsException e)
{
return false;
}
}
boolean win1_2(int x, char y, Player player) //두번째 돌에서 끝
{
try {
if(board[x][y-97] == player.getPlayerStone() && board[x][y-96] == player.getPlayerStone() && board[x][y-98] == player.getPlayerStone() && board[x][y-99] == player.getPlayerStone() && board[x][y-100] == player.getPlayerStone())
{
return true;
}
else
return false;
}catch(ArrayIndexOutOfBoundsException e)
{
return false;
}
}
boolean win1_3(int x, char y, Player player) //가운데 돌에서 끝
{
try {
if(board[x][y-97] == player.getPlayerStone() && board[x][y-98] == player.getPlayerStone() && board[x][y-99] == player.getPlayerStone() && board[x][y-96] == player.getPlayerStone() && board[x][y-95] == player.getPlayerStone())
{
return true;
}
else
return false;
}catch(ArrayIndexOutOfBoundsException e)
{
return false;
}
}
boolean win1_4(int x, char y, Player player) //네번째 돌에서 끝
{
try {
if(board[x][y-97] == player.getPlayerStone() && board[x][y-98] == player.getPlayerStone() && board[x][y-96] == player.getPlayerStone() && board[x][y-95] == player.getPlayerStone() && board[x][y-94] == player.getPlayerStone())
{
return true;
}
else
return false;
}catch(ArrayIndexOutOfBoundsException e)
{
return false;
}
}
boolean win1_5(int x, char y, Player player) //마지막 돌에서 끝
{
try {
if(board[x][y-97] == player.getPlayerStone() && board[x][y-98] == player.getPlayerStone() && board[x][y-99] == player.getPlayerStone() && board[x][y-100] == player.getPlayerStone() && board[x][y-101] == player.getPlayerStone())
{
return true;
}
else
return false;
}catch(ArrayIndexOutOfBoundsException e)
{
return false;
}
}
これはノガダ式で完成した勝利条件アルゴリズムである.どのような状況を満たす条件文を区別しやすく,メソッドwin
に数字を付ける.まず、前に1番から4番があり、それぞれ勝利条件を満たす石に貼り付けて方向を区別します.それぞれ1(→),2(↓),3(演繹),4(±)を実現した.そして、後ろの数字は勝利条件を満たす最後の石によって多少数字が貼られています.
if(checkwin.win1_1(x, y, player[i]) || checkwin.win1_2(x, y, player[i]) ||
checkwin.win1_3(x, y, player[i]) || checkwin.win1_4(x, y, player[i]) ||
checkwin.win1_5(x, y, player[i]) || checkwin.win2_1(x, y, player[i]) ||
checkwin.win2_2(x, y, player[i]) || checkwin.win2_3(x, y, player[i]) ||
checkwin.win2_4(x, y, player[i]) || checkwin.win2_5(x, y, player[i]) ||
checkwin.win3_1(x, y, player[i]) || checkwin.win3_2(x, y, player[i]) ||
checkwin.win3_3(x, y, player[i]) || checkwin.win3_4(x, y, player[i]) ||
checkwin.win3_5(x, y, player[i]) || checkwin.win4_1(x, y, player[i]) ||
checkwin.win4_2(x, y, player[i]) || checkwin.win4_3(x, y, player[i]) ||
checkwin.win4_4(x, y, player[i]) || checkwin.win4_5(x, y, player[i])) //승패분석
{
board.print();
System.out.println(player[i].getPlayerName()+ "님이 승리하였습니다.");
System.exit(0);
}
すべての条件が完了し、勝利条件文と粗い条件文のため、コードは非常に長くなります.
よくやったね.
TIL
実はめちゃくちゃな条件文を整理したくないわけではありません.
for
ゲートとwhile
ゲートでできるだけ短くしたいのですが、不思議なことに、一つの方法が成功すれば、もう一つはだめです.まず正常に動いているので、条件文を整理して、終わりにすればいいです.思ったより早く終わるのが目標で、YouTubeや本でできるだけ早くGUI機能を身につける.Reference
この問題について([TIL] 2020-11-27), 我々は、より多くの情報をここで見つけました https://velog.io/@cjhlsb/TIL-2020-11-27テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol