| Autor | Správa |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: So 08.11.08 13:06 |   |
Mám novú otázku, nie je to problém ale čiste zo zaujímavosti. Ako ukladať data s hry? ako do Save Slotov v hre. Robím (zatial docela uspesne) jednu adventurku vo VB a síce nepotrebujem tam save keďže ide len o prvý diel série ale v Ďalších to už potreba bude takže preto sa pýtam. Hra je riešena dosť debilne prevažne rozne Visible = True/False a prepinanie sa medzi formami. samozrejme mám aj nejaký ten Modul a herný systém cez premenné a overovanie a tak. A tak sa pýtam či je možné niečo v takomto stave zaznamenať a uložit do nejakého Save suboru v subore s hrou.
Spočiatku som plánoval čosi že tam prednastavím 6 save suborov a to bude predstavovat 6 save slotov a pri ulozeni by som zapisoval do nich sucasny kod v akom stave je pocas hry prave a zaznamenal a pri nacitani opat nacital. ale to mi nepripada moc efektivne, neporadi mi prosim niekdo? |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: So 08.11.08 15:46 |   |
Myslim, ze pokial nemas nejaku moc komplikovanu hru tak staci iba trochu prace so subormi.
Napr.: Vzdy ked klikne hrac na "save" tak sa vytvori novy subor (bude sa volat napr. 08.11.2008.dat - datum, moze tam byt hociaka koncovka) a do toho suboru sa budu ukladat hodnoty, ktore po "load game" potrebujes pre spravne spustenie nacitanej hry (napr. skore, poloha panacika, veci panacika atp.) A jednoducho budes citat zo "save suboru" po riadkoch informacie a nastavovat ich na formulari.
Ak by si este chcel, mozes si ten subor sifrovat nejak aby sa nedal subor upravit v notepade napr. tak, aby hrac mal co ja viem score 1000000.
Ak by ta hra bola zlozitejsia, bolo by to uz komplikovanejsie. Na nete najdes urcite par zdrojakov, ktore ti ukazu ako to asi funguje. Osobne sa na hry moc nezameriavam, takze neviem ti blizsie poradit.
edit: Ak myslis zapisovanie do exe suboru hry, tak to je za behu programu nemozne a navyse neprakticke  |
| |
  |
 |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: Ne 09.11.08 22:37 |   |
a nemohol by si mi dat nejaky link na tutorial pre funkcie na pracu zo subormi? velmi by si mi pomohol, raz som jeden taky cital ale jedine co som si zapametal z neho bolo Kill "subor"
a este to sifrovanie, ako to zasifrovat + pri citani s toho zase odsifrovat aby si to hra vedela precitat |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: Ne 09.11.08 23:07 |   |
|
  |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: Ne 09.11.08 23:14 |   |
|
  |
 |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: Po 10.11.08 15:31 |   |
kukam ze je to tazsie nez som si myslel...ale mohol by si mi s niecim poradit. mam nieco taketo:
| kód: | Dim Subor As Integer
Private Sub Command1_Click()
Subor = FreeFile
Open "C:\hh.txt" For Output As #Subor
Print #Subor, "nejaký text"
Close #Subor
End Sub |
Ale mám k tomu otázku, prečo vždy keď to spustím sa to do suboru vlozi len raz?? myslím tým len raz sa to tam vloží a ked chcem znova už sa nič nestane.
Dalej nejde mi moc otvorenie a zaznamenanie suboru. je to klasicky takto:
| kód: | Dim Subor As Integer
Subor = FreeFile
Open "C:\XXX.txt" For Output As #Subor |
a toto mi ide, ale nedari sa mi na to aplikovat funkciu Line Input. ktora precita jeden riadok zo suboru a zaznamena do premennej typu String.
a k tomuto mám tiez otázku, co ak potrebujem precitat viac riadkov? ako by taky kod vyzeral?
+ to iste pri zapisovani do suboru (vyssie) jak zapisat nieco do viacerych riadkov?? |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: Po 10.11.08 20:55 |   |
| B.A.X.O napísal: | kukam ze je to tazsie nez som si myslel...ale mohol by si mi s niecim poradit. mam nieco taketo:
| kód: | Dim Subor As Integer
Private Sub Command1_Click()
Subor = FreeFile
Open "C:\hh.txt" For Output As #Subor
Print #Subor, "nejaký text"
Close #Subor
End Sub |
Ale mám k tomu otázku, prečo vždy keď to spustím sa to do suboru vlozi len raz?? myslím tým len raz sa to tam vloží a ked chcem znova už sa nič nestane.
|
####
K tomuto: Robi to preto, lebo VB otvori subor hh.txt ako output a na dalsom riadku kodu tam vlozi hodnotu "nejaky text". Tym padom prepise vsetko co bolo v tom subore doteraz. Ak chces zapisovat znova a znova, musis si najprv precitat hodnotu suboru a az potom tam zapisovat a pouzivat neco ako:
| kód: | Dim textova_hodnota As String
Dim co_chcem_zapisat As String
Dim FF
FF = FreeFile
co_chcem_zapisat = "nejaky text"
Open "hh.txt" For Input As #FF
Do While Not EOF(iFileNo)
Input #FF, textova_hodnota
Loop
Close #FF
Open "hh.txt" For Output As #FF
Print #FF, textova_hodnota & vbNewLine & co_cchem_zapisat
Close #FF |
####
| B.A.X.O napísal: |
Dalej nejde mi moc otvorenie a zaznamenanie suboru. je to klasicky takto:
| kód: | Dim Subor As Integer
Subor = FreeFile
Open "C:\XXX.txt" For Output As #Subor |
a toto mi ide, ale nedari sa mi na to aplikovat funkciu Line Input. ktora precita jeden riadok zo suboru a zaznamena do premennej typu String.
a k tomuto mám tiez otázku, co ak potrebujem precitat viac riadkov? ako by taky kod vyzeral?
+ to iste pri zapisovani do suboru (vyssie) jak zapisat nieco do viacerych riadkov?? |
Skusme to na konkretnom priklade ..
Na form si daj
MultiLine text1
Command1 -> Command1.caption = "Citaj"
Po kliknuti na citaj sa ti nacita obsah suboru "data.txt", v ktorom sa nachadza viacriadkovy text. Ku kazdemu riadku prida aj cislo riadku.
Ak som na nieco zabudol, napis
| kód: |
Private Sub Command1_Click()
Dim subor As String
Dim ff As Integer
Dim riadok As String
Dim cely_text As String
Dim i As Integer
subor = "C:\Program Files\Microsoft Visual Studio\VB98\read\data.txt"
ff = FreeFile
Open subor For Input As #ff
i = 1
Do While Not EOF(ff)
Line Input #ff, riadok
riadok = i & ". " & riadok & vbCrLf
cely_text = cely_text & riadok
i = i + 1
Loop
Text1.Text = cely_text
Close #ff
End Sub
|
|
| |
  |
 |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: Ut 11.11.08 17:57 |   |
