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 kuvabufferiAihe on jo aika vanha, joten et voi enää vastata siihen.