כותב |
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 15 September 2005 בשעה 21:50 | | IP רשוּם
|
|
|
|
איך מזהים לחיצות מקש בשפת C ?
איך אני יכול לבנות קוד שבעת לחיצה על המקש "g" תרוץ לולאה כלשהי ובעת לחיצה על המקש "W" תודפס הודעה כלשהי על המסך.
האם זה מסובך?
מישהו מוכן לבנות לי דוגמא קטנטנה שמטפלת בלחיצות על מקשים.?
תודה.
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 15 September 2005 בשעה 22:48 | | IP רשוּם
|
|
|
|
ממממ...לא יודע על ידי לחיצת מקשים, אתה יכול לבקש מהתשמש להקליד תו ולהבדוק אם הוא W או B וכו'...
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 16 September 2005 בשעה 07:22 | | IP רשוּם
|
|
|
|
כן זה אני יודע על ידי קוד ascii, אבל אז צריך שנגיד המשתמש ילחץ "W" ואז אנטר..
חובה ללחוץ אנטר, ואני רוצה שישר כשהוא ילחץ על "w" אז יקרה משהו, אין אפשרות כזאת?
אולי יש פקודה בסגנון scanf() שלא מצריכה לחיצה על אנטר לאחר הזנת הנתונים?
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 16 September 2005 בשעה 09:58 | | IP רשוּם
|
|
|
|
לא חייב ללחוץ אנטר הנה דוגמא[הרבה זמן לא כתבתי ב-C מן הסתם אני מתבלבל פה...]:
קוד:
#include <conio.h> #include <stdio.h>
void main() { char c;
c = getch(); if(c=='w') printf("u type 'w'"); else printf("u type somthing else then 'w'"); } |
|
|
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 16 September 2005 בשעה 16:32 | | IP רשוּם
|
|
|
|
תודה רבה!
אני חושב שאנייכול לעשות עם זה משהו
|
חזרה לתחילת העמוד |
|
|
אבידור אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 17 September 2005 בשעה 09:50 | | IP רשוּם
|
|
|
|
בעזרת פקודת GETCH.
אתה לוקח משתנה CHAR
ועושה קליטה של התו - תו אחד כשאתה לוחץ עליו התוכנית ממשיכה.
ואז אתה משווה יענו
char ch;
ch=getch();
לולאה לדוגמא WHILE
WHILE(ch=="c")
{
Do something
}
שים לב :
1. אם עשית פקודות דומות של קליטה כמו SCANF עליך לנקות את הבאפר. בקיצר אל תסתבך עם זה ולפני כל פקודת GETCH שים פקודת
FLUSHALL();
2. הפקודה
getch();
קולטת תוים - או בעצם מאכסנת במשתנה את מספר האסקיי שלהם. לכן אם תכתוב מספרים ותציג אותם עם מחרוזת הבקרה %D אז הם לא יהיו המספרים.
אם יהיו המספר שהקשת + 48.
לכן אם תרצה להשוות תעשה
משתנה-=48 ( הורדת 48 מהמשתנה) או
if ( a=="5")
ולא
if (a==5)
|
חזרה לתחילת העמוד |
|
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 17 September 2005 בשעה 11:46 | | IP רשוּם
|
|
|
|
תודה על ההסבר [למרות שכבר הבנתי את זה]
בכל זאת ניסיתי לבנות סנייק אבל זה גדול עליי עדיין...
בניתי משהו דומה לסנייק..
אני ימשיך לעבוד על זה
|
חזרה לתחילת העמוד |
|
|
אבידור אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 17 September 2005 בשעה 20:10 | | IP רשוּם
|
|
|
|
אם אתה רוצה סנייק אבל שלא תצתרך להקיש כל הזמן אלה שאתה מקיש פעם אחת והלולאה מתבצעת עד שאתה מקיש פעם אחרת חפש על הפקודה KBHIT
היא כמו GETCH אבל יש הבדל
GETCH מחכה עד שילחצו
וKBHIT לא
|
חזרה לתחילת העמוד |
|
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 17 September 2005 בשעה 20:53 | | IP רשוּם
|
|
|
|
כן אני יודע על הפקודה kbhit, מן הסתם כדי לבנות סנייק [או משהו דומה] אני
צריך להשתמש בפקודה הזאת, ואני גם חייב להשתמש בפקודה getch() כדי לדעת על
מה המשתמש לחץ
ואז להזיז את הנחש בהתאם ללחיצה...
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 17 September 2005 בשעה 22:24 | | IP רשוּם
|
|
|
|
הבעיה העיקרית שאני רואה בסנייק, היא מחיקת עקבות הנחש...תקן אותי אם אני טועה?
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 17 September 2005 בשעה 22:43 | | IP רשוּם
|
|
|
|
כן זה בדיוק הבעייה, בניתי ככה שימחוק את הנחש , אאמ איך אני יסביר? לדוגמא
הנחש באורך 10 כוכביות נגיד והוא כרגע זז ימינה, אני לוחץ על החץ למטה והוא מתחיל
לרדת כלפי מטה, בינתיים הכל טוב, אבל אם אני ילחץ על מקש כלשהו[שמאלה או ימינה] לפני שכל 10 הכוכביות יהיו כבר כלפי מטה [לפני כן הן היו בכיוון ימין] אז זה יתחיל לעשות בלאגן, ואני עדיין לא יודע איך לפתור את זה...
חח לא נראה לי שתבין משהו ממה שכתבתי, אבל בקיצור, כן. הבעייה היא במחיקת העקבות...
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 17 September 2005 בשעה 22:45 | | IP רשוּם
|
|
|
|
הבנתי בערך, בכל מקרה אותו סיפור היה לי עם הדמקה, מה שעיתי הייתה מחיקת המסך וציור מחדש, מה שכן זה יגרום לנחש שלך "להבהב" טיפה :)
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
pitbull363 משתמש חבר
הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת הודעות: 102
|
נשלח בתאריך: 17 September 2005 בשעה 22:59 | | IP רשוּם
|
|
|
|
טוב בכל מקרה, זה סתם היה נסיון דפוק לבנות סנייק
רק לפני כמה ימידם התחלתי ללמו C, ואני עדיין לא יודע להשתמש בפונקציות
אז סתם הסתבכתי עם מלא לולאות ומשפטי תנאי שחוזרים על עצמם הרבה פעמים..
עוד כמה ימים אני כבר ידע להשתמש כמו שצריך בפונקציות, ואז נראה לי שזה יהיה הרבה יותר קל, כי ככה זה ממש סיוט
|
חזרה לתחילת העמוד |
|
|
SDX אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 26 September 2005 בשעה 21:04 | | IP רשוּם
|
|
|
|
אם אתה רוצה שמתי שילחץ g יקרא משהו מבלי לבקש קלט מהמשתמש כמו אדיוט
אז תנסה את הפונקציה GetAsyncKeyState מMSDN תקרא על הVK's
בשביל לדעת איזה מקשים, למשל G עושים ככה:
if (GetAsyncKeyState(47)) { commands }
|
חזרה לתחילת העמוד |
|
|