|
Matematika-informatika fakulteti
|
bet | 12/13 | Sana | 26.12.2023 | Hajmi | 435,12 Kb. | | #128552 |
Bog'liq Ne\'matova Muxlisaxon«Ha» yoki «Yo’q» javobini olish kerak bo’lgan vaziyatlarda foydalaniladi. Demak bu komponentada ortiqcha bitga holatga ega bo’ladi.
Delphi dasturlash tilida komponentalarni guruxlashtirib foydalanish mumkin. Odatda bir-biriga aloqador komponentalar bitta joyda guruhlashtiriladi.
Croup Boxes guruhlashgan ramka komponentasi. Guruhlashgan ramka faqatgina bir toifadagi komponentalarni tashkil topgan bo’lishi shart emas.
Scroll Bors komponentasi. Ushbu komponenta turli oynalarni ekranda ko’rinmay turgan qismlarini ko’rish va boshqa maqsadlarda ishlatiladi.
Delphi dasturlash tilida Scroll Bors juda yaxshi tashkil qilingan va tuli xil xossalari mavjud.
Position joylashish xassasi oniy momentda qayerda joylashishini belgilab beradi. Bu xossaning qiymati faqat butun sonlarni qabul qiladi.
Grafik komponentalar formada figura va ob’ektlarni ko’rsatish hamda ma’lumotlarni akslantirish uchun foydalaniladi. Bu komponentalarni ba’zilari juda ham oddiy ba’zilari juda ham murakkab. Ularni har biri aniq vazifa uchun mo’ljallangan.
Image komponentasini formada rasmlarni joylashtirish uchun foydalaniladi. Rasmni nomi esa Picture xossasida keltiriladi. Bu rasmlarning kengaytmasi .VMR, ICO, WMF bo’lishi mumkin. Agar biz Image komponentasining o’lchamini o’zgartirishni xohlasak Auto Size xossasiga True qiymati berishimiz lozim. Stretch xossasiga True berilgan bo’lsa, belgilangan sohaga joylashtiriladi.
Paint Box komponentasi formaning cheklangan qismida chizish imkonini beradi. Chizish darchasi o’zining chegaralarini ko’rsata olmaydi. Ushbu qiyinchilikni yo’qotish uchun uning ichiga guruhlashgan panel Croup Boxes qo’yish va uni o’lchamini Paint Box komponenta o’lchami bilan bir xil qilish lozim. Ana shundagina bizga chizish uchun ramka paydo bo’ladi.
Shapes figuralar komponentasi o’z tabiati bilan judayam oddiy. Biz sodda geometrik figuralardan dasturimizni stillashtirish foydalanishimiz mumkin.
Figuralarning va konturlarning rangi mos ravishda Pen va Brush xossalari yordamida o’rnatiladi.
Sxemalar isxarxik tarzda tashkil qilingan ma’lumotlarni akslantirish uchun foydalaniladi. Misol uchun katologlar daraxti. Sxema Lines va Items xossalari orqali murojat qilish mumkin bo’lgan qatorlardan tashkil topadi.
Outlines Tile (sxemali) xossasi istalgan konfigurastiyasini olish uchun foydalaniladi.
Color Grids komponentasi chizish va fon ranglarini boshqarish uchun interfeysni ifodalaydi. Bu komponenta yordamida chizish va fon rangini tanlashda foydalaniladi.
Foreground (chizish rangli) va Background (fon rangi) xossalarda belgilangan rangdan tashkil topgan bo’ladi.
Fayl va katalogga murojaat qilish komponentalari fayl va kataloglar bilan turli amallarni bajarishda foydalaniladi.
File List Box (fayllar ro’yxati paneli) komponent fayllar ro’yxati paneli komponentasi katalogga murojaat interfeysini ifodalaydi. Mask xossasi filter yoki maskani o’rnatish uchun foydalaniladi.
Foydalanuvchi tomonidan belgilangan fayl nomi File Name xossasi orqali murojaat qilishimiz mumkin.
Delphi da tuziladigan dasturlar biror forma asosida qilinadi. Delphi da har bir yangi hosil qilingan formaga unga mos bo’lgan modul avtomatik tashkil qilinib turiladi. Bu esa dasturchi uchun juda qulay imkoniyat, yani uning ishini tezlashtirishga yordam beradi.
Bu formaning shaklini tanlash, unda komponentalarni joylashtirish bizning ixtiyorimizda bo’ladi. Formaga biror komponentani qo’ymoqchi bo’lsak, shu komponentaning ustida sichqonchaning chap tugmasini ikki marta bosiladi. Bu komponenta formaning o’rtasiga joylashadi. Biz uni xohlagan joyimizga surib ko’chirishimiz mumkin.
Ma'lumki, dastur tuzish sermashaqqat jarayon, lekin Delphi tizimi bu ishni sezilarli darajada soddalashtiradi va masala turiga qarab dastur tuzuvchi ishining 50— 80%ni tizimga yuklaydi. Delphi tizimi dasturni loyihalash va yaratish vaqtini kamaytiradi, hamda Windows muhitida ishlovchi dastur ilovalarini tuzish jarayonini osonlashtiradi.
Delphi o'zida bir qancha zamonaviy ma'lumotlar bazasini boshqarish tizimlarini va dasturlash texnologiyalarini ma'lumotlar bazasini yaratishda ishlatadi.
matematik modelga e’tibor qiladigan bo’lsak, boshlang’ich ma’lumotlar sifatida jism otiladigan burchak, jismga beriladigan boshlang’ich tezlik berilishi kerak ekan. koordinatasi esa 0 dan boshlab biror kichik miqdordagi qadam bilan o’zgartirib boriladi va unga mos koordinatasi qiymatlari topib boriladi.
Ana shularni e’tiborga oladigan bo’lsak, jism otiladigan burchak , jismga beriladigan boshlang’ich tezlik uchun qiymati o’zgartirilishi mumkin bo’lgan komponentalar kerak bo’ladi. Avvalambor boshlang’ich qiymatlat uchun sarlavhalarni joylashtiramiz. Bitta label tashlab, unda “Otish burchagi gradusda”, ikkinchi label tashlab, unda “boshlang’ich tezlik m/s” deb kiritamiz. Bular kiritiladigan qiymatlar uchun sarlavhalar bo’lib hisoblanadi. Qiymatlarning o’zi uchun esa edit komponentidan foydalanamiz.
“Otish burchagi gradusda” sarlavha turgan joyning pastida birinchi edit komponentasini joylashtiramiz. “boshlang’ich tezlik m/s” deb nomlangan sarlavha ostida esa ikkinchi edit komponentasini joylashtiramiz.
Jism harakati boshlanishi oldidan otiladigan burchakni o’rnatish va boshlang’ich tezlikni o’zlashtirib olish uchun birinchi button tugmasini tashlaymiz va unga “stvolni burchakka o’rnatish” deb nom beramiz. Bevosita jarayon borishini nazorat qilib boorish uchun ikkinchi button tugmasini tashlaymiz va unga “otish” deb nom beramiz. Yuqorida keltirilgan obyektlar formaga tashlanganda uning ko’rinishi quyidagicha bo’ladi:
2.3.1-chizma. Formaga boshlang’ich komponentalarni o’rnatish.
2.3.1-chizmaga e’tibor qilsak, komponentalarda boshlang’ich qiymatlar ham o’rnatilgan. Dasturni ishlatganda “stvolni burchakka o’rnatish” tugmasini bosishdan oldin boshlang’ich kiritilgan bu qiymatlarni o’zgartirish mumkin.
Stvolni burchakka o’rnatish button tugmasini aktivlashtirib quyidagi dastur qismini kirita boshlaymiz:
stvol:=50; alfa:=strtofloat(edit1.Text); radian:=alfa*3.14/180;
x1:=cos(radian)*stvol; y1:=sin(radian)*stvol; ystvol:=y1;
x1:=x0+x1; y1:=y0-y1;
// stvolni kerakli burchakka o'rnatish
form1.Canvas.Pen.Width:=6; moveTo(x0,y0); LineTo(trunc(x1),trunc(y1));
moveto(x0-10,y0); lineto(x0+25,y0); form1.Canvas.Pen.Width:=1;
Ushbu dastur qismiga e’tibor qilsak, alfa:=strtofloat(edit1.Text); operatori bilan edit1.text komponentasidan satrli deb qaralayotgan qiymat haqiqiy tipga o’tkazilib alfa nomli o’zgaruvchiga o’zlashtirib olinmoqda. E’tibor qilsak, bu qiymatni formada graduslarda kiritish so’ralgan edi. Ma’lumki, trigonometrik funksiyalar dasturda radianlarda ishlaydi, shuning uchun bu kiritilgan gradusdagi qiymatni radianga o’tkazib olish uchun matematikada ma’lum bo’lgan radian:=alfa*3.14/180; buyrug’ini beramiz. Stvolni kerakli burchakka o’rnatish uchun uni to’g’ri burchakli uchburchakning gipotenuzasi deb qarab, ikkinchi uchini ko’tarish koordinatalarini aniqlaymiz(2.3.2-chizma).
2.3.2-chizma. Stvolni burchakka o’rnatish uchun koordinatalarni aniqlash.
A na shuning uchun ham dasturda x1:=cos(radian)*stvol; y1:=sin(radian)*stvol; kabi operatorlar yozilgan. (x0,y0) koordinatalari stvol© ning chap tomoni koordinatasi hisoblanadi. Endi uning o’ng tomoni koordinatasini hisoblash uchun absissasiga qiymati qo’shamiz, ordinatasidan esa qiymatni ayiramiz. Buning sababi shuki, kompyuter ekranida koordinatalar sistemasining boshi chap uyqori burchak hisoblanadi(2.3.3-chizma).
2.3.3-chizma.Kompyuter ekranida koordinatalar sistemasini o’rnatilishi.
Uyqorida yozilgan operatorlar ana shu 2.3.2 va 2.3.3 chizmalarda keltirilgan fikrlarga asoslangan.
Endi ekranga shkala va sonlar o’qini tasvirlash uchun quyidagi operatorlarni yozamiz:
Form1.Canvas.MoveTo(Button3.left+80,Button4.Top-20);
form1.Canvas.LineTo(Button4.Left,Button4.Top-20);
for i:=1 to 5 do begin
Form1.Canvas.MoveTo(Button3.left+180+i*100,Button4.Top-25);
form1.Canvas.LineTo(Button3.left+180+i*100,Button4.Top-15);
TextOut(Button3.left+175+i*100,Button4.Top-5,inttostr(i*30)); // sonlarni quyish
Form1.Canvas.MoveTo(Button3.left+75,Button4.Top-70-i*50);
form1.Canvas.LineTo(Button3.left+85,Button4.Top-70-i*50);
TextOut(Button3.left+55,Button4.Top-75-i*50,inttostr(i*10)); end;
Ana shu yuqoridagi operatorlarga asoslangan “stvolni burchakka o’rnatish” dastur qismini ishlatsak, ekranda quyidagi ko’rinish paydo bo’ladi:
2.3.4-chizma. Stvolni 200 burchakka o’rnatish.
Bordiuy biz stvolni 40 gradusga o’rnatmoqchi bo’lsak, “otish burchagi gradusda” sarlavhasi ostidagi qiymatni 40 ga o’ggartiramiz va yana “stvolni burchakka o’rnatish” tugmasini bosamiz. Ekranda quyidagi korinish paydo bo’ladi:
2.3.5-chizma. Stvolni 400 burchakka o’rnatish.
Ekranda stvolni kerakli burchakka o’rnatgandan so’ng otish tugmasini bosib snaryad harakat trayektoriyasini aniqlashga o’tsa bo’ladi.
Snaryadni stvoldan otilib chiqishini ovozli holda tasvirlash uchun tovushli fayllardan foydalanildi. Buning uchun quyidagi protsedura chaqirilishidan foydalanamiz:
sndPlaySound('EXPLODE.WAV', SND_ASYNC);
Bunda joriy papkada joylashgan 'EXPLODE.WAV' fayli chaqiriladi va xuddi snaryadni otilgandagidek ovoz chiqariladi.
Shundan keyin snaryadning boshlang’ich tezligi qiymatini ekrandan o’qib olish mumkin. Buning uchun quyidagi opratorni yozamiz:
v0:=strtofloat(edit2.Text);
Endi ayrim o’zgaruvchilarning boshlang’ich qiymatlarini o’rnatamiz:
g:=10; x:=0; y:=0; mashtab:=4;
Bu yerda g bu o’girlik tortish kuchi, formulada ishlatiladi.
X va y koordinatalarning boshlang’ich qiymatlari.
Tayyorgarlik ishlari tugagandan keyin snaryad harakati trayektoriyasini aniqlash boshlanadi. Buning uchun quyidagi dastur qismini yozamiz:
while (x<=700) and (mashtab*y>=-ystvol) do begin
x:=x+0.01;
y:=x*sin(radian)/cos(radian)-x*x*g/(2*v0*v0*sqr(cos(radian)));
form1.Canvas.Pixels[trunc(x1+mashtab*x),trunc(y1-mashtab*y)]:=clred;
for j:=1 to 1000000 do; end;
Bu erda while – bu sharti oldindan beriluvchi takrorlash operatori, operator x ning qadamini 0,01 qilib berishga imkon beradi.
Ushbu takrorlash operatorida snaryad harakatining asosiy matematik modeli (2.3.1) qamrab olingan.
“Otish” dasturiy vositasi ishga tushirilgandan so’ng ekranda snaryad harakati trayektoriyasi ko’rina boshlaydi. Bu ko’rinish nuqtalari quyidagi operator orqali amalga oshiriladi:
form1.Canvas.Pixels[trunc(x1+mashtab*x),trunc(y1-mashtab*y)]:=clred;
Bundan ko’rinadiki, trayektoriya rangi qizil qilib belgilangan.
Agar snaryad trayektoriyasini berayotgan vaqtda ekran ko’rinishini o’zgarmas qilib olsak, u quyidagi ko’rinishga ega bo’ladi:
2.3.6-chizma. Ekrandagi berilgan boshlang’ich qiymatlarda snaryad trayektoriyasi.
Snaryad harakati boshqa boshlang’ich parametrlarda qanday bo’lishini aniqlash uchun ularni o’zgartirib ishlatib ko’ramiz:
2.3.7-chizma. O’zgartirilgan boshlang’ich qiymatlarda snaryad harakati trayektoriyasi.
2.3.7-chizmani 2.3.6-chizma bilan solishtirsak, keying holda snaryadning ancha uzoqqa borganini ko’ramiz. Chunki bunda stvol burchagi 20 dan 35 ga, boshlang’ich tezlik esa 20 dan 40 ga oshirilgan.
Endi matematik modelga yangi ob’yekt, ya’ni tankni qo’shamiz. Xayolan biz jang maydonida tankka qarshi snaryadni otish jarayonini modellashtiramiz. Buning uchun tank ob’ektini ekranga joylashtirish kerak. Tankni rasmini olib joylashtirish va uni chizish ham mumkin. Bir necha internet manbalarida tank chiziq va aylanalar orqali chizilgani ko’rsatilgan. Ularni olib qaraganimizda ancha chiroyli tuyuldi. Shuing uchun chizish variantini tanladik.
Tankni chizish uchun biz Canvas xossasining Move to, Move line, ellipse kabi usullaridan foydalanamiz[7]. Tank chizish dastur qismi quyidagicha:
MOVETO(180+x,130+y); LINETO(270+x,130+y); //tank kabinasi yuqori chizig'i
MOVETO(180+x,130+y); LINETO(180+x,160+y); // tank kabinasi chap chizig'i
MOVETO(270+x,130+y); LINETO(270+x,160+y); // tank kabinasi o'ng chizig'i
MOVETO(80+x,143+y); LINETO(180+x,143+y);// TANK PUSHKASI YUQORI CHIZIGI
MOVETO(80+x,147+y); LINETO(180+x,147+y);// TANK PUSHKASI PASTKI CHIZIGI
MOVETO(80+x,143+y); LINETO(80+x,147+y);// tank pushkasi chiziqchasi
MOVETO(140+x,160+y); LINETO(310+x,160+y); // tank oyoqlari yuqori chizig'i
MOVETO(140+x,190+y); LINETO(310+x,190+y); // tank oyoqlari pastki chizig'i
ellipse(155+x,165+y,175+x,185+y);
ellipse(185+x,165+y,205+x,185+y);
ellipse(215+x,165+y,235+x,185+y);
ellipse(245+x,165+y,265+x,185+y);
ellipse(275+x,165+y,295+x,185+y);
Ellipse(trunc(x1+mashtab*x5)-3,trunc(y1-mashtab*y5)-3,trunc(x1+mashtab*x5)+3,trunc(y1-mashtab*y5)+3);
Bu kabi dastur qismi orqali quyidagicha tank rasmi chiziladi:
2.3.8-chizma. Tank rasmini formada chizish.
Endi snaryadni otuvchi qurilma va tank joylashgan jang maydonini modellashtiramiz. Buning uchun ekrandagi snaryad otuvchi qurilma to’g’risida ekranning o’ng chekkasida tankni joylashtiramiz.
2.3.9-chizma. Snaryad otuvchi qurilma va tankni ekranga joylashtirish.
Snaryad otuvchi qurilmadan snaryad chiqishi va harakat trayektoriyasini
2.3.7-chizmada chiziq bilan tasvirlangan edi. Hozirgi holda biz snaryad otilib, tankka zarba berishini modellashtiramiz. Bunda birinchi otishda tankni nisonga olish mushkul. Shuning uchun trayektoriyani harakarini chiziq bilan emas, shar harakati bilan, izini qoldirmasdan modellashtiramiz. Agar ana shu shar harakati davomida tankka tegsa, tankni ekrandan olib tashlanishini modellashtiramiz. Snaryadni tankka tekkanini quyidagi dastur qismi bilan berish mumkin:
if ((abs(trunc(x1+mashtab*x5)-(180+x)))<20) and (abs(trunc(y1-mashtab*y5)-(130+y))<20) then begin // snaryad nisonga tegdi tankni yo'qotamiz
WITH FORM1.CANVAS DO BEGIN
PEN.Color:=CLWHITE; brush.Color:=clwhite;
Snaryad harakati ekranda quyidagicha bo’lishi mumkin:
2.3.10-chizma. Qurilmadan shar shaklidagi snaryadni otilish jarayoni.
Ushbu dastur o’yin tarzida yaratilgan. Agar birinchi otishda snaryad tankka tegmasa, ikkinchi martada snaryad otuvchi qurilma stvolini yuqori ko’tarib, otilish tezligini o’zgartirib qayta otish mumkin. Agar snaryad tankka tegsa, tank ekrandan ochiiladi.
|
| |