Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

Miten tekisin kahden pallon "yhdistymisen"?

Elikkä kaksi palloa yhdistyvät jotenkkin jännästi.
Mielellään Typeä saisi käyttää niin on helppo hallita.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Tuomasd
Newcomer
Posts: 14
Joined: Fri Dec 12, 2008 4:46 pm

Re: Tyhmät kysymykset

Post by Tuomasd »

Jani wrote:Miten tekisin kahden pallon "yhdistymisen"?

Elikkä kaksi palloa yhdistyvät jotenkkin jännästi.
Mielellään Typeä saisi käyttää niin on helppo hallita.
ÖÖ
moxd
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

Voiko CB:llä muuttaa kirjaimet bitti-sarjoiksi?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
E.T.
Newcomer
Posts: 42
Joined: Thu Jul 03, 2008 9:33 am

Re: Tyhmät kysymykset

Post by E.T. »

En tiedä millaista yhdistymistä tarkoitit, mutta tässä olisi tällainen

Code: Select all

SCREEN 640,480
Type pallot
    Field x#
    Field y#
    Field xx#
    Field yy#
    Field koko
    Field koko2
EndType

For a=1 To 10
    p.pallot=New(pallot)
    p\x#=Rand(0,ScreenWidth())
    p\y#=Rand(0,ScreenHeight())
    p\xx#=Rnd(0.2,2)
    p\yy#=Rnd(0.2,2)
    p\koko2=Rand(15,40)
Next a

