עבור לתוכן

שאלה בקשר להמשך בניית איקס עיגול ב JAVA

Featured Replies

פורסם

בניתי משחק איקס עיגול ב JAVA P VS P (שחקן נגד שחקן)

אני צריך עזרה בבניית האלגוריתם של שחקן נגד מחשב, יש מצב עוזרים לי? :)

פורסם

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

טוב התחלתי לרשום פה את כל האלגוריתם ואז הבנתי שיש מלא מקרים אז פניתי לגוגל.

יש לך 6 מקרים שאתה צריך לפעול בהם בדרך מסוימת כדי לנצח או להוציא תיקו.

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

http://webster.cs.ucr.edu/AsmTools/MASM/TicTacToe/ttt_1.html

תוצאות מגוגל:

http://www.google.co.il/search?hl=iw&client=firefox-a&channel=s&rls=org.mozilla%3Ahe%3Aofficial&hs=kT6&q=%22tic+tac+toe%22+algorithm&btnG=%D7%97%D7%99%D7%A4%D7%95%D7%A9&meta=

פורסם
  • מחבר

בניתי את המשחק! הבעיה היא שהקוד מאוד עלוב. רב הקוד מתכם הרבה IFים וזה רמה ממש עלובה, אולי מישהו יכול לעזור לי לשפר אותו?

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

אם לא הבנתם תבקשו אני יעלה את הקוד של אותה פונ' שבודקת

פורסם

ברור שיצא קוד מכוער ומלא בתנאים.

כי כל המשחק הזה תלוי בתנאים של המצב על הלוח.

אתה יכול לנסות לשים חלק מהתנאים בcase, ואז אולי זה יראה לך "יפה" יותר.

פורסם

לא יודע מה עשית אבל אתה עובד בJAVA אז תתחיל לחלק למחלקות את כל העסק.

תבנה מחלקה של עץ כללי עם רשימה מקושרת בתוכה(בנים)

תבנה מחלקה של שחקן מאורגן

הפונקציה עצמה של המחשב לא כזאת מסורבלת ומכוערת

יצירת כל המצבים->נתינת ציון לכל אחד->לעבור על העץ כולו לפיו לבחור את הצומת שעדיפה.

פורסם
  • מחבר

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

מה שאני ניסיתי להגיד זה שהפונ' לבדיקה של המצבים הקיצונים היא ארוכה יחסית ויש בה הרבה ורק IFים. אני יודע שבפרוייקטים זה לא אמרו להיות כך !אסור! שזה יהיה כך. איך אני משפר את זה????

פורסם

אם אתה שומר את כל הלוחות מראש כמו בדוגמא שהבאתי, אמורה להיות לך רק פונקציה אחת שמשווה בין לוחות וגם שם לא צריכים להיות יותר מגג 3 if..

פורסם
  • מחבר

אני לא שומר שום לוחות. אני עושה את הבדיקות של אותם לוחות על לוח אחד. (אני לא שומר לוחות ומשווה אלה אני עושה את הבדיקות על לוח אחד)

פורסם

אני לא יכול בדיוק לחשוב על פונקציית הבדיקה אבל בכל המשחקים האלה כשבונים אותם הם כמובן מבוססי רקורסיה ולא IFים

פורסם
  • מחבר


//shapeSign = the shape that needs to be check for a win

// if(this.shapeFlag==0){
//
if( array[0][0]==array[0][1] && array[0][1]==shapeSign )
if( (array[0][2]!=1) && (array[0][2]!=0) ){
array[0][2]=0;
return true;
}
if(array[0][0]==array[0][2] && array[0][2]==shapeSign)
if( (array[0][1]!=1) && (array[0][1]!=0) ){
array[0][1]=0;
return true;
}
if(array[0][1]==array[0][2] && array[0][1]==shapeSign)
if( (array[0][0]!=1) && (array[0][0]!=0) ){
array[0][0]=0;
return true;
}
//
if( array[0][0]==array[1][1] && array[1][1]==shapeSign )
if( (array[2][2]!=1) && (array[2][2]!=0) ){
array[2][2]=0;
return true;
}
if(array[0][0]==array[2][2] && array[2][2]==shapeSign )
if( (array[1][1]!=1) && (array[1][1]!=0) ){
array[1][1]=0;
return true;
}
if(array[1][1]==array[2][2] && array[0][0]==shapeSign )
if( (array[0][0]!=1) && (array[0][0]!=0) ){
array[0][0]=0;
return true;
}
// }
//
if( array[1][0]==array[1][1] && array[1][1]==shapeSign )
if( (array[1][2]!=1) && (array[1][2]!=0) ){
array[1][2]=0;
return true;
}
if(array[1][0]==array[1][2] && array[1][2]==shapeSign )
if( (array[1][1]!=1) && (array[1][1]!=0) ){
array[1][1]=0;
return true;
}
if(array[1][1]==array[1][2] && array[1][2]==shapeSign )
if( (array[1][0]!=1) && (array[1][0]!=0) ){
array[1][0]=0;
return true;
}
return false;
}
	public boolean checkFutureWin(int array[][], int shapeSign){ 

0 - מסמן עיגול

1 - מסמן איקס

זה מה שכתבתי ואין לי מושג איך אני יכול לעשות את זה ברקורסיה...עזרה בבקשה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים