supaplex v pascale

Programovacie jazyky, rady, poradňa...
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

supaplex v pascale

Príspevok od používateľa BX »

Zdravim :) Tak som tu zase. Ako ste sa docitali, mam v umysle vyrobyt nieco ako supaplex :)
Pohyb a takto veci v pohode , problem mi roby ohrada a jedlo
Ohrada: neviem urobit taku vec ze po prejdeni na suradnice ohrady ma nepusti. Nechcem aby to bolo ako teraz ze sa prepise znak ohrady anapise nabural si. Chcem aby ma tam proste nepustilo. Rozmyslal som ze po prejdeni na suradnice ohrady ma vrati spat na suradnice pred nou ale to nejako neviem :oops: Ak by ste mi mohli poradit toto, alebo iny sposob bol by som silno stastny :)
Jedlo: Zase si nejako neviem poradit so suradnicami. Chcem aby sa vygenerovalo niekolko "O" a po zozrati aby sa za nejaku premennu pripocitala jednotka aby som potom mohol scitat a napisat kolko zozral.

Prosim skuste si to trochu prejst a poradit mi.
Prílohy
supaplex.rar
(6.26 KiB) 45 stiahnutí
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

k ohrade:

Kód: Vybrať všetko

procedure dolava;
begin
  if stl>2 then begin
     dec(stl);
     gotoxy(stl,ria);
     textbackground(black);
     write('>');
     a:=a+1;
   end;
end;
do podobných podmienok aj ostatné smery, len doprava bude stl<79, dole bude ria<21 a hore bude ria>2


tú žranicu by si mal ukladať do pola typu point a pamätať si kde bola vygenerovaná. Potom hladať súradnice či sú v poli, ak áno, tak som prešiel potravou.

//edit: teraz som zbadal že také podmienky tam máš v tom move
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Presne takto som sa to pokusal, len ty si to urobil tak o den skor :-D Dakujem velmi.
Tym polom som vedel ze sa to nejako da urobit, ale kedze polia neviem :oops: idem sa ich silou mocou naucit, pretoze furt len o nich. :) dakujem este raz.
Prosim uz mi tu nic nepiste ja to spravim sam...

//autoeditácia príspevku ( 09 Jan 2009, 15:49 )
Ok tak ako som pisal ze to chcem spravit sam... nespravim... neviem to ... je to strasne :cry:
Tagze ak by sa nejaka dobra dusa na to kukla a pomohla mi s tym co uz je pisane hore (myslim to jedlo, ohrada uz neplati)
Tagze ide mi o to ze uz "nejako" som to urobil, ale problem je ze ked tou suradnicou prejdem znovu, tak sa podmienka znovu splni a pripocita sa mi to tam znovu... Bud nejako eliminovat toto, alebo to urobit nejako lepsie (to co som urobil ja, povedzme, ze nieje uplne najlepsie riesenie :lol: ved uvidite)
Tagze budem silno vdacny ak sa na to niekto kukne a aspon pomoze s algorytom... :)
Prílohy
SUPAPLEX_BX.rar
(1.15 KiB) 29 stiahnutí
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

pridal som zozrane:array[1..10] of boolean; a zmenil procedúry zranica a move. Neviem ako ti zvýrazniť čo sa zmenilo, tak si to porovnaj so svojím. Niektoré veci tam aj tak robíš zbytočne a dalo by sa to efektívnejšie (aj toto čo som dorábal by som robil inač, ale keď sme ťa už dohnali k tým poliam, asi by na teba bolo vela keby poviem že to pole malo byť typu record :D tak som radšej pridal druhé pole)

Kód: Vybrať všetko

uses crt,dos;
type pole=array[1..10] of integer;
var stl,ria:byte;
    a,b:integer;
    i,j,k:integer;
    x,y:pole;
    zozrane:array[1..10] of boolean;

 { hide }
procedure hide;
var reg:registers;
begin
     reg.ah:=1;
     reg.ch:=32;
     intr($10,reg);
end;

 { end of program }
procedure koniec;
begin
     textbackground(lightgreen);
     textcolor(lightred);
     clrscr;
     gotoxy(20,10);
     write('This program was made by BX');
     gotoxy(20,11);
     write('( [email protected] )');
     delay(2000);
     halt;
end;

 { ohrada }
procedure ohrada;
  var i:integer;
  begin
  textcolor(black);
  write(chr(201)); for i:=2 to 79 do write(chr(205)); write(chr(187));
  for i:=2 to 21 do begin write(chr(186)); write(chr(186):79) end;
  write(chr(200)); for i:=2 to 79 do write(chr(205)); write(chr(188));
  textcolor(white);
  end;

 { inicializacia }
procedure inica;
begin
     stl:=33;
     ria:=12;
     gotoxy(stl,ria);
     write('<');
end;

 { smer }
procedure dole;
begin
  if (ria<21) then begin
     inc(ria);
     gotoxy(stl,ria);
     textbackground(black);
     write(#94);
     a:=a+1;
                   end;
end;

procedure hore;
begin
  if (ria>2) then begin
     dec(ria);
     gotoxy(stl,ria);
     textbackground(black);
     write('V');
     a:=a+1;
                  end;
end;

procedure doprava;
begin
  if (stl<79) then begin
     inc(stl);
     gotoxy(stl,ria);
     textbackground(black);
     write('<');
     a:=a+1;
                   end;
end;

procedure dolava;
begin
  if stl>2 then begin
     dec(stl);
     gotoxy(stl,ria);
     textbackground(black);
     write('>');
     a:=a+1;
                end;
end;

 { statistics }
procedure tabs;
begin
     gotoxy(60,24);
     textbackground(lightgreen);
     textcolor(lightred);
      if(a=2) then write('Presiel si ',a-1,' meter');
      if(a<6)and(a>2) then write('Presiel si ',a-1,' metre');
      if(a>5)or(a=1) then write('Presiel si ',a-1,' metrov');
     delay(1000);
     gotoxy(60,24);
     write('                                           ');
     gotoxy(60,24);
     write('Zjedol si: ',b:1,'/10');
     delay(1000);
     gotoxy(60,24);
     write('                                           ');
     gotoxy(stl,ria);
     textbackground(black);
     textcolor(white);
     write('<');
end;

 { food }
procedure zranica;
begin
for i:=1 to 10 do begin
  x[i]:=random(75)+2;
  y[i]:=random(20)+2;
  zozrane[i]:=false;
end;
end;


 { pohyb }
procedure move;
var klaves:char;
    i,l:integer;

begin
     zranica;
     for i:=1 to 10 do begin
                        gotoxy(x[i],y[i]);
                        textcolor(blue);
                        write(#5);
                        textcolor(white);
                       end;
     gotoxy(2,24);
     write('Esc:Koniec | TAB:statistiky');
     repeat;
      klaves:=readkey;
      gotoxy(stl,ria);
      write(' ');
       case klaves of
                     #80 : dole;
                     #72 : hore;
                     #75 : dolava;
                     #77 : doprava;
                     #27 : halt;
                     #9  : tabs;

       end;
      for i:=1 to 10 do begin
        if(stl=x[i]) and (ria=y[i]) and (not(zozrane[i])) then begin
          b:=b+1;
          zozrane[i]:=true;
        end 
      end;

     until(klaves=#27);
end;

 { main program }
begin
     a:=1;
     b:=0;
     b:=b;
     hide;
     textbackground(lightgreen);
     textcolor(white);
     clrscr;
     ohrada;
     inica;
     move;
     koniec;
end.
Napísať odpoveď