Elemente zu mischen

hi!
Also ich programmier gerade Pacman und nun habe ich einen Geist der apprallt und den Blick ändert zu welcher Wand er apprallt, jedoch muss ich nun noch mehr Geister einfügen und die sollen natürlich nciht den gleichen Weg bzw. gleich anfangen wie der erste nur irgendwie weiß ich cniht wie ich das machen soll kann mir jemand auf die sprünge helfen. Danke
Code:
#include <allegro.h>
enum RICHTUNG
{
	LINKS,
	RECHTS,
	OBEN,
	UNTEN,
	RICHTUNG_ANZ
};
enum ZIPFEL
{
	ZU,
	OFFEN,
	ZIPFEL_ANZ
};

void fataler_fehler() {
	allegro_message(allegro_error);
	exit(1);	
}
int main() {

	allegro_init();
	if (install_keyboard() < 0) {
		fataler_fehler();
	}
	set_color_depth(24);
	if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0) < 0) {
		fataler_fehler();
	}

	BITMAP *bmp = NULL;
	BITMAP *ghost[RICHTUNG_ANZ][ZIPFEL_ANZ] = {NULL};


	bmp = load_bitmap("pac800.bmp", NULL);
	if (bmp == NULL) {
		allegro_message("Konnte die Bitmap-Datei nicht finden");
		exit(1);		
	}

	for(int i=0; i<RICHTUNG_ANZ; i++){
		for (int j=0; j<ZIPFEL_ANZ; j++)
		{
			ghost[i][j] = create_sub_bitmap(bmp, (2*i+j)*36, 0, 36, 36); /*öffnet den Geist*/

		}
	}

	int x = 0; /*ObenRand*/ 
	int y = 0; /*LinkerRand*/
	int RaufRunter = 1;
	int LinksRechts = 1;
	int iFlattern = ZU;
	int iFlatterGeschwindigkeit = 10;
	int iSchritte = 0;
	int iRichtung=RECHTS;
	while(!keypressed()) { /*wenn keine Taste gedrueckt wurde*/

		x = x + LinksRechts;
		y = y + RaufRunter;

		vsync();
		clear_bitmap(screen);

		
		draw_sprite(screen, ghost[iRichtung][iFlattern], x, y); /*(x,y)anfangskoordinaten wo der geist beginnt*/
		
		
		iSchritte++;
		if (iSchritte > iFlatterGeschwindigkeit)
		{
			iFlattern = (iFlattern == ZU ? OFFEN : ZU);
			iSchritte = 0;
		}

		if(x + 36 > SCREEN_W) { 
			LinksRechts *= -1;
			iRichtung = LINKS;
		}

		if(x < 0) { 
			LinksRechts *= -1;
			iRichtung = RECHTS;
		}

		if(y + 36 > SCREEN_H) {
			RaufRunter *= -1;
			iRichtung = OBEN;
		}

		if(y < 0) { 
			RaufRunter *= -1;
			iRichtung = UNTEN;
		}

	}
	destroy_bitmap(bmp);

	for(int i=0; i<4; i++){
		for (int j=0; j<ZIPFEL_ANZ; j++)
		{
			destroy_bitmap(ghost[i][j]);
		}
	}



	return 0;
} END_OF_MAIN()
 
Hallo,
wie es scheint, verwendest du C++, jedoch ist dies an deinem Code kaum zu erkennen. Mein Vorschlag wäre da, dass du dein Projekt mal ordentlich aufräumst und eine Klassenarchitektur einbaust. Du könntest da zum Beispiel Klassen für das Spielfeld, den Geistern, ... erstellen.
Wenn du Elemente z.B. in einem Array mischen möchtest, schlage ich dir die Funktion "std::random_shuffle" vor, die im Header "<algorithm>" definiert ist. Der Funktion gibst du einmal das erste Element des Arrays an und die Speicherstelle hinter dem letzten Element.
Z.B.:
C++:
	srand(static_cast<unsigned int>(time(0)));
	int Haufen[20];
	for(int i(0); i!=20; ++i)
		Haufen[i] = i;

	random_shuffle(&Haufen[0], &Haufen[20]);

	for(int i(0); i!=20; ++i)
		cout << Haufen[i] << " ";
Die srand-Funktion ist dafür da, um den Zufallsgenerator zu setzen. Wenn du dem einen statischen Wert gibst oder ihn überhaupt nicht verwendest, würden bei jedem neuen Programmstart die gleichen Zufallszahlen generiert. (Für "time" benötigt man die Headerdatei "<ctime>".

Ich hoffe ich konnte dir damit einigermaßen helfen.

Gruß, Mickeyman.
 
Zuletzt bearbeitet von einem Moderator:
Zurück