מישהו מכיר את המשחק SLITHER IO?

yair24

Member
מישהו מכיר את המשחק SLITHER IO?

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

זה בגדול.

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

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

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

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

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

אבל סתם למי שמכיר את המשחק הזה איך הייתם מתכנתים דבר כזה?

למשל סתם דוגמא משחק כמו TOWNSHIP שהוא הרבה יותר מסובך גרפית מאשר SLITHER IO דוקא מבחינה תיכנותית הוא הרבה יותר קל לתיכנות. (זה מן משחק כזה שאתה בונה חווה שותל כל מיני דברים ושולח הזמנות שכל מיני דמויות וירטואלייות מבקשות ממך הדמויות שמבקשות את ההזמנות הם לא שחקנים במשחק אלא דמויות וירטואליות)
 

Miki Watts

New member
רק הערה, שים לב שזה לא זמן אמת, יש להם בעיות lag מדי פעם

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

yair24

Member
אגב אתה יודע איך מיישמים דבר כזה?

יש שרת שכולם מחוברים אליו?
או שכולם מחוברים לכולם?
איך זה עובד?
&nbsp
שוב פעם אם ניקח למשל משחק כמו SIMFARM ודומיהם שם אני יודע בדיוק איך מיישמים דבר כזה זה יש שרת אפילו שרת WEB והאפליקציה מדברת עם השרת ומעבירה לו מידע וגם מושכת ממנו מידע והשרת הזה יודע לשמור נתונים בDATABASE.
&nbsp
&nbsp
 

user32

Well-known member
מנהל
אני לא מכיר את המשחק הספציפי הזה

אבל עבדתי על משחקים ועל תוכנות דומות. גם משחקי מובייל/ווב וגם בית חכם שהיית מדליק או מכבה מתג. הבקשה נשלחת באינטרנט לשרת ומשם לבית למערכת המרכזית שמבצעת את הפעולה (ע"י שליחת אות RF למתג). המהירות בsocket UDP הוא מספיק בשביל שעין אנושית לא תוכל להבחין בשיהוי. אתה לוחץ על הטלפון ורואה את האור נכבה. זה כמובן אם אין lag לא צפוי כמו שהזכירו פה (ואין הרבה מה לעשות נגד זה).
אין פה שום פטנט מיוחד. שחקן שולח הודעה לשרת, שרת שולח הודעות לשחקנים האחרים וכולם מאזינים עם סוקט פתוח. כמובן שזה מצריך שיהיה לכולם חיבור טוב לרשת. מטבע הדברים דואגים שאלה יהיו הודעות קצרות וגם לא מעמיסים פעולות בשרת שעלולות להאט את התהליך.
 

yair24

Member
אוקי איך משיגים שרת כזה?

זה לא שרת WEB נכון?
יכול להיות שזה קשור לAZURE?
 

user32

Well-known member
מנהל
לא בעיה

זה לא שרת HTTP אם לזה התכוונת למרות שאולי אפשר להשתמש באחד שתומך בWeb Sockets (אבל זה מיותר). בגדול, כותבים לבד. מימוש מלא לשרת פשוט מסוג כזה הוא לא יותר מכמה עשרות שורות קוד. עושים את זה בתרגילי מכללה לרוב (או לפחות עשו בעבר).
יש מימוש מאוד מוצלח שבג'אווה הפך לסוג של סטנדרט ולדעתי כתוב בצורה מעולה. ספרית אופן סורס בשם Mina. היא פשוטה, כוללת בדיוק את מה שצריך, קלה לשימוש (שרת מוכן בכמה שורות בודדות), מהירה, אמינה, יש לה קהילה די גדולה ומצאתי אותה מתחבאת בהרבה מוצרים מסחריים.
אגב, אנקדוטה: כשעבדתי במקום מסויים כתבתי שרת למשחק שהשרת הקודם שלו נכתב בVB6. זה החזיק יפה כמה אלפי משתמשים מחוברים.
 

yair24

Member
שרת WEB התכוונתי

לאיחסון אתרי אינטרנט.
שאתה הולך לחברה כמו GODADDY משלם להם משהו כמו 5$ לחודש ויש לך שרת WEB שיודע להריץ אתר אינטרנט.
&nbsp
אני מניח שאת התוכנת JAVA של השרת שכתבת אי אפשר להריץ על שרת איחסון אתרים לא?
&nbsp
אז על מה כן? על סתם מחשב שיושב מחובר לרשת?
אתה צריך לזה כתובת IP קבועה לא?
&nbsp
ונניח שלצורך העניין אין לי מחשב שמחובר לרשת בחיבור קבוע יש מי שאפשר לקנות ממנו שרות כזה? (כמו שקונים איחסון לאתרים)
 

user32

Well-known member
מנהל
כתבת נכון

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

אכן צריך כתובת IP קבועה.

יש הרבה שירותים כאלה. מה שאתה מחפש הוא שרת ווירוטאלי. זה יכול להיות עסק לא כזה זול (כמה עשרות דולרים בחודש) אבל הנה טיפ: לאמזון EC2 יש מה שנקרא Micro Server בעלות אפסית או חינמית. אני מקבל חיובים של כמה סנט בחודש. למרות השרת הקטן אם זה רק נועד עבור השרת המשחקים אין בעיה להריץ על שרת כזה וכמובן תמיד אפשר לעבור לשרת גדול יותר (זו המטרה של אמזון, למשוך אותך כלקוח). אה, IP סטטי בטח גם יעלה לך כמה גרושים לשנה. גם את זה קונים בממשק של אמזון.
 
למעלה