[c++]Snake

0

Witajcie. Dzisiaj poczytałem trochę o klasach i jako iż jestem początkującym programistą chciałbym wam pokazać mój kod na snake'a który nie działa.

Prosiłbym o NIE-naprawienie go, lecz pokazanie co jest źle, co musze poprawić, o ile wszystko nie jest źle.
Kod się kompiluje, debbuguje i inne takie tam, pojawai się mapa ale snake ani jedzenie nie pojawia się na 'mapie'.

Kod:

#include <iostream>
#include <ctime>

using namespace std;


class Snake
{
public:
	int x,y; // głowa węża..
	int dlugosc;
	int punkty;
	bool onX;
	int fposx,fposy;
	//////////////////////////
	void setPos();
	void randomFood();
	void addPiece();
};


class Plansza
{
public:
	int map[25][25];
	void setMap();
	void ShowMap();
};


void Snake::randomFood()
{
	srand((unsigned)time(0));
	Plansza mapa;
	bool foodOnMap = false;
	for(int i = 0; i < 25; i++)
	{
		for(int j = 0; j < 25; j++)
		{
			if(mapa.map[i][j] == 1)
				foodOnMap = true;
		}
	}
	if(foodOnMap == false)
	{
		fposx = rand() % 25;
		fposy = rand() % 25;
		mapa.map[fposx][fposy] = 1; // jedzenie = 1;
	}
}

void Snake::setPos()
{
	Plansza mapa;
	mapa.map[x][y] = 3; // głowa węża = 3
	for(int i = 0; i < dlugosc; i++)
	{
		if(onX)
			mapa.map[x-i][y] = 2; // ciało węża.
		else
			mapa.map[x][y+i] = 2;
	}
}

void Snake::addPiece()
{
	Plansza mapa;
	if(mapa.map[x][y] == 3 && x == fposx && y == fposy)
	{
		punkty++;
		dlugosc++;
	}

}

void Plansza::setMap()
{
	for(int i = 0; i < 25; i++)
		for(int j = 0; j < 25; j++)
			map[i][j] = 0;
}

void Plansza::ShowMap()
{
	//Snake snake;
	cout << "|-------------------------|";
	cout << "\n";
	for(int i = 0; i < 25; i++)
	{
		cout << "|";
		for(int j = 0; j < 25; j++)
		{
			if(map[i][j] == 0)
				cout << " ";

			if(map[i][j] == 1)
				cout << "*";

			if(map[i][j] == 2 || map[i][j] == 3)
				cout << "+";
		}
		cout << "|\n";
	}
	cout << "|-------------------------|";
}



int main()
{
	Plansza mapa;
	Snake snake;

	
	mapa.setMap();

	snake.onX = true;
	snake.dlugosc = 5;
	snake.x = 0;
	snake.y = 0;
	snake.punkty = 0;


	snake.setPos();
	snake.randomFood();

	mapa.ShowMap();


	cin.sync();
	cin.get();
	return 0;
}
 
0

Twój problem polega na tym, że piszesz kod nie myśląc przy tym co robisz. W każdej metodzie praktycznie operujesz na tablicy lokalnej, która poza tą metodą przestaje istnieć. Drugą sprawą jest srand, wywołujesz go w metodzie, co prawda na razie tylko raz, pytanie czy zawsze ta metoda będzie wywołana raz? Masz 100%, że nigdy się to nie zmieni? Ja osobiście radziłbym wywołać srand'a na początku main i potem już o nim nie myśleć.

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