Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
cb is my life

Re: Tyhmät kysymykset

Post by cb is my life »

On ollut "hiukan" ongelmia typevihujen heltin kanssa...osaako joku sanoamikä tässä on vikana?
SCREEN 1000,800

FrameLimit 50

Type AMMUS
Field obj
End Type

mAmmus = LoadObject("Media\bullet.bmp")
ShowObject mAmmus,0

ruoho = MakeObjectFloor ()
nurmikko = LoadImage("Media\grass.bmp")
PaintObject ruoho, nurmikko

Type VIHU
Field obj
Field health
End Type

uus=40

mvihu=LoadObject("Media\tsompi.bmp",360)
ShowObject mvihu,OFF

ukko = LoadObject("media\soldier.bmp",360)

PositionObject ukko,0,200

Repeat

If ObjectX(ukko)<-500 Then PositionObject ukko,-500,ObjectY(ukko)
If ObjectX(ukko)>500 Then PositionObject ukko,500,ObjectY(ukko)
If ObjectY(ukko)<-400 Then PositionObject ukko,ObjectX(ukko),-400
If ObjectY(ukko)>400 Then PositionObject ukko,ObjectX(ukko),400

If uus=0 Then
vihu.VIHU = New (VIHU)
vihu\obj = CloneObject (mvihu)
uus = 40
vihu\health = 10
ScreenPositionObject vihu\obj,Rand(ScreenHeight()),Rand(ScreenWidth())
EndIf

uus = uus-1

MoveObject ukko,UpKey()*2-DownKey()*2
TurnObject ukko,LeftKey()*5-RightKey()*5


If KeyDown(cbKeyRControl) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(mAmmus)
CloneObjectPosition luoti\obj,ukko
CloneObjectOrientation luoti\obj,ukko
reload=3
EndIf
If reload>0 Then reload=reload-1

For iv.vihu = Each VIHU
If ObjectsOverlap (luoti\obj,iv\obj) Then
iv\health -1
If iv\health<1 Then
DeleteObject iv\obj
Delete iv
EndIf
EndIf
Next iv

For ia.AMMUS = Each AMMUS
ammustuhottava = 0
MoveObject ia\obj,10
If Distance(0,0,ObjectX(ia\obj),ObjectY(ia\obj)) > ScreenWidth() Or ammustuhottava Then
DeleteObject ia\obj
Delete ia
EndIf
Next ia

DrawScreen

Forever
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: Tyhmät kysymykset

Post by Sami345 »

cb is my life wrote:On ollut "hiukan" ongelmia typevihujen heltin kanssa...osaako joku sanoamikä tässä on vikana?
Näin pitäis toimii. En ole varma, kun ei ole CB nyt asennettuna.

Code: Select all

SCREEN 1000,800

FrameLimit 50

Type AMMUS
Field obj
End Type

mAmmus = LoadObject("Media\bullet.bmp")
ShowObject mAmmus,0

ruoho = MakeObjectFloor ()
nurmikko = LoadImage("Media\grass.bmp")
PaintObject ruoho, nurmikko

Type VIHU
Field obj
Field health
End Type

uus=40

mvihu=LoadObject("Media\tsompi.bmp",360)
ShowObject mvihu,OFF

ukko = LoadObject("media\soldier.bmp",360)

PositionObject ukko,0,200

Repeat

If ObjectX(ukko)<-500 Then PositionObject ukko,-500,ObjectY(ukko)
If ObjectX(ukko)>500 Then PositionObject ukko,500,ObjectY(ukko)
If ObjectY(ukko)<-400 Then PositionObject ukko,ObjectX(ukko),-400
If ObjectY(ukko)>400 Then PositionObject ukko,ObjectX(ukko),400

If uus=0 Then
vihu.VIHU = New (VIHU)
vihu\obj = CloneObject (mvihu)
uus = 40
vihu\health = 10
ScreenPositionObject vihu\obj,Rand(ScreenHeight()),Rand(ScreenWidth())
EndIf

uus = uus-1

MoveObject ukko,UpKey()*2-DownKey()*2
TurnObject ukko,LeftKey()*5-RightKey()*5


If KeyDown(cbKeyRControl) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(mAmmus)
CloneObjectPosition luoti\obj,ukko
CloneObjectOrientation luoti\obj,ukko
reload=3
EndIf
If reload>0 Then reload=reload-1

