PDA

Pogledaj cijelu verziju : Save/load



Filip_k
16-03-2008, 16:00
Dal može netko napisat kako da napravim save/load game u pascalu. Ako nezna nitko u pascalu tad može napisat u nekom drugom jeziku, pa ću probat odkodirat. Zahvaljujem se svima zainteresiranima.

Tracer
16-03-2008, 20:13
Pogledaj ovdje: viewtopic.php?t=21649 (http://www.pcplay.hr/forum/viewtopic.php?t=21649)

Na tebi je da odlučiš kako ćeš što spremati u datoteku tj. što ćeš iz nje čitati.

DragonSoul
16-03-2008, 20:23
Tu piše kako raditi sa C++, a njega zanima pascal. Pogledaj malo Input/Output u pascalu. Mislim da bi to trebalo biti to.

koki007
16-03-2008, 20:41
TYPE lik = RECORD
ime : string[8];
level : integer;
END;

TYPE data = FILE OF lik;
VAR datoteka : data;
igrac: lik;


(* SNIMA VARIJABLU IGRAC U SAVE.DAT *)

assign(datoteka, 'save.dat');
rewrite(datoteka);
write(datoteka, igrac);
close(datoteka);



(* CITA IZ SAVE.DAT U VARIJABLU IGRAC *)

assign(datoteka, 'save.dat');
reset(datoteka);
read(datoteka, igrac);
close(datoteka);

BTW mozes vise puta u datoteku upisivat varijablu tipa lik naredbom write(datoteka, igrac); , samo ce se dalje zapisivat poslije prve varijable

Isto tako mozes citati vise puta sa procedurom read()... funkciju eof(datoteka) , koristis da znas kad si dosao do kraja datoteke...

Filip_k
17-03-2008, 19:37
Hvala svima!

Nije ni cudo sto nisam znao, jer do toga još nismo došli, ali sam potrazio u knjigi i nasao.
To mi treba, zato sto sam jučer poceo raditi igru(za sad imam cca 500 redaka). Mislim da će priča biti zanimljiva, ali igrivost ono minimalac, jer nema nikakve grafike, jer još nisam u to dovoljno upučen. Probat ću ju napisat u više dijelova, ali ne kao epizode, već kao nastavak priče. Očekujte ju možda još ovaj tjedan.

Ajde da ne otvaram novu temu pa ću ovdje nastaviti...

Dal to mogu nekako pisat u vise dijelova(to se odnosi na samo pisanje programa). Npr. Jedan dio napišem do, recimo kod mene do treninga, i onda pređem na novi source file, ali da nemoram ponovno pisat variable i ta sranja, znači samo pomoću 1. sourca filea otvorim drugi i pišem na novi list.

Ako niste shvatili rečite, jer ću se tada malo bolje potruditi u opisu, pošto mi je to jako važno pri snalaženju u samom programu

DragonSoul
17-03-2008, 19:43
Misliš da imaš u jednom source fileu varijable koje ti trebaju, pa da ih možeš koristiti u kompletnom projektu? Vidiš, i ja sam imao taj problem za item database. U C++u se koristi #ifndef DATABASE #define DATABASE #endif//DATABASE(imaš bolje opisano u temi C++, gdje sam pitao) i pomoću riječi extern. Sad, pogledaj, možda ima nešto slično za pascal. I sretno u izradi, znam što te čeka!

Filip_k
17-03-2008, 19:57
Misliš da imaš u jednom source fileu varijable koje ti trebaju, pa da ih možeš koristiti u kompletnom projektu?SVidiš, i ja sam imao taj problem za item database. U C++u se koristi #ifndef DATABASE #define DATABASE #endif//DATABASE(imaš bolje opisano u temi C++, gdje sam pitao) i pomoću riječi extern. Sad, pogledaj, možda ima nešto slično za pascal. I sretno u izradi, znam što te čeka!

Na neki način i to ali ja sam mislio da u jednom source fileu napišem do nekog dijela igru, a u drugom neki drugi dio, ali da nemoram pisat ponovno variable, ako me kužite...

P.S. moram priznati da si mi ti dao ideju u izradi igre bez grafike. Jest da je ona igra Nik&Nak bilo dosta kratka, ali sam skužio princip kako bi to mogao napravit i u pascalu. Naravno priča nije niti slična onoj tvojoj, jer bi to bila kopija nečeg napravljenog, a to neželim. Dal možeš reči koliko ti je trebalo vremena za tvoju igru, čisto ono informativno me zanima?

DragonSoul
17-03-2008, 20:40
Hm...., ne znam, nisam jako upoznat sa pascalom(radio sam možda 3 tjedna u njemu), ali ako pascal ima nešto kao funkcije onda bi ti i preporučio da radiš u više source fileova. Ono, moja main funkcija ti izgleda ovako:


int main()
{
MainMenu();
return 0;
}

U biti ti praviš funkcije koje nešto rade, npr. izabuje ti radnom broj od 1 do 5 i vraća vrijednost random broja. Tako da imaš funkciju koja će ti uvijek dati radnom broj u varijablu tak da napišeš:


int Varijabla = Rand_num_1_5();

E, sad, nisam upoznat sa pascalom pa ti ne znam dobro objasniti.

Volim što sam nekog nadahnuo da ne dira game makere nego pravi vlasiti kod. Sad, u sourceu sam si zapisao da sam počeo 12.03.2008, pa sad pogledaj kad sam objavio. Epizoda 0 je služila u biti samo da ja vidim kako bi to radilo, a objavio sam je zato da vidim kako će "javnost" reagirati na to. Sretno u izradi, jer dok ti ne dođe onaj "ahaaaaa" momenat namučiti ćeš se. Ja sam dosta pisao dok mi je došao taj "ahaaaaa" moment, i od onda sam sve uspio ostvariti što sam probao. Eto, ako još što trebaš, javi, sigurno se nađe ovdje netko tko će pomoći :wink:

Pippen47
17-03-2008, 20:50
ehm, dragone samo da znas ja odavno pravim nesto svoje, text based avanturu... prije tebe sam poceo mislim. :D jos bi mogli i razmjenu iskustava i kodova mozda napraviti

DragonSoul
17-03-2008, 20:56
Ma, nećemo se sada prepirati tko je prvi šta izmislio...., nitko od nas nije izmislio žanr avanture, sad što nemamo znanja da to spakujemo u grafičko sučelje je naš problem :rotfl: A gle, što se tiće razmjene iskustva, to je uvijek dobro došlo :D

EDIT: 100x post, nije nešta pre važno, samo da naglasnim :)

Pippen47
17-03-2008, 20:57
tako je :D dodao sam te na msnu...

nego dosta smo offtopičarili, luka sry :killyou: nas

koki007
17-03-2008, 22:37
Dal to mogu nekako pisat u vise dijelova(to se odnosi na samo pisanje programa). Npr. Jedan dio napišem do, recimo kod mene do treninga, i onda pređem na novi source file, ali da nemoram ponovno pisat variable i ta sranja, znači samo pomoću 1. sourca filea otvorim drugi i pišem na novi list.

Ako niste shvatili rečite, jer ću se tada malo bolje potruditi u opisu, pošto mi je to jako važno pri snalaženju u samom programu

Ubaci naredbu (*$I NEKADATOTEKA.PAS *)

i onda ce ti se compailer ponasat kao da se sadrazaj iz te datoteke nalazi na tom mjestu gdje je ta naredba...

Filip_k
18-03-2008, 19:15
Dal to mogu nekako pisat u vise dijelova(to se odnosi na samo pisanje programa). Npr. Jedan dio napišem do, recimo kod mene do treninga, i onda pređem na novi source file, ali da nemoram ponovno pisat variable i ta sranja, znači samo pomoću 1. sourca filea otvorim drugi i pišem na novi list.

Ako niste shvatili rečite, jer ću se tada malo bolje potruditi u opisu, pošto mi je to jako važno pri snalaženju u samom programu

Ubaci naredbu (*$I NEKADATOTEKA.PAS *)

i onda ce ti se compailer ponasat kao da se sadrazaj iz te datoteke nalazi na tom mjestu gdje je ta naredba...
Brobal bum. ponovno hvala. Vidim da imaš dugogodišnja iskustva sa pascalom.

@DragonSoul: moram priznat da sam došel do onog Ahhhhaaaaa. Uglavnom došao sam do malo više od 600 redaka i kad najedamput zapnem na nečemu. Po logici bi to sve trebalo štimat, ali on meni uporno radi nešt sasvim deseto. Pročitao sam 3 puta cijeli program i na to potrošio više od sad i pol i nema nigdje grešaka. Moram priznat da sam poludio, jer sam došao gotovo do kraja prvog dijela kad ono takvo sranje. Probat ću još sutra nešto napravit ako nebudem uspio onda neznam kaj budem napravio, a baš sam se ufural :cry:

EDIT: oprostite kaj kasnim sa odgovorima, prošli mjesec sam nabio doma račun za internet malo veći, pa su mi moji ograničili internet na 30min. po danu, tak da sam ja uvijk na internetu između 7:10-7:40. Jadno znam, ali bolje išta nego išta

DragonSoul
18-03-2008, 19:53
...malo više od 600 redaka i kad najedamput zapnem na nečemu. Po logici bi to sve trebalo štimat, ali on meni uporno radi nešt sasvim deseto....
Ajde da nisam jedini. Tako je i meni bilo danas, ali nekako je proradilo, ne znam zašto i kako nit me zanima.
Moraš pazit s tim uključivanjima, jer ne znam kako je u pascalu, ali u C++u sam si ja već 2 godine skratio život zbog toga :twisted:

Filip_k
20-03-2008, 10:40
Dal to mogu nekako pisat u vise dijelova(to se odnosi na samo pisanje programa). Npr. Jedan dio napišem do, recimo kod mene do treninga, i onda pređem na novi source file, ali da nemoram ponovno pisat variable i ta sranja, znači samo pomoću 1. sourca filea otvorim drugi i pišem na novi list.

Ako niste shvatili rečite, jer ću se tada malo bolje potruditi u opisu, pošto mi je to jako važno pri snalaženju u samom programu

Ubaci naredbu (*$I NEKADATOTEKA.PAS *)

i onda ce ti se compailer ponasat kao da se sadrazaj iz te datoteke nalazi na tom mjestu gdje je ta naredba...

Ne radi sa onom naredbom, tj. otvori on meni taj drugi program, ali uvijek javlja grešku i nemogu dalje. Ako imaš neki kratak program(može i Hello) molim te postaj, jer se više u onom mojem programu nemogu snač, a ovo mi treba. :pray:

koki007
20-03-2008, 22:21
Evo:

glavna - PROBA.PAS :


PROGRAM proba;
USES CRT;

VAR a:INTEGER;

(*$I DATOTEKA.PAS *)


PROCEDURE PAUZA;
BEGIN
WRITELN('pritisni bilo koji gumb...');
REPEAT
UNTIL keypressed;
END;


BEGIN
WRITELN;
WRITELN('PROG V0.01');
datoteka;
PAUZA;
END.

DATOTEKA.PAS :


PROCEDURE PAUZA; FORWARD;
(*FOWARD SE KORISTI KADA SE ZELI KORISTIT NEKA PROCEDURA
ILI FUNKCIJA KOJA JOS NIJE DEFINIRANA STO INACE NIJE MOGUCE*)
PROCEDURE DATOTEKA;
BEGIN
WRITELN ('PROCEDURA IZ DRUGE DATOTEKE');
PAUZA; (*KORISTI SE PROCEDURA KOJA JE DEFINIRNA TEK POSLIJE OVE PROCEDURE*)
END;

Ovo sam probao i nebi trebalo javit gresku... sretno u programiranju... ;)

Filip_k
21-03-2008, 10:35
E puno hvala, neznam kaj bi ja bez tebe
:)