[ Mikky @ 09.08.2001. 01:29 ] @
ok svi znate onu igricu zmija sa tetrisa, nokia telefona, gameboya i sl.
ja sam pokusao da je napravim cisto da vidim da li cu moci jer nesto prostije od toga mislim da ne postoji

e sad treba mi pomoc posto sam vec poceo da se nerviram jer nece sve da radi kako treba
evo coda

Code:

#include <conio.h>            //potrebno zbog getch()
#include <dos.h>            //potrebno zbog delay()

#define ZUTA 44                  //zuta boja
#define CRNA 1                //crna boja
#define DUZINA 50            //duzina zmije

void setmode(int mode);            //za menjanje gragf modova
void pp(int x,int y, unsigned char c);  //za iscrtavanje pixela na ekranu

int main(){

   int x=50, y=50;                //pocetne kordinate zmije
   int xb,yb;                    //kordinate poslednje tacke na zmiji koju treba pocrneti (izbrisati)    

   setmode(0x13);                //prebacujem se u video mod

   for(int i=x+DUZINA; i!=x; x++)        //ovaj loop iscrtava pocetni polozaj zmije
     {
    pp(x,y,ZUTA);
     }

    for(;;)                    //ovaj loop animira kretanje zmije
        {
              pp(x,y,ZUTA);        //putpixel zute boje na sledecu tacku
          pp(xb,yb,CRNA);    //putpixel crne boje na poslednju tacku tj
                    //obrisi je (jer je pozadina takodje crna)
          delay(20);        //20 milisec izmedju svakog iscrtavanja pixela....brzina igre

                  if (kbhit() != 0)    //kbhit proverava da li je pritisnuto neko dugme
             {
            char c = getch();            //ako jeste zovi getch() da primi koje dugme
            if (c==27) break;        //ako je to dugme escape (39 dec) prekini loop

/**************************************************************************
obradjivanje tastera koji je pritisnut
u zavisnosti od njega promeniti smer zmije

            if (c=='2') {   }        // dole
            if (c=='4') {   }        // levo
            if (c=='6') {   }        // desno
            if (c=='8') {   }        // gore

***************************************************************************/




                 }

        }

return 0;

}



/**********************************************************************
 * Funkcija "void setmode(int mode)" postavlja trazeni video mod
 * 0x13 - 320x200x256
 * 0x03 - dos text mode
 **********************************************************************/

void setmode(int mode)
{
    asm {
    mov ax,mode    //vrednost ax odredjuje video mod
    int 0x10        //prebacuje u zeljeni video mod
    }
}


/************************************************************************
 *        Iscrtava pixel na ekranu, asm code            *
 ************************************************************************/    

void pp(int x,int y, unsigned char c)
{   asm {                           
    mov ax, 0xA000
    mov es, ax
    mov bx, [x]
    mov dx, [y]
    xchg dh, dl
    mov al, [c]
    mov di, dx
    shr di, 2
    add di, dx
    add di, bx
    stosb
    }
}




ok znaci ovo je recimo 2% celog programa (treba jos tu da dodje okvir, bube, textualni intro, top scores...) ali to je ono glavno sve ostalo je posle laksi deo
dakle treba mi pomoc oko proracunavanja pixela koji ce da se obrise, onda oko kretanja zmije i pomoc oko obrade pritisnutog tastera
ja sam probao ovo da resim ali.....evo na koji nacin
Code:

int x2, y2 ;            //ovo su bile kordinate koje sam dodavao na x i y..kao neki offset

pp(x+x1, y+y1, BOJA);        //ovo bi iscrtavalo nove pixele

pp(x+x1-DUZINA+y2, (y+y1)-y1, CRNA)      //ovo bi brisalo poslednji pixel
                    //tj ovo "x+x1-DUZINA+y2" je proracun x ose poslednjeg
                    //pixela a "(y+y1)-y1" y ose...nepitajte me kako 
                    //sam dotle dosao jer ne znam ni ja sam i znam da neradi!!!

if (kbhit() != 0)    
     {
    char c = getch();            
    if (c==27) break;    //escape quit
    
    if (c=='2')         //user je pritisnuo 2 tj smer DOLE znaci zaustavljam 
                //povecavanje/smanjenje x ose i povecavam y 
                //(y se povecava na dole posto su kordinate 0,0 u 
                //gornjem levom uglu ekrana)
        {  
          y2++;     //y2 = 1
          x2=0;        

    /* za ostale smerove nisam uradio jer sam hteo da prvo probam sa ovim
        pa sam mislio poslecu lako za ostale...al ni ovaj nisam uspeo*/


        }
      }

  if (y2!=0) y2++;    //znaci ako je y2!=0 onda vrsim pomeranje po y osi
  if (x2!=0) x2++;    //takodje i za x

}        





takodje me zanima u opste da li je dobar nacin ili se sve to radi na neki drugi jednostavniji, skolskiji nacin?
da li je sama programska shema i ideja dobra ili losa?

kompajler: borland turbo c++ za dos
[ kajla @ 09.08.2001. 13:14 ] @
Ta igrica se neradi u Grafickom modu vec u text-ulanom. Pogledaj ASCII tablicu pa vidi koji se karakteri koriste za iscrtavanje tela zmijice. Daleko je lakse raditi to u text modu. Imam Source code te igre za DOS ali u QBasicu...mogao bi da pogledas cak iako neznas basic...cisto da vidis kako radi.

poz.


[Ovu poruku je menjao kajla dana 08-09-2001 u 01:16 PM GMT]
[ kajla @ 09.08.2001. 13:19 ] @
E da ako hoces da pravis igru u grafickom modu onda je najbolje da
probas da napravis igru Gorilas (valja se tako pise) ta igra je postojala pod DOS...znas one dve gorile koje se gadjaju bananama...imam source i za tu igru

poz.
[ Mikky @ 09.08.2001. 13:20 ] @
posalji mi na [email protected] mada vec imam source u c za taj textualni mod i ruzan je samo tako
ovo radim cisto iz vezbe da malo pokusam nove stvari a ne da uradim najlakse moguce
[ Milan Aksic @ 09.08.2001. 13:28 ] @
Citat:
kajla je napisao:
E da ako hoces da pravis igru u grafickom modu onda je najbolje da
probas da napravis igru Gorilas (valja se tako pise) ta igra je postojala pod DOS...znas one dve gorile koje se gadjaju bananama...imam source i za tu igru

poz.


Ako je ta igra 'Gorilas' u c-u posalji i meni.
Pozdrav.
[ kajla @ 10.08.2001. 19:11 ] @
Citat:
passanger je napisao:
Citat:
kajla je napisao:
E da ako hoces da pravis igru u grafickom modu onda je najbolje da
probas da napravis igru Gorilas (valja se tako pise) ta igra je postojala pod DOS...znas one dve gorile koje se gadjaju bananama...imam source i za tu igru

poz.


Ako je ta igra 'Gorilas' u c-u posalji i meni.
Pozdrav.


Nije u c-u nego u Basicu...ali ima sve kometare tako da bi relativno
lako bilo da se preradi u C.

poz.
[ tOwk @ 12.08.2001. 03:07 ] @
kajla, moram da ti izrazim postovanje, posto vidim da si ti jedini ovde upoznat sa fantasticnim "nibbles" i "gorilla" (ili kako vec).

Pa ove igre su svakom korisniku DOS 5.x (mozda i 6.x) bile date zajedno sa QBasic interpreterom. Svaka je bila sa source kodom, i imala je dosta opcija. Ko god je hteo da pravi tako nesto, to bi mu bilo odlicna referenca.

A sto se tice samog pisanja takvog programa, moras znati tacno koji se pikseli koriste za zmijicu non-stop, to ti preporucujem da drzis u jednoj listi (i uvek poslednji element izbacujes iz liste, i naravno prvo obojis te piksele crnom). Kao sto mnogi znaju, najteze je citati tudji kod i zato to preskacem, i dajem samo savete kako bih ja to uradio.

Sto se tice same igre zmijica, ona se uvek implementira pomocu fiksnih osnovnih blokova (u tekst modu, jedan karakter, ti bi mogao koristiti recimo 4x4 piksela kvadrat u 320x240 rezoluciji), i pomeraj se vrsi za tacno jedan kvadrat, sto znatno olaksava implementaciju. Na ovaj nacin bi ekran sirine 320, i visine 240 piksela oznacio koordinatnim sistemom od 80x60 kvadrata, i bilo bi potrebno u listi polja koja zauzima zmijica da drzis samo koordinate svakog polja. Tako, pri pomeraju zmijice, obrises poslednji element zmijice, i dodas novi na pocetak liste sa odgovarajucim koordinatama.

Ako bi ti bas bilo od znacaja, mogao bih se potruditi da to i napravim (istina ne verujem, posto vidim da se sam bavis time).

A zasad, toliko.
[ tuzlaorg @ 13.08.2001. 03:23 ] @
e, ne kontam zasto koristis ASM u C-u?
Objasni mi to
[ kajla @ 13.08.2001. 14:38 ] @
Pa sto da ne koristi ako se bolje snalazi sa ASM-om...

poz.
[ Mikky @ 15.08.2001. 00:30 ] @
ovako, nisam bio par dana na netu jer sam bio zauzet mukotrpnim radom na razvijanju ove igre ;)) salim se samo mi je ponestalo vremena

sad da odgovorim ljudima
towk: ok napravio sam igru tj onaj glavni deo (da nekazem engine) znaci iscrtavanje zmije, kretanje, detekciu sudara, jedenje kockica itd...ostaje mi jos malo da se bavim onim sporednim delovima programa tj textualnim kao sto su top score, uvodni meniji itd...posto sam graficki deo zavrsio
prvo sam bio izgubljen u pokusaju jer nisam imao ideju kako to da uradim a onda mi je neki lik sa useneta pomogao tj rekao mi da napravim strukturu tacke i onda jedan array te strukture koji predstavlja zmiju...prilicno prosto u stvari
zatim proracunavam polozaj i pomeranje glave a sve ostale tacke u nizu dobijaju kordinate one tacke ispred nje tj prakticno pamtim polozaje tacaka gde se kretala glava i kroz njih iscrtavam telo
to sam sve sklopio u 320x200x256 samo malo me sad nervira sto je debljina zmije samo jedna tacka pa onda izgleda previse tanko....jos kad treba da ubodem onu kockicu....ako me nebude mrzelo odradicu i taj deo da lepse izgleda


tuzlaorg: asm sam ovde koristio samo za 2 funkcije i to zato sto mi je mnogo lakse da preko njega prebacim ekran u graficki mod (u c++ kolko sam shvatio moras prvo da se petljas sa drajverima kartice ili tako nesto....sve me je to odvratilo a u asm je to 2 linije koda!), to je prva funkcija a druga mi sluzi da mi iscrta pixel na odredjenim kordinatama na ekranu i to odredjene boje, ovu funkciju sam pre svega koristio jero sam cuo graficke biblioteke u c++ dosta spore a i verovatno dosta komplikovanije bih ovo sve izveo da nisam koristio tu malu i efikasnu asm funkciju

nadam se da sam bio dovoljno jasan
postavicu igru sa sourcem na web kada budem pravio sajt
[ kajla @ 15.08.2001. 12:02 ] @
Ne bi bilo lose da postavis source i na ovaj forum...

poz.
[ Gojko Vujovic @ 15.08.2001. 14:38 ] @
Sa malim zakašnjenjem, i ja bih da pohvalim izuzetno zaraznu igru Gorillas koja, kako je t0wk već rekao, ide uz qbasic interpreter.
Baš bih voleo da to neko napiše u C-u..
[ Mikky @ 15.08.2001. 15:45 ] @
mogu ja da pokusam da je uradim u c++ uz savetovanje t0wka i malo iskusnijih ovde na forumu
inace postavicu source zmija na web pa cu javiti
[ tOwk @ 15.08.2001. 22:55 ] @
Ma moramo da napravimo mrezne verzije tih igrica, pa da se gadjamo sa zgrada, ali da se jurimo po raznim "lavirintima" :))

Ovo bi bila igra koja bi veoma malo mreznih resursa trosila, i zato mogla brzo da se igra na bilo kakvoj konekciji (i 2400bps je dovoljno :).

Ajde, ovo je vise ideja, tako nesto sigurno vec postoji, samo ga treba pronaci :)

A sto se tice tih tvojih zmijica, treba da napravis da stoji tvoja glava na čelu :), tako ce ti biti zanimljivije da juris njom kroz prostor.

Toliko.
[ tOwk @ 15.08.2001. 23:02 ] @
Kad smo vec kod toga, mislim da bi bilo zanimljivo i napraviti samo server za neku jednostavnu logicku igricu (zmijice, gorile, x/ox, sah i slicno), onda da se pozovu ljudi da prave svoje automatizovane "AI" igrace, i da se takmice ciji ce bolje da odigra i naravno da pobedi. Naravno, ovakva takmicenja bi se odrzavala najvise jednom nedeljno, a mozda i jednom mesecno.

Naravno, ovo je sve samo ideja za gubljenje vremena, posto iz ovakvog posla nista korisno ne moze izaci :) (mozda se moze nesto nauciti, recimo pravljenje klijent server programa :)

Toliko.
[ Mikky @ 15.08.2001. 23:23 ] @
ideje su ok ali koliko ljudi je ovde spremno da izdvoji vreme za programiranje toga + da li imamo ovako globalo gledano dovoljno znanja da sve to uradimo

inace to sto si pomenuo pravljenje AI rutina i onda se one medjusobno biju takva zezalica vec postoji, cinimi se da se projekat zove king of the hill i jezik na kome se pisu te AI rutine je nesto slicno asembleru, o tome je pisao i svet kompjutera pre godinu-dve
[ Gojko Vujovic @ 16.08.2001. 02:06 ] @
Ova poslednja tOwk-ova ideja me je podsetila na one robote sa BBS-ova.
Seća li se ko toga? Jel neko pravio svog robota?