For ia.AMMUS = Each AMMUS
For iv.vihu = Each VIHU
If ObjectsOverlap (luoti\obj,iv\obj) Then
iv\health -1
If iv\health<1 Then
DeleteObject iv\obj
Delete iv
EndIf
EndIf
Next iv


ammustuhottava = 0
MoveObject ia\obj,10
If Distance(0,0,ObjectX(ia\obj),ObjectY(ia\obj)) > ScreenWidth() Or ammustuhottava Then
DeleteObject ia\obj
Delete ia
EndIf
Next ia

DrawScreen

Forever
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Miten?

Re: Tyhmät kysymykset

Post by Miten? »

Miten voi lukea tekstitiedosta sanan ja sen jälkeen kun se sana on luettu ja
jos se on oikea sana, niin se poistetaan tekstitiedosta ja korvataan eri sanalla.

Mietin jonkinlaista Englanti -> Suomi sanakääntäjää. Esimerkkikoodi auttaisi tai sanallinen ohje.
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: Tyhmät kysymykset

Post by MAVmaggot »

cb is my life wrote:On ollut "hiukan" ongelmia typevihujen heltin kanssa...osaako joku sanoamikä tässä on vikana?
Ensinäkin olet käyttänyt code-tagia väärin ;) Toiseksi et ole sisentänyt koodiasi :x Ja kolmanneksi.. vastaus ongelmaasi:

Code: Select all

SCREEN 1000,800

FrameLimit 50

Type AMMUS
    Field obj
End Type

mAmmus = LoadObject("Media\bullet.bmp")
ShowObject mAmmus,0

ruoho = MakeObjectFloor ()
nurmikko = LoadImage("Media\grass.bmp")
PaintObject ruoho, nurmikko

Type VIHU
    Field obj
    Field health
End Type

uus=40

mvihu=LoadObject("Media\guy.bmp",360)
ShowObject mvihu,OFF

ukko = LoadObject("media\soldier.bmp",360)

PositionObject ukko,0,200





Repeat

    If ObjectX(ukko)<-500 Then PositionObject ukko,-500,ObjectY(ukko)
    If ObjectX(ukko)>500 Then PositionObject ukko,500,ObjectY(ukko)
    If ObjectY(ukko)<-400 Then PositionObject ukko,ObjectX(ukko),-400
    If ObjectY(ukko)>400 Then PositionObject ukko,ObjectX(ukko),400

    If uus=0 Then
        vihulainen.VIHU = New (VIHU)
        vihulainen\obj = CloneObject (mvihu)
        uus = 40
        vihulainen\health = 10
        ScreenPositionObject vihulainen\obj,Rand(ScreenHeight()),Rand(ScreenWidth())
    EndIf
    
    uus = uus-1
    
    MoveObject ukko,UpKey()*2-DownKey()*2
    TurnObject ukko,LeftKey()*5-RightKey()*5
    
    
    If KeyDown(cbKeyRControl) And reload=0 Then
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(mAmmus)
        CloneObjectPosition luoti\obj,ukko
        CloneObjectOrientation luoti\obj,ukko
        reload=3
    EndIf
    
    If reload>0 Then reload=reload-1


    
    For luoti.AMMUS = Each AMMUS
        ammustuhottava = 0
        MoveObject luoti\obj,10
        For vihulainen.VIHU = Each VIHU
            If ObjectsOverlap (vihulainen\obj,luoti\obj) Then
                vihulainen\health -1
                If vihulainen\health<1 Then
                    DeleteObject vihulainen\obj
                    Delete vihulainen
                EndIf
            EndIf
        Next vihulainen
    Next luoti
    
    DrawScreen

Forever
sami: minulla ei ainakaan tominut tuo sinun kooodisi, vihut eivät kuolleet aina =O
EDIT:

Miten?: replace-functiolla

Miten?

Re: Tyhmät kysymykset

Post by Miten? »

Tälläistä koitin. Mutta ei onnistunut. Mitä teen tässä väärin?

Code: Select all

f=OpenToEdit("testi.txt")

m$=ReadLine(f)

If m$=GetWord(m$,1)="sana" then m$=Replace(m$,"sana","testi")

DrawScreen

CloseFile f

WaitKey
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 »

Riippuu siitä mitä yrität tehdä, drawscreeniä on turha käyttää koska mitään ei tulosteta, myös waitkey on aika turha samasta syystä. Jos haluat muuttaa tiedostossa olevaa tekstiä silloin se pitää tallentaa siihen, ei vain muuttaa merkkijonoa.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Lisäksi muuttuja pitää määritellä vain kerran. Eli ainoastaan siihen kohtaan jossa sitä ensimmäisenä tarvitset, laitat dollarimerkin perään ja muista jätät pois. Muuten tapahtuu kauheuksia.

EDIT: Puhuin siis noista merkkijonoista.
Miten

Re: Tyhmät kysymykset

Post by Miten »

Eli tarkoitus on etsiä tekstitiedostosta tietty sana ja korvata se tietty sana yoisella sanalla.
Tälläistä koitin nyt, mutta en tajunnut aivan sanan tallennusta.

Code: Select all

f=OpenToEdit("testi.txt")

m$=ReadLine(f)

if GetWord(m,1)="sana" Then 
    i$=Replace(m,"sana","testi")
    WriteLine f,""+i
EndIf 
    
CloseFile f
 
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 »

Grandi wrote:Lisäksi muuttuja pitää määritellä vain kerran. Eli ainoastaan siihen kohtaan jossa sitä ensimmäisenä tarvitset, laitat dollarimerkin perään ja muista jätät pois. Muuten tapahtuu kauheuksia.

EDIT: Puhuin siis noista merkkijonoista.
VÄÄRIN. Itse teen aina niin että käytän dollarinmerkkejä ja risuaitoja muuttujissa niinkuin se kuuluisikin tehdä eikä ole koskaan ollut mitään ongelmia.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Temu; ota huomioon, että ongelmaa ei ole kuin globaalien muuttujien kanssa. Ihan kokemuksesta sanon, että tuolla tyylillä ennemmin tai myöhemmin ilmestyy jos jonkinlaista virhettä, sillä tuskin kukaan ulkoa muistaa, mitkä muuttujat oltiin määritelty globaaleiksi. Ja vaikka projekti olisikin niin pieni - että tähän olisi mahdollisuus - en käsitä, miksi pitäisi joihinkin muuttujiin laittaa dollarinmerkin / risuaidan joka kohdassa ja joissain vain alussa?
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 »

Ainakaan mulla ei ole mitään ongelmia ollu muistellessa niitä globaaleja. Voidaan vaikka ottaa nyrkkisäännöksi että ainoat globaalit joita teet on aina vain kokonaislukuja, ei muita.
Edelleen miten..

Re: Tyhmät kysymykset

Post by Edelleen miten.. »

Tarkoitus olisi korvata tekstitiedostossa oleva sana ja sitten kirjoittaa korvaava sana tekstitiedostoon.
Mutta ongelma on siinä, että en tajua kuinka writelinellä voi kirjoittaa korvaavan sanan vanhan sanan tilalle.

Kiitos etukäteen, jos joku nyt vastaisi.
Näin olen koittanut, mutta ei toimi.

Code: Select all

f=OpenToEdit("testi.txt")

m$=ReadLine(f)

If GetWord(m,1)="sana" Then sana=Replace(m,"sana","testi")
    WriteLine f,sana+sana

CloseFile f
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: Tyhmät kysymykset

Post by Dande »

Edelleen miten.. wrote:Tarkoitus olisi korvata tekstitiedostossa oleva sana ja sitten kirjoittaa korvaava sana tekstitiedostoon.
Mutta ongelma on siinä, että en tajua kuinka writelinellä voi kirjoittaa korvaavan sanan vanhan sanan tilalle.

Kiitos etukäteen, jos joku nyt vastaisi.
Näin olen koittanut, mutta ei toimi.

Code: Select all

f=OpenToEdit("testi.txt")

m$=ReadLine(f)

If GetWord(m,1)="sana" Then sana=Replace(m,"sana","testi")
    WriteLine f,sana+sana

CloseFile f

Code: Select all

