ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › אקסטרים › כתיבת מנוע חדש למשחק.
- This topic has 15 תגובות, 5 משתתפים, and was last updated לפני 14 שנים by zest.
-
מאתתגובות
-
30 באוקטובר 2010 בשעה 02:08 #76820zestמשתתף
שלום לכולם,
הייתי מעוניין לשמוע את דעתכם כיצד ניתן לשחק את המשחק הזה distributed ועם יותר אינטראקציה עם המשתמשים.
כרגע (וזה בסדר… זה יכול לבוא בנוסף לצורה הנוכחית ולא במקום..) אין אינטראקציה עם המשתמש – כלומר משתמשים כותבים שורדים ומטעינים אותם אבל לאחר מכן עד שמגיעים לתוצאה אין יותר מידי אינטראקציה עם המשתמש והמשחק לא distributed כי אין צורך שמשתמש אחר ייתן פקודות תוך כדי וכו'.
המשחק פשוט רץ עד להכרעה וזהו. נגמר.
איך הייתם מציע לשחק את זה distributed? איך ניתן היה לפרוס את המשחק על פני כמה מחשבים ומרחוק?
הייתי שמח לשמוע אילו רעיונות יש לכם בהקשר הזה או רעיונות שיתנו למשחק להיות יותר אסטרטגי ויותר "חי".
אולי מספר סיבובים כשבכל סיבוב ניתן יהיה לשנות את הקוד?
בנוסף אני מעוניין לכתוב מנוע חדש למשחק (לעדכן אותו ולהוסיף לו features חדשים) – זה לא אמור להיות בשימוש בתחרות הקרובה (בהצלחה למשתתפים).
בין הרעיונות שחשבתי עליהם לשינויים בקוד המנוע ועוד הם:
חלוקה מבחינה ויזואלית לתאים של מקום המשחק.
אפשרות לעמוד על תא ולקבל מידע (למשל כתובת וכו').
אפשרות לפתוח במקביל חלון עם ה ASM ולראות איזו שורה או opcode אנחנו מריצים כרגע ואיזו פקודה הבאה שאמורה לרוץ במהלך הבא.
אפשרות להשוות שורד שכותבים ולקבל דוח באחוזים כמה הצליח לנצח את כל השורדים מהשנים האחרונות.
אפשרות לרשום מספרים בתאים כאשר שורד "מפעפע" ולפי הסדר בו הוא עובר לתאים.
אפשרות לעשות play כדי להריץ עד הסוף או step by step (כמו בסימולאטור המפורסם של מכונת טיורינג ,ניתן לראות דוגמא בקישור הבא: http://ironphoenix.org/tril/tm/)
אפשרות לעצור באמצע לצרכי debug.
אפשרות לעשות undo אחרי צעד שעשינו.
אפשרות לעצור את המשחק ולשנות את הקוד.
"מתחם אימונים" לשורד שלך – מקום בו אפשר להריץ שורד בודד ולהריץ אותו כדי לראות איך הוא עובד וכדי לשפר אותו.
לוג מפורט עם כל הפעולות לפי הסדר של השורדים וכל המקומות בזיכרון לפי הסדר בו רצו (כפי שיש תיעוד בשחמט למהלכים).
אפשרות להציג מספרים במטריצה – עם קוד השורד במקום צבעים – אפשר להחליף בקליק.
מספר אנשים יכולים לראות מה קורה מרחוק במנוע המשחק ומהתקנים ניידים שונים.
אפשרות לבדוק את הקוד ולקבל טיפים בבניית השורד.
Help משופר איך עובדים השורדים וניתוח.
הוספת פונקציונאליות לשורד עם "קליקים" – יידע להוסיף ASM לפי פונקציונאליות שרוצים.
רעיון אחר לגמרי – לעשות אפשרות אולי כמו במשחק צוללות שיש שורד עיוור שלא רואים אותו או שחקן מול שחקן כל אחד מרחוק יש לו את המסך שלו עם המשחק וכותב שורד שמתמודד מול שורד בצד השני שלא יודע איך הוא רץ.
לשחק מול שורד שהמחשב בוחר באופן אקראי או מנסה לכתוב ב AI , אולי גם שורד משתנה (כפי שיש פוגענים שיודעים לשנות את הצורה בהם עובדים).
אפשרות לסמן תאים וייתן לי את הקוד של השורד שיבצע זאת.
מקום לעריכת השורד ויצירת קובץ שלו.
דירוג ולוח תוצאות משופר.אשמח לשמוע אם יש לכם רעיונות משלכם (בנוסף לאלו שהועלו מקודם) שיהיה אפשר לקחת וליישם או בקשות כלשהן.
תודה רבה ואשמח לכל הערה.
Zest.
"Security, however, is an art, not a science." – RFC 363130 באוקטובר 2010 בשעה 03:03 #78038zestמשתתףעוד רעיון שעלה לי – אולי לשחק במספר סביבות/מנועי משחק.
ברגע ששורד נוגע בכתובת כלשהי או באוגר או שמתקיימים תנאי משחק כלשהם הוא מועתק לסביבה אחרת – וכך יכול לשרוד. המשחק מסתיים כשהשורד שלכם ניצח את כל שאר השורדים בכל הסביבות.
אפשרות אחת היא להעתיק את האוגר בשלמותו לסביבה הנוספת בנוסף לסביבה הנוכחית ואפשרות אחרת היא שהוא יכול להיות בו זמנית רק בסביבה אחת.
משהו נוסף שחשבתי עליו – אם יוצא לשורד שלכם להשתכפל מספר פעמים מסויים הוא יכול לערוק לאוייב (הוא יקבל את הצבע של משתתף אחר) או לא שייך לאף אחד ונלחם בכולם כולל השורד שלכם כך שאתם חייבים גם להתגבר על השורד שלכם.
יש עוד הרבה רעיונות…30 באוקטובר 2010 בשעה 06:39 #78037CodeGuruמנהל בפורוםרעיון נהדר.
אפשר לתקשר עם השורד על ידי
DMA
ז"א שאפשר לפנות, נניח דרך כתובת מסוימת בזיכרון, לתא שנגיש מבחוץ. כך תוכל לראות מה קורה ולומר לשורד שלך מה לעשות.
כדי שלא לרוקן מתוכן את השורד, אפשר להגביל את התקשורת לפעם באלף מהלכים ואז אפשר לשחק בזמן אמת כאשר המתמודדים על הבמה עוזרים בשלט רחוק לשורדים שלהם.עודד
30 באוקטובר 2010 בשעה 07:28 #78036zestמשתתףעוד רעיון
אפשר לעשות קטעים בזכרון שהם "עיר מקלט" אליהם אפשר להגיע עד יעבור זעם
וכדי שלא ייתקעו שם ויחכו שכל השורדים האחרים יהרגו את כולם אפשר לחשוב על איזשהו עונש או להגביל את זה במספר תורים.בכל מקרה יש עוד רעיון לאינטרקטיביות מלבד האפשרות לתקשר עם השורד פעם במספר מהלכים כלשהו?
30 באוקטובר 2010 בשעה 07:59 #78035DL!משתתףHi Zest,
(I wrote most of the engine's code)
I love the debugging-related ideas – they would be very useful to anyone using the engine.Feel free to contact me if you're having trouble integrating with the engine.
My email is dleshem at gmail dot com.Best, Danny
30 באוקטובר 2010 בשעה 23:36 #78034zestמשתתףעודד,
רעיון נוסף שעלה לי שיכול לשלב בין 2 התחרויות (אקסטרים והתחרות ה"רגילה").
כדי לעשות את זה distributed חשבתי לכתוב קליינט שרק ממנו יהיה אפשר להטעין שורד למנוע המשחק.
אפשר גם לכתוב טיימר כלשהו שיגביל את זמן העדכון בין סיבוב לסיבוב (מעין ספירה לאחור).
בין הסיבובים אפשר להוסיף חידה כלשהי שהמשתתפים צריכים לפתור כדי להיות בעלי אפשרות להמשיך לסיבוב הבא או כדי לעדכן את השורד שלהם (אחרת ממשיכים עם אותו השורד).
הניקוד יכול לכלול גם את פתירת החידה הזאת.31 באוקטובר 2010 בשעה 00:41 #78033zestמשתתףעוד רעיונות ותוספות שחשבתי עליהם:
זומבי שחוזר אחרי כמה זמן לחיים במידה והשתלטו עליו או זומבי שהשתלטו עליו ועובר לצד של היריב או השורד במצב הנוכחי הכי גרוע.
שעון דיגיטלי בצד של מספר התור הנוכחי (וכך גם יהיה אפשרות לראות הבדלים בין המשחקים השונים מבחינת זמן התחרות).31 באוקטובר 2010 בשעה 01:13 #78032zestמשתתףרעיונות נוספים שעלו בפורום ב thread של השינויים ואחרים שהועלו ע"י עודד (החלטתי לרכז כאן לטובת הנוחות):
תמיכה בשינויים כגון מניעת כתיבה בחמישים אלף הצעדים הראשונים (כדי להפוך את המשחק לחכם יותר).
אפשרות שבה לא כל הפקודות יקחו אותו הזמן (למשל – כתיבה תקח יותר).
הוספת "שדה מוקשים" (מקום שאם אתה כותב בו, הכתיבה קופצת חזרה אליך).
אפשרות לסמן לפני ההרצה אופציה בה האם רוצים שיתקיים תנאי עצירה כאשר כל השחקנים שנותרו הם מקבוצה אחת (ואפשרות לבטל זאת לצרכי נוחות וdebugging).
הגבלה על טווח הזמן שבו ניתן להשתמש בפצצות החכמות.
פקודה שמפצלת את הקוד של השורד ואת זמן ההרצה בין החלקים השונים (וע"י כך לקבל נפח חדש למשחק בו ניתן להישאר עם תוכנה אחת מהירה או הרבה איטיות).
אפשרות לפצל רק אם השותף כבר מת ואז גם להקטין את משקל הניצחון (כלומר אם בסוף המשחק נשארו שני שורדים כשאחד מהם התפצל יותר פעמים מהשני, הוא יקבל חלק קטן יותר באופן משמעותי מהנצחון).
אפשרות להחזיר לחיים את בן הזוג שלך במידה והוא מת. למשל אפשר להפעיל פקודה מיוחדת, שתחזיר אותו לחיים, בנקודה בה הוא מת. כלומר שכדי להחיות אותו, צריך קודם לתקן את הקוד שלו, ורק אז להחזיר אותו לחיים.
אפשרות להוסיף אזור בזכרון בו יהיה תיעוד של המקומות האחרונים ששונו בזכרון, וכך שורדים יצטרכו להסוות את פעולות הכתיבה שלהם באופן משמעותי – למשל אם שורד כלשהו משתגר כל כמה זמן למקום חדש, הוא יצטרך עכשיו לשלב בתוך זה גם כתיבה סתמית, כדי שלא יגלו לאן הוא השתגר באופן מיידי, ואולי אפילו להשתגר שוב לפני שמישהו יספיק לגלות איפה הוא נמצא כרגע.
כך גם, שורד יוכל לזהות ששורד אחר תוקף ומתקרב לאזור שלו (יכול לקרות במצב בו שורד תוקף באופן רציף את הזכרון), ואז ינסה להתחמק.ד"א, אפשר פשוט לעשות אפשרות לבחור באיזה סוג של זירה רוצים לשחק לפני המשחק – נקייה, בתוספת מוקשים, מצבים מיוחדים, מספר זירות במקביל וכו'.
ואפשר לשקול לבצע את התחרות כך שכל סיבוב יתקיים בזירה אחרת שלבסוף משקללים את הכל – לדוגמא שלושה סיבובים בסביבה נקיה ועוד אחד בכל אחת מהסביבות המיוחדות.31 באוקטובר 2010 בשעה 02:22 #78031zestמשתתףאפשר גם ב debug mode או "מתחם האימונים" של השורד להציג את ה stack שלו באופן ויזואלי.
31 באוקטובר 2010 בשעה 12:29 #78030jgeralnikמשתתףחשבתי כבר על רעיון לדיבגר לפני שבוע והתחלתי לפני כמה ימים לממש קצת. אם אצליח לבנות משהו טוב אפרסם את זה מתישהו בפורום.
31 באוקטובר 2010 בשעה 15:12 #78029zestמשתתףחבר לקח את הרעיון שלי לקליינט שהזכרתי מקודם וחידד אותו עוד יותר – להעביר את המשחק ל web.
המשתמש יוכל לכתוב את הקוד של השורד שלו ולהעלות לשרת, כאשר כל עניין הקומפילציה מתבצע שם אוטומאטית ונחסך ממנו.
לאחר מכן ניתן יהיה ליזום קרב שמערב מספר שורדים, כאשר הסימולציה עצמה תבוצע בשרת.
אני חושב שזה יכול להיות ממש נוח כי משתמש יוכל להטעין שורד מכל מקום – רק צריך גלישה.
סתם רעיון – אפשר בצורה הזו לקיים תחרות כל שבוע בלי לכנס את האנשים – משהו כמו king of the hill או lord of the ring 0 – אפשר למצוא לזה שם קליט… כלומר השורד שנשאר הכי הרבה זמן בלי שמורידים אותו (המצעד השבועי).
למשל השורד master of disaster של קבוצת beastie boys כבר נמצא 14 שבועות רצופים בלי שמישהו יורד אותו (הזדמנות בשבוע הבא…), כשהשיא הנוכחי עומד על 23 שבועות ושייך לשורד alegria של קבוצת Hex Rays.
כמובן שפעם בכמה זמן צריך להתכנס כמו עכשיו ולתת בראש כשרואים את הלבן בעיניים ליריב שלכם…
המעבר ל web יכול לתת עוד כמה goodies כמו:
חשבונות משתמשים – משתמש יכול לשתף קוד, להחליט מי רשאי לראות אותו, זה אפשרות לקבוצות וכו' (עודד, אולי פתח לכיוון של רשת חברתית סטנדרטית?)
כל נושא ההשוואה של השורד מול שורדים ישנים שהעליתי מקודם – הרבה יותר קל במודל הזה.1 בנובמבר 2010 בשעה 03:52 #78028zestמשתתףלגבי האפשרות לבצע debugging ומעקב אחר הפקודה שמתבצעת כרגע –
הפקודות שמסומלצות במנוע הן ברמת ה- object code ולא ה- assembly code כך שאולי אפשר להציג את ה opcodeשרץ כרגע אבל זה קצת מפספס את המטרה כי השורד נכתב ב assembly minded.
צריך לשלב disassembly (לכתוב או להשתמש באחד חיצוני), כי צריך למפות בין ה opcode שרץ כרגע לפקודה המקבילה.
אי אפשר יהיה להשתמש ב Ndisasm. אני אצטט מהתיעוד:
The Netwide Disassembler does nothing except to produce disassemblies of binary source files.
NDISASM does not have any understanding of object file formats
objdump , OBJ2ASM ודומיהם יודעים לעבוד עם object files (אני אצטרך לראות Hands on מה "מנגן" עם הקבצים של השורדים ואח"כ לחשוב מה הצורה הטובה ביותר לשלב עם המנוע).
לגבי עריכת הקוד בזמן ריצה – מהרגע ששינינו את קוד האסמבלי צריך לקמפל את הקוד שוב.
איך ניתן במקרה זה להימנע מבעיות דריסה וכו' (אף אחד לא מבטיח שהוא יתכנס באותו מקום כמו המקור).1 בנובמבר 2010 בשעה 08:33 #78027shinigamiמשתתףיש לך רעיונות טובים
אני כבר מחכה לראות מה יצא לפועל
2 בנובמבר 2010 בשעה 23:31 #78026zestמשתתףסוף מעשה במחשב תחילה…
לגבי העברה לתצורת web צריך לחשוב על מספר נקודות.
כרגע מודל העבודה הוא אסינכרוני ((Event based והעברה שלו למודל של web (מודל סינכרוני/מונע לקוח) יתכן ותפגע בחוויית המשתמש.
אי אפשר לשלוח עדכונים ישירות מהשרת לקליינט. צריך לעשות סוג של pulling או לחילופין לחשב את כל הקרב בשרת ולאכסן את כולו במבנה נתונים כלשהו שיישלח ללקוח ושם יוצג כאנימציה.
במקרה זה המורכבות גדלה אם הלקוח לא רוצה את כל הקרב במכה אלא להריץ צעד אחר צעד מה שיגרור request-response על כל הצעד.
כמו כל דבר בחיים יש כאן עלות-תועלת ו trade.
הייתי שמח לשמוע מה דעתכם/רעיונות שלכם/הצעות וכו' – בסופו של דבר מי שישחק במשחק זה אתם ויש לכם כאן הזדמנות להשפיע.3 בנובמבר 2010 בשעה 11:36 #78025zestמשתתףעודד, מה התובנות שלך?
מלבד ה DMA שכבר רשמת הערה לגביו. -
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.