22-03-2011, 15:17
|
|
|
חבר מתאריך: 08.11.07
הודעות: 34
|
|
שאלה בגאוה
השאלה שלי היא כללית יותר אבל אם יהיה לא מובן אני אביא כבר הכל בדיוק אותו דבר
יש פונקציה שרוצים שאני אכתוב לחשב מספר שינויים של מהלך במשחק רוורסי
public static int benefit(int[][] board, int player, int row, ont column)
המונה ומחזירה את תועלת המהלך, כלומר את מספר הדסקיות היריב שהשתנו בעקבות המהלך.
הבעיה היא שהשינויים שנעשים בכל מהלך נעשים בפונקציה אחרת כך ששם הרבה יותר קל פשוט למנות אותם אחרי כל שינוי....
איך אני יכול לעשות את זה דרך פונקציה חיצונית...(benefit) אני גם צריך שהיא תחזיר את סך כל השינויים ולא רק לזמן אותה בכניסה לכל לולאה...
כלומר היא צריכה לפעול אחרי כל השינויים שנעשים ולא כל פעם שנעשה שינוי בודד.
מישהו הבין בכלל מה אני רוצה ?
הנה הפונקציה השניה שמבצעת את השינויים אולי זה יסביר יותר טוב למה אני לא מבין איך למנות את סך כל השינויים באמצעות BENEFIT :
public static int[][] play(int[][] board, int player, int row, int column){
if (isLegal(board,player,row,column)){
if (isLegalrowright(board,player,row,column)){
//switching row right according to rules
int j=column;
while (j<=board[row].length-1&&board[row][j]!=player){
board[row][j]=player;
j=j+1;
}//while
}
if (isLegalrowleft(board,player,row,column)){
//switching row left according to rules
int j=column;
while (board[row][j]!=player&&j>=0){
board[row][j]=player;
j=j-1;
}//while
}
if (isLegalcoldown(board,player,row,column)){
//switching column down according to rules
int i=row;
while (board[i][column]!=player&&i<=board.length-1){
board[i][column]=player;
i=i+1;
}//while
}
if (isLegalcolup(board,player,row,column)){
//switching column up according to rules
int i=row;
while (board[i][column]!=player&&i>=0){
board[i][column]=player;
i=i-1;
}//while
}
if (isLegaldiadownleft(board,player,row,column)){
//switching diagonal down left according to rules
int i=row;
int j=column;
while (board[i][j]!=player&&i<=board.length-1&&j>=0){
board[i][j]=player;
i=i+1;
j=j-1;
}//while
}
}
if (isLegaldiaupright(board,player,row,column)){
//switching diagonal up right according to rules
int i=row;
int j=column;
while (board[i][j]!=player&&i>=0&&j<=board[i].length-1){
board[i][j]=player;
i=i-1;
j=j+1;
}//while
}
if (isLegaldiadownright(board,player,row,column)){
//switching diagonal down right according to rules
int i=row;
int j=column;
while (board[i][j]!=player&&i<=board.length-1&&j<=board[i].length-1){
board[i][j]=player;
i=i+1;
j=j+1;
}//while
}
if (isLegaldiaupleft(board,player,row,column)){
//switching diagonal up left according to rules
int i=row;
int j=column;
while (board[i][j]!=player&&i>=0&&j<=0){
board[i][j]=player;
i=i-1;
j=j-1;
}//while
}
תודה מראש.
|