דף 2 מתוך 3

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 10:12 am
על ידי Og
Octarine כתב:אני לא בטוח שאני אוהב, למרות ההמלצה הנמרצת של עוג. הנסיון שלי עם משחקי RPG (?) בחלל מסתכם ב-NOMAD, אני לא יודע איך הוא בהשוואה ל-Star Control אבל מהקצת שקראתי בויקי אני מבין שהקונספט דומה. הבעיה שהייתה לי ב-NOMAD היא באג שקורה בשלב מסוים ודי תוקע את המשחק, אז עזבתי אותו וחזרתי לקווסטים, אהבתי האמיתית.

איפה אפשר להשיג את Star Control היום? (להשיג חוקית, כמובן)
בוא נתחיל עם זה שSC הוא משחק שונה לגמרי (למרות שנוצר ע"י אותם אנשים), אנחנו מדברים על SC2.

הבסיס של SC2, מבחינת המשחקיות, ז"א, מבוסס (זו דרך עדינה לומר שהוא מועתק/גנוב) על משחק אחר ששכחתי את שמו (אבל זה לא NOMAD). אבל המשחקיות היא לא הסיבה שהמשחק הזה הפך להיות משחק ה cult המפורסם בעולם - העלילה והצורה בה היא מוצגת, הן הפלא האמיתי, ומהבחינה הזו, לא תמצא שום משחק שמתקרב אפילו.
Octarine כתב:משחקי RPG (?) בחלל
כן, זה בהחלט משחק RPG. אף אחד, כולל היוצרים לא מגדיר אותו ככה אבל אני אומר לך שזו בהחלט ההגדרה הטובה ביותר.

בקשר להשגת המשחק, TFB (החברה היוצרת) שחררו את הזכויות למשחק ואת קוד המקור וכיום הוא חינמי:
http://sc2.sourceforge.net" target="_blank

[נכתב לפני ההודעה של Sabre Runner]

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 10:50 am
על ידי Og
אני מקווה שהפעם אף אחד לא יצליח להשחיל הודעה בזמן שאני כותב את זו...
Sabre Runner כתב:כן, זיהיתי את זה אחרי חצי דקה בערך בלי לקרוא אף אחת מהתגובות. ניסיתי להריץ את התוכנית בראש עד שהבנתי שלא הוגדרה SEEK_FUNCTION ואז פשוט ניסיתי לראות מה בדיוק קורה כאן. זה ה-999 שסגר את הפתרון.
זה בדיוק מה שקיוויתי שאנשים יעשו, תודה על החיזוק.
חבל רק שאי אפשר לשחזר את סגנון החידה ולהשליך אותו על משחקים אחרים (כי אני לא יכול לחשוב על עוד משחק שבו מדברים על תכנות של רובוט).
Sabre Runner כתב:כל פעם שצריך דוגמה למשחק נהדר שהוא מופת למשחקים, משהו שאפשר לחזור אליו עוד פעם ועוד פעם ועוד פעם ואחרי זה לשים על המדף כיצירת אמנות לדורות הבאים, אז אני אומר Star Control II - The Ur-Quan Masters.
כל מילה בסלע.
Sabre Runner כתב:ומאז שהקוד של המשחק שוחרר, יצאו כמה שכפולים שלו וכמה עיצובים מחדש. הטוב מכולם הוא, ללא ספק, The Ur-Quan Masters.
אם כבר שניניו נגענו בנושא, אני רוצה להרחיב קצת בקשר לעניין:
במקור המשחק יצא לPC בלבד, על תקליטונים והיה חסכוני מאד מבחינת גודל. יותר מאוחר הוא יצא במהדורת תקליטור אבל מבחינת תכן היא הייתה זהה לגרסת התקליטונים. אפילו יותר מאוחר הוא בא ביחד עם SC3 על התקליטור(ים) - שוב, למיטב ידיעתי זו אותה הגרסה.

אבל בין לבין, יצאה גם גרסה לקונסולת ה 3DO והיא שונה מהרבה בחינות, יותר מדי משאוכל לציין כאן אבל שווה להזכיר את הדיבוב המלא, את מערכת הZOOM החדשנית בקרבות ואת השינויים הרבים בממשק.

בתחילת שנות ה2000, Toys for Bob (החברה שנוסדה ע"י פרד פורד ופאול רייק השלישי - שני הגאונים מאחורי המשחק) החליטו לשחרר את המשחק ואת קוד המקור שלו, דא עקא, שני מכשולים עמדו בדרכם: ראשית, קוד המקור של גרסת הPC אבד ושנית, השם "Star Conrol" רשום לחברת Accolade ולכן מוגן בזכויות יוצרים. את הבעיה הראשונה פתרו ע"י שחרור קוד המקור של גרסת ה3DO, שכאמור שונה מהותית מגרסת הPC. את הבעיה השנייה לא ממש אפשר לפתור בלי $, אז המשחק שנמצא להורדה באתר, נחשב ללא-חינמי רק בגלל שהוא מכיל את הטקסט "Star Control".
זמן קצר לאחר השחרור של קוד המקור של גרסת ה3DO, צוות של אנשים מיומנים שחררו את הרימייק המדובר:
http://sc2.sourceforge.net/" target="_blank
שבתחילה הכיל משחק הזהה כמעט לחלוטין לגרסת ה3DO. מה שלא תמצא שם, לעומת זאת, זה את המילים Star Control מה שהופך את המשחק לחוקי לחלוטין.
במשך השנים הכניסו לרימייק שיפורים שלא היו קיימים במקור ותיקנו אינספור באגים. לשמחתי הרבה הכניסו גם את האפשרות לבחור חלק מהמאפיינים שהיו קיימים רק בגרסת הPC (לא כולם, לצערי).

על עוד פרוייקטים כאלה, בניגוד ל Sabre Runner, לא שמעתי (ואשמח לשמוע).

וזה, בקצרה, כל הסיפור מאחורי הרימייק.

Re: [חידה] תוכנית בשפת C

נשלח: ו' יולי 02, 2010 11:00 am
על ידי C-man
אני מתנצל שלא זיהיתי :blackeye: . התירוץ שלי הוא שלא זכרתי ממש את 'אגלוריתם' של ה probes ובפרט לא את המספר 999.
גם לי לא היה ברור מהקוד שהערכים של actionX היו priorities.
Og כתב:
C-man כתב:איפה הקונבנציות, איפה
על מה אתה מדבר? על זה שהפונקציה לא מוגדרת בתחילת התכנית?
האמת שהתכוונתי יותר לזה שאין אינדנטציה, שיש hard-coded values בקוד, וכו', אבל זה היה בצחוק (אגב, void main() אולי מתקמפל, אבל זה ממש לא חוקי).
Og כתב:
C-man כתב:כואב לי לנסות להבין את הכוונה בקוד הזה
למה? בגלל שאין צבעים? בכל מקרה, אתה לא אמור "להריץ" את התוכנית, אתה אמור להבין את הכוונה בלי להתאמץ יותר מדי, קח בחשבון שכיוונתי גם לאנשים שלא מבינים שפת C.
התכוונתי בעיקר לקוד שבפונקציה choose_action, לא בגלל סינטקס, אלה בגלל שהלוגיקה שלו מטעה ולא מסבירה אותו נכון.


למרות שלא זיהיתי, אהבתי את החידה :)

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 11:09 am
על ידי Og
C-man כתב:אני מתנצל שלא זיהיתי :blackeye:
LOL, סתם התלוצצתי בקשר להתנצלות :wink:
C-man כתב:גם לי לא היה ברור מהקוד שהערכים של actionX היו priorities.
כי הם לא היו.. אבל תכננתי לעשות את זה יותר ברור עם המילה Priority באחד הרמזים. בכלל, התכנית הייתה לשנות את התכנית ברמזים עם דברים כגון פלט מפורמט:
printf("We come in peace!");
ועוד כל מני כאלה, פשוט לא הגענו לזה.
C-man כתב:אגב, void main() אולי מתקמפל, אבל זה ממש לא חוקי
אתה כנראה מתבלבל עם C++, שם זה באמת לא חוקי.

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 11:24 am
על ידי C-man
יכולת להמשיך את החידה לטובת מי שלא פתר :P

[OT]
ב C יש רק שתי הגדרות חוקיות ל main

קוד: בחירת הכל

int main(void)
int main(int argc, const char const *argv[]) /* i might be wrong about one of the const's */
חוץ מזה לא מומלץ להצהיר ולהגדיר פונקציה עם רשימת פרמטרים ריקה, כי ב C הצהרה עם פונקציה בלי פרמטרים אומרת שמספר וסוג הפרמטרים אינו ידוע.
ב C++ הקווירק הלא-אינטואיטיבי הזה תוקן כך שהצהרה על פונקציה בלי פרמטרים שקולה להצהרה על פונקציה ש"מקבלת" void.

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 1:02 pm
על ידי Og
C-man כתב:ב C יש רק שתי הגדרות חוקיות ל main
אפשר לקבל מקור?

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 3:26 pm
על ידי Yoyole
Og כתב:
C-man כתב:ב C יש רק שתי הגדרות חוקיות ל main
אפשר לקבל מקור?
הוא לא מתכנת בצה"ל?

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ו' יולי 02, 2010 8:11 pm
על ידי C-man
חיפשתי ולא מצאתי מקור רשמי שמאשר את זה, אבל זה common knowledge ש void main() לא מתאים להגדרות השפה ועשוי להכשל בקומפיילרים פחות גמישים מ VS.

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ש' יולי 03, 2010 11:58 am
על ידי Og
אני לא יודע מאיפה בא ה common knowledge שלך, אבל שלי אומר אחרת. ושוב, אני מדגיש שאני לא מדבר על C++ (ולמיטב ידיעתי, VS לא תומך ב-C, רק ב-C++ עם תמיכה לאחור מוגבלת. מעולם לא השתמשתי בו ל-C).

אני אניח ששפות התכנות שאתה משתמש בהן מיועדות למחשבים עם ארכיטקטורת x86 או x64 וכמויות אדירות של זכרון, אבל שפת C יכולה להתקמפל גם לדברים אחרים, כמו לדוגמה מיקרו בקרים (הכי מפורסם הוא ה- 8051) ובחלק מהם (אם כי היום כבר פחות ופחות) כמות הזכרון מוגבלת מאד. 2 בתים (הגודל של short singed int) יכולים להיות שמינית מכלל כל הזכרון שעומד לרשותך (!) וברוב המקרים, MAIN לא יכולה בכלל לקבל או להחזיר ערך (אין מערכת הפעלה או בקרת שגיאות) ולכן לא רק שזה חוקי, לעיתים זה הכרחי.

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ש' יולי 03, 2010 8:06 pm
על ידי C-man
Og כתב:אני אניח ששפות התכנות שאתה משתמש בהן מיועדות למחשבים עם ארכיטקטורת x86 או x64 וכמויות אדירות של זכרון, אבל שפת C יכולה להתקמפל גם לדברים אחרים
דווקא בדיוק לזה התכוונתי כשאמרתי "קומפיילרים אחרים".

מה שאתה אומר בקשר לכמות הזיכרון נשמע לי די מוזר, כי במצב כזה יותר הגיוני לכתוב ישירות ב assembly או שפה יעודית כלשהי.

אני עכשיו הולך לבדוק את זה ב-GCC, כי לפי מה שאני זוכר זה לא מתקמפל במצב שגיאות הכי מחמיר.

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ש' יולי 03, 2010 11:11 pm
על ידי C-man
gcc אכן לא אוהב את זה

קוד: בחירת הכל

*****@ubuntu:~/Desktop$ cat t.c
void main(void)
{
}
*****@ubuntu:~/Desktop$ gcc -Wall -Werror t.c
cc1: warnings being treated as errors
t.c:1: error: return type of ‘main’ is not ‘int’

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: א' יולי 04, 2010 12:03 am
על ידי הטופיק
בדקתי קצת ברשת, בכל מקום מה ש C-man אומר תופס, בין היתר בויקיפדיה האנגלית שנראית לי די אמינה בקטע הזה...
אם תתעקשו אני מכיר אנשים שכותבים embedded ב-C, אפשר לוודות את זה...

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: א' יולי 04, 2010 5:58 pm
על ידי Og
זה שזה לא מתקמפל בGCC לא אומר כלום(על אחת כמה וכמה שזו לא שגיאה, רק אזהרה), בכלל, העברת את GCC למצב C ?
הטופיק כתב:בדקתי קצת ברשת, בכל מקום מה ש C-man אומר תופס, בין היתר בויקיפדיה האנגלית שנראית לי די אמינה בקטע הזה...
דווקא להיפך, ויקיפדיה תומכת יותר במה שאני אומר:
ויקיפדיה כתב:Other platform-dependent formats are also allowed by the C and C++ standards, except that in C++ the return type must stay int
C-man כתב:מה שאתה אומר בקשר לכמות הזיכרון נשמע לי די מוזר, כי במצב כזה יותר הגיוני לכתוב ישירות ב assembly או שפה יעודית כלשהי.
בוודאי שעדיף לכתוב ישירות באסמבלי! כמובן, עם השגה קטנה: אתה צריך לדעת אסמבלי בשביל לכתוב באסמבלי... כלומר, אסמבלי של 8051, או אסמבלי של PIC אם אתה עובר אליו, או אסמבלי של Z80 אם אתה עובר אליו, או אסמבלי של 68000 אם אתה עובר אליו, או אסמבלי של ARM (על כל סוגיו) אם אתה עובר אליו וכו' לגבי שאר עשרות המיקרו-בקרים הנפוצים.
או פשוט לדעת שפת C שמתקמפלת לכולם ובצורה די טובה... הכל תלוי בדרישות העבודה. רוב החברות הגדולות ידאגו שהעובדים שלהם ילמדו אסמבלי, מן הסתם, אבל לא כך חברות קטנות יותר או חובבנים.

בכל מקרה, זה ויכוח די טפשי... אני לא יודע אפילו אם יש ארגון שקובע מה "חוקי". לי היו שלושה מורים לשפת C וכולם השתמשו ב void main. אחד מהם, נחשב לאחד התותחים הגדולים לשפה בארץ (הוא ראש אגף באיזו אוניברסיטה או משהו כזה, לא זוכר בדיוק).

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

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: א' יולי 04, 2010 10:56 pm
על ידי C-man
Og כתב: העברת את GCC למצב C ?
חשבתי שזה דיפולטית ב-C. אולי מחר אבדוק את זה שוב. [עריכה]כן, הוא ניחש שזה c לפי הסיומת[/עריכה]
Og כתב:בכל מקרה, זה ויכוח די טפשי...
נכון... אני לא אתנגד לדון בנושאים אחרים בתכנות :).
Og כתב:אני לא יודע אפילו אם יש ארגון שקובע מה "חוקי".
בחוקי הכוונה לנכון לפי הסטנדרט. אם אני לא טועה הסטנדרט האחרון/שרוב הקומפיילרים תומכים בו זה C99 (ואם אני לא טועה הוא נקבע ע"י ה ISO).
Og כתב:לי היו שלושה מורים לשפת C וכולם השתמשו ב void main. אחד מהם, נחשב לאחד התותחים הגדולים לשפה בארץ (הוא ראש אגף באיזו אוניברסיטה או משהו כזה, לא זוכר בדיוק).
אני דווקא שמעתי דברים בגנאי ההוראה של C באוניברסטאות, שמקנות הרגלים רעים רבים לסטודנטים. מצד שני המטרה שלהם היא לא ללמד לתכנת, אלא ללמד מדעי מחשב.
(אגב, אפשר לדעת את שם המורה התותח?)
Og כתב:העובדה שזה מתקמפל, במיוחד בקומפיילרים ישנים, אמורה לומר משהו, לא? זה לא שסתם עקב באג בקומפיילר זה מתקמפל, הרי מישהו הכניס את זה בכוונה. זה אומר שזה משהו שלכל הפחות היה "חוקי" פעם. אולי היום כבר לא אבל אני מטיל ספק רציני בכך.
עד כמה שאני יודע קומפיילרים ישנים כמו Turbo C תמכו בהרבה דברים לא-סטנדרטיים שא"כ התמיכה בהם נפסקה.
מה שכן, יכול להיות שזה כן היה בסטנדרט פעם והוצא ממנו, הרי יצאו מספר סטנדרטים במהלך השנים.

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

Re: [חידה] תוכנית בשפת C [נפתרה]

נשלח: ב' יולי 05, 2010 10:30 pm
על ידי Gordi
אם אני זוכר נכון, אזהרות הן בסך הכל "טיפים" של המערכת, לא? לא מדובר בשגיאות ממש.
קח למשל את הקוד הבא:

קוד: בחירת הכל

user@user-desktop:~/Desktop/temp$ cat a.c
void main() {
        int x;
        if (x=1){}
}
user@user-desktop:~/Desktop/temp$ gcc -Wall -Werror a.c -o a.out
cc1: warnings being treated as errors
a.c:1: warning: return type of ‘main’ is not ‘int’
a.c: In function ‘main’:
a.c:3: warning: suggest parentheses around assignment used as truth value
התנאי הוא חוקי לחלוטין, אבל המהדר מזהיר את המתכנת שאולי הוא שכח שם סימן "=" נוסף.