Tyhmät kysymykset (I/2011)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

Misthema wrote:En tiedä ovatko muut tätä huomanneet, mutta jostain syystä muistipalat eivät toimi oikein - ainakaan luodun muistipalan koko ei ole "vakio":

Code: Select all

size = 1

bank = MakeMEMBlock(size)

PokeInt bank,0,2147483646

Print "MEMBlockSize: "+MEMBlockSize(bank)
Print "Integer value: "+PeekInt(bank,0)
WaitKey
Mielestäni muistipankin tulisi olla kokoa 4 (tavuina), jotta sinne voisi kirjoittaa kokonaislukua... Mutta tuon koodipätkän kanssa kokonaisluku tulostuu sellaisena kuin pitääkin, vaikkakin muistipalan koko on vain yhden (1) tavun.
Bugi vai feature?
Ominaisuus. Muistipalojen tarkoitus nimenomaan on siirtää muistinhallinta käyttäjän vastuulle.

Kyseessä on esimerkki puskuriylivuodosta. Juuri tuollaisia bugeja hakkerit käyttävät hyväkseen.
Misthema wrote:Jep jep. Sitten vielä ihmettelen tätä:

Code: Select all

size = 1

bank = MakeMEMBlock(size)

PokeInt bank,0,2147483646

Print "MEMBlockSize: "+MEMBlockSize(bank)
Print "Integer value: "+PeekInt(bank,0)

DeleteMEMBlock bank

Print "MEMBlockSize: "+MEMBlockSize(bank)
Print "Integer value: "+PeekInt(bank,0)
WaitKey
Ihan mielenkiintoinen... =D Luulisi jo puskevan erroria 'PokeInt':n kohdalla... Mutta noh.
Haluaisin vain olla varma että kirjoitan juuri sen verran muistipalaan kun olen siihen varannutkin, ilman että joutuisin sitä itse tarkistamaan joka välissä. =/
Juuri tuon ilmiön takia on hyvä tapa nollata pointteri aina kun data deletoidaan. Tällöin pointterin käyttäminen datan poistamisen jälkeen johtaa ohjelman kaatumiseen, mikä helpottaa bugin löytämistä (puskuriylivuodoilla on välillä aika järjettömiltä tuntuvia sivuvaikutuksia). Tuo koodi voi muuten joissain tilanteissa johtaa ohjelman kaatumiseen vaikka se ei tuossa tilanteessa niin teekään.

Muistinvarausongelman ratkaisemiseen auttaisi jos tietäisi, miksi haluat käyttää muistipaloja. Esimerkiksi voisit tehdä funktioita, jotka helpottavat muistipalojen käyttöä.
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2011)

Post by MetalRain »

Itse olen huomannut että muistipalojen indeksointi voi olla aika kivaakin, vapauttaa kummasti käyttämään mielikuvitusta tietorakenteissa.

Code: Select all

//nämä kertoo tiedon sijainnin tavuina joukon
//alusta lähtien
Const XIndex = 0 // kokonaisluku vie tilaa 4 tavua
Const YIndex = 4 // kokonaisluku vie tilaa 4 tavua
Const ValueIndex = 8 // vie vain tavun

// Muistipala näyttäisi siis tältä
//
//|0 tavu|1 tavu|2 tavu|3 tavu|4 tavu|5 tavu|6 tavu|7 tavu|8 tavu|
//|-------------xIndex--------|-------------YIndex--------|Value-|

//merkitään tietojoukon koko
Const DataSize = 9 //4+4+1  x,y,value

//varataan tilaa kymmenelle joukolle 
MemSize = DataSize*10

//ja luodaan oikean kokoinen muistipala
mem = MakeMEMBlock(MemSize)

//tässä lisätään kymmenen tietojoukkoa
For i=0 To 9

    //tämä osoittaa aina joukon alkuun
    pointer = (i * DataSize)

    //kirjoitetaan joukon alusta lisäten aiemmin määrätyt 
    //sijaintimuutokset
    PokeInt mem,pointer+XIndex, Rand(100,-100)
    
    PokeInt mem,pointer+YIndex, Rand(100,-100)
    
    PokeByte mem,pointer+ValueIndex, Rand(0,255)

Next i


//Lukeminen on yhtä helppoa
//tässä toinen tapa indeksointiin
//eli käydään koko muistipalan koko tietojoukon 
//kokosissa paloissa läpi
//i osoittaa aina kunkin tietojoukon alkuun

For i=0 To MemSize-1 Step DataSize

    Print "X: "+PeekInt(mem,i+XIndex) +" Y: " + PeekInt(mem,i+YIndex) + " Value: "+ PeekByte(mem, i+ValueIndex)

Next i

WaitKey 
CB-Nero
Newcomer
Posts: 23
Joined: Fri Apr 01, 2011 4:29 pm

Re: Tyhmät kysymykset (I/2011)

Post by CB-Nero »

Moi!