Repeat
    For p.pallot=Each pallot
        If p\x#<0 Then p\xx#=Abs(p\xx#)
        If p\y#<0 Then p\yy#=Abs(p\yy#)
        If p\x#>ScreenWidth() Then p\xx#=-Abs(p\xx#)
        If p\y#>ScreenHeight() Then p\yy#=-Abs(p\yy#)
        p\x#=p\x#+p\xx#
        p\y#=p\y#+p\yy#
    Next p
    Color cbblue
    For p.pallot=Each pallot
        p\koko=p\koko2
        For pp.pallot=Each pallot
            p\koko=p\koko+Max(0,(p\koko2+pp\koko2)/2-Distance(p\x#,p\y#,pp\x#,pp\y#)/3)
        Next pp
        Circle p\x#-p\koko,p\y#-p\koko,p\koko*2
    Next p
    Color cbblack
    For p.pallot=Each pallot
        Circle p\x#-p\koko+1,p\y#-p\koko+1,p\koko*2-2
    Next p
    DrawScreen
Forever
Quidquid latine dictum sit, altum videtur.
Voitot: Viikkokisa XVII
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

kirjoittaako seuraava binäärit oikein???

Code: Select all

Print LenTxt(Txt0101("Olen"),5,50)+" "+LenTxt(Txt0101("Jani"),0,50)
Print LenTxt("Olen Jani",0)

WaitKey

Function Txt0101(_txt$) //tämä funktio palauttaa merkkijonon binäärijonon
    For i=1 To Len(_txt) //toista silmukkaa rivin viimeiseen kirjaimeen asti
        txt=txt+Asc(Mid(_txt,i,1)) //muuta ascii koodiksi
    Next i //uusi kierros
    txt=Bin(txt) //muuta nykyinen ascii-sarja binäärijonoksi
    Return txt //palauta binäärijono
EndFunction

Function LenTxt(_txt$,special=5,odotus=100)
    For i=1 To Len(_txt)
        k$=Mid(_txt,i,1)
        Write k
        Wait odotus
        DrawScreen OFF
    Next i
    If special=5 Then Write " "
    Return ""
EndFunction
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Astigma
Moderator
Moderator
Posts: 195
Joined: Sun Aug 26, 2007 5:56 pm
Location: Kuopio, Finland
Contact:

Re: Tyhmät kysymykset

Post by Astigma »

Jani wrote:kirjoittaako seuraava binäärit oikein???
Ei kirjoita. Mikäli nyt yhtään ymmärsin oikein, niin yrität lisätä funktiossa seuraavan kirjaimen ascii-koodin numeron edellisen kirjaimen ascii-koodiin. Tämä ei toimi, koska nyt sinulle muodostuu sanan kirjainten summan binääriesitys eikä jokaisen kirjaimen binääriesitys. Sinun täytyy käsitellä ja tulostaa jokainen kirjain erikseen, jotta voit tulostaa niiden binäärimuotoisen esityksen.
KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Tyhmät kysymykset

Post by KankiKalle »

Ajattelin tässä jatkaa kauan sitten aloittamaani jääkiekkomanagerointipeliä,(tekstipeli) mutta älyni ei riitä muutamaan asiaan, ja kysyn sitten täällä.
1.Kuinka luon vastustajajoukkueet? Typeillä vai kuinka?
2. Joukkueessa on pelaajia 5+ maalivahti. Pelaajien taito on välillä 1-5. (1=huono ja 5=huippu) Sitten kun otellaan niin kuinka luon systeemin, että vertaillaan vastustajajoukkuetta ja omaa joukkuetta. Paremman taidon omaava joukkue voittaa.
3. Sarjataulukko.
En haluasi ihan ensimmäiseksi esimerkkikoodia, vaan neuvoja kuinka tekisin noi toiminnot. Vai onko tämä liian vaikeaa tälläiselle ikuisella aloittelijalle?
Olen nimittäin ikuinen aloittelija :D
Väsyttää niin ettei jaksa edes mennä lepäämään.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Tyhmät kysymykset

Post by Sly_Jack0 »

2. Tee vaikka niin että lasket joukkueen pelaajien taidon keskiarvon ja vertaat sitä toisen joukkueen keskiarvoon.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

En saanut toimimaan noin :(
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

2. Tee vaikka niin että lasket joukkueen pelaajien taidon keskiarvon ja vertaat sitä toisen joukkueen keskiarvoon.
Tein pienen simulaattorin joka arpoo paremman ja huonomman joukkueen välillä voittajan. Mitä parempi joukkue verrattuna huonompaan, sitä suuremmat mahdollisuudet voittaa.

Koodi ei ole juuri mistään kotoisin, koska sen olemassaolon ainut tarkoitus on juuri tämä. Se siis ei missään tapaksessa ole kelvollinen liitettäväksi miksikään osaksi suurempaa kokonaisuutta, vaan ainoastaan havainnollistava esimerkki.

En ole ennen tehnyt mitään vastaavaa simulaattoria, joten totta puhuakseni minun piti keksiä koko systeemi samalla kun koodasin. Maailmassa on mahdollisesti parempiakin tapoja. ;)

Code: Select all

SCREEN 1024, 768
SetWindow "Grand team-simulator"
Type tPelaajat
    Field cNimi         As String
    Field cTiimi
    Field cTaito
End Type

Global gPelaajamaara

LuoJoukkueet( 2 )

Repeat
    
    //nollataan muuttujia...
    rivi = 0
    pelaajat1 = 0
    pelaajat2 = 0
    yhteistaito1 = 0
    yhteistaito2 = 0
    
    //Kirjoitetaan tiimien tiedot ruudulle.
    For ip.tPelaajat = Each tPelaajat
        
        If ip <> First( tPelaajat ) Then
            lp.tPelaajat = Before( ip )
            If ip\cTiimi <> lp\cTiimi Then 
                rivi = 0
            EndIf
        EndIf

        Select ip\cTiimi
            Case 0
                yhteistaito1 = yhteistaito1 + ip\cTaito
                pelaajat1 + 1
            Case 1
                yhteistaito2 = yhteistaito2 + ip\cTaito
                pelaajat2 + 1
        End Select
        
        rivi + 1
        Text 20 + 400 * ip\cTiimi, 20 + 20 * rivi, "Nimi: " + ip\cNimi + ",  Taito: " + ip\cTaito
    Next ip
    
    Text 20, 20, "Tiimi 1"
    Text 420, 20, "Tiimi 2"
    
    //lasketaan keskiarvot.
    keskiarvo1# = Float(  yhteistaito1 ) / pelaajat1
    keskiarvo2# = Float( yhteistaito2 ) / pelaajat2 
    Text 20, 20 * ( pelaajat1 + 3 ), "Keskiarvo: " + keskiarvo1
    Text 420, 20 * ( pelaajat2 + 3 ), "Keskiarvo: " + keskiarvo2

    //Space tuhoaa aiemmat tiimit, nollaa voitot ja luo uudet joukkueet.
    If KeyHit( CbKeySpace ) Then 
        For ip.tPelaajat = Each tPelaajat
            Delete ip
        Next ip
        gPelaajamaara = 0
        LuoJoukkueet( 2 )
        voittoja1 = 0
        voittoja2 = 0
    EndIf   
    
    Text 20, 20 * ( pelaajat1 + 5 ), "SPACE arpoo uudet joukkueet."
    Text 20, 20 * ( pelaajat1 + 6 ), "ENTER arpoo kumpi joukkue voittaa."
    
    //Arvotaan voittaja.
    //Toimii näin: 
    //muuttuja "lopputulos" on liukuluku väliltä 1 ja 2. Ihannetapauksessa (=yhtä hyvät tiimit) tiimi1 voittaa jos "lopputulos" on
    //luku väliltä 1 ja 1.5, sekä tiimi2 voittaa jos "lopputulos" on luku väliltä 1.51 ja 2.
    //Muuttuja "tulos" kertoo kuinka paljon parempi toinen tiimi on. Eli jos tulos = 1.5, tiimit ovat yhtä hyviä. Mitä suurempi tulos on, sitä
    //parempi toinen tiimi on.
    //Parempi tiimi siis voittaa, jos "lopputulos" < "tulos". Mitä suurempi "tulos" on, sitä suuremmat mahdollisuudet "lopputulos"-muuttujalla on olla
    //pienempi.
    //Muuttuja temp ainoastaan pitää sisällään tiedon kumpi joukkue on parempi.
    If KeyDown( CbKeyReturn ) Then
        temp# = Min( keskiarvo1, keskiarvo2 ) / Max( keskiarvo1, keskiarvo2 )
        tulos# = 2 - temp + 0.5
        lopputulos# = Rnd( 1, 2 )
        
        //tässä tiedetään lopputulos (eli voittaako huonompi vai parempi). Nyt ohjelma katsoo kumpi joukkue oikeastaan oli parempi, 
        //eli kummalle pisteet annetaan, huonommalle vai paremmalle tiimille.
        If lopputulos > tulos Then   //huonompi tiimi voittaa
            If keskiarvo1 <= keskiarvo2 Then
                voittoja1 + 1
            Else
                voittoja2 + 1
            EndIf
        ElseIf lopputulos <= tulos Then
            If keskiarvo1 <= keskiarvo2 Then
                voittoja2 + 1
            Else
                voittoja1 + 1
            EndIf
        EndIf
    EndIf
    Text 20, 20 * ( pelaajat1 + 9 ), "Pelejä pelattu: " + ( voittoja1 + voittoja2 )
    Text 20, 20 * ( pelaajat1 + 10 ), "Tiimi1:n voitot: " + voittoja1 + ", Tiimi2:n voitot: " + voittoja2

    DrawScreen
Forever

Function LuoJoukkueet( _maara )
    For i = 0 To _maara - 1
        For a = 1 To 5
            LuoPelaaja( i )
        Next a
    Next i
End Function

Function LuoPelaaja( _tiimi )
    np.tPelaajat = New( tPelaajat )
    gPelaajamaara + 1
    np\cNimi = "Pelaaja " + gPelaajamaara
    np\cTiimi = _tiimi
    np\cTaito = Rand( 1, 5 )
End Function
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Tyhmät kysymykset

Post by KankiKalle »

Tuhannet kiitokset Jonez, tuosta on minulle paljon apua!
Väsyttää niin ettei jaksa edes mennä lepäämään.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Tyhmät kysymykset

Post by Jani »

No muodostaako tämä binäärit oikein??

Code: Select all

WTxt0101("Olen") : LenTxt(" << Olen")
Print "" : WTxt0101("Jani") : LenTxt(" << Jani")
Print "" : Print LenTxt("Olen Jani",0)

WaitKey

Function WTxt0101(_txt$) //tämä funktio palauttaa merkkijonon binäärijonon
    For i=1 To Len(_txt) //toista silmukkaa rivin viimeiseen kirjaimeen asti
        txtline=Bin(Asc(Mid(_txt,i,1)))
        Write txtline
    Next i //uusi kierros
    Return "" //palauta binäärijono
EndFunction

Function LenTxt(_txt$,special=5,odotus=100)
    For i=1 To Len(_txt)
        k$=Mid(_txt,i,1)
        Write k
        Wait odotus
        DrawScreen OFF
    Next i
    If special=5 Then Write " "
    Return ""
EndFunction
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset

Post by temu92 »

Jani wrote:No muodostaako tämä binäärit oikein??
Testaa ite:
http://www.paulschou.com/tools/xlate/
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu »

Miksikäs tämä lasku ei toimi tuolla kertomistavalla?
Jaksoin kaivaa oikein graaffisenlaskimen pölykerroksen alta repustani tarkistaakseni tuon laskun tuloksen :shock: Jostain syystä tuo alempi lasku antaa väärän tuloksen...

Näin toimii : h1# = ( size# * Sqrt(3) ) / 3
Näin ei?? : h1# = ( size# * Sqrt(3) ) * ( 1 / 3 )

EDIT: thx
Last edited by Jonhu on Tue Dec 30, 2008 5:02 pm, edited 1 time in total.
Tekeillä pikkupelejä ja ohjelmia :)
Rufi
Member
Posts: 50
Joined: Fri Dec 21, 2007 11:12 am

Re: Tyhmät kysymykset

Post by Rufi »

h1# = ( size# * Sqrt(3) ) * ( 1.0 / 3.0 )
Laitetaan ne desimaalit mukaan, muutenhan tässä jaettaan kokonaisluvuilla ja pyöristettäisiin lähimpään (CB kai pyöristää aina alas?) kokonaislukuun.
I'm gonna be the Pira... CoolBasic King!
D. Adams wrote:The knack of flying is learning how to throw yourself at the ground and miss.
Wee
Member
Posts: 57
Joined: Wed Dec 17, 2008 8:46 pm
Location: Mavihelvetti

Re: Tyhmät kysymykset

Post by Wee »

Tarkoitus olisi, että kun on kerran pelannut peliä, niin sen jälkeen palaisi takaisin aloitusruutuun, "menuun". Tämän jälkeen voisi käynistää pelin uudestaan. Kun kuitenkin olet palannut 1. pelin jälkeen "menuun", ja haluaisit käynnistää pelin uudelleen, niin tulee viesti : Error! Memory access violation. Miten voisin tämän koodata, itse yritin vähän ehtolauseilla. Mitä teen väärin? :P

Alla koko koodi, joka on muuten myös osa Alpha [Beta 2]:n lähdekoodia.

Code: Select all

'Alkuvalmistelut
SCREEN 400, 300
AddText "Ladataan.."
times = 0
'Musiikki ennen kaikkea!
PlaySound "media\NFSIIIaquila.mid"
FrameLimit 33


alku :

ClearText

'Ns. menu
Locate 55,115
AddText "Paina 1 aloittaaksesi tavallisen pelin"
AddText "Paina 2 aloittaaksesi kaksinpelin"
AddText "Paina 3 aloittaaksesi HC-pelin"
AddText "Paina 4 nähdäksesi pelin infotiedoston"
Locate 7,5
AddText "Avaruuslentelypeli alpha [BETA 2]"
Locate 7,280
AddText "(c) Veikko 'Wee' Vauhkonen 2008"

'Piirretään ylä-ja alaviivat kentälle
Line 0,26,400,26
Line 0,260,400,260
DrawScreen
WaitKey
ClearText

'Minne mennään menusta?
If KeyDown(cbkey1) Then Goto peli
If KeyDown(cbkey2) Then Goto kaksinpeli
If KeyDown(cbkey3) Then Goto hc

peli :
If times < 1 Then
    'Kokoelmat
    Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
        Field obj 'yksi kenttä nimeltään 'obj'
    End Type 
    Type ASTEROIDIT'Kokoelma asteroidi
        Field obj'yksi kenttä nimeltään 'obj'
    End Type
    'Ladataan objecktit, spritet, äänet
    ClsColor CbBlack
    pumsnd = LoadSound("media/Blaster.wav")
    alus = LoadObject("media/ship.png", 4)
    pati = LoadObject("media/pati.png", 4)
    asteroidi = LoadObject("media/asteroidi.png", 1)
    ShowObject pati,OFF
    TurnObject alus, 90
    PositionObject alus, -160, 30
    PositionObject asteroidi, -250,-250

EndIf

pisteet = 0

'PERUSPELISILMUKKA
Repeat
    If uusiutuminen>0 Then uusiutuminen=uusiutuminen-1
    
    'Asteroidit...'
    If uusiutuminen=0 Then
        newAsteroidi.ASTEROIDIT= New(ASTEROIDIT)
        newAsteroidi\obj=CloneObject(asteroidi)
        PositionObject newAsteroidi\obj, 230, Rand(110,-100)
        MoveObject newAsteroidi\obj,Rand(-0.5,-5)
        uusiutuminen=Rand(10,27)
    EndIf
    
    'Päivitetään asteroidit
    a=0
    For aAsteroidi.ASTEROIDIT= Each ASTEROIDIT
          MoveObject aAsteroidi\obj,Rand(-2,-4.5)
          If ObjectX(aAsteroidi\obj)< -225 Then
              DeleteObject aAsteroidi\obj
              Delete aAsteroidi
              pisteet=pisteet-10
          EndIf
          a=a+1
    Next aAsteroidi
    
    'Pisteet yläkulmaan
    Text 300,2, "Pisteet: "
    Text 370,2, pisteet
    
    'Tekstinsyötötökokeilut ylös, ja alaspäin vas. ylänurkka
    If UpKey() Then
                     ClearText 
                     Text 2,2, "Painat nuolta ylöspäin" 
    EndIf
    If DownKey() Then 
                     ClearText 
                     Text 2,2, "Painat nuolta alaspäin"
    EndIf
    
    'Päiväys alareunaan
    Text 1,280, "Tänään on"
    Text 80,280,Date()  
    Text 177,280,Time()
    
    'FPS oikeaan alareunaan
    Text 340,280, "FPS:"
    Text 370,280,FPS()
    
    'Piirretään ylä-ja alaviivat kentälle
    Line 0,26,400,26
    Line 0,260,400,260
    
    'Aluksen liikkuminen
    If UpKey() Then MoveObject alus, 4.5
    If DownKey() Then MoveObject alus, -4.5
    
    'Aluksen pelikentän rajaaminen
    If ObjectX(alus)>200 Then PositionObject alus, 200,ObjectY(alus) 
    If ObjectX(alus)<-200 Then PositionObject alus, -200,ObjectY(alus)
    If ObjectY(alus)>115 Then PositionObject alus, ObjectX(alus),115
    If ObjectY(alus)<-100 Then PositionObject alus, ObjectX(alus),-100
    'Ampuminen oikealle
    If KeyDown(cbkeyspace) And aselataus=0 Then 
                PlaySound pumsnd, 65
                luoti.AMMUS = New(AMMUS)
                luoti\obj=CloneObject(pati)
                CloneObjectPosition luoti\obj,alus
                PositionObject luoti\obj, ObjectX(luoti\obj)+11.5,ObjectY(luoti\obj)-1
                aselataus=8
     EndIf
     If aselataus>0 Then aselataus=aselataus-1
     
      For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        If ObjectX(luoti\obj)<-180 Or ObjectX(luoti\obj)>180 Or ObjectY(luoti\obj)<-130 Or ObjectY(luoti\obj)>130 Then                
            DeleteObject luoti\obj
            Delete luoti
        EndIf        
      Next luoti
      
    'Mitäpä jos asteroidi ja ammus törmäävät?   
    For aAsteroidi.ASTEROIDIT= Each ASTEROIDIT
      For luoti.AMMUS = Each AMMUS
        If Distance2 (luoti\obj, aAsteroidi\obj)<20 Then
          pisteet=pisteet+1
          DeleteObject aAsteroidi\obj
          Delete aAsteroidi
          DeleteObject luoti\obj
          Delete luoti
          Exit
        EndIf
      Next luoti
    Next aAsteroidi
    
    'Pelin lopetus
    If pisteet<0 Then
      pisteet = 0
      ClearObjects
      Goto havisit
    EndIf
    
    If pisteet>49 Then
      pisteet = pisteet+1
      ClearObjects
      Goto loppu
    EndIf
    
    'Pelikentän pisteet, "tähdet"
    Dot 40,50
    Dot 150,200
    Dot 300,97
    Dot 270,160
    Dot 210,185
    Dot 25,143
    Dot 180,240
    Dot 190,50
    Dot 17,85
    Dot 45,240
    Dot 50,150
    Dot 350,200
    Dot 75,201
    Dot 150,200
    Dot 180,150
    Dot 120,40
    Dot 170,195
    Dot 100,110
    Dot 365,100
    Dot 340,50
    Dot 80,70
    Dot 240,90
    Dot 270,210
    Dot 350,220
    Dot 170,80
    'Se unohtumaton
    DrawScreen
Forever

kaksinpeli :
ClearObjects
Text 50,50, "Kaksinpeli on kivaa!"
DrawScreen
WaitKey
End

hc :

ClearObjects
Text 50,50, "HC:kin on kivaa!"
DrawScreen
WaitKey
End

loppu :
    ClearObjects
    Locate 30,100
    AddText "Läpäisit pelin, ja sait 50 pistettä!"
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Avasit peruspelitilan voittamalla HC - moodin!"
    DrawScreen
    WaitKey
    times = times+1
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf
    
havisit :
    ClearObjects
    Locate 10,100
    AddText "Hävisit pelin, sillä pisteesi menivät miinukselle."
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Voit lopettaa pelin painamalla mitä vain"
    DrawScreen
    WaitKey
    times = times+1
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf
"This city looks so pretty, do you wanna burn here with me..."
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset

Post by valscion »

Wee wrote:Tarkoitus olisi, että kun on kerran pelannut peliä, niin sen jälkeen palaisi takaisin aloitusruutuun, "menuun". Tämän jälkeen voisi käynistää pelin uudestaan. Kun kuitenkin olet palannut 1. pelin jälkeen "menuun", ja haluaisit käynnistää pelin uudelleen, niin tulee viesti : Error! Memory access violation. Miten voisin tämän koodata, itse yritin vähän ehtolauseilla. Mitä teen väärin? :P
Tuossapa kommentoin nuo kohdat joiden takia MAV syntyy :).

