משחק נגד המחשב ......

saarelad

New member
משחק נגד המחשב ......

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

inkydinky

New member
אני מניח שהלוח שמור כמטריצה...

מן הסתם המחשב לא ישחק טוב כמו בן-אדם... ותוכל לצפות את הפעולה שלו כי אתה מתכנת אותו... אבל אחרים לא בהכרח ידעו... בכל מקרה... רעיון בסיסי הוא שהמחשב יחפש קודם איפה הוא יכול לנצח. לסרוק שורות, טורים ואלכסונים. אם הוא לא יכול אז שיסרוק איפה הוא חוסם נצחון של השחקן... שזה יכול להעשות ע"י סריקה של השורות, סריקה של הטורים וסריקה של האלכסונים. הלוח לא גדול במיוחד אז חוסר היעילות כאן לא כ"כ משנה... אפילו שאתה יכול ליעל אותו ע"י כך שסריקת טורים תתחיל מלמטה ותפסיק כאשר מגיעים לאזור ריק... שזה יהיה יעיל יותר בתחילת המשחק... עזוב יעילות עכשיו... זה לא משמעותי כאן... אם הוא גם לא יכול לחסום את השחקן אז שפשוט ישים במקום הראשון שהוא יכול לשים... או איפה שזה יקרב אותו הכי הרבה לנצחון... כלומר, אפשר למחזר את הקוד של חיפוש אפשרות לנצחון רק שבמקום לחפש רצף של 3 דיסקיות לשים לידן עוד דיסקית הוא יחפש 2 דיסקיות שלו שהן רצופות כדי לשים אחריהן דיסקית. אפשר לעשות פונקציה שתקבל מטריצה ורצף שמחפשים לשים אחריו ותחזיר את המקום הראשון שכדאי... משהו כזה... עשיתי פעם תרגיל על זה... אבל זה היה לכתוב אלגוריתם... ולא תוכנית על המחשב... לא משנה... בהצלחה. IDD
 

ekampf

New member
עץ משחק

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

saarelad

New member
היוריסטית ????????

אם את\ה יכול\ה לסביר מה זה , וכיוון קצת יותר ממוקד , אני מאוד אודה לך.
 

orlya

New member
היוריסטיקה

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

philips

New member
הממ...קצת הכוונה..

כעיקרון כל הפתרונות שנאמרו כאן הם נכונים לחלוטין ואף יותר מכך אבל הם תלויים ברמת הידע והניסיון שלך בתכנות דברים כאלו.... ואיני יודע מה היא... לדעתי יש בידך כמה אפשרויות: 1. חיפוש באינטרנט על משחקי Four-In-A-Row ושם תמצא מספר רב של גישות וביניהם אלגוריתמים היוריסטיים מוסברים וכו´ , תוכל להעתיק או ללמוד כיצד לבנות ולבנות לבד... 2. לפתוח ספר וללמוד את כל הנושא ---- לא קל בכלל.....(אחד הנושאים היותר קשים בתכנות) 3. מכיון שמימד הבעייה כאן הוא לא מורכב מדי- יצירת רצף של 4 על פני לוח בגודל מסויים...תוכל גם לכתוב לבדך אלגוריתם שידע לעשות את העבודה...: א. נסה לחשוב על הבעייה במימדים קטנים יותר , לדוגמה איקס-עיגול והבן כיצד מלמדים את המחשב עם צירוף של IF ולולאות , מה הצעד הנכון ביותר לבצע ע"מ לנצח... האלגוריתם הזה של איקס-עיגול הוא פשוט... ב. אחרי שהבנת את האסטרטגיה ברמה הכללית (ספירת רצפים,מעקב צעדים או כל רעיון אחר) נסה לפרוט אותה לרמת ה-4 ברצף ולהרחיב את הרעיון... כעיקרון , אם קצת לולאות/תנאים והרבה מאוד רצון טוב וסבלנות , תראה את הרעיון קורם עיניים... ג. הכי הכי חשוב , זה לעבוד המון עם דפי נייר ולשחק מול עצמך על מנת להבין טוב יותר את התפקידים ......
 

חובבן

New member
קישור טוב לנושא

בדף הבא תמצא קוד של אלגוריתם אלפה-בטה (שיפור של minimax) ושלושה משחקים פשוטים שמשתמשים בו: דמקה, 4 בשורה ואיקס מיקס דריקס. הקוד אלגנטי מאד, יותר פשוט מזה אי אפשר (נכתב ע"י המרצה שלי לשעבר בבינה מלאכותית - שאול).
 
למעלה