Olen uusi täällä, ja minulla on tyhmä kysymys. Teen ylhäältäkuvattua räiskintäpeliä, mutta viholliset eivät lähde liikkeelle ukkoa kohti. Aina tulee MAV, kun lisään jahtaamiskoodin. Saattaa johtua siitä, kun ensimmäinen vihu luodaan vasta Timerin 3000 päässä, mutta liikkuminen laitetaan heti.

Missäköhän vika?
En osaa koodata, mutta yritän silti.
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

CB-Nero wrote:Moi!

Olen uusi täällä, ja minulla on tyhmä kysymys. Teen ylhäältäkuvattua räiskintäpeliä, mutta viholliset eivät lähde liikkeelle ukkoa kohti. Aina tulee MAV, kun lisään jahtaamiskoodin. Saattaa johtua siitä, kun ensimmäinen vihu luodaan vasta Timerin 3000 päässä, mutta liikkuminen laitetaan heti.

Missäköhän vika?
Jos objektia ei ole olemassa ja sitä yritetään silti käyttää, seuraa MAV.
CB-Nero
Newcomer
Posts: 23
Joined: Fri Apr 01, 2011 4:29 pm

Re: Tyhmät kysymykset (I/2011)

Post by CB-Nero »

Miten saisin sen toimimaan niin, että sitä käytetään vasta vihollisen ollessa olemassa?
En osaa koodata, mutta yritän silti.
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

CB-Nero wrote:Miten saisin sen toimimaan niin, että sitä käytetään vasta vihollisen ollessa olemassa?
Laitat koodin IF -lausekkeen sisään:
If objekti Then
[koodia]
EndIf
CB-Nero
Newcomer
Posts: 23
Joined: Fri Apr 01, 2011 4:29 pm

Re: Tyhmät kysymykset (I/2011)

Post by CB-Nero »

Kiitos!

Paitsi, että sain sen juuri selvitettyä, objectin nimi oli vanha, koska vaihdoin sen.
En osaa koodata, mutta yritän silti.
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

CB-Nero wrote:Kiitos!

Paitsi, että sain sen juuri selvitettyä, objectin nimi oli vanha, koska vaihdoin sen.
Koodia kannattaa kommentoida. Jos haluat vaihtaa muuttujan nimeä, käytä Replace (korvaa) -toimintoa (CTRL+F). Kannattanee kuitenkin pitää mielessä, että jos sinulla on esimerkiksi funktio 'funkkari' ja muuttuja 'unkka' ja sitten haluaisit vaihtaa muuttujan nimeä, replace -toiminto sotkee myös funktion nimen.
CB-Nero
Newcomer
Posts: 23
Joined: Fri Apr 01, 2011 4:29 pm

Re: Tyhmät kysymykset (I/2011)

Post by CB-Nero »

Kiitos vinkeistä!

Mites sitten, kun minulla on luokka ammuksia, ja haluan poistaa vain sen, joka osuu viholliseen. Miten se toimii? Olen yrittänyt selvittää.
En osaa koodata, mutta yritän silti.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset (I/2011)

Post by Jonez »

Käy kaikki ammukset ja vihut läpi sisäkkäisissä silmukoissa.

Code: Select all

For ia.ammukset = Each ammukset
    For iv.vihut = Each vihut
        If Osuvat( ia\obj, iv\obj ) Then
            TuhoaAmmus()
            TuhoaVihu()
            Exit
        EndIf
    Next iv
Next ia
Voit käyttää funktion "Osuvat( obj1, obj2 )" kohdalla esim. ObjectsOverlap()-funkkaria. Tuhoa ammukset ja vihut näin:
DeleteObject jäsen/objekti
Delete jäsen

Edellisessä esimerkissä jäsen oli ia ammuksille, ja iv vihuille.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: Tyhmät kysymykset (I/2011)

Post by DJ-Filbe »

CB-Nero wrote:Kiitos vinkeistä!

Mites sitten, kun minulla on luokka ammuksia, ja haluan poistaa vain sen, joka osuu viholliseen. Miten se toimii? Olen yrittänyt selvittää.
Tarkoittanet luokalla "tyyppiä"?

Code: Select all

For o.obj = Each obj

    //[kaikki muu mahdollinen silmukan koodi ennen tätä]

    If Objectsoverlap(o\objektimuuttuja, vihu) Then
        DeleteObject o\objektimuuttuja
        Delete o
    EndIf
Next o
Jos vihuja onkin useampia ja nekin on typeissä:

Code: Select all

For v.vihu = Each vihu
For o.obj = Each obj

    //[kaikki muu mahdollinen silmukan koodi ennen tätä]

    If Objectsoverlap(o\objektimuuttuja, v\objektimuuttuja) Then
        DeleteObject o\objektimuuttuja
        Delete o
    EndIf
Next o
Next v
En tehnyt editorilla vaan kirjoitin suoraan selaimella. Tämä niille jotka tulevat sitten valittamaan että "opettele käyttämään sisennysmerkkiä".
CB-Nero
Newcomer
Posts: 23
Joined: Fri Apr 01, 2011 4:29 pm