Code: Select all

peli :
If times < 1 Then // <------ jos ensimmäinen pelikerta, lataa objektit ja äänet
    'Kokoelmat
    Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
        Field obj 'yksi kenttä nimeltään 'obj'
    End Type 
    Type ASTEROIDIT'Kokoelma asteroidi
        Field obj'yksi kenttä nimeltään 'obj'
    End Type
    'Ladataan objecktit, spritet, äänet
    ClsColor CbBlack
    pumsnd = LoadSound("media/Blaster.wav")
    alus = LoadObject("media/ship.png", 4)
    pati = LoadObject("media/pati.png", 4)
    asteroidi = LoadObject("media/asteroidi.png", 1)
    ShowObject pati,OFF
    TurnObject alus, 90
    PositionObject alus, -160, 30
    PositionObject asteroidi, -250,-250

EndIf

loppu :
    ClearObjects
    Locate 30,100
    AddText "Läpäisit pelin, ja sait 50 pistettä!"
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Avasit peruspelitilan voittamalla HC - moodin!"
    DrawScreen
    WaitKey
    times = times+1
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf
    
havisit :
    ClearObjects // <--- KAIKKI OBJEKTIT TUHOTAAN EIKÄ NIITÄ LADATA UUDELLEEN
    Locate 10,100
    AddText "Hävisit pelin, sillä pisteesi menivät miinukselle."
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Voit lopettaa pelin painamalla mitä vain"
    DrawScreen
    WaitKey
    times = times+1 // <---- pelikertoja lisätään
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf
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
KankiKalle
Active Member
Posts: 170
Joined: Mon Jun 23, 2008 9:04 pm

Re: Tyhmät kysymykset

Post by KankiKalle »

Kysyn nyt tyhmyyttäni, olisiko kellään helpompaa esimerkkiä kuin tuo Jonezin esimerkki? Ymmärsin tuosta jonkinlaisen periaatteen kuinka asian voisi tehdä, mutta kun tuo on mielestäni vaikeahko tapa. Minulla ei kovin hyvin ole nääs tyypit hallussa, yritän kyllä opetella :)
Väsyttää niin ettei jaksa edes mennä lepäämään.
Wee
Member
Posts: 57
Joined: Wed Dec 17, 2008 8:46 pm
Location: Mavihelvetti

Re: Tyhmät kysymykset

Post by Wee »

OonSuomesta wrote:
Wee wrote:Tarkoitus olisi, että kun on kerran pelannut peliä, niin sen jälkeen palaisi takaisin aloitusruutuun, "menuun". Tämän jälkeen voisi käynistää pelin uudestaan. Kun kuitenkin olet palannut 1. pelin jälkeen "menuun", ja haluaisit käynnistää pelin uudelleen, niin tulee viesti : Error! Memory access violation. Miten voisin tämän koodata, itse yritin vähän ehtolauseilla. Mitä teen väärin? :P
Tuossapa kommentoin nuo kohdat joiden takia MAV syntyy :).

