משחק רשת

tapas tapas

New member
משחק רשת

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

sandbird4

New member
נושא גדול מאוד

במשחקי רשת הפשוטים עושים רשת P2P בין המחשבים של השחקנים כשאחד מהם הוא "השרת" ואם אותו שחקן מתנתק אז אוטומטית שחקן אחר הופך להיות "השרת". במשחקי MMORPG משתמשים במסת שרתים שיושבים בחוות שרתים גדולות. במיקרה כזה יש כמה שיטות: "הדרך האמריקאית" שבה קבוצת שרתים מוגדרת ש-"עולם", או עותק של עולם המשחק, ואי אפשר להעביר את הדמות שלך מעולם אחד למישנהו. ב-"דרך המזרח הרחוק" אתה כן יכול להעביר את הדמות שלך מעולם לעולם אבל אתה לא יכול לראות שחקנים שנמצאים בעולם אחר (אבל כן אפשר לדבר איתם). ויש את "הדרך השלישית" שהיא מה שאני עושה במשחק שלי
זה היה ממש בקצרה ובלי שנכנסתי להרבה נושאים בתחום הזה, כמו מפות דינמיות למשל. אם אתה הולך על הפיתרון הפשוט אז אתה לא צריך שרת מרכזי. אם אתה הולך על הפיתרון של שרת מרכזי אז אתה קונה "שרת", או במילים אחרות מכונה חזקה עם מארז U1 ושוכר מקום באחת מחוות השרתים, או שאם יש לך מספיק שרתים אז אתה יכול לשכור ארון שלם (או חצי ארון) ולהשכיר את המקום הפנוי שיש בארון שלך לאחרים (ואז אתה אפילו יכול להחזיר את ההשקעה בשכירת הארון). לי אישית יש שרת U1 שנמצא באחת מחוות השרתים בארץ. החסרונות בפיתרון הראשון: 1. אין שליטה על השחקנים. הם יוכלו להעתיק את המשחק ולפתח CHEATים כדי לרמות במשחק. 2. אין שליטה מרכזית על המשחק ככה שלא תוכל לקבל אינפורמציה על השחקנים. החסרונות בפיתרון השני: 1. הרבה יותר מסובך. 2. הרבה יותר יקר
כמו שכתבתי בעבר, אני אתן לכם דוגמא של קוד למשחק בסיגנון הפיתרון השני. שיהיה לי קצת זמן פנוי אז אני אכין לכם דוגמא. זה לא כזה מסובך בשבילי. למעשה יש לי דוגמא מוכנה מלפני הרבה שנים אבל אני לא מרוצה ממנה ולכן אני אכין חדשה קצת יותר טובה.
 

tapas tapas

New member
אוקי, לא הבנת בידיוק

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

De-Panther

New member
יש כמה דרכים כדי...|זבנג|../images/Emo23.gif../images/Emo185.gif

לעשות דבר כזה לדעתי אם אתה רוצה שכל השחקנים שמשחקים במשחק יוכלו לראות את כל החדרים ואת כל האנשים שממתינים לכניסה לחדרים אתה צריך שרת משלך אבל אפשר להסתדר עם פתרון זול: אתה יכול נניח להתמקם על שרת IRC שכבר קיים(בשביל החדר צ'אט הראשי... לא בשביל רשימת החדרים) לרשימת החדרים תמצא איזשהו שרת ווב חינמי - כל אחד שירשום חדר התוכנה תפתח בחלון מוסתר עמוד ASP שיוסיף את שם החדר ושאר הפרטים שצריך לדעת בשביל להכנס לאותו עמוד בכל פעם שבנאדם יכנס לאותו חדר הוא יעדכן ברשימה כמה אנשים יש באותו חדר צריך רק לחשוב על מה קורה אם מחשב מאותו חדר נתקע ואיך העמוד ASP ידע שאין יותר אנשים באותו חדר...
 

tapas tapas

New member
האמת היא שחשבתי שה]תרון הוא אחר.

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

yoniBLA

New member
לא.

אלא אם אתה רוצה לבצע port scanning לטווחי IP ראנדומיים באינטרנט, שזה גם לא חוקי בהרבה מדינות. מה הבעיה להרים שרת מרכזי? אתה לא צריך יותר ממחשב מסכן עם שם קבוע, כל hosting חינמי שמאפשר להריץ קוד על השרת מספיק.
 

tapas tapas

New member
אבל מה אני צריך להריץ על השרת הזה?

תוכנת EXE שאני כתבתי? אני יכול להריץ את זה על המחשב בבית שלי? או עדיף שרת שמשלמים עליו כי אז הוא יעבוד 24 שעות בלי בעיה?
 

yoniBLA

New member
תשובה

מה שצריך לרוץ על השרת הזה זאת מערכת שתנהל רשימה של כתובות IP של שרתים שהמשתמשים פתחו. האם זה חייב להיות EXE? לא. רוב שירותי הhosting החינמיים לא מאפשרים להריץ EXE, ולכן תצטרך לנצל את מה שכן נותנים לך להריץ (PHP/ASP וכד'). תסריטים: מה קורה כשמשתמש מחליט לפתוח שרת על המחשב שלו? התוכנה פונה לשרת המרכזי ומודיעה לו שנפתח שרת, השרת המרכזי מוסיף לרשימה את הIP שפנה אליו. מה קורה כשמשתמש מחפש שרת להתחבר אליו? התוכנה פונה לשרת המרכזי ומבקשת ממנו את רשימת השרתים הפתוחים. איך IP של שרת יורד מהרשימה? בשני מצבים- קודם כל כשתוכנת שרת נסגרת בצורה מסודרת היא מודיעה לשרת המרכזי והוא מעיף את הIP שלה מהרשימה, וחוץ מזה כל X זמן השרת המרכזי שולח הודעה מסויימת לכל הIPים שמופיעים ברשימה, כל מי שלא עונה יורד מהרשימה. אתה יכול כמובן גם להריץ את זה על המחשב שלך במקום, הבעיה במקרה כזה היא שכנראה אין לך כתובת IP קבועה, וברגע שתרסט את המודם לא ידעו איך לפנות אלייך. יש לכך פיתרון בדמות שירותים שיושבים לך על המחשב ואוטמטית כל X זמן מעדכנים domain מסויים שיצביע לIP הנוכחי שלך. אני אישית מעדיף את הגישה של לכתוב סקריפט PHP ולשים אותו על שרת יציב, הרי גם ככה כל מה שהוא צריך לעשות זה לעדכן רשימה קטנה.
 

tapas tapas

New member
מה זה משנה אם זו כתובת IP קבועה

או לא? הרי אפשר להשיג כתובת IP מכתובת אינטרנט באמצעות DNS או משהוא כזה, לא?
 

tapas tapas

New member
בסדר ברור,

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

sandbird4

New member
אפשר כמובן אבל

אי אפשר להחליף בקלות את ה-IP וגם אתה צריך NAME SERVER משלך (כמו שלי יש) בשביל שתהיה לך גישה חופשית להגדיר את זה.
 

yoniBLA

New member
אפשר גם בחינם

שירותים כמו dyndns או no-ip (חפש בגוגל), עדיין עדיף להשתמש בשרת יציב.
 

De-Panther

New member
אני עדיין מחכה לכמה|זבנג|../images/Emo23.gif../images/Emo185.gif

תמונות או דמואים של דברים שהכנת
צריך למלא כאן את האלבומים
 
למעלה