Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
valscion
Moderator
Moderator
Posts: 1588
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Mon Jun 21, 2010 1:45 pm

jaahas wrote:se on kaheksan kulmainen eli siihen tulee 8 lautaa siihen on laitettu vain 3 ja vastustaja on aina tietokone kaikkia lautoja liikutetaan samaan aikaan ne seuraa hiirtä
Jaajaa. Mutta vaikka lauta onkin kahdeksankulmainen, niin eikös siellä kuitenkin ole kaksi laitaa joista pallo vain kimpoaa? Ainakin näin peruspongissa menee, jossa on vain kaksi lautaa ja myös kaksi sivulaitaa.

Tuo axun tapa on hyvä. Teet vain tuon saman myös muille laidoille, ja koodaat niille maksimi- ja minimiarvot niin olet jo lähes valmis.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

jaahas
Advanced Member
Posts: 307
Joined: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas » Mon Jun 21, 2010 1:47 pm

axu wrote:
jaahas wrote:olen tekemässä ping pong peliä mutta tässä pelissä on 4 lautaa kummallakin pelaajalla ja en osaa tehä tuota viistoon liikkumista voisko joku auttaa laitan pätkän koodista miten olen näitten muitten liikkumisen toteuttanu

Code: Select all

...
Jos nyt oikein ymmärsin, tarkoitit ilmeisesti tällaista:

Code: Select all

//Nämä muuttujat tarvitaan!!
Global _PTL_X#, _PTL_Y#


DrawToWorld ON
Random:
l1x=Rand(-200,200)
l1y=Rand(-150,150)
l2x=Rand(-200,200)
l2y=Rand(-150,150)

Repeat
    px=MouseWX()
    py=MouseWY()
    PointToLine(px,py,l1x,l1y,l2x,l2y)
    px=_PTL_X
    py=_PTL_Y
    Color 128, 128, 128
    Line px,py,MouseWX(),MouseWY()
    
    Color 255, 255, 255
    Line l1x,l1y,l2x,l2y
    Circle px-5,py+5,10
    
    Text 1,1,FPS()
    DrawScreen
    If KeyHit(cbKeySpace) Then Goto Random
Forever

//Funktio siirtää pisteen suoralle.
//px, py = Lähtöpisteen koordinaatit(esim. hiiri).
//l1x, l1y, l2x, l2y = viivan koordinaatit.
//Funktio sijoittaa uudet koordinaatit.
Function PointToLine (px#, py#, l1x#, l1y#, l2x#, l2y#)
    LineA = -GetAngle(l1x, l1y, l2x, l2y) + 90
    
    lastdist# = PointToLineDist(px, py, l1x, l1y, l2x, l2y)
    py = py + Sin(LineA) * lastdist#
    px = px + Cos(LineA) * lastdist#

    lastdist#=PointToLineDist(px, py, l1x, l1y, l2x, l2y)
    py = py - Sin(LineA) * lastdist#
    px = px - Cos(LineA) * lastdist#
    
    _PTL_X = px
    _PTL_Y = pY
End Function

//px, py = Lähtöpisteen koordinaatit(esim. hiiri).
//l1x, l1y, l2x, l2y = viivan koordinaatit.
//Funktio palauttaa pisteen etäisyyden suorasta
Function PointToLineDist (px#, py#, l1x#, l1y#, l2x#, l2y#)
    //Suoran yhtälö
    a# =  (l2y - l1y) / (l2x - l1x)
    b# = -1
    c# = -(l2y - l1y) / (l2x - l1x) * l1x + l1y
   
    //Etäisyys
    d# = Abs(a * px + b * py + c) / Sqrt(a * a + b * b)
   
    Return d
EndFunction
Tuohon vain neljä lautaa tuon yhden pallon sijaan? Tuossa siis se olennainen osa on tuo PointToLine funktio, ja se sitten tarvitsee nuo globaalit muuttujat sekä tuon toisen funktion.
En muista, kuka on tehnyt tuon PointToLineDist-funktion, tais löytyä cbkk:sta, mutta PointToLine on ihan omaa käsialaa ;)
joo nyt on hyvä poistin vain viivat niin toimii kiitos

jaahas
Advanced Member
Posts: 307
Joined: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas » Mon Jun 21, 2010 2:59 pm

no mitenkäs teen pallon pomppimisen mul oli kyl idea siihen mutta se on liian moni mutkanen
EDIT:

anteeksi tupla posti


sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 11:32 pm

Re: Tyhmät kysymykset (I/2010)

Post by sankja » Tue Jun 22, 2010 7:27 am

Tämä sanakirja ohjelma antaa suomennoksen ,kun kun kysyy englanninkielistä sanaa ,joka on datalistassa. Mutta sitten se tökkää ,kun painaa k nappia ,että haluais jatkaa kyselyä , ruutu vain pimenee. Mikä piru tosson? :o Kiitokset mahd.vast.

Code: Select all

Dim merkkijonot(4) As String,e As String,key As integer 

Restore datalista

For i=0 To 4
    merkkijonot(i)=Read()
Next i

Paluu:
    Repeat
    e=Input("e:")
    DrawScreen 
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
    
    'käydään merkkijonot läpi,löytyykö ehdotettua sanaa
    For j=0 To 4
        If e=GetWord(merkkijonot(j),1,"=")
            Exit 
        EndIf 
            If j=4
                Print "Hakemaasi sanaa ei löytynyt..."
                Goto Lopetus
            EndIf 
    Next j
    
    Print
    Print GetWord(merkkijonot(j),2,"=")
    
    Wait 2000
    ClearKeys:ClearMouse
    
    Lopetus:
    Print
    Print "Jatkatko? (k/e)"
    key=WaitKey()
    If key=37 'siis k näppäin
        ClearKeys
        Goto Paluu
    EndIf 
    
End 

datalista:
Data "skyscraper=pilvenpiirtäjä" 
Data "nuclear reactor=ydinreaktori"
Data "surgeon=kirurgi"
Data "scientist=tiedemies"
Data "molecule=molekyyli"

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jani » Tue Jun 22, 2010 8:17 am

sankja wrote:Tämä sanakirja ohjelma antaa suomennoksen ,kun kun kysyy englanninkielistä sanaa ,joka on datalistassa. Mutta sitten se tökkää ,kun painaa k nappia ,että haluais jatkaa kyselyä , ruutu vain pimenee. Mikä piru tosson? :o Kiitokset mahd.vast.

Code: Select all

Dim merkkijonot(4) As String,e As String,key As integer 

Restore datalista

For i=0 To 4
    merkkijonot(i)=Read()
Next i

Paluu:
    Repeat
    e=Input("e:")
    DrawScreen 
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
    
    'käydään merkkijonot läpi,löytyykö ehdotettua sanaa
    For j=0 To 4
        If e=GetWord(merkkijonot(j),1,"=")
            Exit 
        EndIf 
            If j=4
                Print "Hakemaasi sanaa ei löytynyt..."
                Goto Lopetus
            EndIf 
    Next j
    
    Print
    Print GetWord(merkkijonot(j),2,"=")
    
    Wait 2000
    ClearKeys:ClearMouse
    
    Lopetus:
    Print
    Print "Jatkatko? (k/e)"
    key=WaitKey()
    If key=37 'siis k näppäin
        ClearKeys
        Goto Paluu
    EndIf 
    
End 

datalista:
Data "skyscraper=pilvenpiirtäjä" 
Data "nuclear reactor=ydinreaktori"
Data "surgeon=kirurgi"
Data "scientist=tiedemies"
Data "molecule=molekyyli"
Sanoisin että tämä laskutoimitus on fakta: Print + DrawScreen == blowup
Toisinsanoen, käytä tässä tapauksessa komentoa AddText ja piirrä DrawScreenillä, Printin sijaan.
Vielä se mahdollisuus, että teet oman kirjoitusfunkkarin...
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
valscion
Moderator
Moderator
Posts: 1588
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Tue Jun 22, 2010 2:31 pm

sankja wrote:Tämä sanakirja ohjelma antaa suomennoksen ,kun kun kysyy englanninkielistä sanaa ,joka on datalistassa. Mutta sitten se tökkää ,kun painaa k nappia ,että haluais jatkaa kyselyä , ruutu vain pimenee. Mikä piru tosson? :o Kiitokset mahd.vast.

Code: Select all

datalista:
Data "skyscraper=pilvenpiirtäjä" 
Data "nuclear reactor=ydinreaktori"
Data "surgeon=kirurgi"
Data "scientist=tiedemies"
Data "molecule=molekyyli"
CB:n DATA-listat kusee. Älä käytä niitä.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 11:32 pm

Re: Tyhmät kysymykset (I/2010)

Post by sankja » Tue Jun 22, 2010 6:47 pm

No nyt tämä toimiikin ihan hyvin , vaihdoin tosiaan addtext:iin ja print:it pois kokonanaa, kuten Jani neuvoi...:P

Code: Select all


SCREEN 400,500 
Dim merkkijonot(4) As String,e As String,key As integer 

Restore datalista

For i=0 To 4
    merkkijonot(i)=Read()
Next i

    Paluu:
    Repeat
    e=Input("e:")
    DrawScreen 
    Until KeyHit(cbkeyreturn)
    CloseInput:ClearKeys
    
    'käydään merkkijonot läpi,löytyykö ehdotettua sanaa
    For j=0 To 4
        If e=GetWord(merkkijonot(j),1,"=")
            Exit 
        EndIf 
            If j=4
                AddText ""
                addtext "Hakemaasi sanaa ei löytynyt..."
                DrawScreen 
                Goto Lopetus
            EndIf 
    Next j
    
    AddText ""
    AddText ""+GetWord(merkkijonot(j),2,"=")
    DrawScreen 
    Wait 2000
    'Ohjelma ei reagoi syötteisiin hiireltä tai näppäimistöltä.
    'Kaikki syötteet menevät niille varattuihin puskureihin, 
    'ja ne käsitellään, kun tauko päättyy. 
    'Tästä syystä joskus on hyvä käyttää ClearKeys- 
    'ja ClearMouse-komentoja heti Wait:n jälkeen.
    ClearKeys:ClearMouse
    
    Lopetus:
    AddText ""
    AddText "Jatkatko? (k/e)"
    DrawScreen 
    key=WaitKey()
    If key=37 'siis k näppäin
        ClearKeys
        Goto Paluu
    EndIf 
    
End 

datalista:
Data "skyscraper=pilvenpiirtäjä" 
Data "nuclear reactor=ydinreaktori"
Data "surgeon=kirurgi"
Data "scientist=tiedemies"
Data "molecule=molekyyli" 

User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2010)

Post by skinkken » Wed Jun 23, 2010 2:07 pm

Tuosta pitäisi varmaan ihan katsomalla nähdä, mikä tuossa on vikana (Kannattaa kuitenki kopioida editoriin niin tekstit värjäytyvät), eli cloneobject ei toimi. Heti kloonauksen jälkeen käytän objektia ja peli tilttaa. Tuossa siis käydään läpi x ja y ja luetaan tiedostosta (jossa on nollia ja ykkösiä) 0 tai 1. Ei hätää, jos se palauttaa nollan, mitään ei tehdä. jos palautetaan 1, palikka1 -objektista tehdään klooni, mutta jostain syystä kloonia ei tule. Kokeilin setwindow -kikalla ja virhe tuli positionobjectin kohalla. poistin sen ja peli mavitti translateobjectin kohdalla.

Ongelma on tuolla for x ja for y jutun sisällä mutta laitoin koko koodin ettei tule kysymyksiä että "onhan objekti varmasti ladattu?" tai "oikeat nimet muuttujilla?"

Tämä kirjoitus saattaa näyttää pitkältä, mutta se johtuu siitä että kuvasin ongelman kunnolla. :)

Code: Select all

SCREEN 800,600,32,1
FrameLimit 40

Type palikat
    Field obj
    Field tyyppi
EndType


tausta1=LoadImage("files/images/tausta1.png")





''''''''
palikka1=LoadAnimObject("files/images/palikka1.png",20,20,0,6):ShowObject palikka1,OFF


