Voisiko joku kirjoittaa koodin, jonka "Kimpoaja" on PALLO ja "Kimmoke" on SEINÄ. Kiitos sille, joka tämän voi tehdä!

(Tämänhetkinen projekti on pelihullun äitini pyynnöstä vanhanaikainen TV-Peli):

Code: Select all
[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->
Sama vaikutus, mutta minä tekisin näin:kaneli2000 wrote: Simppelisti näin:Code: Select all
koodia...
Code: Select all
If osutaan_seinään Then y_vauhti = -y_vauhti
If osutaan_mailaan Then x_vauhti = -x_vauhti
Simppelisti näin:Herra Siili wrote:Ensinnäkin suosittelen lukemaan ne foorumin säännöt. Otsikko oli huonoin mahdollinen.
Kimmokkeen saat tehtyä siten, että jos pallo törmää kenttään, mutta Y-suunnan (pystysuunta) liike päinvastaiseksi. Jos pallo törmää mailaan, muuta X-suunta (vaakasuunta) päinvastaiseksi.
Ei ole nyt mahdollisuutta koodia laittaa, mutta tuolla pitäisi onnistua.
Code: Select all
If osutaan_seinään Then y_vauhti = y_vauhti / -1
If osutaan_mailaan Then x_vauhti = x_vauhti / -1
Code: Select all
pdx = 2
pdy = 2
Repeat
petäisyysx = Objectx(pallo) - pdx
pdx = px
py = ObjectY(pallo)
petäisyysy = Objecty(pallo) - pdy
pdy = py
TranslateObject pallo, petäisyysx , petäisyysy px = ObjectX(pallo)
If ObjectY(pallo) < alaseinä Or ObjectY(pallo) > yläseinä And vauhtimuutettu = False Then vauhtimuutettu = True : pdy = - pdy Else vauhtimuutettu = False
Until KeyHit(1)
Ei nuo ole objecteja. Ne on piirrettyjä laatikoita ja ympyröitä.MaGetzUb wrote:Pallon hallinta on loppujenlopuksi helppoa:
En lähtisi edes toteuttamaan tätä projektia objekteilla, ne on köppäisiä, mutta aloittelia ystävällisiä.
Code: Select all
[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->
Kyseinen pätkä oli todennäköisesti nk. pseudokoodia, eli koodia jota ei sellaisenaan voi kääntää mutta ihminen ymmärtää siitä mitä tarkoitetaan. Tuo on myös ihan toimiva pätkä mikäli osutaan_seinään ja osutaan_mailaan ovat muuttujia. (if muuttuja -tyyppisessä tilanteessa ehto toteutuu jos muuttujan arvo ei ole 0)Koodari wrote:Olen käyttänyt CoolBasic :ia noin 2 kuukautta, mutta en ymmärrä esimerkiksi näitä käskyjä: osutaan_seinään ; osutaan_mailaan jne.
Code: Select all
pallo_x = 200
pallo_y = 150
pallo_x_nopeus = 5
pallo_y_nopeus = 5
Repeat
pallo_x = pallo_x + pallo_x_nopeus
pallo_y = pallo_y + pallo_y_nopeus
If pallo_x<10 Or pallo_x>390 Then pallo_x_nopeus = -pallo_x_nopeus
If pallo_y<10 Or pallo_y>290 Then pallo_y_nopeus = -pallo_y_nopeus
Box pallo_x-5, pallo_y-5, 10, 10
DrawScreen
Forever
Code: Select all
pallox = ScreenWidth()/2
palloy = ScreenHeight()/2
palloxplus = 5
palloyplus = 1
Repeat
//jos pallo osuu ylä- tai alaseinään kimmotetaan se
If palloy>ScreenHeight() Or palloy<0
palloyplus = -palloyplus 'kimmotuksen saa aikaan muuttamalla liikkumisen negatiiviseksi
EndIf
//jos pallo osuu vasempaan seinään ja botin mailaan...
If pallox < 5 And palloy > maila2y And palloy < maila2y+100
palloxplus = -palloxplus
ElseIf pallox > ScreenWidth()-5 And palloy > maila1y And palloy < maila1y+100
palloxplus = -palloxplus
EndIf
//jos pallo menee yli rajojen päätetään peli
If pallox<0 Or pallox>ScreenWidth() Then End
//päivitetään koordinaatit
maila1y = MouseY()-50
maila2y = palloy-50
pallox = pallox + palloxplus
palloy = palloy + palloyplus
//piirretään kaikki
Box ScreenWidth()-5,maila1y,5,100
Box 0,maila2y,5,100
Circle pallox-3,palloy-3,6
DrawScreen
Forever
Otin vapauden muokata koodiasi, jotta botti olisi jopa voitettavissa. Merkittävät muutokset: botin vakionopeus ja mahdollisuus lisätä kierrettä palloon:MAVmaggot wrote:Ah, koodaja ehtikin ensin. No anyway, alottelijaystävällisyyteen pyrkivä esimerkki hieman kiusallisella botilla:
Code: Select all
FrameLimit 80
//MUUTOS: palloy ja palloyplus ovat liukulukuja (float)
pallox = ScreenWidth()/2
palloy# = ScreenHeight()/2
palloxplus# = 3
palloyplus = 1
Repeat
//jos pallo osuu ylä- tai alaseinään kimmotetaan se
If palloy>ScreenHeight() Or palloy<0
palloyplus = -palloyplus 'kimmotuksen saa aikaan muuttamalla liikkumisen negatiiviseksi
EndIf
//jos pallo osuu vasempaan seinään ja botin mailaan...
If pallox < 5 And palloy > maila2y And palloy < maila2y+100
palloxplus = -palloxplus
ElseIf pallox > ScreenWidth()-5 And palloy > maila1y And palloy < maila1y+100
palloxplus = -palloxplus
//MUUTOS: pallo saa kierrettä sitä enemmän mitä enemmän mailaa heilauttaa:
palloyplus = palloyplus - Cos( GetAngle( 0, maila1y, 0, vanhaMaila1y ) + 90 )
EndIf
//jos pallo menee yli rajojen päätetään peli
If pallox<0 Or pallox>ScreenWidth() Then End
//päivitetään koordinaatit
vanhaMaila1y = maila1y //<- MUUTOS: otetaan pelaajan mailan vanha koordinaatti talteen
maila1y = MouseY()-50
//MUUTOS: maila2y _yrittää_ seurata palloa, mutta sen nopeus on hitaampi.
maila2y = maila2y + ( ( palloy - 50 ) > maila2y ) - ( ( palloy - 50 ) < maila2y )
pallox = pallox + palloxplus
palloy = palloy + palloyplus
//piirretään kaikki
Box ScreenWidth()-5,maila1y,5,100
Box 0,maila2y,5,100
Circle pallox-3,palloy-3,6
DrawScreen
Forever
Code: Select all
Type PADS
Field X As Float
Field Y As Float
Field Bot
EndType
For i = 0 To 1
uusi.PADS = New(PADS)
uusi\bot = i
uusi\y = (ScreenHeight() - 10) * i
Next i
y# = -10
Repeat
speed# = speed + Float(0.4 / FPS())
x# = x# + Cos(angle) * speed#
y = y + Sin(angle) * speed#
Circle x,y,4
For uusi.PADS = Each PADS
If uusi\bot Then
If uusi\x < x - 25 Then uusi\x = Min(ScreenWidth() - 50,uusi\x + (Min(Abs((x - 25) - uusi\x),1 * speed))) Else uusi\x = Max(0,uusi\x - Min(Abs((x - 25) - uusi\x),(1 * speed)))
If x > uusi\x And x < uusi\x + 50 And y > ScreenHeight() - 12 Then angle = WrapAngle(360 - angle)
Else
uusi\x = Min(Max(0,uusi\x + (RightKey() * speed) - (LeftKey() * speed)),ScreenWidth() - 50)
If x > uusi\x And x < uusi\x + 50 And y < 12 Then angle = WrapAngle(360 - angle)
EndIf
Box uusi\x,uusi\y,50,10
Next uusi
If x < 0 Then angle = WrapAngle(180 - angle)
If x > ScreenWidth() - 4 Then angle = WrapAngle(180 - angle)
If y < 0 Or y > ScreenHeight() Then
x = ScreenWidth() / 2 - 2
y = ScreenHeight() / 2 - 2
speed = 1
If Rand(1) then angle = Rand(45,135) Else angle = Rand(225,315)
For uusi.PADS = Each PADS
uusi\x = ScreenWidth() / 2 - 25
Next uusi
EndIf
DrawScreen
Forever
Code: Select all
Dim pelaajaY(1) As Float, pongball(2) As Float
pelaajaY(0) = ScreenHeight() / 2 - 20
pelaajaY(1) = ScreenHeight() / 2 - 20
pongball(0) = ScreenWidth()/2
pongball(1) = ScreenHeight()/2
pongball(2) = 1
pongball(3) = 1
Repeat
pongball(0) = pongball(0) + pongball(2)
pongball(1) = pongball(1) + pongball(3)
Box pongball(0),pongball(1),10,10
If BoxOverlap(pongball(0),pongball(1),10,10,20,pelaajaY(0),10,40) Or BoxOverlap(pongball(0),pongball(1),10,10,ScreenWidth()-30,pelaajaY(1),10,40) Then pongball(2) = - pongball(2)
pelaajaY(0) = pelaajaY(0) + ( KeyDown(cbkeys) - KeyDown(cbkeyw)) * 2
pelaajaY(1) = pelaajaY(1) + (DownKey() - UpKey()) * 2
If pongball(1) < 0 Or pongball(1) > ScreenHeight() - 10 Then pongball(3) = - pongball(3)
If pongball(0) < 29 Or (pongball(0) + 10) > ScreenWidth() - 29 Then End
Box 20,pelaajaY(0),10,40
Box ScreenWidth()-30,pelaajaY(1),10,40
DrawScreen
Forever