Code: Select all

peli :
If times < 1 Then // <------ jos ensimmäinen pelikerta, lataa objektit ja äänet
    'Kokoelmat
    Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
        Field obj 'yksi kenttä nimeltään 'obj'
    End Type 
    Type ASTEROIDIT'Kokoelma asteroidi
        Field obj'yksi kenttä nimeltään 'obj'
    End Type
    'Ladataan objecktit, spritet, äänet
    ClsColor CbBlack
    pumsnd = LoadSound("media/Blaster.wav")
    alus = LoadObject("media/ship.png", 4)
    pati = LoadObject("media/pati.png", 4)
    asteroidi = LoadObject("media/asteroidi.png", 1)
    ShowObject pati,OFF
    TurnObject alus, 90
    PositionObject alus, -160, 30
    PositionObject asteroidi, -250,-250

EndIf

loppu :
    ClearObjects
    Locate 30,100
    AddText "Läpäisit pelin, ja sait 50 pistettä!"
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Avasit peruspelitilan voittamalla HC - moodin!"
    DrawScreen
    WaitKey
    times = times+1
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf
    
havisit :
    ClearObjects // <--- KAIKKI OBJEKTIT TUHOTAAN EIKÄ NIITÄ LADATA UUDELLEEN
    Locate 10,100
    AddText "Hävisit pelin, sillä pisteesi menivät miinukselle."
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Voit lopettaa pelin painamalla mitä vain"
    DrawScreen
    WaitKey
    times = times+1 // <---- pelikertoja lisätään
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf

Kiitos! Hymy nousu yhtä suureksi, kuin avatarissasi ;)

Päteekö sama noihin typeihin, vai pitääkö nekin ladata aina uudestaan?
"This city looks so pretty, do you wanna burn here with me..."
Wee
Member
Posts: 57
Joined: Wed Dec 17, 2008 8:46 pm
Location: Mavihelvetti

Re: Tyhmät kysymykset

Post by Wee »

Sorry tuplapost, mutta...

Korjasin koodin mielestäni oikein, mutta MAV tulee yhä. Tässä nämä strategiset paikat... Tein myös muita pikkumuutoksia...

Code: Select all

alku :

ClearText

'Ns. menu
Locate 55,115
AddText "Paina 1 aloittaaksesi tavallisen pelin"
AddText "Paina 2 aloittaaksesi kaksinpelin"
AddText "Paina 3 nähdäksesi pelin infotiedoston"
If voitot > 0 Then
    AddText "Paina 4 aloittaaksesi pelin hc-modella"
EndIf
Locate 7,5
AddText "Avaruuslentelypeli alpha [BETA 2]"
Locate 7,280
AddText "(c) Veikko 'Wee' Vauhkonen 2008"

'Piirretään ylä-ja alaviivat kentälle
Line 0,26,400,26
Line 0,260,400,260
DrawScreen
WaitKey
ClearText

