נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: לחיצת מקש ב C ...

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
pitbull363
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת
הודעות: 102
נשלח בתאריך: 15 September 2005 בשעה 21:50 | IP רשוּם
ציטוט pitbull363

איך מזהים לחיצות מקש בשפת C ?
איך אני יכול לבנות קוד שבעת לחיצה על המקש "g" תרוץ לולאה כלשהי ובעת לחיצה על המקש "W" תודפס הודעה כלשהי על המסך.
האם זה מסובך?
מישהו מוכן לבנות לי דוגמא קטנטנה שמטפלת בלחיצות על מקשים.?
תודה.
חזרה לתחילת העמוד הצג את כרטיס החבר של pitbull363 חפש הודעות אחרות של pitbull363
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 15 September 2005 בשעה 22:48 | IP רשוּם
ציטוט SBD

ממממ...לא יודע על ידי לחיצת מקשים, אתה יכול לבקש מהתשמש להקליד תו ולהבדוק אם הוא W או B וכו'...

__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
pitbull363
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת
הודעות: 102
נשלח בתאריך: 16 September 2005 בשעה 07:22 | IP רשוּם
ציטוט pitbull363

כן זה אני יודע על ידי קוד ascii, אבל אז צריך שנגיד המשתמש ילחץ "W" ואז אנטר..
חובה ללחוץ אנטר, ואני רוצה שישר כשהוא ילחץ על "w" אז יקרה משהו, אין אפשרות כזאת?
אולי יש פקודה בסגנון scanf() שלא מצריכה לחיצה על אנטר לאחר הזנת הנתונים?
חזרה לתחילת העמוד הצג את כרטיס החבר של pitbull363 חפש הודעות אחרות של pitbull363
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 16 September 2005 בשעה 09:58 | IP רשוּם
ציטוט SBD

לא חייב ללחוץ אנטר הנה דוגמא[הרבה זמן לא כתבתי ב-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 ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
pitbull363
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת
הודעות: 102
נשלח בתאריך: 16 September 2005 בשעה 16:32 | IP רשוּם
ציטוט pitbull363

תודה רבה!
אני חושב שאנייכול לעשות עם זה משהו
חזרה לתחילת העמוד הצג את כרטיס החבר של pitbull363 חפש הודעות אחרות של pitbull363
 
אבידור
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט pitbull363

תודה על ההסבר [למרות שכבר הבנתי את זה]
בכל זאת ניסיתי לבנות סנייק אבל זה גדול עליי עדיין...
בניתי משהו דומה לסנייק..
אני ימשיך לעבוד על זה
חזרה לתחילת העמוד הצג את כרטיס החבר של pitbull363 חפש הודעות אחרות של pitbull363
 
אבידור
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט pitbull363

כן אני יודע על הפקודה kbhit, מן הסתם כדי לבנות סנייק [או משהו דומה] אני צריך להשתמש בפקודה הזאת, ואני גם חייב להשתמש בפקודה getch() כדי לדעת על מה המשתמש לחץ
ואז להזיז את הנחש בהתאם ללחיצה...
חזרה לתחילת העמוד הצג את כרטיס החבר של pitbull363 חפש הודעות אחרות של pitbull363
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 17 September 2005 בשעה 22:24 | IP רשוּם
ציטוט SBD

הבעיה העיקרית שאני רואה בסנייק, היא מחיקת עקבות הנחש...תקן אותי אם אני טועה?



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
pitbull363
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת
הודעות: 102
נשלח בתאריך: 17 September 2005 בשעה 22:43 | IP רשוּם
ציטוט pitbull363

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

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

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 17 September 2005 בשעה 22:45 | IP רשוּם
ציטוט SBD

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

__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
pitbull363
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 03 June 2005
משתמש: מנותק/ת
הודעות: 102
נשלח בתאריך: 17 September 2005 בשעה 22:59 | IP רשוּם
ציטוט pitbull363

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 26 September 2005 בשעה 21:04 | IP רשוּם
ציטוט SDX

אם אתה רוצה שמתי שילחץ g יקרא משהו מבלי לבקש קלט מהמשתמש כמו אדיוט

אז תנסה את הפונקציה GetAsyncKeyState מMSDN תקרא על הVK's

בשביל לדעת איזה מקשים, למשל G עושים ככה:

if (GetAsyncKeyState(47)) { commands }

חזרה לתחילת העמוד הצג את כרטיס החבר של SDX חפש הודעות אחרות של SDX בקר בדף הבית של SDX
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה