U
Shen schrieb:
Wenn ich es richtig mit Google Suche gelesen habe, ist enum sicherer als define, und deshalb sollte ich es lieber so schreiben, oder?
Jopp - define ist eben einfach eine (stumpfe) Ersetzung, die der Präprozessor durchführt. Für so etwas nimmt man Konstanten. Mit enum kann man sich sparen, den richtigen Typen hinzuschreiben, weil automatisch ein passender genommen wird...
Shen schrieb:
unskilled schrieb:
zu globalen Variablen:
Das Array Global zu machen, ist vll gerade noch so ok - aber addition und erst recht tastatur ist... bäh xP
das mit tastatur kann ich ins making_new_board machen, aber wenn ich addition lokal in eine Funktion schreibe, funktioniert es nicht, in der anderen funktion.
Und wieso ist es schlimm, wenn ich es global deklariere? Welche Nachteile entstehen dadurch?
Man versteckt sie besser mit static in den Funktionen, wo sie gebraucht werden - sonst wird es sehr schnell sehr unübersichtlich und vor allem hast du keinerlei Kapselung - jeder, der deine Fkt. später mal verwendet, kann deine Variablen nach Lust und Laune verändern...
Die "richtigen" Code-Tags sind übrigens in dem Fall die "C/C++" und nichts mit CLI^^
Ich hab mich mal versucht:
#include <iostream>
#include <windows.h> //brauchst du btw nicht...
#include <cstdlib> //brauchst du btw nicht...
using namespace std;
enum
{
HEIGHT = 10,
WIDTH = 20
};
int gameboard[HEIGHT][WIDTH];
void set_game_board_values(int x, int y);
void making_board(int x, int y);
int main()
{
set_game_board_values(HEIGHT, WIDTH);
making_board(HEIGHT, WIDTH);
}
// Interne Berechnung der Spielfeldgröße
void set_game_board_values(int x, int y)
{ //sieht nen bissl umständlich aus, was du hier machst - vll sagst du mal, was du bezwecken willst - geht bestimmt einfacher!?
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
if ((i != 0) && (j != 0))
gameboard[i][j] = 0;
else
gameboard[i][j] = 1;
if ((i == (x - 1)) || (j == (y - 1)))
{
gameboard[i][j] = 1;
}
}
}
}
// Neuberechnung des Spielfeldes
void making_new_board(int x, int y, int addition, int substraction)
{
char tastatur;
cin >> tastatur;
if (tastatur == 'y')
return; //funktion verlassen
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
if ((i == (4 - addition)) && (j == (3 - substraction)))
{
switch(tastatur)
{
case 'w':
case 'W':
addition++;
gameboard[i][j] = 0;
making_board(HEIGHT, WIDTH);
break;
case 's':
case 'S':
addition--;
gameboard[i][j] = 0;
making_board(HEIGHT, WIDTH);
break;
case 'a':
case 'A':
substraction++;
gameboard[i][j] = 0;
making_board(HEIGHT, WIDTH);
break;
case 'd':
case 'D':
substraction--;
gameboard[i][j] = 0;
making_board(HEIGHT, WIDTH);
break;
}
}
}
}
}
// Erstellen des Spielfeldes auf der Konsole
void making_board(int x, int y)
{
static int addition = 0;
static int substraction = 0;
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
if ((i == (4 - addition)) && (j == (3 - substraction)))
{
gameboard[i][j] = gameboard[i][j] = 2; //???
// cout << gameboard[i][j];
// continue;
}
cout << gameboard[i][j];
}
cout << "\n";
}
making_new_board(HEIGHT, WIDTH, addition, substraction); //versteh ich noch immer nicht.. du malst das board und direkt danach willst du es neu erstellen?!
}
allerdings verstehe ich bei vielen Dingen in deinem Quelltext den Sinn nicht...
Wie man schon sieht, könnte man auch das Array noch in der Main-Fkt erstellen und immer mit übergeben - globale Variablen sind also mal wieder absolut unnötig...
bb