strasne ti dakujem si mi pomohol dík. ale este jednu otázku, nakoniec ved preda to o com sa tu bavime je prospesne aj pre inych kedze VB je uz tabu sa da povedat. ako to je s gif animaciami? našiel som si knižnicu AniGif.ocx a funguje jak ma, no problem je v tom že je Unregistered. a nejdu na to moc ani cracky alebo pod, som skúšal. Ono by to ani nevadilo lebo to funguje jak má, ale vždy pr ispusteni exe sa hodi tabulka o unregistered a pod. takže to tam nemoze byt, teda ci nevies este o niecom inom co by mi pomohlo? dik
a este mám kod:
| kód: | Dim Subor As String
Private Sub Command1_Click()
Subor = FreeFile
Open "C:\tt.txt" For Output As #Subor
Print #Subor, "nejaký text"
Close #Subor
End Sub
Private Sub Command2_Click()
Text1.Text = Subor
End Sub |
ale nepochopil som prečo ked preniesiem obsah suboru do ktoreho som zapisoval sa ukaze len 1 v textboxe . ved to nepocita riadky...
a skusal som aj typy: Integer a Long. ale nic, myslel som ze je to v tom ale zrejme nie |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 |
| B.A.X.O napísal: | strasne ti dakujem si mi pomohol dík. ale este jednu otázku, nakoniec ved preda to o com sa tu bavime je prospesne aj pre inych kedze VB je uz tabu sa da povedat. ako to je s gif animaciami? našiel som si knižnicu AniGif.ocx a funguje jak ma, no problem je v tom že je Unregistered. a nejdu na to moc ani cracky alebo pod, som skúšal. Ono by to ani nevadilo lebo to funguje jak má, ale vždy pr ispusteni exe sa hodi tabulka o unregistered a pod. takže to tam nemoze byt, teda ci nevies este o niecom inom co by mi pomohlo? dik
|
V referenciach si najdi GIF ActiveX, malo by byt original od Microsoftu.
| B.A.X.O napísal: |
a este mám kod:
| kód: | Dim Subor As String
Private Sub Command1_Click()
Subor = FreeFile
Open "C:\tt.txt" For Output As #Subor
Print #Subor, "nejaký text"
Close #Subor
End Sub
Private Sub Command2_Click()
Text1.Text = Subor
End Sub |
ale nepochopil som prečo ked preniesiem obsah suboru do ktoreho som zapisoval sa ukaze len 1 v textboxe . ved to nepocita riadky...
a skusal som aj typy: Integer a Long. ale nic, myslel som ze je to v tom ale zrejme nie |
1.) Ten kod mas zle... Do FreeFile nemozes zapisovat string.
FreeFile = 1 vacsinou, nemoze to byt string, musi byt integer alebo long
#Subor = 1, a je to oznacenie handle suboru, cize nemozes tam zapisovat data z txt suboru.
Ak nieco chyba, napis, uz je neskoro mozno som na nieco zabudol. |
| |
  |
 |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: St 12.11.08 10:19 |   |
no to je všetko pekné ale...ako teda zobrazit data z txt suboru do textboxu? ist to predsa musi...mám chybu vo formate freefile? ale ja som nevedel ze su este ine |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: St 12.11.08 11:10 |   |
neviem, ci si si vsimol ten kod co som ti napisal vyssie ... cita vsetky data PO RIADKOCH z textoveho suboru a prida ku kazdemu riadku cislo riadku ...
Vysledny text zapise do textboxu
| kód: |
Private Sub Command1_Click()
Dim subor As String
Dim ff As Integer
Dim riadok As String
Dim cely_text As String
Dim i As Integer
subor = "data.txt"
ff = FreeFile
Open subor For Input As #ff
i = 1
Do While Not EOF(ff)
Line Input #ff, riadok
riadok = i & ". " & riadok & vbCrLf
cely_text = cely_text & riadok
i = i + 1
Loop
Text1.Text = cely_text
Close #ff
End Sub
|
|
| |
  |
 |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: St 12.11.08 13:25 |   |
| Patkoo napísal: | neviem, ci si si vsimol ten kod co som ti napisal vyssie ... cita vsetky data PO RIADKOCH z textoveho suboru a prida ku kazdemu riadku cislo riadku ...
Vysledny text zapise do textboxu
| kód: |
Private Sub Command1_Click()
Dim subor As String
Dim ff As Integer
Dim riadok As String
Dim cely_text As String
Dim i As Integer
subor = "data.txt"
ff = FreeFile
Open subor For Input As #ff
i = 1
Do While Not EOF(ff)
Line Input #ff, riadok
riadok = i & ". " & riadok & vbCrLf
cely_text = cely_text & riadok
i = i + 1
Loop
Text1.Text = cely_text
Close #ff
End Sub
|
|
Ano máš pravdu díky, ale ten tvoj kod má jednu chybu. Ked kliknem na tlačitko co ma spravit ten tvoj script, tak mi vypise normalne obsah suboru data.txt:
nejaký text
nejaký text
a výsledna podoba v textboxe je:
1.nejaký text
2.nejaký text
ale ked to tlačítko spustím znova tak sa tam pridá toto:
1.nejaký text
2.nejaký text
1.nejaký text
a to je problém lebo by mi to mohlo spravit bordel v save subore. Domnieval som sa že je to tým Loop teda opakovat, ale ked som to odstranil hodilo chybu, v dosledku toho cyklu Do while. tak som odstranil Do a na koniec scriptu miesto Loop som dal Wend. ale, script napisal chyu Bad file name or number...
takze neviem, asi som fakt lama:D a snazim sa tu riesit to na co nemam
PS: cisla riadkov nie sú nutné
a nedalo by sa to previest do podoby ze tie dva riadky s data.txt ulozim do dvoch premenných ktoré potom zobrazím do textboxu? |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: St 12.11.08 16:16 |   |
jo sorry.. musis si vynulovat integer i na 1 vzdy pred kazdym kliknutim na skript, taktiez musis pridat na zaciatok Command1_Click riadok: Text1.text = ""
Urcite sa to da ...
na form si daj 3 tlacitka a jeden textbox, do ktoreho budes zadavat cislo riadku, ktory sa ti vypise.
Budem pouzivat Polia (Arrays).
| kód: |
Dim riadok(0 To 100) As String
Private Sub Command1_Click()
Dim subor As String
Dim file_handle As Integer
file_handle = FreeFile
subor = App.Path & "\data.txt"
Open subor For Input As #file_handle
i = 0
Erase riadok
Do While Not EOF(file_handle)
Line Input #file_handle, riadok(i)
i = i + 1
Loop
Close #file_handle
End Sub
Private Sub Command2_Click()
Dim cislo As Integer
cislo = Text1.Text
If cislo = 1 Then cislo = 0
If riadok(cislo) = "" Then
Else
MsgBox riadok(cislo)
End If
End Sub
|
|
| |
  |
 |
B.A.X.O
 Užívateľ
 Založený: 22.01.2008 Príspevky: 426 Bydlisko: Bratislava - Petržalka
 | Zaslal: Št 13.11.08 18:15 |   |
hm docela zaujimavy script aj som ho sam trocha vyuzil...ale. kedze sa ucim nemozem len brat diela ostatnych preto napisal som toto:
| kód: |
Dim Premenna1 As String, Premenna2 As String
Dim Subor As Integer
Private Sub Command1_Click()
Subor = FreeFile
Open "C:\data.txt" For Input As #Subor
Line Input #Subor, Premenna1
Line Input #Subor, Premenna2
MsgBox Premenna1
MsgBox Premenna2
Close #Subor
End Sub |
dokonca je to aj funkcne, problem je v tom ze Msgbox zobrazi premenne inak ako chcem, teda najprv jedno vystrazne okno s textom Nejaky text a potom odkliknes ok a vzapeti druhe Nejaky text2.
mimochodom obsah suobru data.txt je:
Nejaky text
Nejaky text2
ano je to banalny problem, ale...chcel som obidve nejako natlacit do toho jedneho msgboxu ale neslo to...skusal som to niekolkymio sposobmi:
MsgBox Premenna1, Premenna2
MsgBox Premenna1 Or Premenna2
MsgBox Premenna1 And Premenna2
ale vzdy hlasi Run time error 13, type mismatch |
| |
    |
 |
Patkoo
 Užívateľ
 Založený: 02.11.2008 Príspevky: 85
 | Zaslal: Št 13.11.08 23:25 |   |
MagBox Premenna1 & vbNewLine & Premenna2 |
| |
  |
 |
|