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)
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 Subkenttä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.
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.
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 Subnoin tuossa on se koodini...
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 SubEli 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).
Aihe on jo aika vanha, joten et voi enää vastata siihen.