Snake



  • sowohl "oben" als auch "unten" sind ja Punkte mit 2 komponenten "x" & "y".
    du musst dem compiler also mitteilen, welche davon du willst.
    kopier' am besten mal die fehlermeldungen.



  • na jetzt bringt mir der Compiler schon weniger Fehlermeldungen raus^^

    gibt aber immernoch einige , meist die gleichen:

    binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)



  • Ich glaub du hast keinen Zuweisungsoperator definiert, der als rechtes Argument einen int akzeptiert. f'`8k

    Autocogito

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

    Bye, TGGC (Das Eine, welches ist.)



  • jetzt bringt mir der Compiler schon weniger Fehlermeldungen raus
    gibt aber immernoch einige

    wir koennen deine fehlermeldungen natuerlich nur nachvollziehen, wenn du auch die zeilennummer mit angibst, oder die entsprechende zeile mit dazu schreibst.
    ich denke aber dein problem ist folgendes:
    du hast ein zweidimensionales array spielfeld, in dem du fuer jede zeile/spalte speichern moechtest, ob die schlange dort schon war, indem du im spielfeld die aktuelle orientierung oben/unten/rechts/links speicherst.
    nun ist jedes feld des spielfelds aber vom typ rechteck, beinhaltet also die koordinaten (oben links, unten rechts) die ein feld auf dem bildschirm belegt.
    eigentlich ist diese information fuer dich egal, denn deine schlange bewegt sich sowieso immer nur um ein spielfeld weiter.
    aendere also einfach den typ des spielfelds von rechteck in int und dein programm muesste schon viel mehr das tun, was du eigentlich willst...



  • shinaia schrieb:

    binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)

    bei dir bedeutet dass zu 90% einen gleiche fehler wie bei

    snake.[unten oder oben]= ...
    

    ist. das heisst, dass du keiner ganzen struktur einen einzelnen wert zuweisen kannst. also mal genauer:
    bei

    struct someStruct
    {
    int a,b,c;
    }
    

    und

    struct someStruct meine_struct;
    meine_struct=1;
    

    versucht der compiler der strukturvariable meine_struct den wert 1 zuzuweisen. jetzt merkt er: "hui, meine_struct is ja keine eindeutige variable, sondern ein gebilde aus variablen, in welcher 3 elemente (a,b,c) sind, wo pack ich jetzt die 1 hin?" ergebnis: fehler.

    daher dann so:

    meine_struct.a=1;
    meine_struct.b=1;
    meine_struct.c=1;
    

    .
    was du versuchst ist in etwa so, als würdest du versuchen die eingekauften nahrungsmittel aus dem supermarkt deiner wohnung zuzuweisen, wo sie dann vergammeln, weil dein haus nicht automatisch auch für den kühlschrank steht.

    mfg



  • nur so neben bei, in welche schule gehst du ???



  • 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