Snake92
Grünschnabel
Hi,
ich bin neu im Forum und habe erst letzte Woche angefangen mit dem Programmieren von C++.
Habe mich nun an ein Snake gewagt und dieses denke ich mal auch ganz gut hinbekommen. Allerdings stören mich die globalen Variablen und ich würde gerne wissen:
Was gibt es für eine Möglichkeit die globalen Variablen zu entfernen.
Ich habe einen Win7 Professional 64 bit System und verwende MS Visual C++ Express 2010.
Ich Danke für jede Hilfe. Bei Rückfragen einfach Fragen
ich bin neu im Forum und habe erst letzte Woche angefangen mit dem Programmieren von C++.
Habe mich nun an ein Snake gewagt und dieses denke ich mal auch ganz gut hinbekommen. Allerdings stören mich die globalen Variablen und ich würde gerne wissen:
Was gibt es für eine Möglichkeit die globalen Variablen zu entfernen.
Ich habe einen Win7 Professional 64 bit System und verwende MS Visual C++ Express 2010.
Ich Danke für jede Hilfe. Bei Rückfragen einfach Fragen

C++:
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
#include <time.h>
int Field();
int Head();
int Snake(int Eingabe, int KopfX, int KopfY);
int Fruit(int KopfX, int KopfY);
int Score();
int GameBreak(int Pause);
int GameOver(int Verloren, int KopfX, int KopfY);
int KoerperX;
int KoerperY;
int FruchtX = 4;
int FruchtY = 4;
int Verloren = 1;
int Schlange = 1;
int Richtung[600];
int main()
{
Field();
Head();
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
std::cin.get();
return 0;
}
int Field()
{
COORD Feld;
Feld.X = 0;
for (int x=0;x<23;x++)
{
Feld.Y = x-1;
if (Feld.Y==0)
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"________________________________",32,Feld,0);
else if (Feld.Y>=1&&Feld.Y<=20)
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"| |",32,Feld,0);
else if (Feld.Y==21)
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",32,Feld,0);
}
COORD Cursor = {0,23};
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE),Cursor);
COORD Score = {33,10};
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"Score: ",7,Score,0);
return 0;
}
int Head()
{
int Richtung = 97;
int Eingabe = 32;
COORD Kopf = {15,10};
while (Verloren)
{
STOP:
if (_kbhit())
Eingabe = _getch();
if (Eingabe==32||Eingabe==0)
{
GameBreak(1);
goto STOP;
}
else if (Eingabe!=32)
GameBreak(0);
if (Eingabe==97&&Richtung==100)
Eingabe=100;
else if (Eingabe==100&&Richtung==97)
Eingabe=97;
else if (Eingabe==115&&Richtung==119)
Eingabe=119;
else if (Eingabe==119&&Richtung==115)
Eingabe=115;
switch (Eingabe)
{
case 97:
Kopf.X--;
if (Kopf.X==0)
Kopf.X=30;
Richtung = 97;
break;
case 100:
Kopf.X++;
if (Kopf.X==31)
Kopf.X=1;
Richtung = 100;
break;
case 115:
Kopf.Y++;
if (Kopf.Y==21)
Kopf.Y=1;
Richtung = 115;
break;
case 119:
Kopf.Y--;
if (Kopf.Y==0)
Kopf.Y=20;
Richtung = 119;
break;
}
int KopfX = Kopf.X;
int KopfY = Kopf.Y;
Snake(Richtung, KopfX ,KopfY);
Fruit(KopfX, KopfY);
Score();
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"O",1,Kopf,0);
Sleep(75);
}
return 0;
}
int Snake(int Eingabe, int KopfX, int KopfY)
{
COORD Koerper;
COORD Loesche;
for(int n=600;n>0;n--)
{
Richtung [n] = Richtung [n-1];
}
Richtung [0] = Eingabe;
KoerperX = KopfX;
KoerperY = KopfY;
for(int n=0;n<Schlange;n++)
{
switch (Richtung [n])
{
case 97:
KoerperX++;
if (KoerperX==31)
KoerperX=1;
break;
case 100:
KoerperX--;
if (KoerperX==0)
KoerperX=30;
break;
case 115:
KoerperY--;
if (KoerperY==0)
KoerperY=20;
break;
case 119:
KoerperY++;
if (KoerperY==21)
KoerperY=1;
break;
}
Loesche.X = KoerperX;
Loesche.Y = KoerperY;
Koerper.X = KoerperX;
Koerper.Y = KoerperY;
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"o",1,Koerper,0);
if (KoerperX==KopfX&&KoerperY==KopfY)
Verloren = 0;
}
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE)," ",1,Loesche,0);
GameOver(Verloren, KopfX, KopfY);
return 0;
}
int Fruit(int KopfX, int KopfY)
{
COORD Frucht;
if (KopfX==FruchtX&&KopfY==FruchtY)
{
srand((unsigned)time(NULL));
FruchtX = rand()%30;
FruchtY = rand()%20;
if (FruchtX==0)
{
FruchtX = 1;
}
if (FruchtY==0)
{
FruchtY = 1;
}
Schlange++;
}
Frucht.X = FruchtX;
Frucht.Y = FruchtY;
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"X",1,Frucht,0);
return 0;
}
int Score()
{
int PunkteWert=Schlange-1;
COORD Score = {40,10};
std::stringstream strs;
strs << PunkteWert;
std::string temp_str = strs.str();
char* char_type = (char*) temp_str.c_str();
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),char_type,3,Score,0);
if (PunkteWert<10)
{
COORD Score = {42,10};
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE)," ",1,Score,0);
}
return 0;
}
int GameBreak(int Pause)
{
COORD SpielPause = {12,22};
if (Pause==1)
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"-Pause-",7,SpielPause,0);
else if (Pause==0)
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE)," ",7,SpielPause,0);
return 0;
}
int GameOver(int Verloren, int KopfX, int KopfY)
{
int Ende = 5;
COORD Dead = {12,22};
COORD Kopf = {KopfX,KopfY};
if (Verloren==0)
{
while(Ende)
{
Sleep(150);
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE)," ",9,Dead,0);
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"O",1,Kopf,0);
Sleep(75);
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"X",1,Kopf,0);
WriteConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE),"Game Over",9,Dead,0);
Ende--;
}
}
return 0;
}