Wężyk umiera przez listę

0

Witam.
Od jakiegoś czasu bawię się w naprawdę drobne programiki, aż stwierdziłem, że czas zacząć robić coś konkretniejszego, a mianowicie klasycznego "snejka" w SDL2 :D
Program postanowiłem podzielić na dwie części - część z klasami i część "właściwa".
Niestety, mój wężyk (niedokończony), wyłącza się zaraz po włączeniu, w konsoli nie dostaję żadnej informacji na temat błędu. Jako, że zaczęło się to dziać po dodaniu przeze mnie listy, domyślam się, że to właśnie ją źle "skonstruowałem" :D

Oto kod:
Pliczek z klasami:

#include "SDL2/SDL.h"
#include "SDL2/SDL_image.h"
#include <string.h>
#include <iostream>

#ifndef COSTAM_H_
#define COSTAM_H_

class wonsz {
public:
	void init();
	SDL_Texture* tlo(); 										//Wczytywanie obrazka z pliku
	void Tlo(SDL_Texture* tlo);  								//Nakladanie tla
	static const int szerokosc = 640; 								//Szerokosc okna
	static const int wysokosc = 480;  								//Wyokosc okna

	SDL_Renderer* getRenderer();
private:
	SDL_Window* window;
	SDL_Renderer* render;
};

SDL_Renderer* wonsz::getRenderer()
{
	return (render);
}

void wonsz::init() {
	SDL_Init(SDL_INIT_EVERYTHING);
	IMG_Init(IMG_INIT_PNG);
	window = SDL_CreateWindow("Wąż", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, szerokosc, wysokosc, SDL_WINDOW_SHOWN);			//Tworzenie okna
	render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);			//Tworzenie renderera
	SDL_RenderClear(render);

}


SDL_Texture* wonsz::tlo() 					//Wczytywanie obrazka z pliku
{
	SDL_Texture* obrazek = 0;

	obrazek = IMG_LoadTexture(render, "/home/tomek/workspace/Wezyk/src/tlo.png");
	if(!obrazek)
		std::cout<<"dupa";
	return (obrazek);
}
void wonsz::Tlo(SDL_Texture* tlo) 							//Nakladanie tla
{
	SDL_Rect miejsce;
	miejsce.x = 0;
	miejsce.y = 0;
	miejsce.w = 640;
	miejsce.h = 480;


	SDL_RenderCopy(render, tlo, NULL, &miejsce);
}

class waz
{
public:
	SDL_Texture* WczytajObrazek(SDL_Renderer* render);
	void RysujWeza(SDL_Renderer* render, SDL_Texture* obrazek);
	int polozeniex = wonsz::szerokosc / 2;
	int polozeniey = wonsz::wysokosc / 2;
	void NowyElement();
	waz* pierwszy = 0;
	waz* ostatni = 0;
	waz* nastepny = 0;
	waz* poprzedni = 0;

private:

};

void waz::NowyElement()
{
	waz* ogon = new waz;

	if(pierwszy == 0)
	{
		pierwszy = ogon;
		ostatni = ogon;
	}
	else
	{
		waz* temp = pierwszy;
		while(temp->nastepny != 0)
		{
			temp = temp->nastepny;
		}
	temp->nastepny = ogon;
	ogon->poprzedni = temp;
	ostatni = ogon;
	}

}

SDL_Texture* waz::WczytajObrazek(SDL_Renderer* render)
{
	SDL_Texture* obrazek;
	obrazek = IMG_LoadTexture(render, "/home/tomek/workspace/Wezyk/src/waz.png");
	return (obrazek);
}

void waz::RysujWeza(SDL_Renderer* render, SDL_Texture* obrazek)
{
	SDL_Rect ramka;
	ramka.x = polozeniex;
	ramka.y = polozeniey;
	ramka.w = 10;
	ramka.h = 10;
	SDL_RenderCopy(render, obrazek, NULL, &ramka);

}

#endif


 

A to pliczek z "main":

#include "SDL2/SDL.h"
#include "SDL2/SDL_image.h"
#include "costam.h"
#include <iostream>

int main()
{
int quit = 0;
wonsz okno;
waz glowa;
waz * temp;
okno.init();
okno.Tlo(okno.tlo());

glowa.RysujWeza(okno.getRenderer(), glowa.WczytajObrazek(okno.getRenderer()));
waz* ogon = new waz;
temp = ogon->pierwszy->nastepny;
for(int n=0;n<3;n++)
{
	if(n==0)
	{
		ogon->NowyElement();
		ogon->pierwszy->polozeniey = glowa.polozeniey + 10;
		ogon->pierwszy->RysujWeza(okno.getRenderer(),glowa.WczytajObrazek(okno.getRenderer()));
	}
	else
	{
		ogon->NowyElement();
		temp->polozeniey = temp->poprzedni->polozeniey + 10;
		temp->RysujWeza(okno.getRenderer(),glowa.WczytajObrazek(okno.getRenderer()));
		temp = temp->nastepny;
	}
}

SDL_RenderPresent(okno.getRenderer());


while(!quit)
{
	SDL_Event event;

	if (SDL_WaitEvent(&event))
	{
		if(event.type == SDL_QUIT)
			quit = 1;

		if(event.type == SDL_KEYDOWN)
		{
			if(event.key.keysym.sym == SDLK_LEFT)
			{

			}

			if(event.key.keysym.sym == SDLK_RIGHT)
			{

			}

			if(event.key.keysym.sym == SDLK_UP)
			{

			}

			if(event.key.keysym.sym == SDLK_DOWN)
			{

			}
		}

	}

}

	return 0;
}
 

Tło ma rozmiar 640x480, obrazek ogonka natomiast - 10x10.
Wstawiłbym obrazki ale nie wiem czy da się to zrobić bez jakiegoś serwisu hostingowego.
Byłbym wdzięczny za wytknięcie mi błędu ;)

0

Zdecydowanie za wcześnie zaczynasz bawić się grafiką, poczytaj może o jakichś podstawach programowania obiektowego.
Obiekt waz może być zastosowany do tworzenia drzewa z nieograniczonym rozgałęzieniem w każdym węźle ale nie dla tworzenia węża.

0

Nigdzie nie widzę obsługi błędów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1