in=OpenToRead("test.txt") //tiedosto josta luetaan rivit
out=OpenToWrite("test2.txt") //tiedosto johon kirjoitetaan muunneltu teksti
While Not EOF(in) //käydään tiedostoa läpi kunnes rivit loppuu
    Dim rivi As String //muuttuja johon tallennetaan rivi muokkauksen ajaksi
    //ei välttämättä tarpeellinen, sillä seuraavat kolme riviä voisi kirjoittaa myös yhdelle riville:
    //Writeline out,Replace(ReadLine(in),"Korvattava teksti", "Korvaava teksti")
    rivi=ReadLine(in) //luetaan yksi rivi tiedostosta
    rivi=Replace(rivi,"Korvattava teksti", "Korvaava teksti") 
    //muokataan riviä korvaamalla "korvattava teksti"-esiintymät "korvaava teksti"-esiintymällä
    WriteLine out,rivi //kirjoitetaan muokattu rivi toiseen tiedostoon
Wend

CloseFile in
CloseFile out
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 »

Code: Select all

f=OpenToEdit("testi.txt")

m$=ReadLine(f)

If GetWord(m,1)="sana" Then sana=Replace(m,"sana","testi")

SeekFile f, 0
WriteLine f,sana

CloseFile f
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Tein Temun koodista uuden version joka tukee montaa riviä:

Code: Select all

    Dim m$
    
    f=OpenToEdit("testi.txt")
        While Not EOF(f)
            m = m + ReadLine(f)+Chr(10)+Chr(13)
        Wend
        SeekFile f, 0
        WriteLine f,Replace(m,"sana","testi")
    CloseFile f
Olettaen tietenkin, että sanan muutoksen halutaan koskevan koko tiedostoa.
metsien mies

Re: Tyhmät kysymykset

Post by metsien mies »

Kuinkahan voisi tehdä puiden kaadon, siis ylhäältäpäin kuvattuun peliin. Pitäs siis saada tehtyä niin, että pelaajan pitää ite valkata mistä kohdasta katkasee kun puu on kaadettu (se kaadettu puu olisi aluksi kokonaan oksien peitossa, mutta miten voin tehdä niin, että kun puu menee kouran läpi, niin siltä kohdalta lähtevät oksat pois? Jotenkin varmaan paintobjectilla, mutta en osannut ite.), ja kun puun katkasee, niin maahan ilmestyy pölli sille kohdalle jossa koura on katkaissut sen, ja se alkuperäinen puu tietysti lyhenisi. Öö... :D
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Tyhmät kysymykset

Post by Koodiapina »

Nyt tuntuu siltä, että olet melko hankalan projun ottanut itsellesi. Esimerkiksi ylhäältäkuvatun puun lyhenemisen tekeminenhän on uskomattoman vaikeaa. Voisit sitä kuvata korkeintaan joillain maahan heijastuvalla varjolla. Myös se - että pelaaja valitsee mistä kohtaa puun katkaisee - on todella vaikeaa kuvata graaffisesti, kun kyseessä on ylhäältäkuvattu peli. Näin äkkiseltään tulisi mieleen, että varjot ja "leikkuuosien" skaalaus voisivat antaa jonkinlaista vaikutelmaa. Oksat taas on helppo tehdä, luodaan vaikkapa typeillä puihin oksia sojottamaan joka suuntaan. Sitten vain tarkistetaan, että mistä kohtaa ruvettiin sahailemaan ja poistellaan oksia tarvittaessa. Oksillekkin saisi jotain 3D vaikutelmaa aikaiseksi varjostuksilla, mutta kuten sanottu, todella vaikeaa.
minä täällä

Re: Tyhmät kysymykset

Post by minä täällä »

moi. minulla on räiskintäpeli työn alla, joka on muuten valmis, mutta en saa ammusta tuhoutumaan sen osuessa (type)vihuun. osaisiko kukaan sanoa miten sen saa aikaiseksi?
minä täällä taas

Re: Tyhmät kysymykset

Post by minä täällä taas »

lisäyksenä edelliseen, tässä kyseinen koodinpätkä, joka MAV:ittaa For luoti.AMMUS = Each AMMUS
ammustuhottava = 0
MoveObject luoti\obj,10
For vihulainen.VIHU = Each VIHU
If ObjectsOverlap (vihulainen\obj,luoti\obj) Then
vihulainen\health -1
DeleteObject luoti\obj
If vihulainen\health<1 Then
DeleteObject vihulainen\obj
Delete vihulainen
Delete luoti
EndIf
EndIf
Next vihulainen
Next luoti
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Tyhmät kysymykset

Post by Nemesis »

Tee näin:
[code]
koodia...
[/code]

Ei näin:
[code][/code]
koodia...
[code][/code]
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.
Locked