Yritän tehdä yhden kolon pajatsopeliä Free Basicillä: http://petke.info/jasso.exe (Windows) Kokeile peliä, niin tiedät mistä puhun. Tarvitset tämän kuvan euron kolikosta samaan kansioon, missä .exen ajat: https://petke.info/euro.bmp
Ongelmani on: kuinka kannattaisi tutkia osuuko kolikko johonkin viivaan jostain suunnasta ja ponnahtaa takaisin? Suuntia on kolme: vasemmalta, oikealta tai ylhäältä. Ruudun yläreunaa en tutki, sillä sinne ei kolikko ponnahtele.
Viivoja on yksitoista. Ne ovat taulukossa:
(tuolla https://petke.info/jassotausta.png vielä kuva, missä viivat numeroitu keltasella ja valkoinen numero kertoo mistä suunnasta törmäämistä viivaan tutkitaan: 1, oikealta, 2, vasemmalta ja 3, ylhäältä)
Dim As Integer viivat(1 To 11,1 To 5) = {{0,0,0,1024,1},{0,1024,256,1024,3},{256,512,256,1024,2},...jne Alkiot ovat viivan alkupisteen x- ja y-koordinaatta sekä loppupisteen x- ja y-koordinaatta. Viides alkion jäsen, jonka arvot ovat joko 1, 2 tai 3 kertoo tutkitaanko viivaan osumista oikealta päin, vasemmalta päin vai lähestyykö euron kolikko viivaa ylhäältä päin.
Ruudun vasen reuna ja oikea reuna toimivat - mikseivät sitten muut viivat? Vai onkohan virhe pitkällä rivillä 20, millä syötän noita viivojen alku- ja loppupisteiden koordinaatteja ja tietoa, mistä suunnasta tutkitaan törmäsytä?
Onko tapani tutkia koko hommaa ihan retuperällä, kun en ole saanut hommaa toimimaan?
Koodi saattaa olla sotkuista, mutta kysyä saa. Euron kolikon resoluutio on 83x83, siksi luku 83 kummittelee koodissa.
EDIT: Otin koodista ehdon pois, että otetaan uusi kolikko, jos menee kuvaruudun ulkopuolelle - nyt täytyy hieman odottaa uudessa ohjelmassa, että askelia ollaan otettu 400 ennen kuin uusi kolikko tulee oikeaan yläkulmaan.
Print "Paina hiiren vasenta näppäintä. Mitä kauemmin painat sitä nopeammin kolikko lähtee. Odota hetki aina seuraavaa kolikkoa" Print "Lopeta ohjelma painamalla hiiren oikeaa näppäintä" Screen 21,16 Dim As Integer maxx=1280, maxy=1024 Type kolikko_koko As Integer leveys,korkeus End Type Dim kolikko As String ="euro.bmp" Dim As Any Ptr kuvabufferi, kuvabufferi2 Sub load(Byref bmp As String,Byref pixelit As Any Ptr) 'ladataan kolikko kuvaruutumuistiin Bload bmp Dim temp As kolikko_koko=(83,83) pixelit = Imagecreate(temp.leveys + 1, temp.korkeus + 1) Get (0, 0)-(temp.leveys, temp.korkeus), pixelit End Sub 'XXXXXXXXXXXXXXXXXXXXXXX load kolikko,kuvabufferi 'asetetaan kolikko kuvaan Dim As Integer nopeus,mx,my,mb,ind, silmukka '1 oikealta 2 ylhäältä 3 vasemmalta 4 päältä 5 oikealta 6 päältä 7 vasemmalta 8 päältä 9 vasemmalta 10 päältä 11 vasemmalta Dim As Integer viivat(1 To 11,1 To 5) = {{0,0,0,1024,1},{0,1024,256,1024,3},{256,512,256,1024,2},{256,512,512,512,3},{512,512,512,819.2,1},{512,819.2,768,819.2,3},{768,512,768,819.2,2},{768,512,1024,512,3},{1024,512,1024,1024,1},{1024,1024,1280,1024,3},{1280,0,1280,1024,2}} Dim As Double x 'kolikon x alkukoordinaatta Dim As Double y0 'kolikon y alkukoordinaatti. Oikeassa yläkulmassa Dim As Double vx 'kolikon vaakasuora nopeus Dim As Double v0 'vauhti alussa Dim As Double t0 'aika alussa Dim As Double g 'kiihtyvyys Dim As Double Dt = 1/100 'kolikon asemaa tutkitaan sadaosan välein Dim As Double y = y0 Dim As Double vy = v0 Dim As Double t = t0 Getmouse(mx,my,,mb) Do Until (mb=2) 'asetetaan alkuarvoja x=maxx-83 y0 = 48 v0 = 0 t0 = 0 g = 4000 Dt = 1/100 y = y0 vy = v0 t = t0 Cls Put (x, y), kuvabufferi, pset For ind = 1 To 11 Step 1 'Piirretaan jasson viivat Line (viivat(ind,1),viivat(ind,2))-(viivat(ind,3),viivat(ind,4)),rgb(255,0,0) Next ind Getmouse(mx,my,,mb) While (mb<>1) 'odotetaan, että pelaaja painaa hiiren vasenta näppäintä tai lopettaa ja painaa hiiren oikeaa nappulaa Getmouse(mx,my,,mb) If mb=2 Then exit While End If wend nopeus=0 while (mb=1) 'pelaaja painaa hiiren vasenta näppäintä Getmouse(mx,my,,mb) nopeus=nopeus+1 wend vx=-nopeus/10000 silmukka=1 Do until (silmukka > 400) cls Screenlock 'lukitaan screeni siksiajaksi kun kirjoitetaan grafiikka puskuriin For ind = 1 To 11 Step 1 'Piirretaan jasson viivat Line (viivat(ind,1),viivat(ind,2))-(viivat(ind,3),viivat(ind,4)),rgb(255,0,0) Next ind Put (x,y), kuvabufferi, pset Screenunlock 'otetaan screeni lukituksesta pois vy = vy - g*Dt y = y-vy*Dt-g*Dt*Dt/2 x=x+vx*Dt sleep 2,1 For ind=1 To 11 Step 1 ' osuuko kolikko johonkin yhdestätoista viivoista? If viivat(ind,5)=1 Then' tutkitaan osumista oikealta päin If (x<viivat(ind,1)) and (vx<=0) and ((y >= viivat(ind,2)) and ((y+83) <= viivat(ind,4)))Then 'on osunut viivaan vx = -0.994*vx End If End If If viivat(ind,5)=2 Then 'onko osunut vasemmalta päin viivaan? If ((x+83)>viivat(ind,1)) and (vx>=0) and ((y>= viivat(ind,2)) and ((y+83) <= viivat(ind,4))) Then 'on osunut viivaan vx = -0.994*vx End If End If If viivat(ind,5)=3 Then 'onko osunut ylhäältä päin? If (y+83)>=viivat(ind,2) And (vy>0) and (x>=viivat(ind,1)) And ((x+83)<=viivat(ind,3)) Then 'on osunut viivaan vy = -0.994*vy End If End If Next ind t = t + Dt Getmouse(mx,my,,mb) 'Peli lopetetaan painamalla hiiren oikeaa näppäintä If mb=2 Then exit Do End If silmukka=silmukka+1 Loop Loop Screenlock Cls Imagedestroy kuvabufferi
Aihe on jo aika vanha, joten et voi enää vastata siihen.