Projekt 3: "Angry Birds im Terminal"

3. Das Spielfeld aufbauen
3.1. Bodenebene & Schleuder zeichnen
Als Erstes wollen wir das Spielfeld ohne Vögel und Schweine zeichnen. Da in C++ ohne externe und oft komplizierte Bibliotheken keine Grafik-Ausgabe möglich ist, werden wir in dieser Version des Spiels genau wie beim zweiten Projekt die Kommandozeile zum Zeichnen "missbrauchen".
// Klasse für das Spielfeld-Objekt
class GameArea
{
public:
// Konstruktor inkl. Aufbau des Spielfelds
GameArea(int num_rows, int num_cols)
{
// Spielfeld-Größe festlegen
m_num_rows = num_rows;
m_num_cols = num_cols;
cout << "Spielfeld mit " << num_rows
<< " Zeilen und " << num_cols << " Spalten\n";
// Bodenebene und Schleuder positionieren
m_ground_level = m_num_rows - 1;
m_slingshot_pos = 5;
// Spielfeld initialisieren
m_game_area.resize(m_num_rows,vector<char>(m_num_cols,' '));
// Bodenebene einzeichnen
for (int col = 0; col < m_num_cols; ++col)
{
m_game_area[m_ground_level][col] = '_';
}
// Schleuder einzeichnen
m_game_area[m_ground_level][m_slingshot_pos] = '|';
m_game_area[m_ground_level - 1][m_slingshot_pos] = '|';
m_game_area[m_ground_level - 2][m_slingshot_pos - 1] = '\\';
m_game_area[m_ground_level - 2][m_slingshot_pos + 1] = '/';
m_game_area[m_ground_level - 3][m_slingshot_pos - 2] = '\\';
m_game_area[m_ground_level - 3][m_slingshot_pos + 2] = '/';
}
// Hinzufügen von Spielobjekten in die jeweiligen Listen
void AddGameObject(GameObject *object)
{
// Objekt in passende Liste hinzufügen
if (object->m_type == BIRD)
m_game_birds.push_back((Bird *)object);
else if (object->m_type == PIG)
m_game_pigs.push_back((Pig *)object);
cout << "Objekt-Typ " << object->m_type << " hinzugefügt ("
<< m_game_birds.size() << " Vögel, "
<< m_game_pigs.size() << " Schweine)n";
}
// Den Inhalt des Spiefelds im Terminal ausgeben
void PrintGameArea()
{
// Spielfeld in Kommandozeile ausgeben
for (int y = 0; y < m_num_rows; y++)
{
for (int x = 0; x < m_num_cols; x++)
{
cout << m_game_area[y][x];
}
cout << endl;
}
}
// Member-Variablen
vector<Bird *> m_game_birds; // Liste aller Vögel
vector<Pig *> m_game_pigs; // Liste aller Schweine
int m_num_cols; // Feldgröße in x (Zelle = 1m)
int m_num_rows; // Feldröße in y
vector<vector<char>> m_game_area; // 2D-Spielfeld
int m_slingshot_pos; // x-Position der Schleuder
int m_ground_level; // Lage der Bodenebene
};
/*******************/
int main()
{
// Spielobjekte erzeugen
Bird b1(0.0, 0.0), b2(2.0, 0.0), b3(4.0, 0.0);
Pig p1(30.0, 0.0), p2(50.0, 0.0, 1000);
// Spielobjekte erzeugen
int rows{15}, cols{70};
GameArea area(rows, cols);
// Spielfeld in Kommandozeile ausgeben
area.PrintGameArea();
return 0;
}