maa=OpenToEdit("files/levels/maa.txt")
    For x=20 To 780 Step 20
        For y=20 To 380 Step 20
        
            typ=ReadInt(maa)
            
            If typ<>0 Then
                p.palikat=New(palikat)
                p\tyyppi=typ
                If p\tyyppi=1 Then p\obj=CloneObject(palikka1)'!!!!!!!!!!!!!!
                PositionObject p\obj,x,-y
                TranslateObject p\obj,-400,-300
            EndIf
            
        Next y
    Next x
CloseFile maa
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jonez » Wed Jun 23, 2010 2:35 pm

Veikkaisin että "typ" saa jonkun muun arvon kuin 1 tai 0, jolloin if-lause toteutuu, mutta objektia ei kloonata, jolloin objektikomennot mavittavat.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2010)

Post by skinkken » Wed Jun 23, 2010 2:48 pm

Jonez wrote:Veikkaisin että "typ" saa jonkun muun arvon kuin 1 tai 0, jolloin if-lause toteutuu, mutta objektia ei kloonata, jolloin objektikomennot mavittavat.
Oho, typ = 808464433. :D Miten saisi toteutettua sellaisen kartan tekstitiedostosta? siis jotenkin näin:

Code: Select all

1111110000
0000100000
0000100100
0000100000
Eli nyt siis tarvin neuvoa miten nuo numerot luettaisiin tiedostosta järjestyksessä, ja niin että 1 on 1 eikä 808464433?
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013

User avatar
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 9:06 pm
Location: Viitasaari, Keski-Suomi
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Herra Siili » Wed Jun 23, 2010 3:05 pm

Rivi kerrallaan tiedostosta ReadLinellä ja rivistä merkki kerrallaan Mid:llä.
a.k.a. Hedge

User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2010)

Post by skinkken » Wed Jun 23, 2010 3:19 pm

Herra Siili wrote:Rivi kerrallaan tiedostosta ReadLinellä ja rivistä merkki kerrallaan Mid:llä.
Mutta silloin niistä tulee merkkijonoja. pystyykö merkkijonon jossa on numeroita sitten muuttamaan jotenkin kokonaisluvuksi? Vai onko jokin muu tapa kuin tuo Herra Siilin?
EDIT:

No voisihan siihen tietysti tehdä sellaisen oman funktion että If muuttuja$="1" then return 1 , If muuttuja$="2" then return 2 jne. Mutta olisiko jokin vähemmän purkka-tapa (sori :twisted: ) ?
Edit2: edittaus tuli seuraavan herra siilin viestin jälkeen.

Last edited by skinkken on Wed Jun 23, 2010 3:27 pm, edited 2 times in total.
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013

User avatar
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 9:06 pm
Location: Viitasaari, Keski-Suomi
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Herra Siili » Wed Jun 23, 2010 3:24 pm

Tämmöisen esimerkin tekaisin. Tällä voi lukea sekä merkkijonoja että lukuja.

Code: Select all

//Avataan kartta
f=OpenToRead("map.txt")

//Luetaan kartan leveys ja korkeus
x=ReadLine(f)
y=ReadLine(f)

//Taulukot alkavat luvusta nolla
x-1 : y-1

//Luodaan taulukko kartalle
//Jos kartta koostuu vain numeroista, tyyppimäärittelyn (As String) voi jättää pois.
Dim map(x,y) As String

//Muuttuja kertoo luettavan rivin numeron
rivi=0
While EOF(f)=0
	//Luetaan
	l$=ReadLine(f)
	//Käydään luettu rivi läpi
	For i=0 To x
		//Sijoitetaan rivin jokainen merkki taulukkoon
		map(i,rivi)=Mid(l$,i+1,1)
	Next i
	//Lisätään rivilaskuria
	rivi+1
Wend

//Tulostus (Tähän tulee kartan käsittely)
For x2=0 To x
	//Käydään taulukko läpi
	For y2=0 To y
		//Tulostetaan merkit
		Text x2*10,y2*10,map(x2,y2)
	Next y2
Next x2
DrawScreen
WaitKey

map.txt:

Code: Select all

