011
04.06.2003, 17:45 Uhr
~guzi
Gast
|
hier ist meine Lösung. etwas ausführlicher als deine Lösung:
main.cpp
C++: |
#include "spielfeld.h"
int main() { spielfeld Spielfeld( 8); Spielfeld.aufbauen( "quadrate.txt"); Spielfeld.zeichnen(); Spielfeld.start();
return 0; };
|
spielfeld.h
C++: |
#include "koordinate.h"
class spielfeld { public: spielfeld( int max); bool aufbauen( char *dateiName); void zeichnen(); void start(); bool istTreffer( int x, int y);
private: int anz; int **feld; int MAX;
koordinate K1; koordinate K2; koordinate K3; koordinate K4; };
|
koordinate.h
C++: |
class koordinate { public: koordinate(); koordinate( int x, int y); void naechste( int max); int gibX(); int gibY(); void set( int x, int y);
private: int X; int Y; };
|
spielfeld.cpp
C++: |
#include "spielfeld.h" #include <fstream.h> #include <iostream.h>
spielfeld::spielfeld( int max) { MAX = max; feld = new int*[MAX];
for( int z=0; z<MAX; z++) feld[z] = new int[MAX];
K1.set( 0, 0); K2.set( 0, 0); K3.set( 0, 0); K4.set( 0, 0);
anz = 0; };
bool spielfeld::aufbauen( char *dateiName) { char *eingeleseneZeile = new char[MAX+1]; int zeile, spalte; zeile = spalte = 0; ifstream fin; fin.open( dateiName);
for( int z=0; z<MAX; z++) { fin >> eingeleseneZeile;
for( int s=0; s<MAX; s++) feld[zeile][s] = (int) (eingeleseneZeile[s] - 48);
spalte = 0; zeile++; };
return true; };
void spielfeld::zeichnen() { int zeile, spalte; zeile = spalte =0;
for( int z=0; z<MAX; z++) { for( int s=0; s<MAX; s++) cout << feld[z][s] << " | ";
cout << endl; cout << "-------------------------------" << endl; }; };
bool spielfeld::istTreffer( int x, int y) { if( x >= MAX || y >= MAX) return false;
if( x < 0 || y < 0) return false;
if( feld[y][x] == 1) return true; else return false; };
void spielfeld::start() { int abstandX, abstandY; K2.naechste( MAX); while( K1.gibY() != MAX-1) { if( K2.gibY() == MAX-1 && K2.gibX() == MAX-1) { K1.naechste( MAX); K2.set( K1.gibY(), K1.gibX()); K2.naechste( MAX); };
abstandX = K2.gibX() - K1.gibX(); abstandY = K2.gibY() - K1.gibY(); if( abstandY >= 0 && abstandX > 0) {
K3.set( K1.gibY() + abstandX, K1.gibX() - abstandY); K4.set( K2.gibY() + abstandX, K2.gibX() - abstandY);
if( istTreffer( K1.gibX(), K1.gibY()) == true) if( istTreffer( K2.gibX(), K2.gibY()) == true) if( istTreffer( K3.gibX(), K3.gibY()) == true) if( istTreffer( K4.gibX(), K4.gibY()) == true) anz++; };
K2.naechste( MAX); };
cout << anz << endl;
};
|
koordinate.cpp
C++: |
#include "koordinate.h"
koordinate::koordinate() { X = -1; Y = -1; };
koordinate::koordinate( int y, int x) { X = x; Y = y; };
int koordinate::gibX() { return X; };
int koordinate::gibY() { return Y; };
void koordinate::set( int y, int x) { X = x; Y = y; };
void koordinate::naechste( int max) { if( X < max-1) X++; else { X = 0; Y++; }; };
|
|