Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Problem z algorytmem w snake'u

$
0
0

Ostatnio zacząłem pisać swojego pierwszego w życiu snake'a. Natknąłem się jednak na przeszkody w czasie pisania algorytmu poruszania się węża. Postanowiłem, że przy każdym poruszeniu, głowa zostanie narysowana tam, gdzie wskazuje kierunek, a ostatni element węża będzie usuwany. Natomiast wszystkie części węża będą pobierały dane od następnej. Zresztą, co ja będę pisał, po prostu spójrzcie na kodzik:

#include <iostream>
#include <windows.h>
#include <vector>

using namespace std;

const int width=45;
const int height=15;

struct position
{
    int x,y;
};

int n = 4; // Dlugosc weza
char pole[width][height];
bool start_game = false;
char moved='r';

vector<position> pkt(n);

void cursor(int x, int y) // USTAWIA KURSOR NA PLANSZY
{
    COORD c;
    c.X=x;
    c.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

void draw() // RYSUJE PLANSZE
{
    for(int i=0; i<width; i++)
    {
        for(int j=0; j<height; j++)
        {
            if((j==0) || (j==height-1))
            {
                pole[i][j] = 'x';
                cursor(i, j);
                cout << "#";
            }

            else if((i==0) || (i==width-1))
            {
                pole[i][j] = 'x';
                cursor(i, j);
                cout << "#";
            }

            else
            {
                pole[i][j] = 'o';
            }
        }
    }

    cursor(0,height);
}

void game() // START GRY
{
    if(start_game==false)
    {
        n=4;
        pkt[0].x=5;
        pkt[0].y=5;
        pkt[1].x=6;
        pkt[1].y=5;
        pkt[2].x=7;
        pkt[2].y=5;
        pkt[3].x=8;
        pkt[3].y=5;
        start_game=true;
    }

    for(int i=0; i<n; i++)
    {
        cursor(pkt[i].x, pkt[i].y);
        cout << char(219);
        cursor(0,height);
    }

    if(moved=='r')
    {
        pkt[n-2]=pkt[n-1];
        pkt[n-1].x+=1;
        cursor(pkt[0].x, pkt[0].y);
        cout << "";
        cursor(0,height);

        for(int i=0; i<n-1; i++)
        {
            pkt[i] = pkt[i+1];
        }
    }
}

int main()
{
    draw();
    for(;;)
    {
        game();
        Sleep(20);
    }

    return 0;
}

No i problem taki, że ten algorytm nie działa jak powinien. Nie mam zielonego pojęcia, czemu pierwszy element węża zostaje, a reszta działa poprawnie i się porusza. Może to niejasno wyjaśniłem, ale jak ktoś odpali program będzie wiedział o co chodzi. Nie proszę oczywiście o gotowce, tylko nakierowanie mnie co źle zrobiłem. Z góry dzięki za porady :)


Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra