פורסם 2009 בינואר 1916 שנים מחבר אתה בטוח שהוא עדיין מדפיס אותו דבר?כי לוגית הוא לעולם לא יכול להגיע לשורת ההדפסה ???מעבר לזה לא הבנתי למה בפונקציה שמטרתה להדפיס עץ קוראים לפונקציות שמשנות את לוח המשחק (makeMove,unMakeMove), מה גם שהן לא הופכיות אחת לשניה מה שיצור לך בלגאן לא קטן בלוח אחרי שהקריאה לפונקציה תגמר.הקוד ללא ביצוע המהלכים / שינוי במשחק : private void printLeaves(int level, GameTreeNode node) { int player=participant; ArrayList<GameTreeNode> children=node.getChildren(); Iterator<GameTreeNode> itChild=children.iterator();; if(node!=null && level<depth) { if (children != null) itChild=children.iterator(); else return; if(level>0) { player = level%2==0 ? participant : presentBoard.opposite(participant); } if(children!=null) { while(itChild.hasNext()) { GameTreeNode child = itChild.next(); printLeaves(level+1, child); } } else { System.out.println("Level " + level + ": " + (player==PLAYER ? "whitePlayer" : "blackPlayer") + " at " + node.getMove().x + ", " + node.getMove().y); } } else { System.out.println("There Is No Root ."); } }עדיין לא זה עובד ועכשיו הוא לא מדפיס כלום...אתה בטוח שאין בעיה מבחינה לוגית ?למה עכשיו הוא לא מדפיס שום דבר ?יש אפשרות שתתקן את הקוד ותעלה את זה ?
פורסם 2009 בינואר 2016 שנים כמו שכבר אמרתי, לוגית הוא לעולם לא יכול להגיע לפונקצית ההדפסה.מה שיש לך כרגע זה משהו כזה (בקיצור):if (children != null) ...else return;...if (children != null) ...else System.out.println...אם children ריק הוא תמיד יצא ב-return של ה-if הראשון ואף פעם לא יגיע ל-else של ה-if השני ולהדפסה. תאחד את שני התנאים הזהים ותוריד את ה-return המיותר ואז זה ידפיס.מעבר לזה אני לא רואה בעיה בפונקציה, יכול להיות שאתה בטעות קורא לה כמה פעמים במקום פעם אחת?
פורסם 2009 בינואר 2016 שנים מחבר private void printLeaves(int level, GameTreeNode node) { int player=participant; ArrayList<GameTreeNode> children=node.getChildren(); Iterator<GameTreeNode> itChild=children.iterator();; if(node!=null && level<depth) { if(level>0) { player = level%2==0 ? participant : presentBoard.opposite(participant); } if(children!=null) { itChild=children.iterator(); while(itChild.hasNext()) { GameTreeNode child = itChild.next(); printLeaves(level+1, child); } } else { System.out.println("Level " + level + ": " + (player==PLAYER ? "whitePlayer" : "blackPlayer") + " at " + node.getMove().x + ", " + node.getMove().y); return; } } else { System.out.println("There Is No Root ."); return; } }איחדתי את שני התנאים וזה עדיין לא עובד.להגדיר את המשתנים רגיל (בראש הפונקציה) או בתוך התנאי של בדיקת קיום ה - children ?לאחר השינוי הפונקציה תתבצע לפחות פעם אחת (כלומר אין אפשרות לעולם שהיא לא תגיע לפונקצית ההדפסה) ?איפה יכול להיות עוד הבעיה ?
פורסם 2009 בינואר 2116 שנים מחבר מישהו יודע איך ניתן לפתר את הבעיה או שיש לו אלגוריתם אחר להדפסת "עלי" עץ המשחק מבלי שהוא ידפיס את ה"עלים" יותר מפעם אחת...?
פורסם 2009 בינואר 2116 שנים על פניו (לא התעמקתי), נראה שהקוד של ההדפסת עץ תקין, אולי הבעיה אצלך היא בלוגיקה שמחשבת את העץ ?
פורסם 2009 בינואר 2116 שנים מחבר הלוגיקה היא לא הקוד עצמו ?אז איפה לדעתך יכולה להיות עוד הבעיה ?יש לך אפשרות להעמיק בקוד ?היא הבעיה לא בקוד אז היא יכולה להיות הבעיה ?????
פורסם 2009 בינואר 2116 שנים מחבר אתה מתכוון לניקוד כל אחד מהמהלכים ?כרגע אין שימוש בניקוד כל מהלך ....בדיקת הניצחון מתייחסת למונה אשר מראה את מספר הקוביות / החיילים שיש לכל שחקן על הלוחולאחר מכן הוא בודק את היחס בינהם ורואה מי יותר גדול ואז הוא מכריז על ניצחון , הפסד או תיקו....
פורסם 2009 בינואר 2116 שנים מחבר לא, בקוד שמחשב את הצעדים עצמם.כלומר במהלך בניית עץ המשחק ?האם שם אני אצטרך להשתמש בפונקציות makeMove ו-unMakeMove ?
פורסם 2009 בינואר 2116 שנים מישהו יודע איך ניתן לפתר את הבעיה או שיש לו אלגוריתם אחר להדפסת "עלי" עץ המשחק מבלי שהוא ידפיס את ה"עלים" יותר מפעם אחת...?http://he.wikipedia.org/wiki/%D7%90%D7%9C%D7%92%D7%95%D7%A8%D7%99%D7%AA%D7%9D_%D7%97%D7%99%D7%A4%D7%95%D7%A9_%D7%9C%D7%A8%D7%95%D7%97%D7%91קל, פשוט ונוח. ( למרות שהלינק יצא מכוער)
פורסם 2009 בינואר 2216 שנים כלומר במהלך בניית עץ המשחק ?האם שם אני אצטרך להשתמש בפונקציות makeMove ו-unMakeMove ?כן כנראה שהבעיה היא בקוד שבונה את העץ.אם לא הייתי מספיק ברור קודם, פונקצית ה-unmove שלך לא נכונה. לא נראה לי שאפשר בכלל לכתוב פונקציית unmove למשחק רברסי ככה שתצטרך לבחור גישה אחרת לפתור את הבעיה.
פורסם 2009 בינואר 2316 שנים מחבר אז איך אני הבצע את מהלך ה-unMakeMove ?אני חייב להשתמש בפונקציית משום שאני מבצע מהלך ואני לא יכול להשאיר לאחר המהלך אני חייב להחזיר אותו למצבו האחרון (=הקודם)...
פורסם 2009 בינואר 2616 שנים מחבר הקוד המעודכן: private void printLeaves(int level, GameTreeNode node) { int player=participant; ArrayList<GameTreeNode> children=node.getChildren(); Iterator<GameTreeNode> itChild=null; if(node!=null) { if (children != null) { itChild=children.iterator(); player = level%2==0 ? participant : presentBoard.opposite(participant); } if(children!=null) { while(itChild.hasNext()) { GameTreeNode child = itChild.next(); printLeaves(level+1, child); } } else { System.out.println("Level " + level + ": " + (player==PLAYER ? "whitePlayer" : "blackPlayer") + " at " + node.getMove().x + ", " + node.getMove().y); } } else { System.out.println("There Is No Root."); } }סבבה התוכנית התקדמה אבל פתאום עכשיו כאשר אני מריץ הקוד הנ"ל הוא נכנס לי ללולאה אין סופית...איפה יכולה להיות הבעיה ?איפה ההדפסה נכנסת ללולאה אין סופית ?איך פותרים את הבעיה הזאת ?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.