בעיה בקוד

ehudl1

New member
בעיה בקוד

שלום,

כל חלק כאן בקוד עובד בצורה תקינה בפני עצמו, אבל כאשר הם יחד (זה עדיין עובד, אבל כאילו לא בודק את כולם):


public int chackMate(ArrayList arr, int _x, int _y)
{
ArrayList newArr= new ArrayList();
Board board1= new Board();
int flagChess=0;

for (int p=0; p < SIZE; p++)
for (int q=0; q < SIZE; q++)
{
if (board.blackOrWhite(_x, _y)=='w')
{
if (board.whoIs(p, q)=="black_soldier")
{
newArr=soldier.setOptions(p, q);
newArr=soldier.checkLegal(newArr, p, q, board);
for (int z=0; z < newArr.size(); z++)
{
InfoPlace info1= (InfoPlace) newArr.get(z);
if (info1.getX()==_x && info1.getY()==_y)
{
ArrayList arr1= new ArrayList();
arr1= king.setOptions(_x, _y, board);
arr1= king.checkLegal(arr1, _x, _y, board);
if (arr1.size()==1)
flagChess=1;
} // if
} // for
} // black soldier
if (board.whoIs(p, q)=="black_rook")
{
int flagRook=0;
newArr=rook.setOptions(p, q, board);
newArr=rook.checkLegal(newArr, p, q, board);
for (int z=0; z < newArr.size(); z++)
{
InfoPlace info1= (InfoPlace) newArr.get(z);
if (info1.getX()==_x && info1.getY()==_y)
{
ArrayList arr1= new ArrayList();
arr1= king.setOptions(_x, _y, board);
arr1= king.checkLegal(arr1, _x, _y, board);
if (arr1.size()>1)
{
flagRook=checkRookMate(arr1);
if (flagRook==1)
flagChess=1;
} // if arr1>1
} // if
} // for
} // black rook
if (board.whoIs(p, q)=="black_queen")
{
newArr=queen.setOptions(p, q);
newArr=queen.checkLegal(newArr, p, q, board);
for (int z=0; z < newArr.size(); z++)
{
InfoPlace info1= (InfoPlace) newArr.get(z);
if (info1.getX()==_x && info1.getY()==_y)
{
ArrayList arr1= new ArrayList();
arr1= king.setOptions(_x, _y, board);
arr1= king.checkLegal(arr1, _x, _y, board);
if (arr1.size()==1)
flagChess=1;
} // if
} // for
} // black queen

if (board.whoIs(p, q)=="black_run")
{
int flagRun=0;
newArr=run.setOptions(p, q, board);
newArr=run.checkLegal(newArr, p, q, board);
for (int z=0; z < newArr.size(); z++)
{
InfoPlace info1= (InfoPlace) newArr.get(z);
if (info1.getX()==_x && info1.getY()==_y)
{
ArrayList arr1= new ArrayList();
arr1= king.setOptions(_x, _y, board);
arr1= king.checkLegal(arr1, _x, _y, board);
if (arr1.size()>1)
{
flagRun=checkRunMate(arr1);
if (flagRun==1)
flagChess=1;
}
} // if arr1>1
} // for
} // black run

if (board.whoIs(p, q)=="black_horse")
{
int flagHorse=0;
newArr=horse.setOptions(p, q);
newArr=horse.checkLegal(newArr, p, q, board);
for (int z=0; z < newArr.size(); z++)
{
InfoPlace info1= (InfoPlace) newArr.get(z);
if (info1.getX()==_x && info1.getY()==_y)
{
ArrayList arr1= new ArrayList();
arr1= king.setOptions(_x, _y, board);
arr1= king.checkLegal(arr1, _x, _y, board);

if (arr1.size()>1)
{
flagHorse=checkHorseMate(arr1);
if (flagHorse==1)
flagChess=1;
}
} // if
} // for
} // black horse

if (board.whoIs(p, q)=="black_king")
{
int flag1=0;
int flag2=0;
newArr=king.setOptions(p, q, board);
newArr=king.checkLegal(newArr, p, q, board);
for (int z=0; z < newArr.size(); z++)
{
InfoPlace info1= (InfoPlace) newArr.get(z);
if (info1.getX()==_x && info1.getY()==_y)
{
ArrayList arr1= new ArrayList();
arr1= king.setOptions(_x, _y, board);
arr1= king.checkLegal(arr1, _x, _y, board);
if (arr1.size()>1)
{
flag1=checkRookMate(arr1);
flag2=checkRunMate(arr1);
if (flag1==1 || flag2==1)
flagChess=1;
}
} // if
} // for
} // black king
}


כמו שניתן להבין הקוד בודק אם יש מט עבור כל כלי על הלוח שהוא בצבע הנגדי למלך.
מום מה בסופו של דבר הם לא עובדים ביחד, הם כן עובדים אם רק אחד מאיים עליו.
ניסיתי לעשות מצב שסוס מאיים וגם רץ מאיים במקום היחיד שיש למלך לזוז וזה לא ממש הסתדר...

אשמח לעצות, פתרונות, או כל דרך לפתר את זה...
 
למעלה