עבור לתוכן

פונקציית חישוב מהלכים במשחק איקס עיגול ב-JAVA

Featured Replies

פורסם

שלום לכולם !!

אני בונה את המשחק איקס עיגול בשפת JAVA..

אני כרגע בונה את האפשרות של משחק בין המשתמש למחשב (בינה מלאכותית)..

1.כיצד ואיך אני בונה את הפונקציה שתחשב ותבצע מהלך כך שהיא תנצח או תגיע לשוויון עם המשתמש?

2.איך אני בונה עץ עם מהלכים הכי טובים בשביל המחשב לפי חוקי המשחק?

פורסם

קוראים לזה עץ מחשק.

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

נניח הצעד הראשון הוא של המשתמש. הוא שם X בנקודה [i,j]. המצב הנוכחי של המשחק נהיה השורש של העץ וכעט לעץ הזה יש 8 בנים שהם כל המהלכים האפשריים שהמחשב יכול לבצע. לכל אחד משמונה הבנים יהיו 7 בנים שאלה הם כל המהלכים שהמשתמש יכול לבצע אחרי כל מהלך של מחשב וכו'. כמובן לפני בניית רמה הבאה צריך לבדוק שהמשחק לא הסתיים (ניצחון/הפסד/תיקו). כל עלה בעץ מסמל סוף משחק אפשרי. לאחר מכן כל אחד מהמהלכים מקבל ניקוד לפי אלגוריתם minimax http://en.wikipedia.org/wiki/Minimax (כעיקרון אתה מחליט ניקוד על כל מהלך נגיד מהלך של ניצחון יקבל ניקוד 1000, מהלך של הפסד מקבל 10 ומהלך רגיל 100, ולפי זה המחשב נותן ניקוד לכל מהלך ובוחר את הצעד בעל הניקוד הכי טוב שלו [משהוא כזה לא זוכר כבר,תקראה בויקי]).

יש גם את אלגוריתם אלפא-בטא http://en.wikipedia.org/wiki/Alpha-beta_pruning שנראה לי הוא פשוט מתעלם ממהלכים שיכולים להוביל להפסד של המחשב (או ניצחון של היריב האנושי) ומצבים של תיקו (שוב מין מתן נקודות כאשר מהלך שיכול להוביל לנצחון הוא הטוב ביותר).

זה העיקרון בהצלחה.

פורסם

אחלה תגובה. אבל (במאמר מוסגר) - אי אפשר להשתמש באלפא-בטא בגלל שחלק מבחירות של צעד 2 גורמות לכך שהמצב היחיד שהמשחק יכול להסתיים לטובת X הוא תיקו.

פורסם
  • מחבר

קוראים לזה עץ מחשק.

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

נניח הצעד הראשון הוא של המשתמש. הוא שם X בנקודה [i,j]. המצב הנוכחי של המשחק נהיה השורש של העץ וכעט לעץ הזה יש 8 בנים שהם כל המהלכים האפשריים שהמחשב יכול לבצע. לכל אחד משמונה הבנים יהיו 7 בנים שאלה הם כל המהלכים שהמשתמש יכול לבצע אחרי כל מהלך של מחשב וכו'. כמובן לפני בניית רמה הבאה צריך לבדוק שהמשחק לא הסתיים (ניצחון/הפסד/תיקו). כל עלה בעץ מסמל סוף משחק אפשרי. לאחר מכן כל אחד מהמהלכים מקבל ניקוד לפי אלגוריתם minimax http://en.wikipedia.org/wiki/Minimax (כעיקרון אתה מחליט ניקוד על כל מהלך נגיד מהלך של ניצחון יקבל ניקוד 1000, מהלך של הפסד מקבל 10 ומהלך רגיל 100, ולפי זה המחשב נותן ניקוד לכל מהלך ובוחר את הצעד בעל הניקוד הכי טוב שלו [משהוא כזה לא זוכר כבר,תקראה בויקי]).

יש גם את אלגוריתם אלפא-בטא http://en.wikipedia.org/wiki/Alpha-beta_pruning שנראה לי הוא פשוט מתעלם ממהלכים שיכולים להוביל להפסד של המחשב (או ניצחון של היריב האנושי) ומצבים של תיקו (שוב מין מתן נקודות כאשר מהלך שיכול להוביל לנצחון הוא הטוב ביותר).

זה העיקרון בהצלחה.

ואיך אני רושם את זה כפונקציה כאשר היא מקבלת את לוח המשחק ואת השחקן ?

פורסם

public Move GetBestMove( Board i_Board, Player i_player)
{

/*
your Code Here
*/

}

בהצלחה.

ארכיון

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

דיונים חדשים