'Minne mennään menusta?
If KeyDown(cbkey1) Then Goto peli
If KeyDown(cbkey2) Then Goto kaksinpeli
If voitot > 0 Then
    If KeyDown(cbkey4) Then 
        Goto hc
    EndIf
EndIf

peli :

If times < 1 Then
    'Kokoelmat
    Type AMMUS 'luo kokoelma, jonka nimi on AMMUS
        Field obj 'yksi kenttä nimeltään 'obj'
    End Type 
    Type ASTEROIDIT'Kokoelma asteroidi
        Field obj'yksi kenttä nimeltään 'obj'
    End Type
EndIf

    'Ladataan objecktit, spritet, äänet
    ClsColor CbBlack
    pumsnd = LoadSound("media/Blaster.wav")
    alus = LoadObject("media/ship.png", 4)
    pati = LoadObject("media/pati.png", 4)
    asteroidi = LoadObject("media/asteroidi.png", 1)
    ShowObject pati,OFF
    TurnObject alus, 90
    PositionObject alus, -160, 30
    PositionObject asteroidi, -250,-250

pisteet = 0


voitto :
    ClearObjects
    Locate 30,100
    AddText "Läpäisit pelin, ja sait 50 pistettä!"
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Avasit peruspelitilan voittamalla HC - moodin!"
    DrawScreen
    WaitKey
    times = times+1
    voitot = voitot+1
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf
    
havisit :
    ClearObjects
    Locate 10,100
    AddText "Hävisit pelin, sillä pisteesi menivät miinukselle."
    AddText "Paina SPACE mennäksesi alkuvalikkoon"
    AddText "Voit lopettaa pelin painamalla mitä vain"
    DrawScreen
    WaitKey
    times = times+1
    If KeyDown(cbkeyspace) Then 
        Goto alku
    Else
        End
    EndIf

"This city looks so pretty, do you wanna burn here with me..."
Locked