/* Beispiel: Mehrdimensionale Arrays
   Filename: main.cpp
   Author: Lahmer
   Title: Schiffe versenken 
   Description: Es soll eine vereinfachte Variation von Schiffe versenken erstellt werden.
   Last Change: 19.01.2018
*/
 
//Header-Dateien
#include <iostream>
 
//Namespace
using namespace std;
 
//Globale Variablen
#define SPALTEN 5
#define ZEILEN 5
#define SCHIFFLAENGE 3
 
 
//Funktionsprototyp
void initializeArray(char feld[ZEILEN][SPALTEN]);	//Rückgabewert void, Übergabe per Zeiger
void printArray(char feld[ZEILEN][SPALTEN]);	//Rückgabewert void, Übergabe per Zeiger
int check(char feld[ZEILEN][SPALTEN], char schiff[ZEILEN][SPALTEN], int zeile, int spalte);	//Rückgabewert int, Übergabe per Zeiger, per Zeiger, per Wert & per Wert
 
 
//Hauptprogramm
int main(int argc, char** argv) {
 
	//Lokale Variablendeklaration
	//Mehrdimensionales Character-Feld für die Anzeige
	char feld[ZEILEN][SPALTEN];
	//Mehrdimensionales Character-Feld für das Schiff
	char schiff[ZEILEN][SPALTEN];
	int zeile=0, spalte=0, treffer=0;
 
 
	//Feld für das Spielfeld mit Werten initialisieren
	initializeArray(feld);
 
	//Feld für das Schiff  mit Werten initialisieren
	initializeArray(schiff);
 
	//Schiff verstecken
	schiff[1][2]='X';
	schiff[1][3]='X';
	schiff[1][4]='X';
 
	printArray(feld);
 
	//Do-While Schleife solange nicht das ganze Schiff versenkt ist
	do {
 
		cout << endl << "Geben Sie die Zeilennummer ein:";
		cin >> zeile;
		cout << endl << "Geben Sie die Spaltennummer ein:";
		cin >> spalte;
 
		//Die Treffer mitzählen, um zu wissen wann das Schiff versenkt ist
		treffer=treffer+check(feld,schiff,zeile,spalte);
 
		//Spielfeld ausgeben
		printArray(feld);
 
	}while(treffer<SCHIFFLAENGE);
 
	cout << endl << endl << "!!!!!!!!!!! HERZLICHEN GLUECKWUNSCH SIE HABEN DAS SCHIFF VERSENKT !!!!!!!!!!!!!!!";
 
	return 0;
}
 
//Alle Feldelemente mit # initialisieren
void initializeArray(char feld[ZEILEN][SPALTEN]) {
 
	for (int i=0; i<ZEILEN;i++)
	{
		for (int j=0; j<SPALTEN;j++)  
		{
			feld[i][j]='#';
		}
	}
}
 
//Spielfeld ausgeben
void printArray(char feld[ZEILEN][SPALTEN]) {
 
	cout << endl << endl << "-------------------------------------------------------------------";
 
	cout << endl << "Spielfeld: " << endl;
	cout << "  ";
	for (int i=0; i<ZEILEN;i++)
	{
		cout << i << " ";
	}
	cout << endl;
	for (int i=0; i<ZEILEN;i++)
	{
		cout << i << " ";
		for (int j=0; j<SPALTEN;j++)  
		{
			cout << feld[i][j] << " ";
		}
		cout << endl;
	}
	cout  << "-------------------------------------------------------------------" << endl << endl;
 
}
 
 
//Prüfen, ob ein Schiff getroffen wurde
int check(char feld[ZEILEN][SPALTEN], char schiff[ZEILEN][SPALTEN], int zeile, int spalte) {
 
	if(schiff[zeile][spalte]=='X') 
	{
		cout << endl << "!!!! TREFFER !!!!!" << endl;
		feld[zeile][spalte]='X';
 
		return 1;
	}
	else {
		cout << endl << "!!!! KEIN TREFFER !!!!!" << endl;
		feld[zeile][spalte]='-';
 
		return 0;
	}
 
	return 0;
 
}