Snake



  • joa das hab ich mittlerweile geändert ^^ und das Programm allgemein ziemlich umgeschrieben ... mit etwas Hilfe
    es hapert dabei aber noch an so einigen Stellen -.- Zeile 96 ist ein gutes Beispiel *g*.

    Na ja ich mache eine technische Ausbildung, und da gehört auch Programmieren zu. Ich bin eher jemand, der die Hardware bevorzugt ><.

    #include <stdlib.h>
    #include <time.h>
    #include "graphics.h"
    #define SCREEN_X	800
    #define SCREEN_Y	600
    #define BGCOLOR		WHITE
    #define FGCOLOR		BLUE
    #define FUTTER		YELLOW
    #define SCHL_TOT	BLACK
    #define SCHLANGE	CYAN
    #define SCHLAFZEIT	50
    #define MAX_GLIEDER 10
    #define LAENG		10
    #define BREIT		10
    #define SPALT		SCREEN_X/LAENG
    #define ZEIL		SCREEN_Y/BREIT
    
    //Punkt
    struct Punkt {
    				int x,y;
    };
    
    //Rechteck 
    struct Rechteck {
    				struct Punkt oben;
    				struct Punkt unten;
    };
    
    struct Koord{
    				int zeile;
    				int spalte;
    };
    
    //Schlange
    struct Snake {
    				int Farbe;
    				int anzglieder;
    				struct Rechteck Glieder[MAX_GLIEDER];
    };
    
    int main(int argc, char*argv[], char**envp)
    {
    	struct Rechteck Kopf;
    	struct Rechteck Kopfn;
    	struct Snake	Schlange;
    	struct Rechteck Futter;
    	struct Rechteck Spielfeld[SPALT][ZEIL];
    	struct Punkt	Richtung = {0,0}; // Richtungsvektor
    	int				Ende = 0; // Endekennung
    	int				taste;
    	int		i, spalt, zeil, schx,schy, fux, fuy;
    
    	// Grafikmous initialisieren
    	initgraph(SCREEN_X, SCREEN_Y);
    
    	// Zeichenflaeche in der Hintergrundfarbe fuellen
    	cleardevice(BGCOLOR);
    
    	//Spielfeld in Rechtecke teilen
    	for (zeil=0;zeil<ZEIL;zeil++)
    	{
    		for (spalt=0;spalt<SPALT;spalt++)
    		{
    			Spielfeld [spalt][zeil].oben.x=spalt*LAENG;
    			Spielfeld [spalt][zeil].oben.y=zeil*BREIT;
    			Spielfeld [spalt][zeil].unten.x=((spalt+1)*LAENG)-1;
    			Spielfeld [spalt][zeil].unten.y=((zeil+1)*BREIT)-1;
    		}
    	}
    
    	//Schlange setzen
    
    	srand((unsigned int)time(NULL));		//Zufallsgenerator starten
    
    	schx = rand() % SPALT;
    	schy = rand() % ZEIL;
    	Kopf=Spielfeld [schx][schy];
    	Schlange.Glieder[0]=Spielfeld[schx][schy];
    	// Schlange ausmalen
    	setfillstyle(SOLID_FILL,SCHLANGE);
    	bar(Kopf.oben.x, Kopf.oben.y,Kopf.unten.x, Kopf.unten.y);
    
    	//Futter setzen
    
    	do
    	{
    		fux = rand() % SPALT;
    		fuy = rand() % ZEIL;
    		Futter= Spielfeld [fux][fuy];
    	}
    	while (Futter.oben.x==Schlange.Glieder.oben.x)&&(Futter.oben.y==Schlange.Glieder.oben.y)&&(Futter.unten.x==Schlange.Glieder.unten.x)&&(Futter.unten.x==Schlange.Glieder.unten.y));
    
    	//Futter ausmalen
    	setfillstyle(SOLID_FILL,FUTTER);
    	bar(Snake.oben.x, Snake.oben.y, Snake.unten.x, Snake.unten.y);
    
    	while (!Ende)//solange Futter nicht gefunden
    	{
    		//Auf Eingabe ueberpruefen
    		if (kbhit())
    		{
    			taste=getch();
    			//wenn ja, Richtungsvektor setzen, 180° Wechsel nicht zulassen
    			switch(taste)
    			{
    			case Key_Left:
    				if (Richtung.x==0)
    				{
    					Richtung.x=-1;
    					Richtung.y=0;
    				}
    				break;
    			case Key_Right:
    				if (Richtung.x==0)
    				{
    					Richtung.x=1;
    					Richtung.y=0;
    				}
    				break;
    			case Key_Up:
    				if (Richtung.y==0)
    				{
    					Richtung.x=0;
    					Richtung.y=-1;
    				}
    				break;
    			case Key_Down:
    				if (Richtung.y==0)
    				{
    					Richtung.x=0;
    					Richtung.y=1;
    				}
    				break;
    			case Key_Escape: // Programmende
    
    				Ende=1;
    				break;
    
    		}
    	}
    
    		// neue Kopfposition berechnen
    		schx=schx+ Richtung.x;
    		schy=schy + Richtung.y;
    		kopfn = spielfeld[schx][schy];
    
    		//Kopf=Futter
    		if((Kopf.oben.x == Futter.oben.x) && (Kopf.oben.y == Futter.oben.y))
    		{
    			//neuen Kopf uebergeben + Kopf zeichnen
    
    			Kopf=Schlange.Glieder[0]=Kopfn;
    
    			setfillstyle(SOLID_FILL, SCHLANGE);
    			bar(Kopfn.oben.x,Kopfn.oben.y,Kopfn.unten.x,Kopfn.unten.y);
    //Futterposition wird zum neuem Schlangenglied + Futterfarbe -> Schlangenfarbe
    			Schlange.anzglieder++;
    			Schlange.Glieder[Schlange.anzglieder]=Futter;
    
    //len
    		setfillstyle(SOLID_FIll,FUTTER);
    bar(Futter.oben.x,Futter.oben.y,Futter.unten.x,Futter.unten.y);
    
    			//Wenn anzahl der Glieder 10
    if (Schlange.anzglieder==10)
    			{
    				Ende =1;
    			}
    
                //neues Futter platzieren
    	do
    	{
    		fux = rand() % SPALT;
    		fuy = rand() % ZEIL;
    		Futter= Spielfeld [fux][fuy];
    	}
    	while((Futter.oben.x==Schlange.Glieder.oben.x)&&(Futter.oben.y==Schlange.Glieder.oben.y)&&(Futter.unten.x==Schlange.Glieder.unten.x)&&(Futter.unten.y==Schlange.Glieder.unten.y);
    
    	//Futter zeichnen
    	setfillstyle(SOLID_FIll,FUTTER);
    bar(Futter.oben.x,Futter.oben.y,Futter.unten.x,Futter.unten.y);
    
    		}
    		//Kopf ist ....
    		// Hindernisse
    		//Rand
    		// X -Richtung
    	if((Kopfn.oben.x>SCREEN_X)||(Kopfn.oben.x<0))
    		{
    			Schlange.Farbe=SCHL_TOT;
    			Ende=1;
    		}
    		// y -Richtung
    		if((Kopfn.oben.y>SCREEN_Y)||(Kopfn.oben.y<0)
    		{
    			Schlange.Farbe=SCHL_TOT;
    			Ende=1;
    		}
    
    		//gegen eigenen Schlangenkoerper
    
    		for(i=1; i< Schlange.anzglieder;i++)
    		{
    			if ((Kopfn.oben.x=Schlange.Glieder.oben.x)&&(Kopfn.oben.y==Schlange.Glieder.oben.y)&&(Kopfn.unten.x==Schlange.Glieder.unten.x)&&(Kopfn.unten.y==Schlange.Glieder.unten.y);
    			{
    				Schlange.Farbe=SCHL_TOT;
    				Ende =1;
    				break;
    			}
    		}
    
    	//sonst: Snake malen
    
    	//Schwanz loeschen
    	setfillstyle(SOLID_FILL, BGCOLOR);
    	bar(Snake.Glieder[0].x,Snake.Glieder[0].y,Snake.Glieder[0].x +10,Snake.Glieder[0].y +10);
    
    	//Kopf malen
    setfillstyle(SOLID_FILL, SCHLANGE);
    bar(Kopf.oben.x,Kopf.oben.y,Kopf.unten.x,Kopf.unten.y);
    
    	// ein bisschen schlafen, damits nicht zu schnell wird
    	delay(SCHLAFZEIT);
    
    	// Grafikmodus beenden
    	getch();
    	closegraph();
    	return 0;
    }
    


  • Interessante Story... f'`8k

    Bye, TGGC (Das Eine, welches ist.)



  • TGGC schrieb:

    Interessante Story... f'`8k

    Bye, TGGC (Das Eine, welches ist.)

    was bedeutet f'`8k ausgesprochen?



  • Was bedeutet (: ausgesprochen? f'`8k

    Bye, TGGC (Das Eine, welches ist.)





  • TGGC hat doch selber keine Ahnung. :p



  • Nur keinen Neid. f'`8k

    Bye, TGGC (Das Eine, welches ist.)



  • Neid darauf, dass du keine Ahnung hast? n^^ ~*'`' 64k



  • Ach, wenn es doch nur das wär... f'`8k

    Bye, TGGC (Das Eine, welches ist.)



  • TGGC schrieb:

    Was bedeutet (: ausgesprochen? f'`8k

    Bye, TGGC (Das Eine, welches ist.)

    das solln smiley sein? was soll das denn darstellen?



  • TGGC schrieb:

    (BTW: Auf meiner Seite gibts auch 'nen Snake Source)

    Willst Leute zum cheaten motivieren ...



  • C.Santa schrieb:

    Neid darauf, dass du keine Ahnung hast? n^^ ~*'`' 64k

    TGGC schrieb:

    Ach, wenn es doch nur das wär... f'`8k

    Hast du noch mehr Probleme auf die man "neidisch" sein kann? 😕 Vielleicht auf das komische Foto auf der Homepage, oder das du ein schlechter Coder bist?


  • Mod

    das hier ist zwar ein netter honeypott für tggc und seine streiter, aber sooo kilometerweit neben dem topic, dass es jetzt wirklich reicht. 😉


Anmelden zum Antworten