Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: FreeBASIC: tiedostot (FB)

jesse123 [21.04.2008 18:32:42]

#

Eli olen tekemässä freebasicilla omaa merkkipohjaista roolipeliä ja nyt haluaisin tietää, kuinka saisi järkevimmin tehtyä tiedostosta ladattavat kartat ja kuinka saisi muuttujat tallennettua talteen.

Mutta nyt ensisijaisesti jos selittäisitte, miten tiedostoon saa ladattua ja kuinka siihen tallenetaan tietoa. Tarvin ainakin, kuinka tiedostoon tallentaa muuttujia.

esim.

kartta(10, 10) = 2
kartta(11, 11) = 3

ja kuinka saisi ärkevimmin laitettua tiedot niin, että karttaa ladatessa ladattaisiin siellä olevat oliot (vihut sun muut, eli tallentaako eri tiedostoon vai samaan, kuin itse kartta)

Dude [21.04.2008 20:35:50]

#

Jos kentät on kaikki samankokoisia niin vaikka niin että joku numero tarkoittaa seinää jotkut olioita esim. näin:

Sub LataaKentta(map As String)
Open map For Input As #1
For l As Integer = 0 To 5
  For k As Integer = 0 To 5
    Input #1, kartta(l ,k)
  Next k
Next l
Close #1
End Sub

kenttätiedosto:

1 1 1 1 1
1 0 2 0 1
1 3 0 0 1
1 0 3 3 1
1 1 1 1 1

Jos kentät ei oo kaikki samankokoisia niin lsäät tiedoston alkuun kuinka korkea ja leveä se on.

jesse123 [22.04.2008 08:15:35]

#

kiitoksia tuosta koodista, joten sitä pitää kokeilla, mutta olisiko mahdollista saada yleisestikkin tiedoston latauksesta ja kirjoittamisesta, jotta oppisin hyödyntämään sitä muissakin asioissa.

jesse123 [22.04.2008 16:56:29]

#

Noniin kokeilin tuota ja melkein toimii (ei virheilmoituksia), mutta se ei vain suostu enää ajamaan peliä... Pelin koodi on seuraavanlainen, jos se auttaa löytämään ongelman. karttatiedosto on samanlainen, kuin antamassasi koodissa, paitsi se on kooltaan 80*35 ja siinä on maata ja seinää (testi nääs).

declare function nappaint () as string
declare function voiliikkua (y as integer, x as integer, oy as integer, ox as integer) as integer
declare sub kartanpiirto
declare sub kumitus (y as integer, x as integer)
declare sub liike (a as string)
declare sub lataakentta (map as string)

screenres 640, 400, 32  ' näytön asettelu

type olio  ' olio ryhmä, sisältää kaikki hirviöt, hahmo(t) jne...
    tyyppi as integer
    y as integer
    x as integer
    uy as integer
    ux as integer
end type

type tyyppi
    muoto as string * 1     ' merkki
    vari as integer         ' väri
end type

dim shared kartta(1 to 80,1 to 35) as integer
dim shared olio(1 to 10) as olio
dim shared oliom as integer
dim shared tyyppi(1 to 10) as tyyppi
dim i as integer
dim a as string
dim map as string

tyyppi(1).muoto = "O"       ' pelaaja
tyyppi(1).vari = rgb(255, 255, 000)
tyyppi(2).muoto = "O"       ' rosvo
tyyppi(2).vari = rgb(123, 123, 126)


map = "1.txt"
lataakentta(map)

oliom = 2

olio(1).tyyppi = 1
olio(1).y = 3
olio(1).x = 43
olio(1).uy = olio(1).y
olio(1).ux = olio(1).x

olio(2).tyyppi = 2      ' 2 on rosvo
olio(2).y = 2
olio(2).x = 3
olio(2).uy = olio(2).Y
olio(2).ux = olio(2).x


kartanpiirto

cls

do  ' pääsilmukka

    for i = 1 to oliom  ' olioiden piirto
        locate olio(i).y, olio(i).x
        color tyyppi(olio(i).tyyppi).vari   ' värin laitto
        print tyyppi(olio(i).tyyppi).muoto  ' olion väri
    next i

    a = nappaint    ' näppäinten tunnistus

    for i = 1 to oliom
        locate olio(i).y, olio(i).x
        kumitus(olio(i).y, olio(i).x)
    next i

    liike(a)

    for i = 1 to oliom
    if voiliikkua(olio(i).uy, olio(i).ux, olio(i).y, olio(i).x) then
        olio(i).y = olio(i).uy
        olio(i).x = olio(i).ux
    end if
    next i


loop    ' pääsilmukan lopetus

function nappaint () as string  ' näppäintunnistus
    dim a as string

    do
        a = inkey
    loop until a <> ""
    nappaint = a

end function

Function voiliikkua (y As Integer,  x As Integer, oy as integer, ox as integer) As Integer        ' törmäysfunctio

    dim i as integer

    voiliikkua = -1     ' Oletuksena voi liikkua, siis -1, ei liikkua on 0

    FOR i = 1 TO oliom                              ' Verrataan jokaisen hirviön koordinaatteja
        IF y = oy AND x = ox THEN         ' Jos ruudussa on hirviö
            voiliikkua = 0                                    ' ruutu on varattu
            EXIT FUNCTION
        END IF
    NEXT i

    If x < 1 Or x > 80 Or y < 1 Or y > 35 Then  ' ei voi liikkua seuraavilla alueilla ( reunatunnistus)
        voiliikkua = 0
        Exit Function
    End If

End Function

Sub kumitus (y As Integer,  x As Integer)   ' kumitus aliohjelma

    Dim piirto As Integer

    piirto = kartta(y, x)   ' piirto on x, y koordinaateissa sijaiteva luku
    kartta(y, x) = piirto   ' x, y koordinaateissa sijaitseva luku on piirto
    kartanpiirto            ' piiretään uudestaan

End Sub

Sub kartanpiirto    ' Kartanpiirto aliohjelma

    Dim i As Integer            ' Muuttujat määritetään
    Dim i2 As Integer
                                ' Kartan tarkistus
    For i2 = 1 To 35           ' y
        For i = 1 To 80        ' x
            Locate i2,  i
            If kartta(i, i2) = 0 Then Print " ";  ' maaksi piiretään .
            If kartta(i, i2) = 1 Then Print "#";  ' piirtää 1 kohtiin seinää
        Next i
    Next i2

End Sub

sub liike (a as string)

        Select Case a          ' näppäimet ja niiden toiminnot
            Case "a"           ' Vasemmalle
                olio(1).uy = olio(1).y
                olio(1).ux = olio(1).x -1
            Case "d"          ' Oikealle
                olio(1).ux = olio(1).x + 1
                olio(1).uy = olio(1).y
            Case "w"           ' Ylös
                olio(1).ux = olio(1).x
                olio(1).uy = olio(1).y - 1
            Case "s"           ' Alas
                olio(1).ux = olio(1).x
                olio(1).uy = olio(1).y + 1
            Case Chr(27)       ' Sulje ohjelma
                End
        End Select

end sub

Sub LataaKentta(map As String)
    Open map For Input As #1
        For l As Integer = 0 To 35
            For k As Integer = 0 To 80
                Input #1, kartta(k ,l)
            Next k
        Next l
    Close #1
End Sub

noin tuossa on se koodini...

Dude [26.04.2008 13:15:24]

#

Sub lataakentta(map As String)
    Open map For Input As #1
        For l As Integer = 1 To 35
            For k As Integer = 1 To 80
                Input #1, kartta(k ,l)
            Next k
        Next l
    Close #1
End Sub

Eli for-looppeihin nollien tilalle 1 ja cls ennen kartanpiirtoa
Edit: Niin siitä tiedostojen käsittelystä: open tiedostonimi for moodi as #numero(moodin kohdalle input(voi lukea),output(voi kirjoittaa),random(molemmat), binary),
input #numero, muuttuja(lukee tiedostosta),
write #numero, muuttuja(kirjoittaa tiedostoon tai writen tilalla käy myös print),
binäärissä put #numero, muuttuja(kirjoittaa tiedostoon binäärinä),
get #numero, muuttuja(lukee binäärintiedostosta),
close #numero(sulkee tiedoston).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta