מה דעתכם - פיתוח משחק

smtm

New member
מה דעתכם - פיתוח משחק

אני רוצה לפתח משחק דמקה גראפי מרובה משתתפים מול מחשב, כך שכל אחד מהם משחק מול המחשב. ז"א - תוכנת שרת עם תוכנת CLIENT. כיוון שמרכת ההפעלה של השרתים ומערכת ההפעלה של המשתמש הם Windows (חלונות 2000/3, חלונות 98 ומעלה), ג'אווה או דוטנט לא עומדים על הפרק (לפחות לא באיזור המשתמש). גם האפלטים אינם באים בחשבון, בשל ממשק המשתמש העשיר, הפונקציונליות שנדרשת ושאר סיבות אחרות. לפיכך, אני מעריך ש-CPP היא שפת הפיתוח המתאימה. לפני השאלות אקדים ואומר שני דברים. הראשון הוא שאני מנוסה ב-C מספר שנים לא מועט, אך לא נגעתי בתכנות לחלונות ולא בממשקים גראפיים. שנית, המשימה שלי מאוד ממוקדת. אני רוצה לפתח את המשחק. אני לא רוצה להכיר את כל התמונה השלמה (או יותר נכון - אין לי פנאי). אפשר להרגיע את המצפון ולומר, שאני מדבר על משהו יותר להדגמה ולשימוש חובבני מאשר משהו לשימוש פרודקשן רצחני. 1. כיצד הייתם ממליצים לגשת למשימה מבחינת היערכות ידע - איזה ידע נדרש (בפירוט, תודה), כיצד אתם ממליצים להשיגו (אתרים, ספרים - פרטים, שוב), מהי הערכת הזמן להשיגו (אם אתם יכולים להעריך, כמובן). 2. מישהו יכול להעריך ולסקור בפני את מה שנדרש לבצע מבחינת תכנות גראפי בחלונות? 3. האם יש דוגמאות קוד (ב-C/CPP, כמובן) אי שם ברשת, או משהו שאתם פיתחתם להנאתכם ומוכנים לשתף, של - א. תוכנת שרת, היודעת לנהל sessions עם משתמשים שונים. ב. תוכנת לקוח, אשר יודעת לנהל תקשורת עם השרת. ג. תוכנת משחק (או כל דבר אחר דומה), אשר מדגים אלמנטים גראפיים דומים - מתזוזת אובייקטים מצד אחד דרך עיצוב כפתורים ועד יכולת להחליף SKINS. 4. שאלה על תקשורת - אני חושב לקיים את הקשר באמצעות פרוטוקול HTTP דרך פורט 80. מה אתם חושבים? תודה.
 

GPhoenixX

New member
שלום :)

במקרה נגעת ב2 תחומים שיש לי בהם ידע מועט מאד (זה חיובי, ברוב הנושאים המדוברים פה אין לי ידע כלל) אז אולי אני אוכל לעזור : 1.אתה צריך לבחור איך לממש את השרת/לקוח שלך - האם בעזרת winsock או directplay ? כנ"ל לגבי הגרפיקה - gl/dx או משהו אחר בכלל, אחרי שתבחר את אלו אתה יכול למצוא הרבה חומר ברשת, gl אפשר ללמוד מnehe.gamedev.net וwinsock2 גם אם תצטרך יש לי לינק טוב איפהשהו. 2. מה שאתה רוצה xD 3. פיתחתי תוכנה נחמדה בvc++6 של שרת/לקוח (לא שרת/לקוחות) שמאפשרת צ'אט בין 2 המשתמשים וציור יחד, אם זה עוזר אני אחפש את זה ואשלח לך.. 4.מה ? למה 80 ? אתה כותב את תוכנת השרת, איך פרוטוקול קיים יעזור לך ? מקווה שהבנתי אותך / עזרתי ;s
 

אלדד28

New member
היתרון בשימוש בפורט 80

הוא שהוא פתוח (כמעט תמיד) ב-FIREWALL, אז אפשר לעבור דרכו בדרך החוצה/פנימה מרשתות פנימיות.
 

smtm

New member
זו בדיוק הסיבה המרכזית למה כן...

אני מנסה להבין אם שימוש ב-HTTP מעל 80 בעל חסרונות משמעותיים. אני מניח שהתקורה של הפרוטוקול היא זניחה. האם ישנם בכלל חסרונות משמעותיים?
 

אלדד28

New member
אתה לא חייב לשלוח HTTP על פורט 80