6
6
111111
100001
100001
100001
100001
111111
EDIT:

Lisäsin kommentit.

Last edited by Herra Siili on Wed Jun 23, 2010 3:29 pm, edited 1 time in total.
a.k.a. Hedge

Henkru
Advanced Member
Posts: 359
Joined: Sun Aug 26, 2007 2:46 pm

Re: Tyhmät kysymykset (I/2010)

Post by Henkru » Wed Jun 23, 2010 3:28 pm

Code: Select all

numero = int("5")

User avatar
skinkken
Advanced Member
Posts: 453
Joined: Sat Sep 01, 2007 4:00 pm
Location: Helsinki

Re: Tyhmät kysymykset (I/2010)

Post by skinkken » Wed Jun 23, 2010 3:56 pm

Ok, kiitos kaikille! :)
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jani » Wed Jun 23, 2010 6:33 pm

Sanoisin viel, et ton sais toteutettua ReadByte-komennolla ;)
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
valscion
Moderator
Moderator
Posts: 1588
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Wed Jun 23, 2010 6:43 pm

Jani wrote:Sanoisin viel, et ton sais toteutettua ReadByte-komennolla ;)
Sillon pitäs ottaa mukaan tarkistus rivinvaihdon merkeistä. Kyllä tuo on yksinkertaisempaa tuolla ReadLine-Mid yhdistelmällä, kun ei mitään huikeita optimointeja tarvita kuitenkaan.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Tyhmät kysymykset (I/2010)

Post by Jani » Wed Jun 23, 2010 7:15 pm

VesQ wrote:
Jani wrote:Sanoisin viel, et ton sais toteutettua ReadByte-komennolla ;)
Sillon pitäs ottaa mukaan tarkistus rivinvaihdon merkeistä. Kyllä tuo on yksinkertaisempaa tuolla ReadLine-Mid yhdistelmällä, kun ei mitään huikeita optimointeja tarvita kuitenkaan.
Ainii, hemmetti. Tottunu ite koneellisesti generoimaan nuo :P . Noh, ei sitä voi kaikkea muistaa.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Tyhmät kysymykset (I/2010)

Post by Ilkka » Fri Jun 25, 2010 3:03 pm

Koitin kokeilla esimerkin 19(painovoima) avulla pystynkö ottamaan näytön yläreunassa olevaan laatikkoon värin tilemapista, ukon kohdalta. Miksi laatikko pysyy melkein kokoajan mustana , vaikka taustalla ei ole lähes yhtään mustaa?
Koodi:

Code: Select all

'Esimerkki 19 : Painovoima (Tasohyppelyssä)
'================================================

'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
'Aja tämä ohjelma painamalla F5.
'Lopeta ohjelma painamalla ESC.

'OHJAUS:
' - nuolilla liikkuu
' - Z = hyppy

'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

Const PAINOVOIMA = -0.1 'painoviman voimakkuus
                        'pienempi->suurempi pv.
                        'positiiviset arvot->
                        'painovoima ylöspäin?!
yPlus#=0                'Tämä hallitsee hyppyä


'Asetetaan ruutu hieman zoomattuun tilaan
SCREEN 320,240,0,cbsizable 
SetWindow "Painovoimaesimerkki",3 'suurenna ruudulle

'JOS PELI TÖKKII TAI PÄTKII TAI NYKII, MUUTA:
' 1) cbSizable -> cbFullScreen
' 2) poista rivi 23

FrameLimit 40 'rajoita nopeutta
'-------------------------------------------------
'lataa kartta, siirrä sitä ylöspäin ja animoi se.
kenttä=LoadMap("Media\testmap.til","Media\tileset.bmp")
PositionObject kenttä,0,50
PlayObject kenttä,0,0,0.5

'lataa animaatiosarja oikealle, maskaa ja piilota se
oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,30,51 'tämä pitää asettaa kaikkiin

'sama vasemmalle
vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,30,51 'tämä pitää asettaa kaikkiin

'Tämä on varsinainen pelihahmo, joka piirretään ja
'jota hallitaan. Sille asetetaan törmäys->kartta
'Tätä EI PIILOTETA.
pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,30,51 'tämä pitää asettaa kaikkiin
'-------------------------------------------------
'Pääsilmukka
Repeat

    vauhti=0 'oletuksena ei liikettä

    If RightKey() Then 
        'juokse oikealle
        PaintObject pelihahmo,oikea 'vaihda kuvaa...
        If maassa Then PlayObject pelihahmo,2,11,0.25
        vauhti=2 'vauhtia oikealle
    ElseIf LeftKey() Then
        'juokse vasemmalle
        PaintObject pelihahmo,vasen 'vaihda kuvaa...
        If maassa Then PlayObject pelihahmo,2,11,0.25
        vauhti=-2 'vauhtia vasemmalle
    Else 
        'pysäytä animaatio, jos ei liikuta
        PlayObject pelihahmo,0
    EndIf
    

    
    'liikuta pelihahmoa
    TranslateObject pelihahmo,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima    
    
    UpdateGame 'päivitä törmäys
    CloneCameraPosition pelihahmo 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(pelihahmo)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(pelihahmo,i)=kenttä
            'lattia
            If CollisionAngle(pelihahmo,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(pelihahmo,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
       
    'jos ollaan ilmassa, näytä toisenlainen kuva
    If törmäykset=0 Then PlayObject pelihahmo,12,0
    
    'HYPPY (vain jos jalat maassa)
    If KeyHit(cbKeyZ) And maassa Then 
        yPlus#=4.5 'voimaa ylös päin
    EndIf

    DrawGame 

    PickColor ObjectX(pelihahmo), ObjectY(pelihahmo)
    Box 10,10,10,10,1

    DrawScreen 'piirrä näyttö

Until EscapeKey()

'Analyysi:
'------------------------------------------------

'Tämä tasoloikkarunko on mahdollista kirjoittaa
'alle 80 rivin, jos ylimääräiset kommentit pois-
'tetaan. Tästäkin rivimäärästä 1/5 on kuvien ja
'kentän latausta. Samalla kenttä animoidaan,
'ja hahmo voi liikkua ja hyppiä animoituna. Ja
'kaiken päälle lätkäistään vielä painovoima ja 
'törmäyksentunnistus. Pääohjelma on vain noin
'50 riviä pitkä. CoolBasic näyttää kyntensä!

'Rivi 14 määrittelee VAKION. Se on kuin muuttuja,
'mutta sen arvoa ei voi jälkikäteen muuttaa.
'Eli se on kuin mikä tahansa luku, mutta se
'esitetään NIMELLÄ. Painovoima sopii vakioksi,
'koska se ei muutu. Voit säätää pinovoiman
'voimakkuutta pienentämällä vakion arvo entises-
'tään.

'Rivillä 22 ja 23 asetetaan ensin ikkuna zoomattuun
'tilaan (cbSizable). Ikkuna esitetään aluksi
'alkuperäisessä koossaan ruudulla, mutta sen
'sisäiset ulottuvuudet on zoomattu haluttuihin
'mittoihin. Rivi 23 suurentaa ikkunan koko
'näytölle.

'Rivit 31-53 pitäisi olla tuttua kauraa jo tähän
'mennessä. Pointti on kuitenkin se, että kaikki
'animaatiosarjat (tässä vasen ja oikea) ladataan
'valmiiksi, mutta piilotetuna. Näitä tarvitaan
'vain PaintObjectia varten. Lopuksi luodaan
'varsinainen pelihahmo, joka kloonataan oikea-
'sarjasta, joten oletussuunta - mihin pelaaja 
'katsoo - on oikealle.

'Ohjauksesta sen verran, että joka kerran kun
'nuolia painetaan, käytetään PaintObjectia
'muuttamaan pelihahmon katselusuuntaa. Hahmo
'animoidaan (PlayObject) vain jos jalat on
'maassa (tieto edellisestä silmukkakerrasta).
'Jos mitään ei paineta, soitetaan joutilas-
'animaatio (frame 0).

'Sitten liikutetaan pelihahmoa - myös pysty-
'suunnassa painovoiman vaikutuksesta. 

'Painovoimaa hallitaan itse asiassa muuttujalla
'"yPlus#", joka määrää paljonko hahmo liikkuu
'pystysuunnassa. Siksi tätä muuttujaa kasvatetaan
'painovoimalla, joten y-nopeus kasvaa. Y-nopeus
'nollataan, jos jalat on maassa (käsitellään kohta).
'Myös Hypyssä tätä arvoa muutetaan.

'HUOM! UpdateGamea kutsutaan tässä vaiheessa,
'ENNEN törmäyksen käsittelyä.

'Törmäys tarkistetaan seuraavasti:
' - lasketaan montako törmäystä tapahtui
' - käydään ne kaikki läpi
' - jos törmättiin kattoon, nollataan yPlus,
'   mikä saa hahmon tippumaan alaspäin
' - jos törmättiin lattiaan, nollataan taas
'   yPlus, ja sen lisäksi JALAT ON MAASSA.
' - kaikissa muissa tapauksissa jalat on ILMASSA,
'   koska missään vaiheessa ei muuteta, että
'   alat olisivat maassa.

'Tietoa JALAT MAASSA tarvitaan hypyssä. Ensinäkin
'hyppy voi tapahtua vain maasta käsin, muuten
'palihahmo pystyisi lentämään, koska hyppy
'tapahtuisi myös ilmassa. Hypyn tapahtuessa
'annetaan hahmon Y-nopeudeksi positiivinen
'arvo, eli hypyn voimakkuus. Muuta tätä säätääk-
'sesi hypyn voimakkuutta. Pienempi arvo -> matalampi
'hyppy.


'Leikkimään:
'------------------------------------------------

'1) Muuta painovoimaa
Kiitän auttajia etukäteen. :lol:
Image

sankja
Newcomer
Posts: 30
Joined: Thu Jan 29, 2009 11:32 pm

Re: Tyhmät kysymykset (I/2010)

Post by sankja » Fri Jun 25, 2010 5:30 pm

Mitenkähän tuon värin sais pelaamaan korteille , kiitokset etuajoissa neuvosta. :o

Code: Select all

'Tehtävä a9:
'Tee muistipeli. Käännetyt kortit on järjestetty 
'ruudulle 4*4 muodostelmaan, eli yhteensä 16 korttia. 
'Kortit valitaan hiirellä. Grafiikkaa kortteihin 
'ei tarvitse tehdä. Riittää, että jokainen pari on erivärinen. 
'Peliä pelataan hiirellä. Lopuksi peli kertoo kuinka monta 
'kääntöä pelaaja joutui tekemään. 
    'jos parin löytää niin, pari jätetään auki ,näin peli
    'helpottuu loppua kohden
    'jos paria ei löydy , niin eriparit käännetään kiinni

Type KORTIT
    Field muoto 
    Field vari As String 
EndType 

SCREEN 600,600

Dim varit(8) As String 

Restore Varivakiot
For i=1 To 8
    varit(i)=Read()
Next i

'luodaan kortti kuvana ja...
img_kortti=MakeImage(3*32,6*32)
    DrawToImage img_kortti
        Box 0,0,3*32,6*32
    DrawToScreen 

'tehdään siitä objekti
obj_kortti=MakeObject()
PaintObject obj_kortti,-img_kortti
ShowObject obj_kortti,OFF

'luodaan kortti-kloonit ,2 kpl samaa väriä , eli 8 paria
For i=1 To 2
    For j=1 To 8
        k.KORTIT=New(KORTIT)
        k\muoto=CloneObject(obj_kortti)
        k\vari=varit(j)
    Next j
Next i

'asetellaan kortit nätisti 4x4 muodostelmaan
i=0:rivi=0
For k.KORTIT=Each KORTIT
    If i<4
        Color k\vari
        ScreenPositionObject k\muoto,100+i*32,100+rivi*32
        i+1
    Else
        i=0:rivi+1
    EndIf 
Next k

DrawScreen
WaitKey 

Varivakiot:
Data "cbred","cborange","cbyellow","cbgreen"
Data "cbblue","cbpurple","cblightred","cbwhite"

Locked