AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Snake Programmierung in C

Ein Thema von shinaia · begonnen am 23. Mai 2006 · letzter Beitrag vom 23. Mai 2006
Antwort Antwort
shinaia

Registriert seit: 23. Mai 2006
1 Beiträge
 
#1

Snake Programmierung in C

  Alt 23. Mai 2006, 20:58
Hi^^
Ich habe leider ein sehr großes Problem . Ich muss für die Schule Snake in C Programmieren, ich habe dabei folgendes Problem: ich kann damit nicht arbeiten Spielfeld [Snake.oben][Snake.unten] jeweils nicht arbeiten, weil zwei verschiedene Structs verwendet werden -.- für genaueres seht nach unten, der Fehler tritt an einigen Stellen auf! Was kann ich da anders machen?
Ich kopier den Quellcode mal mit ein, hoffe das ist nicht unerlaubt^^.
Code:
#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 SCHLANGE   BLACK
#define SCHLAFZEIT   50
#define MAX_GLIEDER 10
#define LAENG      10
#define BREIT      10
#define SPALT      SCREEN_X/LAENG
#define ZEIL      SCREEN_Y/BREIT
//Richtungen der Bewegungen
#define OBEN      1
#define LINKS      2
#define UNTEN      3
#define RECHTS      4
//Punkt
struct Punkt {
            int x,y;
};

//Rechteck
struct Rechteck {
            struct Punkt oben;
            struct Punkt unten;
};

//Koordinaten
struct Koord {
            int zeile, spalte;
};

//Schlange
struct Snake {
            int Farbe;
            int anzglieder;
            struct Koord Rechteck [MAX_GLIEDER];
};




