כותב |
|
ליש אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 03 July 2007 בשעה 23:37 | | IP רשוּם
|
|
|
|
שלום רב! אני חדש בתכנות, אני לומד פסקל, ואני יודע שזה ישן והכל.... אבל בכל זאת. איך אפשר לעשות פקודה שתפעל לאורך כל התוכנה שאני בונה? כלומר, אם אני בונה למשל משחק כלשהו, ורוצה שמתי שבא לך אתה לוחץ על מקש (למשל Esc או X) והוא שואל אותך האם אתה בטוח שברצונך לצאת! איך אני עושה שהוא יפעל לאורך כל התוכנה?
אשמח מאוד אם תענו לי, זה חושב! בתודה, lish
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 03 July 2007 בשעה 23:57 | | IP רשוּם
|
|
|
|
אין ממש קשר מיוחד לשפה מסיומת.
ראה game loop בגוגל (או תשובות אם למישהו יש).
זה משהו די ברור, אתה פשוט ממשיך את הריצה של התכנה כל עוד המשחק (או מה שזה לא יהיה) לא נגמר. בכל ריצה של הלולאה מריץ כל מיני בסיקות ומשנה משתנים גלובאליים שמהווים את "מצב במשחק"
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 July 2007 בשעה 00:03 | | IP רשוּם
|
|
|
|
OK אני לא עד כדי כך מבין בתכנות.... :) הבנתי רק את "ראה game loop בגוגל" אם לאמר את האמת...
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 04 July 2007 בשעה 00:06 | | IP רשוּם
|
|
|
|
זה בסדר, אני בטוח שתלמד עוד מעט אם אתה מתכוון ללמוד פסקל בזמן הקרוב ;)
בהצלחה.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 July 2007 בשעה 00:13 | | IP רשוּם
|
|
|
|
למדתי את כל ה"חלק הראשון" של פסקאל (כאילו writeln עד כל הלולאות וזהו!) אני יודע גם מעצמי פקודות של דיליי וקולות (של המחשב ) אבל לא יותר.... אז... אם התשובה שכתבת לי למעלה, את חושבת שהיא מספיק טובה שאני אבין, תסבירי לי ביותר ברור בבקשה! אם לפי מה שאמרתי אני לא מספיק מתקדם, זה בסדר, אני לא חייב להבין הכל...
תודה!
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 July 2007 בשעה 00:18 | | IP רשוּם
|
|
|
|
אגב, אני מתכוון למשחק פשוט על פסקל, כמו טריוייה, לא משחק לוחמה ...
אם יעזור לחזור על השאלה, אני רוצה שבמהלך משחק הטריוויה, אם ילחצו X, בכל מצב שהוא במשחק, ישאל אותך אם לצאת או לא, אם לא, ימשיך במשחק, וכמובן, שאם שוב לוחצים על X, זה שוב ישאל אותך.....
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 04 July 2007 בשעה 01:00 | | IP רשוּם
|
|
|
|
אם אתה יודע לולאות ו-CRT זה אמור בהחלט להספיק
keydown מחזיר אמת או שקר - האם יש לחיצת כפתור שעוד לא קראת.
readkey מחזיר char - אם יש כפתור שמחכה מחזיר אותו, אם אין מחכה ללחיצה ואז מחזיר אותה.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 July 2007 בשעה 01:22 | | IP רשוּם
|
|
|
|
תודה רבה על העזרה אבל זה רק מתקרב!
ממש כ 4 שעות לפניי כתיבת הודעתך האחרונה, עליתי על readkey (קיפרסד (לא קידאון) לא ממש עוזר לי עכשיו, כי אני רוצה שרק אם לוחצים על מקש ספציפי (X) זה יצא, ולא כל מקש) אבל זה עדיין לא ממש עוזר לי! אני יודע לשים את הפקודה readkey >באמצע< קטע (וגם זה בקושי) ולא שתפעל על כ-ל הקטע! אני רוצה שכל פעם שמישהו לוחץ על X, לא משנה איפה הוא נמצא, זה ישאל האם ברצונך לצאת!
אז הלאה, אימתת לי שזה קשור ב"readkey" אבל איפה ואיך אני ממקם אותו כך שהוא יפעל על כל התוכנה?
בתודה, Lish!
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 04 July 2007 בשעה 13:22 | | IP רשוּם
|
|
|
|
קצת אינטלגנציה.
יש לך פונקציה שבודקת אם לחצו על מקש, ויש לך פונקציה שמחזירה את המקש, למה אתה לא יכול לבדוק מה הערך של המקש ורק בתנאים מסויימים לעשות פעולות מסויימות ?
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 July 2007 בשעה 14:30 | | IP רשוּם
|
|
|
|
שלום!
שושן, קודם כל תודה רבה על העזרה !
דבר שני, יכול להיות שהתשובה לשאלה שלך, (למה אני לא יכול לבדוק מה הערך של המקש ורק.....) היא או שאני לא מבין מה את אומר, או שאני לא מספיק מתקדם בשביל לדעת את זה! ונראה לי זה שניהם ביחד! בגלל שאני לא מתקדם מספיק, אני לא יודע איך עושים את זה!
כשמצאתי ב"Topic search" שבסקאל את ה"קידאון" וראיתי את הדוגמא, הוא נתנן לי משהו כמו "הכנס מספר (באנגלית כמובן...)" ואז "ערך המקש שהקשת הוא:" לזה את מתכוונת? נגיד ולזה את מתכוונת, לערך שהוא מוציא לי. מה אני עושה עם זה?
בתודה, lish
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 04 July 2007 בשעה 16:43 | | IP רשוּם
|
|
|
|
לפי מה שתיארת אין סיכוי שאתה לא מבין.
קוד:
gameOver:=false; while not gameover do begin if keypressed then case upcase(readkey) of 'W':writeln('move up'); 'S':writeln('move down'); 'E',#27:begin writeln('goot bi'); gameOver:=true; end; end; |
|
|
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 05 July 2007 בשעה 00:47 | | IP רשוּם
|
|
|
|
טוב, תודה על העזרה!
לצערי, הרמתי ידיים! לא הבנתי איפה לשים את הקוד שנתת לי ומה בדיוק הוא עושה... כי לא פעלתי עם caseים בעבר לצערי... אז אני לא יודע בדיוק מה זה אומר.....
תודה על העזרה בכל מקרה!
lish.
|
חזרה לתחילת העמוד |
|
|
lish אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 05 July 2007 בשעה 01:09 | | IP רשוּם
|
|
|
|
OK החלטתי לחזור בי ולנסות להבין ולהצליח!שאלתי היא מה GameOver אומר בקטע? כלומר מה זאת אומרת "while not gameover" מתי הוא כן יהיה gameover? חוץ מזה איפה אני שם את זה ו... בעיקר, אם אתה לא יודע איך לענות לי כל השאלות שהרגע שאלתי, אז הכי חשוב - איזה סוג משתנה הוא "gameover"? - זה הכי חשוב!
אשמח אם תוכל בכל תוזר לעזור לי,
lish
|
חזרה לתחילת העמוד |
|
|
lish משתמש מתחיל
הצטרף / הצטרפה: 05 July 2007
משתמש: מנותק/ת הודעות: 6
|
נשלח בתאריך: 05 July 2007 בשעה 04:26 | | IP רשוּם
|
|
|
|
OK... קודם כל, כבוד! נרשמתי לפורום (לא יודע למה לא עשיתי את זה לפניי זה )
ועכשיו נחזור לבעיה, אני נותן כאן דוגמות לקודים ואסביר מה אני רוצה (כמובן, שזה מדובר על אותה בעיה שכתבתי מקודם):
אפשרות א':
קוד:
program hadash; uses crt; var gameover:boolean; c:char; a,b,d,e:string; begin gameover:=false; while not gameover do begin case upcase(readkey) of 'w':writeln('move up'); 's',#115:writeln('move down'); 'e',#27: begin writeln('good Bye');gameover:=true;
end; writeln('how are you?'); readln(a); writeln('are you OK?'); readln(b); end; end; end.
|
|
|
אפשרות א' גורמת לכך שקודם הוא מבקש ממני ללחוץ על W (ואז לכאורה זה אמור לרשום "move up" מה שזה משום מה לא עושה לי) או על S (ואז לכאורה זה אמור לרשום "move down" מה שזה משום מה לא עושה לי) או על E או Esc (אם לוחצים על E - לא קורה כלום משום מה. אם לוחצים על Esc זה כותב "good bye" וממשיך את התוכנה (כפי שאמור לקרות...)) ואז זה ממשיך התוכנה כ-ר-ג-י-ל. ללא יכולת על ללחוץ Esc ושהתוכנה תצא!!!
אפשרות ב':
קוד:
program hadash; uses crt; var gameover:boolean; c:char; a,b,d,e:string; begin gameover:=false; while not gameover do begin writeln('how are you?'); readln(a); writeln('are you OK?'); readln(b); while not gameover do begin case upcase(readkey) of 'w':writeln('move up'); 's',#115:writeln('move down'); 'e',#27: begin writeln('good Bye');gameover:=true; end; end; end; end.
|
|
|
אפשרות ב' גורמת לכך שקודם זה ישאל אותי מה נשמע, האם אני בסדר, וכמובן ב-ל-י אפשרות לצאת בלחיצה על Esc! (לצערי) ורק אח"כ הוא מחכה למקש! אם אני לוחץ W לכאורה הוא אמור לרשום "move up" (מה שהוא לא עושה משום מה, למישהו יש פתרון?) אם אני לוחץ S הוא אמור לרשום "move down" (מה שהוא לא עושה משום מה...) ואם לוחצים על E - הוא לא עושה כלום משום מה, אבל אם לוחצים על Esc הוא אכן רושם "Goodbye" ויוצא מהתוכנית (מאוחר מדיי, כי אני רוצה שהוא יצא עוד בשאלות "מה נשמע?" ו"האם אתה בסדר?")
אז... מה אני עושה כדי שזה יקרה? שאם בזמן שהוא ישאל "מה נשמע?" ו"האם אתה בסדר?" אני אוכל ללחוץ Esc ולצאת מהתוכנית! אני יודע איך לעשות את זה בדרך הארוכה (אחרי כל שאלה, לרשום if c='x' then Exit אבל אם יש לי המון מקומות שאני רוצה שהוא יצא בהם, זה יקח המון זמן! (כלומר, שיצא בכל מקום שלוחצים "Esc"))
אם יש לכם תשובה לזה, יותר מאשמח!
בתודה, המשתמש החדש בפורום,
lish
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 July 2007 בשעה 09:40 | | IP רשוּם
|
|
|
|
אה ?
מה יש לא להבין זאת כל התכנית (בין ה-begin ל-end.)
ולמה אם אתה עושה UPCASE ל-READKEY באפשרויות שמת אותיות קטנות במקום גדולות ?
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish משתמש מתחיל
הצטרף / הצטרפה: 05 July 2007
משתמש: מנותק/ת הודעות: 6
|
נשלח בתאריך: 05 July 2007 בשעה 17:18 | | IP רשוּם
|
|
|
|
טוב, תודה רבה על העזרה עם האותיות הגדולות (אין לי מושג מה עבר במוחי שלא שמתי אותם גדולות, הרי ככה אתה רשמת לי...) אבל מה עם הבעיה הגדולה? זה לא יוצא לי כשאני לוחץ Esc בשאלות "how are you?" ו"are you OK?" וזה הדבר בעיקרי שאני רוצה שיקרה! שהוא לא ישאל אותי אחרי השאלות הללו או לפני השאלות הללו, אלא בזמן השאלות, אם אני אלחץ Esc זה יצא
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 July 2007 בשעה 17:31 | | IP רשוּם
|
|
|
|
נו באמת...למה שהוא יצא באמת ?
אם אתה ממש רוצה אתה יכול לקלוט מחרוזת עם readkey עד שמתקבל ESC אבל למה ?
יותר קל לקלוט תו אחד...
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish משתמש מתחיל
הצטרף / הצטרפה: 05 July 2007
משתמש: מנותק/ת הודעות: 6
|
נשלח בתאריך: 05 July 2007 בשעה 18:01 | | IP רשוּם
|
|
|
|
כנראה שלא הבנת אותי.... אני ל-א רוצה שילחצו "E" "S" "C" כדי לצאת מהתוכנה! אני רוצה שילחצו על מקש אחד (Esc) בזמן שהוא שואל אותי מה נשמע והאם הכל בסדר ואז זה יצא מהתוכנית, לא משנה באיזה שאלה, גם אם אני אוסיף שאלות!
אם זה לא היה ברור, אחזור על הבעיה:
כאשר המחשב שואל אותי "מה נשמע?" "אתה בסדר?" אני רוצה ללחוץ Esc ואז זה אוטומטית יצא מהתוכנית (חזרה למסך הכחול...) כל עוד לא לחצתי Esc אני אוכל לרשום "הכל בסדר" "סבבה" "מצוין" וכו'... ואז ללחוץ על אנטר ושהתוכנית תמשיך כרגיל לשאלה הבאה, וחוזר חלילה, כלומר בשאלה הבאה, אם אני לוחץ Esc זה יוצא מהתוכנית, אם לא, זה ממשיך כרגיל...
יש לך תשובה ?
אם כן, אשמח לקבל את התשובה,
בתודה, lish
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 05 July 2007 בשעה 18:26 | | IP רשוּם
|
|
|
|
הבנתי אותך, אתה לא הבנת אותי, תקרא שוב.
אמרתי שאתה יכול לקלוט את המחרוזת תו אחרי תו ואז אחרי כל תו לבדוק אם הוא ESC ואם כן לצאת.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
lish משתמש מתחיל
הצטרף / הצטרפה: 05 July 2007
משתמש: מנותק/ת הודעות: 6
|
נשלח בתאריך: 05 July 2007 בשעה 19:14 | | IP רשוּם
|
|
|
|
נו בדיוק, זה לא קצת ארוך? אין דרך אחרת?
|
חזרה לתחילת העמוד |
|
|
lish משתמש מתחיל
הצטרף / הצטרפה: 05 July 2007
משתמש: מנותק/ת הודעות: 6
|
נשלח בתאריך: 05 July 2007 בשעה 22:01 | | IP רשוּם
|
|
|
|
אין לך תשובה לשאלה?
|
חזרה לתחילת העמוד |
|
|
lish משתמש מתחיל
הצטרף / הצטרפה: 05 July 2007
משתמש: מנותק/ת הודעות: 6
|
נשלח בתאריך: 05 July 2007 בשעה 23:47 | | IP רשוּם
|
|
|
|
אגב, שושן, א-ם יש לך ICQ או מסנג'ר זה בהחלט יכול להיות דבר שיזרז את התהליך של הבעיה...
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 July 2007 בשעה 11:54 | | IP רשוּם
|
|
|
|
אם לזה אתה קורא אין לך תשובה אז אין לי תשובה.
ולא אין לי מסנג'ר או ICQ או כל IM אחר.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 06 July 2007 בשעה 12:43 | | IP רשוּם
|
|
|
|
shoshan כתב:
אין ממש קשר מיוחד לשפה מסיומת.
ראה game loop בגוגל (או תשובות אם למישהו יש).
זה משהו די ברור, אתה פשוט ממשיך את הריצה של התכנה כל עוד המשחק (או מה שזה לא יהיה) לא נגמר. בכל ריצה של הלולאה מריץ כל מיני בסיקות ומשנה משתנים גלובאליים שמהווים את "מצב במשחק"
|
|
|
שושן, אם אנחנו מדברים כאן על דוס יש קצת בעיה עם הפתרון שלך. הפקודות שבודקות איזה מקש לחוץ בודקות אותו ברגע נתון. ומה אם בדיוק באותו זמן שהמשתמש לוחץ על ה-ESC אתה לא הלולאת הבדיקה האם היתה לחיצה? במקרה כזה אתה עלול לפספס לחיצות (שים לב שהרבה משחקי דוס ישנים סבלו מהבעיה הזו). הפתרון - שימוש ב-interruprts של מערכת ההפעלה. הרעיון - אתה מקשיב למערכת ההפעלה, וכל פעם שמישהו ילחץ על מקש מערכת ההפעלה תעצור לא משנה איפה אתה, תבצע קטע קוד שתגדיר, ותחזור להמשך ביצוע התוכנית. מבחינת מימוש - זה לא משהו כזה טריויאלי.
ניר
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 July 2007 בשעה 13:04 | | IP רשוּם
|
|
|
|
אנחנו מדברים על פסקל ואין בעיה אם מה שתיארתי (:
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 July 2007 בשעה 13:19 | | IP רשוּם
|
|
|
|
תכנית בדיקה:
קוד:
uses crt;
begin writeln('hit a key now!'); delay(1000); if keypressed then writeln(ord(readkey)) else writeln('not quick enough'); end. |
|
|
פלט: hit a key now! 97
(לחצתי a)
ואם תלחץ כמה מקשים אז יהיה כמה פעמים keypressed ותוכל לקבל את המקש ב-readkey (אתה מקבל לפי סדר הלחיצה)
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 06 July 2007 בשעה 16:24 | | IP רשוּם
|
|
|
|
ואם זה delay(10000)?
__________________ מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 06 July 2007 בשעה 16:27 | | IP רשוּם
|
|
|
|
delay(1000) זה לחכות שנייה (זמן ללחוץ) - כמו sleep כזה
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
עצה אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 07 July 2007 בשעה 01:15 | | IP רשוּם
|
|
|
|
אל תתעסק עם זה עכשיו חבל לך על הזמן, זה דבר לא חשוב בתחילת הלימוד. תלמד דברים אחרים כמו פונקציות, מערכים, מחרוזות. . .
|
חזרה לתחילת העמוד |
|
|