تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86 واحد Crt تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
مروری بر مطالب برای کنترل ورودی و خروجی با دستورات زیر آشنا شدید: readln, read, writeln, write برای کنترل بیشتر بر روی صفحه نمایش و کلید از واحد Crt استفاده می کنیم.
ضرورت دستورات دیگر برنامه ای بنویسید که در خروجی 1 چاپ می کند تا زمانی که کاربر حرف ”E“ را وارد کرد. var ch:char; Begin While true do write(1); read(ch); if (ch=‘e’) or (ch=‘E’) then exit; end End.
ضرورت دستورات دیگر (ادامه) اشکالات برنامه پس از ایجاد هر خروجی ، از کاربر ورودی می گیرد کاربر در هر ورودی لازم است، کلید enter را وارد نماید تا کنترل از خروجی به ورودی باز گردد. دستور read(ch) تا #13 دریافت نکند اجرایش تمام نمی شود.
ضرورت دستورات دیگر (ادامه) دستورات مورد نیاز دستوری که بتواند به ما نشان دهد آیا کلیدی وارد شده است یا خیر ! دستور keypressed تابعی است که در هر فراخوانی بررسی می کند آیا کلیدی وارد شده است یا خیر (آیا در بافر صفحه کلید کاراکتری برای خواندن وجود دارد یا خیر). در صورتی که کلید زده شده بود، مقدار آن را به ما بازگرداند دستور readkey دریافت کاراکترهای ذخیره شده در بافر صفحه کلید امکان پذیر می کند
ضرورت دستورات دیگر (ادامه) برنامه ای بنویسید که در خروجی 1 چاپ می کند تا زمانی که کاربر حرف ”E“ را وارد کرد. var ch:char; Begin while true do begin while not keypressed do write(1); ch:=readkey; if (ch=‘e’) or (ch=‘E’) then exit; end; End.
دستورات کنترلی و ورودی از صفحه کلید Function Keypressed : Boolean Function Readkey:char Returns a character or an extended scan code! ,,, The character is not echoed to the screen
مثال : برنامه بنویسید که با دریافت جهت های حرکت کاراکترهای جهت را چاپ کند uses crt; type dir = (up,down,left,right); const chars : Array[1..4] of char = (#24,#25,#27,#26); var ch : char; direct : dir; begin while true do while not keypressed do; {begin write('*':2); delay(100); end;} ch:=readkey; if ch='e' then exit else if ch=#0 then case ch of 'H' : direct := up ; 'P' : direct := down ; 'M' : direct := right ; 'K' : direct := left ; End ; write(chars[ord(direct)+1]:2); end; end.
واحد هنگامی که رویه یا تابعی را می نویسید، می توانید در برنامه های مختلف از آن استفاده کنید به شرط آنکه کد رویه و یا تابع را در برنامه جدید کپی کنید. می توانید رویه ها و تابع ها را در کنار هم در یک واحد قرار دهید و سپس با استفاده از آن واحد، از امکانات آن استفاده نمایید. با استفاده از دستورname_unit uses ، استفاده از امکانات یک واحد به نام name_unit را بیان می کنید.
واحد (ادامه) نحوه استفاده اجرای برنامه compiler Linker Pr.pas Pr.obj Pr.exe Pr.pas Pr.obj Linker compiler Pr.exe Crt.tpu Loader
واحد (ادامه) کلیه واحدهایی که در کتابخانه اصلی توربو پاسکال قرار دارند (مانند Printer، Crt، Dos و غیره) روی فایلی تحت عنوان turbo.tpl ذخیره می شوند. برای استفاده از crt از turbo.tpl ای روی homepage درس است استفاده نمایید. توربو پاسکال برای کد ماشین واحد داده شده ابتدا درون شاخه جاری را جستجو می کند. در صورتی که فایل پیدا نشد، توربو پاسکال در شاخه ای که برای unit directories تخصیص یافته جستجو می کند. (این شاخه در زیر منوی Directories… از منوی Option قرار دارد)
دیگر دستورات واحد Crt یک پنجره متنی تعریف می کند که مختصات بالای سمت چپ و پایین سمت راست به ترتیب (x1,y1) و (x2,y2) است. Window(x1,y1,x2,y2) محتویات پنجرة جاری را پاک می کند Clrscr مکان نما را در مختصات (x,y) پنجره جاری قرار می دهد Gotoxy (x,y) رنگ زمینه پنجره جاری را تغییر می دهد که مقدار آن از 0 تا 7 تغییر میکند textBackGround (color) رنگ متن پنجره جاری تعیین می کند که مقدار آن از 0 تا 15 تغییر می کند. textColor(color) به میزان delaytime میلی ثانیه اجرای برنامه را به تعویق می اندازد Delay(Delaytime)
دیگر دستورات واحد Crt (ادامه) (ثوابت) رنگ های تعریف شده در پاسکال 8 DarkGray Black 9 LightBlue 1 Blue 10 LightGreen 2 Green 11 LightCyan 3 Cyan 12 LightRed 4 Red 13 LightMagenta 5 Mageneta 14 Yellow 6 Brown 15 White 7 LightGray
مثال: برنامه ای بنویسید که به پنجره های رنگی به صورت تصادفی ایجاد کند تا زمانی که کلیدی زده شود uses crt; Var x1,y1,x2,y2,h,w,c :integer; begin while not keypressed do x1 := random(79)+1; y1 := random(24)+1; w :=80-x1; h :=25-y1; if (h>0) and (w>0) then x2:=x1+random(w-1)+1; y2:=y1+random(h-1)+1; window(x1,y1,x2,y2); c :=random(6)+1; textbackground(c); clrscr;; end; end
پیاده سازی حرکت کرم Begin EOG := true ; LEVEL:=1 ; While EOG do INIT_Wall(Level); INIT_foods ; INIT_putworm; If Game then LEVEL:=LEVEL+1 else EOG := false; End ;
پیاده سازی حرکت کرم (ادامه) Function Game:boolean; Var … Begin gameover:= false; while not gameover do begin Move(get_dir); if food[wx,wy] >0 then grow(food[wx,wy]); else ... end; Game := gameover; End.