int main(int argc, char*argv[], char**envp)
{
   struct Rechteck Snake;
   struct Rechteck Futter;
   struct Rechteck Schwanz;
   struct Rechteck   Snake_neu;
   struct Rechteck Spielfeld[SPALT][ZEIL];
   struct Punkt   Richtung = {0,0}; // Richtungsvektor
   struct Punkt   neurichtung={0,0};//neue Richtung
   int            Ende = 0; // Endekennung
   int            taste;
   int      i, spalt, zeil;
   int      gefunden=1;//Futter

   // 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;
      }
   }

   // 1. zufaellige Position fuer die Schlange bestimmen, Laufrichtung 0,0
   srand((unsigned int)time(NULL));
   Snake.oben = rand()%SPALT;
   Snake.unten = rand()%ZEIL;

   //Kopf ist zuerst auch Schwanz
   Schwanz=Snake;

   // Schlange ausmalen
   setfillstyle(1,FGCOLOR);
   bar(Snake.oben * LAENG, Snake.unten*BREIT, Snake.oben*LAENG+BREIT, Snake.unten*LAENG+BREIT);

   //... bis zum Ende
   i=0;
   while (!=Ende)
   {
      if (i==10)
      {
         break;
         gefunden=1;
      }

      while ( Spielfeld[Futter.oben][Futter.unten]!=0)
      {
      //Futter positionieren
      srand((unsigned int)time(NULL));
      Futter.oben = rand()%SPALT;
      Futter.unten = rand()%ZEIL;
      }

   
   }
   
   setcolor (FGCOLOR);

   while (!=gefunden)//solange Futter nicht gefunden
   {
      //Auf Eingabe ueberpruefen
      if (kbhit())
      {
         taste=getch;
         //wenn ja, Richtungsvektor setzen, 180° Wechsel nicht zulassen
         switch(taste)
         {
         case Key_Left:
            neurichtung.x = -1;
            neurichtung.y = 0;
            break;
         case Key_Right:
            neurichtung.x = 1;
            neurichtung.y = 0;
            break;
         case Key_Up:
            neurichtung.x = 0;
            neurichtung.y = -1;
            break;
         case Key_Down:
            neurichtung.x = 0;
            neurichtung.y = 1;
            break;
         case Key_Escape: // Programmende
            gefunden = 0;
            Ende=1;
            break;

      }
   }

   

      if (((neurichtung.x!=Richtung.x)&&(neurichtung.x+Richtung.x!=0)||(neurichtung.y!=Richtung.y)&&(neurichtung.y+Richtung.y!=0)
      {
         //Richtung muss geaendert werden
         Richtung=neurichtung;
      }

      //ignorieren:alter Richtungwechsel bleibt
      if (Richtung.x==0&&Richtung.y==-1)
      {
         Spielfeld[Snake.oben][Snake.unten]=OBEN;
      }
      else if (Richtung.x==0&&Richtung.y==1)
      {
         Spielfeld[Snake.oben][Snake.unten]=UNTEN;
      }
      else if (Richtung.x==1&&Richtung.y==0)
      {
         Spielfeld[Snake.oben][Snake.unten]=RECHTS;
      }
      else (Richtung.x==-1&&Richtung.y==0)
      {
         Spielfeld[Snake.oben][Snake.unten]=LINKS;
      }

      // neue Kopfposition berechnen
      Snake_neu.oben = Snake.oben + Richtung.x;
      Snake_neu.unten = Snake.unten + Richtung.y;
      
      //Kopf ist ....
      // Hindernisse
      //Rand
      // X -Richtung
      if(Snake_neu.oben< 0 || Snake_neu.oben>=SPALT)
      {
         Ende=1;
         gefunden=0;
      }
      // y -Richtung
      if(Snake_neu.unten < 0 || Snake_neu.unten>=ZEIL)
      {
         Ende=1;
         gefunden=0;
      }

      //pruefen ob Schlange mit sich selbst oder Hindernis kollidiert
      switch (Spielfeld[Snake_neu.oben][Snake_neu.unten])
      {
         case OBEN;
         case LINKS;
         case UNTEN;
         case RECHTS;
         Ende=1;
         gefunden=0;
         break;

      }

      if(!Ende)
      {
         if (Spielfeld [Snake_neu.oben][Snake_neu.unten]==FUTTER)//wenn Futter gefunden ist
         {
            // Futter in Hintergrundfarbe malen (loeschen)
            setcolor(BGCOLOR);
            circle(Futter.oben*LAENG+LAENG/2, Futter.unten*BREIT+BREIT/2, (LAENG-2)/2);

         // neuen Schlangenteil malen
         setfillstyle (1,FGCOLOR);
         bar(Snake_neu.oben*LAENG, Snake_neu.unten*BREIT, Snake_neu.oben*LAENG+LAENG, Snake_neu.unten*BREIT+BREIT);
         //ab jetzt ist die alte Schlange die neue
         Snake=Snake_neu;
         gefunden=0;
         }
         else
         {
            //alten Schwanz loeschen
            setfillstyle(1,BGCOLOR);
            bar(Schwanz.oben*LAENG, Schwanz.unten*BREIT, Schwanz.oben*LAENG+LAENG, Schwanz.unten*BREIT+BREIT);
            //neue Schlange malen
            setfillstyle (1,FGCOLOR);
            bar(Snake_neu.oben*LAENG, Snake_neu.unten*BREIT, Snake_neu.oben*LAENG+LAENG, Snake_neu.unten*BREIT+BREIT);
            Snake=Snake_neu;

            //neue Position für Schwanz

            switch(Spielfeld[Schwanz.oben][Schwanz.unten])
            {
            case OBEN:
               Spielfeld[Schwanz.oben][Schwanz.unten]=0;
               Schwanz.unten--;//oben
               break;

            case LINKS:
               Spielfeld[Schwanz.oben][Schwanz.unten]=0;
               Schwanz.unten--;//links
               break;

            case UNTEN:
               Spielfeld[Schwanz.oben][Schwanz.unten]=0;
               Schwanz.unten++;/unten
               break;

            case RECHTS:
               Spielfeld[Schwanz.oben][Schwanz.unten]=0;
               Schwanz.oben++;
               break;


            }
         }

      // ein bisschen schlafen, damits nicht zu schnell wird
      delay(SCHLAFZEIT);
      }
   }
   i++;
      
   }
   // Grafikmodus beenden
   getch();
   closegraph();
   return 0;
}
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Snake Programmierung in C

  Alt 23. Mai 2006, 20:59
Hallo shinaia!

Benutze doch bitte das [c] - Tag, um deinen Code farblich etwas hervor zu heben.
Wo genau hast du denn Probleme? Es wäre sicherlich hilfreich, wenn du eine etwas spezifischere Frage stellst.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz