Minolovec za DOS

Vse kar se tiče programiranja iger.
spinel
Prispevkov: 18
Pridružen: 02.09.2003 20:12:37

Minolovec za DOS

Odgovor Napisal/-a spinel » 06.03.2005 21:21:54

Evo tudi jst imam tko kot spica seminarsko nalogo pri APJ-ju. Sam d vas ze takoj razocaram-bi jo teu kr najvec sam nardit :) Ztu me zanima ce veste za kaksen delec kode minolovca iz winsov. Aja pa se vam zdi da je vezija za DOS lazja za nardit kakor una za win?

Za vase odgovore ter nerganje kako sem len se vam lepo zahvaljujem :))))))

Fortuna
Prispevkov: 1097
Pridružen: 26.06.2004 09:59:52

Minolovec za DOS

Odgovor Napisal/-a Fortuna » 07.03.2005 00:51:29

Mogoče bi pomagalo, če bi pred seminarsko nalogo, opravil še kakšen tečaj iz slovenščine.
Lp.

wastrin
Prispevkov: 436
Pridružen: 14.06.2003 16:27:17

Minolovec za DOS

Odgovor Napisal/-a wastrin » 07.03.2005 11:50:52

No mal nasvetov:

-za mrežo lahko uporabiš DrawGrid
-naključno generiraš bombe
-za vsako polje preveriš kolko bomb je u okolici in vrednosti zapišeš v en array
-potem pa za vsak klik na polje preveriš če je bomba. Če je pol izpišeš "game over" čene pa pač narišešu uno številko iz array-a

Ma se bova kj zmenila za kšno pivo :)

LP, Jure
trenuti projekt:
-----------------------------------------------------------------------
Reggae Player - http://sourceforge.net/projects/reggaeplayer
-----------------------------------------------------------------------

spinel
Prispevkov: 18
Pridružen: 02.09.2003 20:12:37

Minolovec za DOS

Odgovor Napisal/-a spinel » 07.03.2005 22:19:24

Wastrin: Probal bom, če mi bo uspelo naresti sam. Bi bil še tolko bolj vesel, ker bi se vsaj kaj naučil:D.
Druga pot so pa pive in kište pa platoji....

Bomo vidli.

wastrin
Prispevkov: 436
Pridružen: 14.06.2003 16:27:17

Minolovec za DOS

Odgovor Napisal/-a wastrin » 08.03.2005 09:39:49

Ja sej probaj nardit sam, če se ti zatakne pa povej, pa bomo pomagal.

LP, Jure
trenuti projekt:
-----------------------------------------------------------------------
Reggae Player - http://sourceforge.net/projects/reggaeplayer
-----------------------------------------------------------------------

spinel
Prispevkov: 18
Pridružen: 02.09.2003 20:12:37

Minolovec za DOS

Odgovor Napisal/-a spinel » 08.05.2005 18:40:48

No, sem sam spacal nekaj, kar naj bi bilo podobno minolovcu:) Sledi koda, zaželeno je da jo skritizirate in podate kakšen predlog (zalsti mi probleme povzroča lista najboljših igralcev, ter število min okrog praznega polja.

Koda: Izberi vse

  
program Minolovec;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  crt32;

type
        tab=array[1..40,1..40] of integer;
        zap1=array[1..40] of integer;
        zap=array[1..40,1..40] of integer;
        cas= TDateTime;
        TDateTime = type Double;
        najboljsi=record
                cas:TDateTime;
        end;
        tabela_najboljsi=array[1..10] of najboljsi;
var
        a,b:tab;
        c:zap1;
        e:zap;
        vel:integer;
        kx,ky:integer;
        x,y:integer;
        izbo,izb:integer;
        psk:integer;
        str1,str2:string;
        zac,konc,t3:TDateTime;
        ste:integer;
        zmg:integer;
        f:file of najboljsi;
        sez:tabela_najboljsi;

Procedure izris_tab(var vel:integer);
var i,i1,i2:integer;
Begin
        Randomize;
        For i:=0 to vel do
         begin
             if i=0 then write(' ')
             else write(i);
         end;
        For i1:=1 to vel do
         begin
         writeln;
          For i2:=1 to vel+1 do
           begin
                if i2=1 then
                write(i1) else
                write('*');
                a[i1,i2-1]:=random(2);
                if a[i1,i2-1]=1 then
                begin
                 c[i1]:=i1;
                 c[i2]:=i2;
                 e[i1,i2-1]:=1;
                end
                else
                    zmg:=zmg+1;
           end;
         end;
End;

Procedure vnos_xy_m(var kx,ky:integer);
Begin
        b[kx,ky]:=1;
End;

Procedure izris_zad_m(var kx:integer;var ky:integer);
var st,i1,i2:integer;
Begin
        st:=0;
        if b[kx,ky]=a[kx,ky] then
        begin
                gotoxy(kx+1,ky+2);
                write('m');
                 For i1:=1 to c[vel] do
                  begin
                   For i2:=1 to c[vel] do
                    begin
                          if b[i1,i2]=a[i1,i2] then
                          if (i1>0) or (i2>0) then
                           begin
                                gotoxy(i1+1,i2+2);
                                write('m');
                           end;
                    end;
                  end;

                ste:=ste-1;
                psk:=psk+1;
                gotoxy(vel+3,3);

                write('Stevilo vseh poizkusov: ',psk);
                gotoxy(1,vel+2);
                        gotoxy(vel+3,3);
                        write('Niste vnesli prave pozicije praznega polja, zato ste izgubili!');
                        readln;
                        izbo:=2;
        end
        else if b[kx,ky]<>a[kx,ky] then
                         begin
                                zmg:=zmg-1;
                                if (zmg=0) then
                                 begin
                                        gotoxy(vel+3,3);
                                        write('Bravo! Zmagali ste!');
                                        izbo:=2;
                                 end
                                 else
                               begin

                                if (kx-1<0) then st:=st;
                                if (ky-1<0) then st:=st;
                                if (kx+1>vel) then st:=st;
                                if (ky+1>vel) then st:=st;
                                if (ky+1<0) then st:=st;
                                if (ky+1<1) then st:=st;
                                if (kx+1<0) then st:=st;
                                if (kx+1<1) then st:=st;

                         {1}    if (kx=1) and (ky=1) then
                                begin
                                        if (a[kx+1,ky]=1) then st:=st+1;
                                        if (a[kx,ky+1]=1) then st:=st+1;
                                        if (a[kx+1,ky+1]=1) then st:=st+1;
                                        gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {2}    if ((ky=1) and ((kx+1<vel) or (kx+1=vel))) then
                                begin
                                      if (a[kx-1,ky]=1) then st:=st+1;
                                      if (a[kx+1,ky]=1) then st:=st+1;
                                      if (a[kx-1,ky+1]=1) then st:=st+1;
                                      if (a[kx,ky+1]=1) then st:=st+1;
                                      if (a[kx+1,ky+1]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {3}    if (kx=vel) and (ky=1) then
                                begin
                                      if (a[kx-1,ky]=1) then st:=st+1;
                                      if (a[kx-1,ky+1]=1) then st:=st+1;
                                      if (a[kx,ky+1]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {4}    if (kx-1=0) and (((ky+1<vel) or (ky+1=vel)) and ((ky-1>1) or (ky-1=1))) then
                                begin
                                      if (a[kx+1,ky]=1) then st:=st+1;
                                      if (a[kx,ky+1]=1) then st:=st+1;
                                      if (a[kx+1,ky+1]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {5}    if (kx-1>1) or (kx-1=1) and (ky+1<vel) or (ky+1=vel) and (ky-1<1) or (ky-1=1) then
                                begin
                                      if (a[kx-1,ky]=1) then st:=st+1;
                                      if (a[kx+1,ky]=1) then st:=st+1;
                                      if (a[kx-1,ky-1]=1) then st:=st+1;
                                      if (a[kx,ky-1]=1) then st:=st+1;
                                      if (a[kx+1,ky-1]=1) then st:=st+1;
                                      if (a[kx-1,ky+1]=1) then st:=st+1;
                                      if (a[kx,ky+1]=1) then st:=st+1;
                                      if (a[kx+1,ky+1]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {6}    if (kx=vel) and ((ky-1>1) or (ky-1=1)) and (ky+1<vel) or (ky+1=vel) then
                                begin
                                      if (a[kx-1,ky]=1) then st:=st+1;
                                      if (a[kx-1,ky-1]=1) then st:=st+1;
                                      if (a[kx,ky-1]=1) then st:=st+1;
                                      if (a[kx-1,ky+1]=1) then st:=st+1;
                                      if (a[kx,ky+1]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {7}    if (kx=1) and (ky=vel) then
                                begin
                                      if (a[kx,ky-1]=1) then st:=st+1;
                                      if (a[kx+1,ky-1]=1) then st:=st+1;
                                      if (a[kx+1,ky]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {8}    if (kx+1<vel) or (kx+1=vel) and (ky=vel) then
                                begin
                                      if (a[kx-1,ky]=1) then st:=st+1;
                                      if (a[kx+1,ky]=1) then st:=st+1;
                                      if (a[kx-1,ky-1]=1) then st:=st+1;
                                      if (a[kx,ky-1]=1) then st:=st+1;
                                      if (a[kx+1,ky-1]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end
                                else
                         {9}    if (kx=vel) and (ky=vel) then
                                begin
                                      if (a[kx-1,ky-1]=1) then st:=st+1;
                                      if (a[kx,ky-1]=1) then st:=st+1;
                                      if (a[kx-1,ky]=1) then st:=st+1;
                                      gotoxy(kx+1,ky+2);
                                write(st);
                                end;

                               end;
                                gotoxy(kx+1,ky+2);
                                write(st);
                                psk:=psk+1;
                                gotoxy(vel+3,3);
                                write('Stevilo neodkritih praznih polj: ',zmg);
                                gotoxy(vel+3,4);
                                write('Stevilo vseh poizkusov: ',psk);
                                        write;
                                        gotoxy(2,vel+4);
                                        write('1-ponoven vnos, 2-koncaj: ');
                                        write('                                       ');
                                        gotoxy(x+26,vel+4);
                                        readln(izbo);
                                        writeln;
                        end;
End;

Procedure izris_zad_z(var kx,ky:integer);
Begin
                gotoxy(kx+1,ky+2);
                write('z');
                gotoxy(vel+3,3);
                writeln('Stevilo neodkritih min: ',ste);
                gotoxy(1,vel+2);
                write('                              ');
                write;
                gotoxy(2,vel+4);
                write('1-ponoven vnos, 2-koncaj: ');
                write('                                 ');
                gotoxy(x+26,vel+4);
                readln(izbo);
                writeln;
End;

Procedure izris_zad_zp(var kx,ky:integer);
Begin
                gotoxy(kx+1,ky+2);
                write('*');
                gotoxy(vel+3,3);
                writeln('Stevilo neodkritih min: ',ste);
                write('                               ');
                gotoxy(1,vel+2);
                write;
                gotoxy(2,vel+4);
                write('1-ponoven vnos, 2-koncaj: ');
                write('                                     ');
                gotoxy(x+26,vel+4);
                readln(izbo);
                writeln;
End;

Procedure casi_igralcev(t3:TDateTime);
var
        i:TDateTime;
        stev:integer;
Begin
        I:=t3;
        for stev:=1 to 10 do
        begin
                if i<sez[stev].cas then
                sez[stev].cas:=I;
        end;
End;

Procedure Izpis_casov(sez:tabela_najboljsi);
var i:integer;
Begin
        gotoxy(2,vel+11);
        For i:=1 to 10 do
                writeln(' ',i,'. ',TimeToStr(sez[i].cas));
End;

Procedure osvezi_dat(sez:tabela_najboljsi); //pred repeat
var i:integer;
Begin
        assign(f,'najboljsi.dat');
        {$I-}
        reset(f);
        if IOResult<>0 then
         rewrite(f);
        i:=1;
        while not eof(f) do
        begin
                read(f,sez[i]);
                inc(i);
        end;
        {$I+}
End;

Procedure izhod_iz_programa(sez:tabela_najboljsi); //za until
var i:integer;
Begin
        //assign(f,'najboljsi.dat');
        rewrite(f);
        for i:=1 to 10 do
        write(f,sez[i]);
End;

Procedure meni_xy;
begin
        write(' Vnesi velikost tabele: ');
        readln(vel);
        izris_tab(vel);
        writeln;
        writeln;
        psk:=0;
        x:=2; y:=vel+4;
        osvezi_dat(sez);
        Repeat
        zac:= Time;
        str1:=timetostr(zac);
        writeln;
        writeln;
        gotoxy(x,y);
        write('Vnesi 1 za prazno polje, 2 za zastavico, 3 za izbris zastavice: ');
        gotoxy(x+63,y); write('                                         ');
        gotoxy(x+64,y);
        readln(izb);
        Case izb of
        1:begin
        writeln;
        gotoxy(28,vel+7); writeln;
        gotoxy(1,vel+6);
        write(' Vnesi koordinato x polja: ');
        gotoxy(1,vel+7); write('                                         ');
        gotoxy(28,vel+6); write('      ');
        gotoxy(28,vel+6); readln(kx);
        if (kx>vel)or(kx<=0) then
        begin
                writeln(' Nisi vnesel prave kooridnate!'); kx:=0;
        end
        else
            begin
                writeln;
                write(' Vnesi koordinato y: '); gotoxy(21,vel+8); write('  ');
                gotoxy(1,vel+9); write('                                         ');
                gotoxy(22,vel+8);
                readln(ky);
                if (ky>vel)or(ky<=0)  then
                begin
                        writeln(' Nisi vnesel prave kooridnate!');
                end
                else 
                begin
                writeln;
                vnos_xy_m(kx,ky);
                izris_zad_m(kx,ky);
                end;
            end;
        end;

        2:begin
                gotoxy(1,vel+6);
                write(' Vnesi koordinato x zastavice: '); gotoxy(32,vel+6); write('   ');
                gotoxy(1,vel+7); write('                                         ');
                gotoxy(32,vel+6);
                read(kx);
        if (kx>vel)or(kx<=0) then
        begin
                writeln(' Nisi vnesel prave kooridnate!'); kx:=0;
        end
        else
         begin
                gotoxy(1,vel+8);
                write(' Vnesi koordinato y: ');gotoxy(21,vel+8);write('  ');
                gotoxy(1,vel+9); write('                                         ');
                gotoxy(22,vel+8);
                readln(ky);
                if (ky>vel)or(ky<=0)  then
                begin
                        writeln(' Nisi vnesel prave kooridnate!'); ky:=0;
                end
                else
                begin
                     izris_zad_z(kx,ky);
                end;
         end;
        end;

        3:begin
                gotoxy(1,vel+6);
                write(' Vnesi koordinato x zastavice: '); gotoxy(32,vel+6); write('   ');
                gotoxy(1,vel+7); write('                                         ');
                gotoxy(32,vel+6);
                read(kx);
        if (kx>vel)or(kx<=0) then
        begin
                writeln(' Nisi vnesel prave kooridnate!'); kx:=0;
        end
        else
         begin
                gotoxy(1,vel+8);
                write(' Vnesi koordinato y: ');gotoxy(21,vel+8);write('  ');
                gotoxy(1,vel+9); write('                                         ');
                gotoxy(22,vel+8);
                readln(ky);
                if (ky>vel)or(ky<=0)  then
                begin
                        writeln(' Nisi vnesel prave kooridnate!'); ky:=0;
                end
                else
                begin
                     izris_zad_zp(kx,ky);
                end;
         end;
        end
        end;

        until izbo=2;
        konc:= Time;
        t3:=konc-zac;
        casi_igralcev(t3);
        str1:=TimeToStr(t3);
        gotoxy(2,vel+9);
        writeln('Porabljeni cas resevanja: ',str1,' h');
        Izpis_casov(sez);
        izhod_iz_programa(sez);
        readln;

end;

Procedure navodila;
Begin
        writeln;
        writeln(' Navodila');
        writeln;
        writeln(' Cilj igre je odkriti vsa prazna polja v tabeli. Prazna polja odkrivamo s');
        writeln(' pomocjo koordinat x in y.');
        writeln(' Ce odkrijemo polje z mino  se nam odprejo se ostala polja, pokrita z minami.');
        writeln(' Igra je v tem primeru izgubljena. Ce pa odkrijemo prazno polje se nam');
        writeln(' izpise stevilo min v okolici tega polja. Ce odkrijemo vsa prazna polja zmagamo.');
        writeln;
     writeln;
     writeln('               Pritisnite poljubno tipko za vrnitev v glavni meni.');
     readln;
End;

Procedure o_programu;
Begin
     writeln;
     writeln(' O programu');
     writeln;
     writeln(' Avtor: Aljaz Gec');
     writeln(' Mentor: Andrej Bagon, univ.dipl.inz.');
     writeln(' Razvojno orodje: Borland Delphi Enterprise 6.0');
     writeln(' Verzija: 1.0');
     writeln;
     writeln(' Dutovlje, Maj 2005');
     writeln;
     writeln;
     writeln('               Pritisnite poljubno tipko za vrnitev v glavni meni.');
     readln;
End;

Procedure izris_meni;
Begin
       clrscr;
       writeln;
       writeln('     ********************************************************************');
       writeln('     *                                                                  *');
       writeln('     *                           MINOLOVEC                              *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *           1...Izris tabele in vnos min ter zastavic              *');
       writeln('     *           2...Izpis do sedaj dosezenih rezultatov                *');
       writeln('     *           3...Navodila                                           *');
       writeln('     *           4...O programu                                         *');
       writeln('     *           5...Izhod                                              *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     *                                                                  *');
       writeln('     ********************************************************************');
       Gotoxy(34,14);
       Write('Izbira: ');
       readln(izb);
       if (izb<1) or(izb>5) then
        begin
                gotoxy(42,14);
                writeln('Nisi vnesel prave izbire!');
                readkey;
                clrscr;
                izris_meni;
        end
        else
        CASE izb OF
        1:begin
                clrscr;
                meni_xy;
                izris_meni;
          end;
         2:begin
                clrscr;
                meni_rezultati;
                izris_meni;
          end;
         3:begin
                clrscr;
                navodila;
                izris_meni;
           end;
         4:begin
                clrscr;
                o_programu;
                izris_meni;
           end;
         5:begin
                exit;
           end;
         end;
End;
Begin
        psk:=0;
        //najb[1]:=0;
        izris_meni;
end.
Hvala in LP
Zadnjič spremenil spinel, dne 08.05.2005 18:44:47, skupaj popravljeno 1 krat.

wastrin
Prispevkov: 436
Pridružen: 14.06.2003 16:27:17

Minolovec za DOS

Odgovor Napisal/-a wastrin » 08.05.2005 19:23:34

Ja no mal kompliciraš s tem konzolnim načinom. Veliko prej bi naredu z DrawGrid-om. Drugače pa neki sm sprobal za silo že dela. Za Andrejčka bo že uredu. :D
trenuti projekt:
-----------------------------------------------------------------------
Reggae Player - http://sourceforge.net/projects/reggaeplayer
-----------------------------------------------------------------------

spinel
Prispevkov: 18
Pridružen: 02.09.2003 20:12:37

Minolovec za DOS

Odgovor Napisal/-a spinel » 08.05.2005 21:18:32

Ja sej vem da kompliciram, sam do zdej so nas (nažalost) naučili delat samo v tem načinu:(. Nevem če mi bo uspelo dobit 2 ker ma igra par 'hroščev'.

wastrin
Prispevkov: 436
Pridružen: 14.06.2003 16:27:17

Minolovec za DOS

Odgovor Napisal/-a wastrin » 08.05.2005 22:34:18

Ma 2 boš že dobu oz. bi mogu saj si vsaj sam neki naredu za razliko od drugih. Je pa tko da te zmeri učijo neki takega kar ni treba oz. ni uporabno. Če se hočeš se morš naučit programiranja sam, u šoli ti dajo sam neko osnovo, neko osnovno logiko programiranja.
trenuti projekt:
-----------------------------------------------------------------------
Reggae Player - http://sourceforge.net/projects/reggaeplayer
-----------------------------------------------------------------------

M.C
Prispevkov: 630
Pridružen: 24.02.2003 14:27:43

Minolovec za DOS

Odgovor Napisal/-a M.C » 09.05.2005 07:11:10

v kodi piše: mentor ta pa ta, najbolj me je pri moji diplomi zjezalo da je bilo na koncu polno sodelujočih:evil: -- delal pa sem sam.

Če je že obelodanjen naj še nekaj mrdne:D, a ne ? Njega vprašaj.
Order is heavens first rule. Therefore some must be better than the rest.

Odgovori