Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

pascal - snake, jak zrobic?

alexant 10 Gru 2012 16:24 2160 2
  • #1 10 Gru 2012 16:24
    alexant
    Poziom 2  

    Witam, mam problemy ze zrobieniem snake. otóż, mam zrobioną tablice, rozrzucone jedzonko, samego węża, który zjada to jedzenie. musze do programu dodać menu, poziomy trudnośći, punky bonusowe i plansze. nie wiem jak się za to zabrac. pomocy!

    Oto mój program:

    uses wincrt,graph;
    var a,b:smallint;
    dw,wazx,wazy,i,ilex,iley,jedzonko_x,jedzonko_y:integer;
    c:char;
    jedzonko:array[1..30,1..2]of integer;
    waz:array[1..31,1..2]of integer;

    //informacje
    begin
    detectgraph(a,b);
    initgraph(a,b,'');
    setbkcolor(WHITE);
    cleardevice();
    ilex:=getmaxx div 20;
    iley:=getmaxy div 20;
    setfillstyle(1,1);
    //górna i dolna ścianka
    for i:=0 to ilex do begin
    bar(20*i,40,20*i+20,60);
    bar(20*i,(iley-1)*20,20*i+20,iley*20);
    end;
    //lewa i prawa ścianka
    for i:=2 to iley-1 do begin
    bar(0,i*20,20,i*20+20);
    bar(ilex*20,i*20,ilex*20+20,i*20+20);
    end;
    //losujemy jedzonko
    randomize;
    setfillstyle(1,5);
    for i:=1 to 30 do begin
    jedzonko_x:=random(ilex-2)+1;
    jedzonko_y:=random(iley-4)+3;
    jedzonko[i][1]:=jedzonko_x;
    jedzonko[i][2]:=jedzonko_y;
    bar(jedzonko[i][1]*20,jedzonko[i][2]*20,jedzonko[i][1]*20+20,jedzonko[i][2]*20+20);
    end;
    //rysujemy weza
    dw:=1;
    wazx:=ilex div 2;
    wazy:=iley div 2;
    waz[1][1]:=wazx;
    waz[1][2]:=wazy;
    setfillstyle(1,RED);
    repeat
    if(keypressed) then c:=readkey;
    if (c='w') then wazy:=wazy-1;
    if (c='a') then wazx:=wazx-1;
    if (c='d') then wazx:=wazx+1;
    if (c='s') then wazy:=wazy+1;
    //zamazujemy ogon
    setfillstyle(1,WHITE);
    bar(waz[dw][1]*20,waz[dw][2]*20,waz[dw][1]*20+20,waz[dw][2]*20+20);
    //ruch weza w tablicy
    for i:=dw downto 2 do begin
    waz[i][1]:=waz[i-1][1];
    waz[i][2]:=waz[i-1][2];
    end;
    waz[1][1]:=wazx;
    waz[1][2]:=wazy;

    //rysowanie weza
    setfillstyle(1,RED);
    for i:=1 to dw do
    bar(waz[i][1]*20,waz[i][2]*20,waz[i][1]*20+20,waz[i][2]*20+20);

    //waz je
    for i:=1 to 30 do begin
    if ((waz[1][1]=jedzonko[i][1])AND(waz[1][2]=jedzonko[i][2])) then begin
    dw:=dw+1;
    jedzonko[i][1]:=-1;
    jedzonko[i][2]:=-1;
    end;
    end;
    //kolizje
    if((wazx<1) or (wazx>ilex) or (wazy<3) or (wazy>iley-1)) then c:='x';

    delay(100);
    until c='x';

    closegraph;
    end.

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Proszę to poprawić! - arnoldziq

    0 2
  • #2 13 Gru 2012 10:21
    Aredhel94
    Poziom 10  

    Link

    Może lukniesz ten kod i jakoś Ci pomoże, gdy połączysz ze swoją wizją :)


    Najlepiej to zrobić tak, ze masz tablice dynamiczna, kazdy element to jest czesc weza, pierwszy element to glowa, potem kolejne czesci i koniec. Później robisz tak: lecisz od konca tej tablicy i dajesz ostatniemu elementowi wspolrzedne poprzedniego i tak do pierwszego elementu. Jak dojedziesz do pierwszego, to zmieniasz wspolrzedna na np. y - 1 (zalezy, w ktora strone ma isc waz).
    Bo ogólnie ciekawym pomysłem jest utworzenie tablicą trójwymiarową planszy :array[1..80] of array[1..25] of array[1..1] of byte i tam przechowywać w tym "trzecim wymiarze" który to jest ruch. Tylko w tym też dość łatwo jest się zaplątać...

    Nie wiem czy potrafię pomóc bardziej...jeśli dostane natchnienia to na pewno cos napisze, a co nuż widelec pomoże :)
    W C++ chyba byłoby mi łatwiej bo to miałam w szkole, a ten język jest dla mnie trochę jak japoński :p

    0
  • #3 24 Maj 2013 08:38
    INFORMATICO
    Poziom 1  

    Drogi założycielu tematu ! Ściągnąłem powyższy program lecz jeszcze potrzebuje małego opisu, wytłumaczenia go. Jeśli ktoś może mi pomóc prosze o opisanie mniej więcej o co w nim chodzi, jakich komend, instrukcji użyto. Prosze też o jakikolwiek kontakt do takowej osoby. Z góry dziękuje ! :)

    0
  Szukaj w 5mln produktów