انجمن سایت کلیدستان



کار با کلید های جهتی (ArrowKey) به عنوان دریافت ورودی (در متلب)زمان کنونی: ۱۳۹۵/۰۹/۱۸، ۰۴:۲۳ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: system32
آخرین ارسال: system32
پاسخ 3
بازدید 1116

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کار با کلید های جهتی (ArrowKey) به عنوان دریافت ورودی (در متلب)

کار با کلید های جهتی (ArrowKey) به عنوان دریافت ورودی (در متلب)

#1
با سلام 
در تمرین درس هوش مصنوعی ، برنامه بازی معمای 8 را با متلب نوشته ام . (به عنوان تابع مابعد) 
حرکت ها را در این برنامه با کلید های u , d , l , r , e مشخص کردم . که از کاربر گرفته و تغییر مورد نظر را در ماتریس انجام دهد . 
می خواهم به جای کلیدهای تعریف شده حرکت ، از کلید های جهت نما (Arrow Key) استفاده کنم . 
ممنون می شوم اگر راه حلی برای این کار وجود دارد برای بنده بنویسید . 
به امید موفقیت 
پاسخ

کار با کلید های جهتی (ArrowKey) به عنوان دریافت ورودی (در متلب)

#2
سلام.
من یک روش کدنویسی را مثال می زنم، ببینید همون چیزی هست که دنبالش هستید یا نه. همچنین باید از تابع double استفاده کنید تا کلیدهای جهت، تبدیل به عدد معادلشان بشوند و سپس بر اساس آنها، کدنویسی می کنید. براتون مثال می زنم :
این یک کد معمولی است که پنجره ای باز شده و اگر دکمه های کیبورد را بزنیم، آنها را در خروجی نمایش می دهد (به جز دکمه های جهت که برای آنها مشکل دارد)(هنگام آزمایش آن، کیبورد در حالت زبان انگلیسی باشد) :

کد پی‌اچ‌پی:
clear all
close all
clc

figure;
set(f'KeyPressFcn', @(x,y)disp(get(f,'CurrentCharacter'))) 

حالا ما قصد داریم که هنگام زده شدن کلیدهای جهت، یک سری کد اجرا شود (مثلا پیامی نمایش داده شود). تابع double را به کار می بریم و سپس بر اساس عدد معادل کلیدهای جهت، کدنویسی می کنیم. ابتدا یک تابع با نام myKey می سازیم (یک m-file با نام myKey.m) که کدهای زیر در آن نوشته شده :

کد پی‌اچ‌پی:
function [message] = myKey(key)
message key;
if(
key==28)
    
message 'left'
elseif(
key==29)
    
message 'right'
elseif(
key==30)
    
message 'up'
elseif(
key==31)
    
message 'down'
end
disp
(message); 

سپس در یک m-file دیگر که حاوی برنامه اصلی است، کد زیر را اجرا می کنیم :

کد پی‌اچ‌پی:
clear all
close all
clc

figure;
set(f'KeyPressFcn', @(x,y)myKey(double(get(f,'CurrentCharacter')))) 

با زدن کلیدهای جهت، نام جهت در خروجی نمایش داده می شود. اکنون شما می توانید عملیات های دلخواه خود را برای آنها بنویسید (به جای نمایش پیام در خروجی).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط system32

کار با کلید های جهتی (ArrowKey) به عنوان دریافت ورودی (در متلب)

#3
(۱۳۹۳/۰۹/۲۸, ۰۵:۵۸ ب.ظ)'admin' نوشته: سلام.
من یک روش کدنویسی را مثال می زنم، ببینید همون چیزی هست که دنبالش هستید یا نه. همچنین باید از تابع double استفاده کنید تا کلیدهای جهت، تبدیل به عدد معادلشان بشوند و سپس بر اساس آنها، کدنویسی می کنید. براتون مثال می زنم :
این یک کد معمولی است ....




 

با سلام 
ممنون از پاسخ خوبتان 
متاسفانه هنوز دو مشکل دارم و آن اینکه 
1- اگر نخواهم پنجره Figure نمایش داده شود چه کار کنم ؟ 
اگر با پنجره بخواتم بنویسم طراحی یک GUI می تواند هر دو کار (هم نمایش ماتریس خروجی و هم استفاده از کلیدهای جهت نما) را برای من انجام دهد ؟ 
2- دستور set را در داخل حلقه قرار می دهم ، ولی نمی دانم کجای کار اشتباه است که دستورات بعد از set داخل حلقه خوانده نمی شوند و به خاطر اینکه شرط پایان حلقه در یکی از دستورات (exit) تعریف شده است ، خلقه پشت سر هم تکرار می شود و برنامه کاراکتر ورودی را نمی پذیرد . 
به امید موفقیت 
 

 
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)