אתה יכול להשתמש בו איך שבא לך - כל עוד תעשה את זה TCP (כי FIREWALL-ים בד"כ מגדירים גם TCP או UDP). יש FIREWALL-ים מתוחכמים יותר שיודעים לזהות HTTP ולעצור פאקטות שאינן HTTP, אבל בתור התחלה אתה יכול לשלוח מה שאתה רוצה. החסרון המשמעותי הוא כמו שאמרתי - מחשב שמריץ WEB SERVER לא יוכל להריץ את התוכנה שלך (ויש כאלו יותר ממה שנדמה לך - אצלי בעבודה למשל כמעט כל מחשב הוא WEB SERVER, כי יש עליו אפליקציה שמתוקשרת דרך WEB GUI).
 

smtm

New member
זה ברור.

הנחת העבודה, ואני מניח שטעיתי שלא הבהרתי, היא שהשרת הוא בשליטה מלאה שלי ואין בו צורך אחר מאשר לשמש כשרת המשחק. לכן מובן מאליו שלא יפעל בו שום שרת Web (אלא אם כן, בשל סיבה עלומה ויצירתית אשתמש בו כממשק השרת, וזוהי ארכיטקטורה מעניינת, תודו). אני מניח שזה ברור שהדרייב העיקרי שלי ל-HTTP מעל 80 היא בשל "בעיית" הפיירוולים.
 

GPhoenixX

New member
אז זה מחזיר אותנו להתחלה ? Oo

אם השרת היחיד הוא בשליטתך, למה שלא תשתמש בפורט שהוא לא 80 ? :\
 

smtm

New member
השאלה היא אותה שאלה

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

GPhoenixX

New member
גישה מכל מקום ?

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

חסומים להם? הרבה פיירוולים חוסמים פתיחת תקשורת החוצה אם היא לא בפורטים ספציפיים (למנוע ממגוון תוכנות מוחבאות לפתוח את המחשב החוצה) -- אם עובדים בפורט 80 כנראה הוא יהיה פתוח. אותו כנ"ל פורט 21 כמעט תמיד.
 

smtm

New member
תוכל להבהיר?

1. מה זה directplay? מה הוא נותן מול winsock? 2. מהי דעתך האישית על gl מול dx? מה מקל על החיים בהתקנה אצל הרבה משתמשים? 3. אם תוכל לשלוח לי את הדוגמא, זה יהיה מצוין. האימייל הוא [email protected] . ובוקר טוב!
 

אלדד28

New member
יפה.

מה זה דמקה מרובה משתתפים? דמקה זה לא שני משתתפים בלבד? אז ככה - קודם כל, לא הבנתי למה פסלת את JAVA או NET. - אני אישית לא הייתי מפתח בהן, אבל מסיבות אחרות. ניחא, נמשיך. תכנות ל-WINDOWS אינו מסובך מדי. השאלה היא מה אתה רוצה לעשות. אם אתה רוצה לעשות משחק פשוט בתוך חלון, אתה יכול ללמוד MFC ו-GDI, ותוכל לכתוב משחק כזה בקלות. אם אתה רוצה משחק יותר "רציני" מבחינה גרפית, אתה יכול ללמוד DIRECTX או OPENGL, ליכולות גרפיות מתקדמות יותר (ותלת מימדיות, למשל). תצטרך לומר לנו קצת יותר על השאיפות שלך בעניין הזה. לגבי תכנות רשת - ברמה הבסיסית, לא מדובר במשהו מסובך בכלל. אתה יכול למצוא דוגמה ל-CHAT פשוט ב-MSDN של מיקרוסופט, למשל. אתה יכול לעבוד עם פורט 80 - אבל זה יוצר בעיות אחרות (כמו התנגשות עם WEB SERVER אם פעיל על המחשב).
 

smtm

New member
תשובות ושאלות (אלא מה?)

פסלתי את .NET באיזור הלקוח בשל מערכות ההפעלה הישנות בהן אני רוצה לתמוך (ואני לא רוצה להתקין .NET על מחשב בן שלוש שנים שמריץ 98). לא פסלתי לחלוטין את .NET באיזור השרת. .NET עדיין לא נראית לי בשלה, זמני התגובה שלה והביצועים טובים יותר מג'אווה אך נמוכים יותר מ-CPP. נוסף על כך, כיוון שתוכנת שואף לעשות שימוש באותה טכנולוגיה (reuse, פשטות וכו'). האלטרנטיבה היחידה שאני שוקל ברצינות עבור צד המשתמש היא אפלט. העניין הוא שגודל האפלט הוא לא יהיה קטן ככל הנראה, היכולות הגראפיות שלו די מוגבלות (עד כמה שדעתי משגת) ובגרסאות חדשות ועתידיות של חלונות תהיה בעיה (ע"ע 2003). פיתח שרת ג'אוואי גם לא קורץ, בשל ביצועים, בעיקר. אם אלך על שרת ג'אוואי, זה בשם האחידות, לאחר שבחרתי לפתח אפלט. לבינתיים, בואו נצא מנקודת הנחה שמדובר בישום חלונאי מבוסס CPP. אם כך, אני רוצה לפתח משחק בתוך חלון, כאשר בתוך החלון יוצג לי לוח הדמקה. המשחק באותו לוח דמקה יהיה עשיר מבחינה גראפית. תלת מימדיות, צל וכד' בהחלט נמצאים תחת רשימת המאווים. אני מניח ש-GDI איננו מתאים, איפוא. על מה אתה ממליץ - OPENGL או DIRECTX (ולמה, כמובן)? אני תוהה אם יש אפשרות לצמצם את היריעה של "ללמוד MFC ו-GDI". שוב, אני מוכוון מטרה, ובסופו של דבר, אני לא הולך להיכנס לזה לעומק. השאלה היא, אם בכל זאת ניתן לצמצם את ההגדרה בדרך כלשהי? בנוסף, האם יש הפניה לאתרים בהם אפשר להתחיל ללמוד, ספרים מומלצים רלבנטיים וכד'?
 

smtm

New member
ממש מוזר

כזה עוד לא ראיתי... מפלצת ההודעות "נתנה ביס" בהודעה ובמקום שצויין - "כיוון שתוכנת שואף לעשות שימוש באותה טכנולוגיה (reuse, פשטות וכו')." צריך להיות - "שתוכנת הלקוח ותוכנת השרת יפותחו ע"י אותו אדם, אני שואף לעשות שימוש באותה טכנולוגיה (reuse, פשטות וכו')."|סגדש| וכן, ראיתי את המשפט בחלון של תצוגה מקדימה, שפתחתי למטרת גיבוי (המפלצת מבכרת את שעות החשיכה, זה ידוע).
 

אלדד28

New member
נתקדם

אני לא יכול להמליץ על DIRECTX מול OPENGL. עבדתי עם שתיהן, שתיהן נחמדות, כאשר DX נוטה יותר לכיוון OOP-י שיותר חביב עליי אישית. לצרכיך הן יהיו פחות או יותר אותו הדבר. ספרים מומלצים - תתחיל ב-Programming Windows של petzold. זה ייתן לך בסיס טוב לכתיבה ב-WIN32. אם אתה עובד DX/GL אתה לא צריך MFC - היא רק תזיק לך. אחרי הספר הזה כדאי לקרוא ספר טוב על DX או על GL (ל-GL יש את הספר האדום, ה-Programmer's guide שלה, ול-DX יש את "Advanced 3D Game Programming With Directx 9.0" שהוא אחלה בתור בסיס להתחיל ממנו. לגבי תקשורת - קצת קריאה ב-MSDN ואתה מסודר.
 

smtm

New member
OPENGL מול DIRECTX

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

אלדד28

New member
זה לא בגלל שאני משוחד,

אלא בגלל שאין עליונות לאחת על השניה. רוב האנשים שיגידו לך "OPENGL הרבה יותר טובה" או "DIRECTX שולטת ביד רמה" פשוט לא יודעים על הספריה השניה מספיק וניזונים מדעתם על עצמם נוסח "אם בזה אני משתמש, אז זה מה שהכי טוב...". ל-OPENGL ול-DIRECTX יש בכל מקרה יתרונות וחסרונות, כל אחת בפני עצמה. נהוג להתייחס ל-OPENGL כאל יותר בוגרת, מבוססת, וכמובן פורטבילית, ואילו DIRECTX נחשבת ליותר HYPE-ית, כזו שיש בה את כל האפקטים הכי חדישים. זמן פיתוח וזמן לימוד - לשתיהן הוא אותו הדבר, לפחות ברמה הבסיסית. התקנות - בוודאי. גם DIRECTX וגם OPENGL דורשות התקנות. בשתיהן מדובר יותר על DRIVER-ים ספציפיים לחומרה שברשות המשתמש (ולכן החלק הזה הוא באחריותו), אבל יש גם גרסאות - ל-DIRECTX יוצאת גרסה בערך כל שנה.
 

gilad_no

New member
וקצת הערות ממני:

אם זה לצורך הדגמות ואין לך חשק\כח\זמן ללמוד מזה יותר מידי, הייתי מציע לך להשתמש בMFC\WTL לשם עניין הGUI. אלטרנטיבה נוספת הינה להשתמש בWxWindows. לשם התקשורת: תוכל לממש לבד עם WINSOCK, תוכל להוריד את NDK מאתר CODEPROJECT או תוכל להשתמש בסיפריות של WxWindows או ACE לשם כך. ואם העלית את עניין הHTTP, אני אזרוק לך כאן רעיון נוסף: מה דעתך לבנות שרת WEB שינהל את המשחק דרך דפדפן? המשתמשים לא ייצטרכו להתקין שום קליינט אלא פשוט לגלוש לשרת שלך. את התמונה הם יקבלו דרך דף HTML (אולי אפילו DHTML?). יחסוך לך המון בעיות תאימות עם מחשבים שונים ויוכל לעבוד גם עם מערכות שונות (לינוקס, פאלם, ...) בשביל השרת, תוכל להשתמש בW3MFC ולהתאים אותו לצרכייך.
 

smtm

New member
ראשית, תודה על התגובה המפורטת

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