Re: Tyhmät kysymykset (I/2011)

Post by CB-Nero »

Kiitos! On se hyvä, että apu on lähellä!
En osaa koodata, mutta yritän silti.
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2011)

Post by ukkeli »

Miten olisi hyvä tehdä Palikkamoottori. Tarkoitan siis moottoria joka tekee ristikon pelin taakse. Niin kuin minecraftissa, ei palikat asetu muuaalle kuin ristikkoon(3Dnä tosin...). Tajuatte varmaan mitä haen...

EDIT:Siis asettataa objecteja tiettyihin väleihin.
...
CB-Nero
Newcomer
Posts: 23
Joined: Fri Apr 01, 2011 4:29 pm

Re: Tyhmät kysymykset (I/2011)

Post by CB-Nero »

Öö... miten funktio kutsutaan?
En osaa koodata, mutta yritän silti.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (I/2011)

Post by phons »

ukkeli wrote:Miten olisi hyvä tehdä Palikkamoottori. Tarkoitan siis moottoria joka tekee ristikon pelin taakse. Niin kuin minecraftissa, ei palikat asetu muuaalle kuin ristikkoon(3Dnä tosin...). Tajuatte varmaan mitä haen...

EDIT:Siis asettataa objecteja tiettyihin väleihin.
Tilemap.. pyörä on keksitty..
Image
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2011)

Post by valscion »

CB-Nero wrote:Öö... miten funktio kutsutaan?

Code: Select all

// Kutsutaan funktiota "FunktionNimi"
FunktionNimi()

Function FunktionNimi()
    Print "Hei, maailma!"
    WaitKey
EndFunction
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
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija »

CB-Nero wrote:Öö... miten funktio kutsutaan?

Code: Select all

Function kirjoitahei() //tässä MÄÄRITELLÄÄN funktio
    AddText "helou!" //lisää teksti: helou!
End Function //funktion loppu

kirjoitahei() //tässä funktio KUTSUTAAN
Drawscreen //piirrä näyttö
WaitKey //odotetaan että jotain painetaan
Toivottavasti ymmärsit.
EDIT:

juu 2 hyvää vastausta siinä...

<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Tyhmät kysymykset (I/2011)

Post by Dimple »

ukkeli wrote:Miten olisi hyvä tehdä Palikkamoottori. Tarkoitan siis moottoria joka tekee ristikon pelin taakse. Niin kuin minecraftissa, ei palikat asetu muuaalle kuin ristikkoon(3Dnä tosin...). Tajuatte varmaan mitä haen...

EDIT:Siis asettataa objecteja tiettyihin väleihin.
Esim jos haluat hiirellä lisätä palikoita vain tietyin välein:

Code: Select all

x_coord = Pyorista( MouseX() / PalikanLeveys )
y_coord = Pyorista( MouseY() / PalikanKorkeus )
Korvaa tuo Pyorista-funktio Int():llä, RoundUp():lla tai RoundDown():lla, mikä nyt sopii parhaiten. Muuten olisin tehnyt ihan käännettävän esimerkin, mutta kun olen Linuxin puolella niin ei onnistu tähän hätään (Winukka on vielä säätämättä kuntoon).

EDIT: muistaakseni MouseX():lle ja MouseY():lle oli pelimaailman koordinaatteja käyttävät vastineet, joita kannattaa käyttää jos haluaa tuota objekteihin soveltaa. Itse en ole ikinä oikein objekteihin tykästynyt.
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Tyhmät kysymykset (I/2011)

Post by ukkeli »

phons wrote:
ukkeli wrote:Miten olisi hyvä tehdä Palikkamoottori. Tarkoitan siis moottoria joka tekee ristikon pelin taakse. Niin kuin minecraftissa, ei palikat asetu muuaalle kuin ristikkoon(3Dnä tosin...). Tajuatte varmaan mitä haen...

EDIT:Siis asettataa objecteja tiettyihin väleihin.
Tilemap.. pyörä on keksitty..
Siis kun sitä asetaobjectikoordinaatteihin() ei löydy, on hankala tehdä mappi generaattoria jossa voi rikkoa ja asettaa palikoita :D
...
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2011)

Post by naputtelija »

ukkeli wrote:
phons wrote:
ukkeli wrote:Miten olisi hyvä tehdä Palikkamoottori. Tarkoitan siis moottoria joka tekee ristikon pelin taakse. Niin kuin minecraftissa, ei palikat asetu muuaalle kuin ristikkoon(3Dnä tosin...). Tajuatte varmaan mitä haen...

EDIT:Siis asettataa objecteja tiettyihin väleihin.
Tilemap.. pyörä on keksitty..
Siis kun sitä asetaobjectikoordinaatteihin() ei löydy, on hankala tehdä mappi generaattoria jossa voi rikkoa ja asettaa palikoita :D
sitäkö sinä meinasit? tuhota palikoita+asettaa? käytä SetTile:ä tai SetMap:ia.
Ja mappigene tarkoittaa sitä että ohjelma itse luo kartan randomilla.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Locked