Kreuzung.cpp

gehe zur Dokumentation dieser Datei
00001 
00006 #include <iostream>
00007 #include <fstream>
00008 using namespace std;
00009 
00010 #include "Kreuzung.h"
00011 #include "Konstanten.h"
00012 
00013 
00021 Kreuzung::Kreuzung( long int id ){
00022         clear();
00023         idBenutzer_ = id;
00024 }
00025 
00032 void Kreuzung::aufraeumen(){
00033 }
00034 
00044 void Kreuzung::takt( double zeitintervall ){
00045         try{
00046                 switch( idAmpelAlgorithmus_ ){
00047                         case 1: algorithmusZeitZeit( zeitintervall ); break;
00048                         case 2: algorithmusZeitMenge( zeitintervall ); break;
00049                         case 3: algorithmusStopp( zeitintervall ); break;
00050                         case 4: algorithmusMengeMenge( zeitintervall ); break;
00051                 }
00052         }
00053         catch( Fehler *fehler ){
00054                 throw( fehler );
00055         }
00056 }
00057 
00070 void Kreuzung::setzeSpur( int himmelsrichtung, int abbiegerichtung, Spur* spur ){
00071         if( himmelsrichtung < 1 || himmelsrichtung > 4 ){
00072                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Himmelsrichtung fuer eine Spur in einer Kreuzung entspricht nicht den geforderten Parametern.");
00073                 throw(fehler);
00074         }
00075         if( abbiegerichtung < 1 || abbiegerichtung > 3 ){
00076                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Abbiegerichtung fuer eine Spur in einer Kreuzung entspricht nicht den geforderten Parametern.");
00077                 throw(fehler);
00078         }
00079 
00080         spurenListe_[himmelsrichtung-1][abbiegerichtung-1] = spur;
00081 }
00082 
00096 Spur* Kreuzung::gibSpur( int himmelsrichtung, int abbiegerichtung ){
00097         if( himmelsrichtung < 1 || himmelsrichtung > 4 ){
00098                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Himmelsrichtung fuer eine Spur in einer Kreuzung entspricht nicht den geforderten Parametern.");
00099                 throw(fehler);
00100         }
00101         if( abbiegerichtung < 1 || abbiegerichtung > 3 ){
00102                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Abbiegerichtung fuer eine Spur in einer Kreuzung entspricht nicht den geforderten Parametern.");
00103                 throw(fehler);
00104         }
00105 
00106         return spurenListe_[himmelsrichtung-1][abbiegerichtung-1];
00107 }
00108 
00109 
00110 /*
00111  * @fn          void Kreuzung::inString( )
00112  * @brief       Gibt die Kreuzung auf der Konsole aus
00113  *
00114  * @author      Nico Schroeder
00115  */
00116 void Kreuzung::inString( ){
00117         cout << this;
00118 }
00119 
00120 /*
00121  * @fn          void Kreuzung::setzeAmpelalgorithmus( int id )
00122  * @brief       Gibt die Kreuzung auf der Konsole aus
00123  *
00124  * @author      Nico Schroeder
00125  *
00126  * @param       id Die ID des Ampelalgorithmus
00127  * @throw       Fehler* Einen Fehler.
00128  */
00129 void Kreuzung::setzeAmpelalgorithmus( int id ){
00130         if( id > 0 && id < 5 ){
00131                 idAmpelAlgorithmus_ = id;
00132                 // Wenn ZeitMenge ausgewaehlt wird, so setzte die Schaltmenge auf eine bestimmte Anzahl Fahrzeuge
00133                 if( idAmpelAlgorithmus_ == 2 )
00134                         schaltmenge_[0] = 5;
00135         }
00136         else{
00137                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nFuer eine Kreuzung soll ein nicht definierter Ampelalgorithmus verwendet werden.");
00138                 throw(fehler);
00139         }
00140 }
00141 
00142 /*
00143  * @fn          void Kreuzung::clear()
00144  * @brief       Setzt alle Attribute auf Defaultwerte zurueck.
00145  *
00146  * @author      Nico Schroeder
00147  */
00148 void Kreuzung::clear(){
00149 int i(0), j(0), k(0);
00150         for( i = 0; i < 4; i++ ){
00151                 for( j = 0; j < 3; j++ ){
00152                         spurenListe_[i][j] = 0;
00153                 }
00154         }
00155         
00156         for( i = 0; i < 4; i++ ){
00157                 for( j = 0; j < 3; j++ ){
00158                         for( k = 0; k < 4; k++ ){
00159                                 statistik_[i][j][0] = 0;
00160                                 statistik_[i][j][1] = 0;
00161                                 statistik_[i][j][2] = 0;
00162                                 statistik_[i][j][3] = 0;
00163                         }
00164                 }
00165         }
00166         idAmpelAlgorithmus_ = 1;        // Als default immer den Zeit-Zeit-Algorithmus waehlen
00167         schaltungstakt_ = 1;
00168         schaltzeit_ = 30;
00169         for( i = 0; i < 8; i++ ){
00170                 schaltmenge_[i] = 0;
00171                 schaltreihenfolge_[i] = 0;
00172         }
00173         schaltreihenfolge_[0] = 1;
00174         
00175         zeitLetzteSchaltungGlobal_ = 9999;
00176         mengeLetzteSchaltungGlobal_ = 9999;
00177         loescheMich_ = 0;
00178         idBenutzer_ = 0;
00179 }
00180 
00190 void Kreuzung::exportieren( string cvsDateiname ){
00191         string dateiname = cvsDateiname;
00192         ofstream cvsDatei;
00193         int pkw(0), lkw(0), bus(0), bike(0), insgesamt(0);
00194 
00195         int himmelsrichtung(0), richtung(0);
00196         // Datei oeffnen
00197         cvsDatei.open( dateiname.c_str(), ios::app );
00198         if( !cvsDatei ){
00199                 Fehler *fehler = new Fehler( "Die CVS-Datei fuer Kreuzungen konnte nicht geoeffnet werden.\n");
00200                 fehler->ergaenzeMeldung( dateiname );
00201                 throw(fehler);
00202                 return;
00203         }
00204 
00205         // Daten ausstreamen
00206         // Kreuzungs-Id
00207         cvsDatei << "\"\";\"\";\"\";\"\";\"\";\"\";\"\"" << endl;
00208         cvsDatei << "\"Kreuzungs-Id:\";\"" << idBenutzer_ <<  "\";\"\";\"\";\"\";\"\"" << endl;
00209         cvsDatei << "\"Algorithmus-Id:\";\"" << idAmpelAlgorithmus_ <<  "\";\"\";\"\";\"\";\"\"" << endl;
00210         cvsDatei << "\"Spur-Id\";\"BIKE\";\"PKW\";\"LKW\";\"BUS\";\"INSGESAMT\"" << endl;
00211         // Die einzelnen Spuren rausschreiben
00212         for( himmelsrichtung = 0; himmelsrichtung < 4; himmelsrichtung++ ){
00213                 for( richtung = 0; richtung < 3; richtung++ ){
00214                         if( spurenListe_[himmelsrichtung][richtung] != 0 ){
00215                                 bike = statistik_[himmelsrichtung][richtung][BIKE-1];
00216                                 pkw = statistik_[himmelsrichtung][richtung][PKW-1];
00217                                 lkw = statistik_[himmelsrichtung][richtung][LKW-1];
00218                                 bus = statistik_[himmelsrichtung][richtung][BUS-1];
00219                                 insgesamt = bike + pkw + lkw + bus;
00220                                 cvsDatei << "\"" << spurenListe_[himmelsrichtung][richtung]->gibId( ) << "\";\"" << bike << "\";\"" << pkw << "\";\"" << lkw << "\";\"" << bus << "\";\"" << insgesamt << "\"" << endl;
00221                         }
00222                 }
00223         }
00224         
00225         // Datei schliessen
00226         cvsDatei.close();
00227 }
00228 
00239 ostream &operator<< ( ostream &os, Kreuzung *kreuzung ){
00240         os << "----------Kreuzung----------" << endl;
00241         os << "ID:                   " << kreuzung->id_ << endl;
00242         return os;
00243 }
00244 
00246 
00264 void Kreuzung::algorithmusZeitZeit( double zeitintervall ){
00265         // Teste, ob die Zeit schon abgelaufen ist - nur globaler Test
00266         // Bei diesem Algorithmus ist es unwichtig, wann auf welcher Spur das letzte mal geschalten wurde
00267         bool schalten = 0;
00268         zeitLetzteSchaltungGlobal_ += zeitintervall;
00269 
00270         switch( schaltungstakt_ ){
00271                 // Ablaufzeit = schaltZeit_
00272                 case 1:
00273                 case 3:
00274                 case 5:
00275                 case 7: if( zeitLetzteSchaltungGlobal_ >= schaltzeit_ )
00276                                         schalten = 1;
00277                             break;
00278                 // Ablaufzeit = 3 Sekunden
00279                 case 2:
00280                 case 4:
00281                 case 6:
00282                 case 8: if( zeitLetzteSchaltungGlobal_ >= 3 )
00283                                         schalten = 1;
00284                             break;
00285         }
00286 
00287         // Schalte oder schalte nicht
00288         if( schalten != 0 ){
00289                 schaltungstakt_++;
00290                 if( schaltungstakt_ > 8 )
00291                         schaltungstakt_ = 1;
00292                 zeitLetzteSchaltungGlobal_ = 0;
00293         
00294                 // Stelle die Ampeln entsprechend des aktuellen Taktes ein
00295                 switch( schaltungstakt_ ){
00296                         //      1. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
00297                         case 1:{
00298                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00299                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00300                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00301                                                 spurenListe_[NORD-1][MITTE-1]->setzeGruen();
00302                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00303                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
00304 
00305                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00306                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00307                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00308                                                 spurenListe_[SUED-1][MITTE-1]->setzeGruen();
00309                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00310                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
00311 
00312                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00313                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00314                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00315                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00316                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00317                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00318 
00319                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00320                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00321                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00322                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00323                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00324                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00325 
00326                                         break;
00327                                 }
00328                         //      2. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00329                         case 2:{
00330                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00331                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00332                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00333                                                 spurenListe_[NORD-1][MITTE-1]->setzeGelb();
00334                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00335                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGelb();
00336 
00337                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00338                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00339                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00340                                                 spurenListe_[SUED-1][MITTE-1]->setzeGelb();
00341                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00342                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGelb();
00343 
00344                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00345                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00346                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00347                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00348                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00349                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00350 
00351                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00352                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00353                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00354                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00355                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00356                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00357 
00358                                         break;
00359                                 }
00360                         //      3. Ost links, West links, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
00361                         case 3:{
00362                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00363                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00364                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00365                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00366                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00367                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
00368 
00369                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00370                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00371                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00372                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00373                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00374                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
00375 
00376                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00377                                                 spurenListe_[OST-1][LINKS-1]->setzeGruen();
00378                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00379                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00380                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00381                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00382 
00383                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00384                                                 spurenListe_[WEST-1][LINKS-1]->setzeGruen();
00385                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00386                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00387                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00388                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00389 
00390                                         break;
00391                                 }
00392                         //      4. Ost links, West links, Nord rechts, Sued rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00393                         case 4:{
00394                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00395                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00396                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00397                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00398                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00399                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGelb();
00400 
00401                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00402                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00403                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00404                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00405                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00406                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGelb();
00407 
00408                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00409                                                 spurenListe_[OST-1][LINKS-1]->setzeGelb();
00410                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00411                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00412                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00413                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00414 
00415                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00416                                                 spurenListe_[WEST-1][LINKS-1]->setzeGelb();
00417                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00418                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00419                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00420                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00421 
00422                                         break;
00423                                 }
00424                         //      5. Ost gerade, West gerade, Ost rechts, West rechts bekommen gruen ... alle anderen rot
00425                         case 5:{
00426                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00427                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00428                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00429                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00430                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00431                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00432 
00433                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00434                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00435                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00436                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00437                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00438                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00439 
00440                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00441                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00442                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00443                                                 spurenListe_[OST-1][MITTE-1]->setzeGruen();
00444                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00445                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
00446 
00447                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00448                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00449                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00450                                                 spurenListe_[WEST-1][MITTE-1]->setzeGruen();
00451                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00452                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
00453 
00454                                         break;
00455                                 }
00456                         //      6. Ost gerade, West gerade, Ost rechts, West rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00457                         case 6:{
00458                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00459                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00460                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00461                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00462                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00463                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00464 
00465                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00466                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00467                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00468                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00469                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00470                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00471 
00472                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00473                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00474                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00475                                                 spurenListe_[OST-1][MITTE-1]->setzeGelb();
00476                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00477                                                 spurenListe_[OST-1][RECHTS-1]->setzeGelb();
00478 
00479                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00480                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00481                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00482                                                 spurenListe_[WEST-1][MITTE-1]->setzeGelb();
00483                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00484                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGelb();
00485 
00486                                         break;
00487                                 }
00488                         //      7. Nord links, Sued links, West rechts, Ost rechts bekommen gruen ... alle anderen rot
00489                         case 7:{
00490                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00491                                                 spurenListe_[NORD-1][LINKS-1]->setzeGruen();
00492                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00493                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00494                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00495                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00496 
00497                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00498                                                 spurenListe_[SUED-1][LINKS-1]->setzeGruen();
00499                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00500                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00501                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00502                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00503 
00504                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00505                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00506                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00507                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00508                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00509                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
00510 
00511                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00512                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00513                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00514                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00515                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00516                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
00517 
00518                                         break;
00519                                 }
00520                         //      8. Nord links, Sued links, West rechts, Ost rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00521                         case 8:{
00522                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00523                                                 spurenListe_[NORD-1][LINKS-1]->setzeGelb();
00524                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00525                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00526                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00527                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00528 
00529                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00530                                                 spurenListe_[SUED-1][LINKS-1]->setzeGelb();
00531                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00532                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00533                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00534                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00535 
00536                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00537                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00538                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00539                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00540                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00541                                                 spurenListe_[OST-1][RECHTS-1]->setzeGelb();
00542 
00543                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00544                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00545                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00546                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00547                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00548                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGelb();
00549 
00550                                         break;
00551                                 }
00552                 }
00553         }
00554 
00555         // erzeuge die Statistiken
00556         if( spurenListe_[NORD-1][LINKS-1] != 0 ){
00557                 statistik_[NORD-1][LINKS-1][BIKE-1] += spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00558                 statistik_[NORD-1][LINKS-1][PKW-1] += spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00559                 statistik_[NORD-1][LINKS-1][LKW-1] += spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00560                 statistik_[NORD-1][LINKS-1][BUS-1] += spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00561         }
00562         if( spurenListe_[NORD-1][MITTE-1] != 0 ){
00563                 statistik_[NORD-1][MITTE-1][BIKE-1] += spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00564                 statistik_[NORD-1][MITTE-1][PKW-1] += spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00565                 statistik_[NORD-1][MITTE-1][LKW-1] += spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00566                 statistik_[NORD-1][MITTE-1][BUS-1] += spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00567         }
00568         if( spurenListe_[NORD-1][RECHTS-1] != 0 ){
00569                 statistik_[NORD-1][RECHTS-1][BIKE-1] += spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00570                 statistik_[NORD-1][RECHTS-1][PKW-1] += spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00571                 statistik_[NORD-1][RECHTS-1][LKW-1] += spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00572                 statistik_[NORD-1][RECHTS-1][BUS-1] += spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00573         }
00574 
00575         if( spurenListe_[SUED-1][LINKS-1] != 0 ){
00576                 statistik_[SUED-1][LINKS-1][BIKE-1] += spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00577                 statistik_[SUED-1][LINKS-1][PKW-1] += spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00578                 statistik_[SUED-1][LINKS-1][LKW-1] += spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00579                 statistik_[SUED-1][LINKS-1][BUS-1] += spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00580         }
00581         if( spurenListe_[SUED-1][MITTE-1] != 0 ){
00582                 statistik_[SUED-1][MITTE-1][BIKE-1] += spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00583                 statistik_[SUED-1][MITTE-1][PKW-1] += spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00584                 statistik_[SUED-1][MITTE-1][LKW-1] += spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00585                 statistik_[SUED-1][MITTE-1][BUS-1] += spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00586         }
00587         if( spurenListe_[SUED-1][RECHTS-1] != 0 ){
00588                 statistik_[SUED-1][RECHTS-1][BIKE-1] += spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00589                 statistik_[SUED-1][RECHTS-1][PKW-1] += spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00590                 statistik_[SUED-1][RECHTS-1][LKW-1] += spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00591                 statistik_[SUED-1][RECHTS-1][BUS-1] += spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00592         }
00593 
00594         if( spurenListe_[OST-1][LINKS-1] != 0 ){
00595                 statistik_[OST-1][LINKS-1][BIKE-1] += spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00596                 statistik_[OST-1][LINKS-1][PKW-1] += spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00597                 statistik_[OST-1][LINKS-1][LKW-1] += spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00598                 statistik_[OST-1][LINKS-1][BUS-1] += spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00599 
00600         }
00601         if( spurenListe_[OST-1][MITTE-1] != 0 ){
00602                 statistik_[OST-1][MITTE-1][BIKE-1] += spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00603                 statistik_[OST-1][MITTE-1][PKW-1] += spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00604                 statistik_[OST-1][MITTE-1][LKW-1] += spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00605                 statistik_[OST-1][MITTE-1][BUS-1] += spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00606         }
00607         if( spurenListe_[OST-1][RECHTS-1] != 0 ){
00608                 statistik_[OST-1][RECHTS-1][BIKE-1] += spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00609                 statistik_[OST-1][RECHTS-1][PKW-1] += spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00610                 statistik_[OST-1][RECHTS-1][LKW-1] += spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00611                 statistik_[OST-1][RECHTS-1][BUS-1] += spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00612         }
00613 
00614         if( spurenListe_[WEST-1][LINKS-1] != 0 ){
00615                 statistik_[WEST-1][LINKS-1][BIKE-1] += spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00616                 statistik_[WEST-1][LINKS-1][PKW-1] += spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00617                 statistik_[WEST-1][LINKS-1][LKW-1] += spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00618                 statistik_[WEST-1][LINKS-1][BUS-1] += spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00619         }
00620         if( spurenListe_[WEST-1][MITTE-1] != 0 ){
00621                 statistik_[WEST-1][MITTE-1][BIKE-1] += spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00622                 statistik_[WEST-1][MITTE-1][PKW-1] += spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00623                 statistik_[WEST-1][MITTE-1][LKW-1] += spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00624                 statistik_[WEST-1][MITTE-1][BUS-1] += spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00625         }
00626         if( spurenListe_[WEST-1][RECHTS-1] != 0 ){
00627                 statistik_[WEST-1][RECHTS-1][BIKE-1] += spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00628                 statistik_[WEST-1][RECHTS-1][PKW-1] += spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00629                 statistik_[WEST-1][RECHTS-1][LKW-1] += spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00630                 statistik_[WEST-1][RECHTS-1][BUS-1] += spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00631         }
00632 
00633 }
00634 
00635 
00653 void Kreuzung::algorithmusZeitMenge( double zeitintervall ){
00654         // Teste, ob die Zeit schon abgelaufen ist - nur globaler Test
00655         // Bei diesem Algorithmus ist es unwichtig, wann auf welcher Spur das letzte mal geschalten wurde
00656         bool schalten = 0;
00657         zeitLetzteSchaltungGlobal_ += zeitintervall;
00658 
00659         // Entscheidung, ob wieder geschaltet werden muss
00660         switch( schaltungstakt_ ){
00661                 // entweder ist die Zeit abgelaufen, oder eine bestimmte Anzahl Fahrzeuge ueber die Ampel gefahren
00662                 case 1:
00663                 case 3:
00664                 case 5:
00665                 case 7: if( zeitLetzteSchaltungGlobal_ >= schaltzeit_ || mengeLetzteSchaltungGlobal_ >= schaltmenge_[0] ){
00666                                         schalten = 1;
00667                                         zeitLetzteSchaltungGlobal_ = 0;
00668                                         mengeLetzteSchaltungGlobal_ = 0;
00669                                 }
00670                                 break;
00671                 // Ablaufzeit = 3 Sekunden
00672                 case 2:
00673                 case 4:
00674                 case 6:
00675                 case 8: if( zeitLetzteSchaltungGlobal_ >= 3 ){
00676                                         schalten = 1;
00677                                         zeitLetzteSchaltungGlobal_ = 0;
00678                                         mengeLetzteSchaltungGlobal_ = 0;
00679                                 }
00680                             break;
00681         }
00682 
00683 
00684         // Schalte oder schalte nicht
00685         if( schalten != 0 ){
00686                 schaltungstakt_++;
00687                 if( schaltungstakt_ > 8 )
00688                         schaltungstakt_ = 1;
00689                 zeitLetzteSchaltungGlobal_ = 0;
00690                 mengeLetzteSchaltungGlobal_ = 0;
00691         
00692                 // Stelle die Ampeln entsprechend des aktuellen Taktes ein
00693                 switch( schaltungstakt_ ){
00694                         //      1. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
00695                         case 1:{
00696                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00697                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00698                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00699                                                 spurenListe_[NORD-1][MITTE-1]->setzeGruen();
00700                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00701                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
00702 
00703                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00704                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00705                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00706                                                 spurenListe_[SUED-1][MITTE-1]->setzeGruen();
00707                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00708                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
00709 
00710                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00711                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00712                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00713                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00714                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00715                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00716 
00717                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00718                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00719                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00720                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00721                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00722                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00723 
00724                                         break;
00725                                 }
00726                         //      2. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00727                         case 2:{
00728                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00729                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00730                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00731                                                 spurenListe_[NORD-1][MITTE-1]->setzeGelb();
00732                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00733                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGelb();
00734 
00735                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00736                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00737                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00738                                                 spurenListe_[SUED-1][MITTE-1]->setzeGelb();
00739                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00740                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGelb();
00741 
00742                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00743                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00744                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00745                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00746                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00747                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00748 
00749                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00750                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00751                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00752                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00753                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00754                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00755 
00756                                         break;
00757                                 }
00758                         //      3. Ost links, West links, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
00759                         case 3:{
00760                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00761                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00762                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00763                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00764                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00765                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
00766 
00767                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00768                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00769                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00770                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00771                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00772                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
00773 
00774                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00775                                                 spurenListe_[OST-1][LINKS-1]->setzeGruen();
00776                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00777                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00778                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00779                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00780 
00781                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00782                                                 spurenListe_[WEST-1][LINKS-1]->setzeGruen();
00783                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00784                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00785                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00786                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00787 
00788                                         break;
00789                                 }
00790                         //      4. Ost links, West links, Nord rechts, Sued rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00791                         case 4:{
00792                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00793                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00794                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00795                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00796                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00797                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGelb();
00798 
00799                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00800                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00801                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00802                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00803                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00804                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGelb();
00805 
00806                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00807                                                 spurenListe_[OST-1][LINKS-1]->setzeGelb();
00808                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00809                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00810                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00811                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
00812 
00813                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00814                                                 spurenListe_[WEST-1][LINKS-1]->setzeGelb();
00815                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00816                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00817                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00818                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
00819 
00820                                         break;
00821                                 }
00822                         //      5. Ost gerade, West gerade, Ost rechts, West rechts bekommen gruen ... alle anderen rot
00823                         case 5:{
00824                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00825                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00826                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00827                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00828                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00829                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00830 
00831                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00832                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00833                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00834                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00835                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00836                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00837 
00838                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00839                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00840                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00841                                                 spurenListe_[OST-1][MITTE-1]->setzeGruen();
00842                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00843                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
00844 
00845                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00846                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00847                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00848                                                 spurenListe_[WEST-1][MITTE-1]->setzeGruen();
00849                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00850                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
00851 
00852                                         break;
00853                                 }
00854                         //      6. Ost gerade, West gerade, Ost rechts, West rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00855                         case 6:{
00856                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00857                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
00858                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00859                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00860                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00861                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00862 
00863                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00864                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
00865                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00866                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00867                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00868                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00869 
00870                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00871                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00872                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00873                                                 spurenListe_[OST-1][MITTE-1]->setzeGelb();
00874                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00875                                                 spurenListe_[OST-1][RECHTS-1]->setzeGelb();
00876 
00877                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00878                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00879                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00880                                                 spurenListe_[WEST-1][MITTE-1]->setzeGelb();
00881                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00882                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGelb();
00883 
00884                                         break;
00885                                 }
00886                         //      7. Nord links, Sued links, West rechts, Ost rechts bekommen gruen ... alle anderen rot
00887                         case 7:{
00888                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00889                                                 spurenListe_[NORD-1][LINKS-1]->setzeGruen();
00890                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00891                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00892                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00893                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00894 
00895                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00896                                                 spurenListe_[SUED-1][LINKS-1]->setzeGruen();
00897                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00898                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00899                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00900                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00901 
00902                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00903                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00904                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00905                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00906                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00907                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
00908 
00909                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00910                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00911                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00912                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00913                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00914                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
00915 
00916                                         break;
00917                                 }
00918                         //      8. Nord links, Sued links, West rechts, Ost rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
00919                         case 8:{
00920                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
00921                                                 spurenListe_[NORD-1][LINKS-1]->setzeGelb();
00922                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
00923                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
00924                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
00925                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
00926 
00927                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
00928                                                 spurenListe_[SUED-1][LINKS-1]->setzeGelb();
00929                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
00930                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
00931                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
00932                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
00933 
00934                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
00935                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
00936                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
00937                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
00938                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
00939                                                 spurenListe_[OST-1][RECHTS-1]->setzeGelb();
00940 
00941                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
00942                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
00943                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
00944                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
00945                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
00946                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGelb();
00947 
00948                                         break;
00949                                 }
00950                 }
00951         }
00952         int anzahlBike(0), anzahlPkw(0), anzahlLkw(0), anzahlBus(0);
00953         // erzeuge die Statistiken
00954         if( spurenListe_[NORD-1][LINKS-1] != 0 ){
00955                 anzahlBike = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00956                 anzahlPkw = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00957                 anzahlLkw = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00958                 anzahlBus = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00959 
00960                 statistik_[NORD-1][LINKS-1][BIKE-1] += anzahlBike;
00961                 statistik_[NORD-1][LINKS-1][PKW-1] += anzahlPkw;
00962                 statistik_[NORD-1][LINKS-1][LKW-1] += anzahlLkw;
00963                 statistik_[NORD-1][LINKS-1][BUS-1] += anzahlBus;
00964                 
00965                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
00966         }
00967         if( spurenListe_[NORD-1][MITTE-1] != 0 ){
00968                 anzahlBike = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00969                 anzahlPkw = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00970                 anzahlLkw = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00971                 anzahlBus = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00972 
00973                 statistik_[NORD-1][MITTE-1][BIKE-1] += anzahlBike;
00974                 statistik_[NORD-1][MITTE-1][PKW-1] += anzahlPkw;
00975                 statistik_[NORD-1][MITTE-1][LKW-1] += anzahlLkw;
00976                 statistik_[NORD-1][MITTE-1][BUS-1] += anzahlBus;
00977                 
00978                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
00979         }
00980         if( spurenListe_[NORD-1][RECHTS-1] != 0 ){
00981                 anzahlBike = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00982                 anzahlPkw = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00983                 anzahlLkw = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00984                 anzahlBus = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00985 
00986                 statistik_[NORD-1][RECHTS-1][BIKE-1] += anzahlBike;
00987                 statistik_[NORD-1][RECHTS-1][PKW-1] += anzahlPkw;
00988                 statistik_[NORD-1][RECHTS-1][LKW-1] += anzahlLkw;
00989                 statistik_[NORD-1][RECHTS-1][BUS-1] += anzahlBus;
00990                 
00991                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
00992         }
00993 
00994         if( spurenListe_[SUED-1][LINKS-1] != 0 ){
00995                 anzahlBike = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
00996                 anzahlPkw = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
00997                 anzahlLkw = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
00998                 anzahlBus = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
00999 
01000                 statistik_[SUED-1][LINKS-1][BIKE-1] += anzahlBike;
01001                 statistik_[SUED-1][LINKS-1][PKW-1] += anzahlPkw;
01002                 statistik_[SUED-1][LINKS-1][LKW-1] += anzahlLkw;
01003                 statistik_[SUED-1][LINKS-1][BUS-1] += anzahlBus;
01004                 
01005                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01006         }
01007         if( spurenListe_[SUED-1][MITTE-1] != 0 ){
01008                 anzahlBike = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01009                 anzahlPkw = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01010                 anzahlLkw = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01011                 anzahlBus = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01012 
01013                 statistik_[SUED-1][MITTE-1][BIKE-1] += anzahlBike;
01014                 statistik_[SUED-1][MITTE-1][PKW-1] += anzahlPkw;
01015                 statistik_[SUED-1][MITTE-1][LKW-1] += anzahlLkw;
01016                 statistik_[SUED-1][MITTE-1][BUS-1] += anzahlBus;
01017                 
01018                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01019         }
01020         if( spurenListe_[SUED-1][RECHTS-1] != 0 ){
01021                 anzahlBike = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01022                 anzahlPkw = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01023                 anzahlLkw = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01024                 anzahlBus = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01025 
01026                 statistik_[SUED-1][RECHTS-1][BIKE-1] += anzahlBike;
01027                 statistik_[SUED-1][RECHTS-1][PKW-1] += anzahlPkw;
01028                 statistik_[SUED-1][RECHTS-1][LKW-1] += anzahlLkw;
01029                 statistik_[SUED-1][RECHTS-1][BUS-1] += anzahlBus;
01030                 
01031                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01032         }
01033 
01034         if( spurenListe_[OST-1][LINKS-1] != 0 ){
01035                 anzahlBike = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01036                 anzahlPkw = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01037                 anzahlLkw = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01038                 anzahlBus = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01039 
01040                 statistik_[OST-1][LINKS-1][BIKE-1] += anzahlBike;
01041                 statistik_[OST-1][LINKS-1][PKW-1] += anzahlPkw;
01042                 statistik_[OST-1][LINKS-1][LKW-1] += anzahlLkw;
01043                 statistik_[OST-1][LINKS-1][BUS-1] += anzahlBus;
01044                 
01045                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01046         }
01047         if( spurenListe_[OST-1][MITTE-1] != 0 ){
01048                 anzahlBike = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01049                 anzahlPkw = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01050                 anzahlLkw = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01051                 anzahlBus = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01052 
01053                 statistik_[OST-1][MITTE-1][BIKE-1] += anzahlBike;
01054                 statistik_[OST-1][MITTE-1][PKW-1] += anzahlPkw;
01055                 statistik_[OST-1][MITTE-1][LKW-1] += anzahlLkw;
01056                 statistik_[OST-1][MITTE-1][BUS-1] += anzahlBus;
01057                 
01058                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01059         }
01060         if( spurenListe_[OST-1][RECHTS-1] != 0 ){
01061                 anzahlBike = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01062                 anzahlPkw = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01063                 anzahlLkw = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01064                 anzahlBus = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01065 
01066 
01067                 statistik_[OST-1][RECHTS-1][BIKE-1] += anzahlBike;
01068                 statistik_[OST-1][RECHTS-1][PKW-1] += anzahlPkw;
01069                 statistik_[OST-1][RECHTS-1][LKW-1] += anzahlLkw;
01070                 statistik_[OST-1][RECHTS-1][BUS-1] += anzahlBus;
01071                 
01072                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01073         }
01074 
01075         if( spurenListe_[WEST-1][LINKS-1] != 0 ){
01076                 anzahlBike = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01077                 anzahlPkw = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01078                 anzahlLkw = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01079                 anzahlBus = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01080 
01081                 statistik_[WEST-1][LINKS-1][BIKE-1] += anzahlBike;
01082                 statistik_[WEST-1][LINKS-1][PKW-1] += anzahlPkw;
01083                 statistik_[WEST-1][LINKS-1][LKW-1] += anzahlLkw;
01084                 statistik_[WEST-1][LINKS-1][BUS-1] += anzahlBus;
01085                 
01086                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01087         }
01088         if( spurenListe_[WEST-1][MITTE-1] != 0 ){
01089                 anzahlBike = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01090                 anzahlPkw = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01091                 anzahlLkw = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01092                 anzahlBus = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01093 
01094                 statistik_[WEST-1][MITTE-1][BIKE-1] += anzahlBike;
01095                 statistik_[WEST-1][MITTE-1][PKW-1] += anzahlPkw;
01096                 statistik_[WEST-1][MITTE-1][LKW-1] += anzahlLkw;
01097                 statistik_[WEST-1][MITTE-1][BUS-1] += anzahlBus;
01098                 
01099                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01100         }
01101         if( spurenListe_[WEST-1][RECHTS-1] != 0 ){
01102                 anzahlBike = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01103                 anzahlPkw = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01104                 anzahlLkw = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01105                 anzahlBus = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01106 
01107                 statistik_[WEST-1][RECHTS-1][BIKE-1] += anzahlBike;
01108                 statistik_[WEST-1][RECHTS-1][PKW-1] += anzahlPkw;
01109                 statistik_[WEST-1][RECHTS-1][LKW-1] += anzahlLkw;
01110                 statistik_[WEST-1][RECHTS-1][BUS-1] += anzahlBus;
01111                 
01112                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01113         }
01114 
01115 }
01126 void Kreuzung::algorithmusMengeMenge( double zeitintervall ){
01127         bool schalten( 0 );
01128         int anzahlFahrzeuge[4], i(0);
01129         zeitLetzteSchaltungGlobal_ += zeitintervall;
01130         
01131         switch( schaltreihenfolge_[schaltungstakt_-1] ){
01132                 case 1:
01133                 case 3:
01134                 case 5:
01135                 case 7:{
01136                                         // Teste, ob aus der aktuellen Spur alle Fahrzeuge herausgefahren sind
01137                                         if( mengeLetzteSchaltungGlobal_ < schaltmenge_[schaltungstakt_-1] ){
01138                                                 // Wenn nein ... tue nichts
01139                                                 schalten = 0;
01140                                         }
01141                                         else{
01142                                                 // Wenn ja, ueberpruefe ob noch 3 Sekunden vergangen sind und schalte dann ==> gehe im Takt eins weiter
01143                                                 if( zeitLetzteSchaltungGlobal_ > 3 )
01144                                                         schalten = 1;
01145                                         }
01146                                         break;
01147                            }
01148                 case 2:
01149                 case 4:
01150                 case 6:
01151                 case 8:{
01152                                         if( zeitLetzteSchaltungGlobal_ < 3 ){
01153                                                 // Wenn nein ... tue nichts
01154                                                 schalten = 0;
01155                                         }
01156                                         else{
01157                                                 // Wenn ja, schalte ==> gehe im Takt eins weiter
01158                                                 schalten = 1;
01159                                         }
01160                                         break;
01161                            }
01162         }
01163         
01164 
01165         if( schalten == 1 ){
01166                 
01167                 mengeLetzteSchaltungGlobal_ = 0;
01168                 zeitLetzteSchaltungGlobal_ = 0;
01169 
01170                 // In der Schaltung einen Schritt weiter gehen
01171                 if( schaltmenge_[schaltungstakt_-1] != 0 ){
01172                         schaltungstakt_++;
01173                         // die Zaehlvariable und den letzten Takt zurueck setzten
01174                         if( schaltungstakt_ > 1 )
01175                                 schaltmenge_[schaltungstakt_-2] = 0;
01176                 }
01177                 
01178                 // Sind alle Takte abgelaufen, so stelle eine neue Betrachtung an
01179                 if( schaltungstakt_ > 8 || schaltmenge_[schaltungstakt_-1] == 0 ){
01180                         anzahlFahrzeuge[0] = 0;
01181                         anzahlFahrzeuge[1] = 0;
01182                         anzahlFahrzeuge[2] = 0;
01183                         anzahlFahrzeuge[3] = 0;
01184                         // Betrachtung der Spuren des 1. Taktes aus ZeitZeit
01185                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01186                                 anzahlFahrzeuge[0] += spurenListe_[NORD-1][MITTE-1]->gibAnzahlFahrzeuge();
01187                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01188                                 anzahlFahrzeuge[0] += spurenListe_[NORD-1][RECHTS-1]->gibAnzahlFahrzeuge();
01189                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01190                                 anzahlFahrzeuge[0] += spurenListe_[SUED-1][MITTE-1]->gibAnzahlFahrzeuge();
01191                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01192                                 anzahlFahrzeuge[0] += spurenListe_[SUED-1][RECHTS-1]->gibAnzahlFahrzeuge();
01193 
01194                         // Betrachtung der Spuren des 3. Taktes aus ZeitZeit
01195                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01196                                 anzahlFahrzeuge[1] += spurenListe_[NORD-1][RECHTS-1]->gibAnzahlFahrzeuge();
01197                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01198                                 anzahlFahrzeuge[1] += spurenListe_[SUED-1][RECHTS-1]->gibAnzahlFahrzeuge();
01199                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01200                                 anzahlFahrzeuge[1] += spurenListe_[OST-1][LINKS-1]->gibAnzahlFahrzeuge();
01201                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01202                                 anzahlFahrzeuge[1] += spurenListe_[WEST-1][LINKS-1]->gibAnzahlFahrzeuge();
01203 
01204                         // Betrachtung der Spuren des 5. Taktes aus ZeitZeit
01205                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01206                                 anzahlFahrzeuge[2] += spurenListe_[OST-1][MITTE-1]->gibAnzahlFahrzeuge();
01207                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01208                                 anzahlFahrzeuge[2] += spurenListe_[OST-1][RECHTS-1]->gibAnzahlFahrzeuge();
01209                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01210                                 anzahlFahrzeuge[2] += spurenListe_[WEST-1][MITTE-1]->gibAnzahlFahrzeuge();
01211                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01212                                 anzahlFahrzeuge[2] += spurenListe_[WEST-1][RECHTS-1]->gibAnzahlFahrzeuge();
01213 
01214                         // Betrachtung der Spuren des 7. Taktes aus ZeitZeit
01215                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01216                                 anzahlFahrzeuge[3] += spurenListe_[NORD-1][LINKS-1]->gibAnzahlFahrzeuge();
01217                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01218                                 anzahlFahrzeuge[3] += spurenListe_[SUED-1][LINKS-1]->gibAnzahlFahrzeuge();
01219                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01220                                 anzahlFahrzeuge[3] += spurenListe_[OST-1][RECHTS-1]->gibAnzahlFahrzeuge();
01221                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01222                                 anzahlFahrzeuge[3] += spurenListe_[WEST-1][RECHTS-1]->gibAnzahlFahrzeuge();
01223 
01224                         // Da die rechten Spuren zweimal eingerechnet wurden, muessen diese in einem der Takte abgezogen werden
01225                         // Dies wird in dem Takt gemacht, in dem weniger Fahrzeuge die Kreuzung passieren koennen
01226                         if( anzahlFahrzeuge[0] <= anzahlFahrzeuge[1] )
01227                                 i = 0;
01228                         else
01229                                 i = 1;
01230 
01231                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01232                                 anzahlFahrzeuge[i] -= spurenListe_[NORD-1][RECHTS-1]->gibAnzahlFahrzeuge();
01233                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01234                                 anzahlFahrzeuge[i] -= spurenListe_[SUED-1][RECHTS-1]->gibAnzahlFahrzeuge();
01235 
01236                         if( anzahlFahrzeuge[2] <= anzahlFahrzeuge[3] )
01237                                 i = 2;
01238                         else
01239                                 i = 3;
01240 
01241                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01242                                 anzahlFahrzeuge[i] -= spurenListe_[WEST-1][RECHTS-1]->gibAnzahlFahrzeuge();
01243                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01244                                 anzahlFahrzeuge[i] -= spurenListe_[OST-1][RECHTS-1]->gibAnzahlFahrzeuge();
01245 
01246 
01247                         // Vergleiche die moegliche Anzahl in jedem Takt. Falls ein Takt keine Fahrzeuge befoerdern wuerde, so wird er ausgelassen
01248                         // Der Takt, welcher die meisten Fahrzeuge befoerdern kann, ist der erste auszufuehrende und so weiter
01249                         schaltungstakt_ = 0;
01250                         for( i = 0; i<4; i++ ){
01251                                 int zuSetzenderTakt( 0 );
01252                                 // Waehle den aktuell zu setztenden Takt aus
01253                                 if( anzahlFahrzeuge[0] > anzahlFahrzeuge[1] )
01254                                         zuSetzenderTakt = 0;
01255                                 else
01256                                         zuSetzenderTakt = 1;
01257 
01258                                 if( anzahlFahrzeuge[2] > anzahlFahrzeuge[zuSetzenderTakt] )
01259                                         zuSetzenderTakt = 2;
01260                                 if( anzahlFahrzeuge[3] > anzahlFahrzeuge[zuSetzenderTakt] )
01261                                         zuSetzenderTakt = 3;
01262 
01263                                 // setze den "gruen"-Takt
01264                                 schaltreihenfolge_[schaltungstakt_] = zuSetzenderTakt * 2 + 1;
01265                                 schaltmenge_[schaltungstakt_] = anzahlFahrzeuge[zuSetzenderTakt];
01266                                 schaltungstakt_++;
01267                                 
01268                                 // setze den "gelb"-Takt
01269                                 schaltreihenfolge_[schaltungstakt_] = zuSetzenderTakt * 2 + 2;
01270                                 schaltmenge_[schaltungstakt_] = anzahlFahrzeuge[zuSetzenderTakt];
01271                                 schaltungstakt_++;
01272 
01273                                 // setze die Anzahl der Fahrzeuge im verwendeten Takt auf 0, damit beim naechsten Durchlauf ein anderer Takt gefunden wird
01274                                 anzahlFahrzeuge[zuSetzenderTakt] = 0;
01275                         }
01276 
01277                         // Stelle den Takt auf die erste Stelle
01278                         schaltungstakt_ = 1;
01279                 }
01280 
01281                 // Stelle die Ampeln entsprechend des aktuellen Taktes ein
01282                 switch( schaltreihenfolge_[schaltungstakt_-1] ){
01283                         //      1. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
01284                         case 1:{
01285                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01286                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01287                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01288                                                 spurenListe_[NORD-1][MITTE-1]->setzeGruen();
01289                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01290                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
01291 
01292                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01293                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01294                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01295                                                 spurenListe_[SUED-1][MITTE-1]->setzeGruen();
01296                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01297                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
01298 
01299                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01300                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01301                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01302                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01303                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01304                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
01305 
01306                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01307                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01308                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01309                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01310                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01311                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
01312 
01313                                         break;
01314                                 }
01315                         //      2. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
01316                         case 2:{
01317                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01318                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01319                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01320                                                 spurenListe_[NORD-1][MITTE-1]->setzeGelb();
01321                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01322                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGelb();
01323 
01324                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01325                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01326                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01327                                                 spurenListe_[SUED-1][MITTE-1]->setzeGelb();
01328                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01329                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGelb();
01330 
01331                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01332                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01333                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01334                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01335                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01336                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
01337 
01338                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01339                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01340                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01341                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01342                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01343                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
01344 
01345                                         break;
01346                                 }
01347                         //      3. Ost links, West links, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
01348                         case 3:{
01349                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01350                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01351                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01352                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01353                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01354                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
01355 
01356                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01357                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01358                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01359                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01360                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01361                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
01362 
01363                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01364                                                 spurenListe_[OST-1][LINKS-1]->setzeGruen();
01365                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01366                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01367                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01368                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
01369 
01370                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01371                                                 spurenListe_[WEST-1][LINKS-1]->setzeGruen();
01372                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01373                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01374                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01375                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
01376 
01377                                         break;
01378                                 }
01379                         //      4. Ost links, West links, Nord rechts, Sued rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
01380                         case 4:{
01381                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01382                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01383                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01384                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01385                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01386                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGelb();
01387 
01388                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01389                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01390                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01391                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01392                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01393                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGelb();
01394 
01395 
01396                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01397                                                 spurenListe_[OST-1][LINKS-1]->setzeGelb();
01398                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01399                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01400                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01401                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
01402 
01403                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01404                                                 spurenListe_[WEST-1][LINKS-1]->setzeGelb();
01405                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01406                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01407                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01408                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
01409 
01410                                         break;
01411                                 }
01412                         //      5. Ost gerade, West gerade, Ost rechts, West rechts bekommen gruen ... alle anderen rot
01413                         case 5:{
01414                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01415                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01416                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01417                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01418                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01419                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
01420 
01421                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01422                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01423                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01424                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01425                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01426                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
01427 
01428                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01429                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01430                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01431                                                 spurenListe_[OST-1][MITTE-1]->setzeGruen();
01432                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01433                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
01434 
01435                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01436                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01437                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01438                                                 spurenListe_[WEST-1][MITTE-1]->setzeGruen();
01439                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01440                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
01441 
01442                                         break;
01443                                 }
01444                         //      6. Ost gerade, West gerade, Ost rechts, West rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
01445                         case 6:{
01446                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01447                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01448                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01449                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01450                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01451                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
01452 
01453                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01454                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01455                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01456                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01457                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01458                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
01459 
01460                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01461                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01462                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01463                                                 spurenListe_[OST-1][MITTE-1]->setzeGelb();
01464                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01465                                                 spurenListe_[OST-1][RECHTS-1]->setzeGelb();
01466 
01467                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01468                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01469                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01470                                                 spurenListe_[WEST-1][MITTE-1]->setzeGelb();
01471                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01472                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGelb();
01473 
01474                                         break;
01475                                 }
01476                         //      7. Nord links, Sued links, West rechts, Ost rechts bekommen gruen ... alle anderen rot
01477                         case 7:{
01478                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01479                                                 spurenListe_[NORD-1][LINKS-1]->setzeGruen();
01480                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01481                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01482                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01483                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
01484 
01485                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01486                                                 spurenListe_[SUED-1][LINKS-1]->setzeGruen();
01487                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01488                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01489                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01490                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
01491 
01492                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01493                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01494                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01495                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01496                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01497                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
01498 
01499                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01500                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01501                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01502                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01503                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01504                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
01505 
01506                                         break;
01507                                 }
01508                         //      8. Nord links, Sued links, West rechts, Ost rechts bekommen gelb ... alle anderen rot (fuer 3 Sekunden)
01509                         case 8:{
01510                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01511                                                 spurenListe_[NORD-1][LINKS-1]->setzeGelb();
01512                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01513                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01514                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01515                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
01516 
01517                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01518                                                 spurenListe_[SUED-1][LINKS-1]->setzeGelb();
01519                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01520                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01521                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01522                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
01523 
01524                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01525                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01526                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01527                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01528                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01529                                                 spurenListe_[OST-1][RECHTS-1]->setzeGelb();
01530 
01531                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01532                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01533                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01534                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01535                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01536                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGelb();
01537 
01538                                         break;
01539                                 }
01540                 }
01541         }
01542 
01543         int anzahlBike(0), anzahlPkw(0), anzahlLkw(0), anzahlBus(0);
01544         // erzeuge die Statistiken
01545         if( spurenListe_[NORD-1][LINKS-1] != 0 ){
01546                 anzahlBike = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01547                 anzahlPkw = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01548                 anzahlLkw = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01549                 anzahlBus = spurenListe_[NORD-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01550 
01551                 statistik_[NORD-1][LINKS-1][BIKE-1] += anzahlBike;
01552                 statistik_[NORD-1][LINKS-1][PKW-1] += anzahlPkw;
01553                 statistik_[NORD-1][LINKS-1][LKW-1] += anzahlLkw;
01554                 statistik_[NORD-1][LINKS-1][BUS-1] += anzahlBus;
01555                 
01556                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01557         }
01558         if( spurenListe_[NORD-1][MITTE-1] != 0 ){
01559                 anzahlBike = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01560                 anzahlPkw = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01561                 anzahlLkw = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01562                 anzahlBus = spurenListe_[NORD-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01563 
01564                 statistik_[NORD-1][MITTE-1][BIKE-1] += anzahlBike;
01565                 statistik_[NORD-1][MITTE-1][PKW-1] += anzahlPkw;
01566                 statistik_[NORD-1][MITTE-1][LKW-1] += anzahlLkw;
01567                 statistik_[NORD-1][MITTE-1][BUS-1] += anzahlBus;
01568                 
01569                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01570         }
01571         if( spurenListe_[NORD-1][RECHTS-1] != 0 ){
01572                 anzahlBike = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01573                 anzahlPkw = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01574                 anzahlLkw = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01575                 anzahlBus = spurenListe_[NORD-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01576 
01577                 statistik_[NORD-1][RECHTS-1][BIKE-1] += anzahlBike;
01578                 statistik_[NORD-1][RECHTS-1][PKW-1] += anzahlPkw;
01579                 statistik_[NORD-1][RECHTS-1][LKW-1] += anzahlLkw;
01580                 statistik_[NORD-1][RECHTS-1][BUS-1] += anzahlBus;
01581                 
01582                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01583         }
01584 
01585         if( spurenListe_[SUED-1][LINKS-1] != 0 ){
01586                 anzahlBike = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01587                 anzahlPkw = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01588                 anzahlLkw = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01589                 anzahlBus = spurenListe_[SUED-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01590 
01591                 statistik_[SUED-1][LINKS-1][BIKE-1] += anzahlBike;
01592                 statistik_[SUED-1][LINKS-1][PKW-1] += anzahlPkw;
01593                 statistik_[SUED-1][LINKS-1][LKW-1] += anzahlLkw;
01594                 statistik_[SUED-1][LINKS-1][BUS-1] += anzahlBus;
01595                 
01596                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01597         }
01598         if( spurenListe_[SUED-1][MITTE-1] != 0 ){
01599                 anzahlBike = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01600                 anzahlPkw = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01601                 anzahlLkw = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01602                 anzahlBus = spurenListe_[SUED-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01603 
01604                 statistik_[SUED-1][MITTE-1][BIKE-1] += anzahlBike;
01605                 statistik_[SUED-1][MITTE-1][PKW-1] += anzahlPkw;
01606                 statistik_[SUED-1][MITTE-1][LKW-1] += anzahlLkw;
01607                 statistik_[SUED-1][MITTE-1][BUS-1] += anzahlBus;
01608                 
01609                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01610         }
01611         if( spurenListe_[SUED-1][RECHTS-1] != 0 ){
01612                 anzahlBike = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01613                 anzahlPkw = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01614                 anzahlLkw = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01615                 anzahlBus = spurenListe_[SUED-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01616 
01617                 statistik_[SUED-1][RECHTS-1][BIKE-1] += anzahlBike;
01618                 statistik_[SUED-1][RECHTS-1][PKW-1] += anzahlPkw;
01619                 statistik_[SUED-1][RECHTS-1][LKW-1] += anzahlLkw;
01620                 statistik_[SUED-1][RECHTS-1][BUS-1] += anzahlBus;
01621                 
01622                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01623         }
01624 
01625         if( spurenListe_[OST-1][LINKS-1] != 0 ){
01626                 anzahlBike = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01627                 anzahlPkw = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01628                 anzahlLkw = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01629                 anzahlBus = spurenListe_[OST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01630 
01631                 statistik_[OST-1][LINKS-1][BIKE-1] += anzahlBike;
01632                 statistik_[OST-1][LINKS-1][PKW-1] += anzahlPkw;
01633 
01634                 statistik_[OST-1][LINKS-1][LKW-1] += anzahlLkw;
01635                 statistik_[OST-1][LINKS-1][BUS-1] += anzahlBus;
01636                 
01637                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01638         }
01639         if( spurenListe_[OST-1][MITTE-1] != 0 ){
01640                 anzahlBike = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01641                 anzahlPkw = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01642                 anzahlLkw = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01643                 anzahlBus = spurenListe_[OST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01644 
01645                 statistik_[OST-1][MITTE-1][BIKE-1] += anzahlBike;
01646                 statistik_[OST-1][MITTE-1][PKW-1] += anzahlPkw;
01647                 statistik_[OST-1][MITTE-1][LKW-1] += anzahlLkw;
01648                 statistik_[OST-1][MITTE-1][BUS-1] += anzahlBus;
01649                 
01650                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01651         }
01652         if( spurenListe_[OST-1][RECHTS-1] != 0 ){
01653                 anzahlBike = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01654                 anzahlPkw = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01655                 anzahlLkw = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01656                 anzahlBus = spurenListe_[OST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01657 
01658                 statistik_[OST-1][RECHTS-1][BIKE-1] += anzahlBike;
01659                 statistik_[OST-1][RECHTS-1][PKW-1] += anzahlPkw;
01660                 statistik_[OST-1][RECHTS-1][LKW-1] += anzahlLkw;
01661                 statistik_[OST-1][RECHTS-1][BUS-1] += anzahlBus;
01662                 
01663                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01664         }
01665 
01666         if( spurenListe_[WEST-1][LINKS-1] != 0 ){
01667                 anzahlBike = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01668                 anzahlPkw = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01669                 anzahlLkw = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01670                 anzahlBus = spurenListe_[WEST-1][LINKS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01671 
01672                 statistik_[WEST-1][LINKS-1][BIKE-1] += anzahlBike;
01673                 statistik_[WEST-1][LINKS-1][PKW-1] += anzahlPkw;
01674                 statistik_[WEST-1][LINKS-1][LKW-1] += anzahlLkw;
01675                 statistik_[WEST-1][LINKS-1][BUS-1] += anzahlBus;
01676                 
01677                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01678         }
01679         if( spurenListe_[WEST-1][MITTE-1] != 0 ){
01680                 anzahlBike = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01681                 anzahlPkw = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01682                 anzahlLkw = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01683                 anzahlBus = spurenListe_[WEST-1][MITTE-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01684 
01685                 statistik_[WEST-1][MITTE-1][BIKE-1] += anzahlBike;
01686                 statistik_[WEST-1][MITTE-1][PKW-1] += anzahlPkw;
01687                 statistik_[WEST-1][MITTE-1][LKW-1] += anzahlLkw;
01688                 statistik_[WEST-1][MITTE-1][BUS-1] += anzahlBus;
01689                 
01690                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01691         }
01692         if( spurenListe_[WEST-1][RECHTS-1] != 0 ){
01693                 anzahlBike = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BIKE );
01694                 anzahlPkw = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( PKW );
01695                 anzahlLkw = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( LKW );
01696                 anzahlBus = spurenListe_[WEST-1][RECHTS-1]->gibAnzahlAbgefahrenerFahrzeuge( BUS );
01697 
01698                 statistik_[WEST-1][RECHTS-1][BIKE-1] += anzahlBike;
01699                 statistik_[WEST-1][RECHTS-1][PKW-1] += anzahlPkw;
01700                 statistik_[WEST-1][RECHTS-1][LKW-1] += anzahlLkw;
01701                 statistik_[WEST-1][RECHTS-1][BUS-1] += anzahlBus;
01702                 
01703                 mengeLetzteSchaltungGlobal_ = anzahlBike + anzahlPkw + anzahlLkw + anzahlBus + mengeLetzteSchaltungGlobal_;
01704         }
01705 }
01706 
01718 void Kreuzung::algorithmusStopp( double zeitintervall ){
01719         // Teste, ob die Zeit schon abgelaufen ist - nur globaler Test
01720         // Bei diesem Algorithmus ist es unwichtig, wann auf welcher Spur das letzte mal geschalten wurde
01721         bool schalten = 0;
01722         zeitLetzteSchaltungGlobal_ += zeitintervall;
01723 
01724         // Entscheidung, ob wieder geschaltet werden muss
01725         switch( schaltungstakt_ ){
01726                 // Ablaufzeit = 30 Sekunden
01727                 case 1:
01728                                 if( zeitLetzteSchaltungGlobal_ >= schaltzeit_ ){
01729                                         schalten = 1;
01730                                         zeitLetzteSchaltungGlobal_ = 0;
01731                                         mengeLetzteSchaltungGlobal_ = 0;
01732                                 }
01733                                 break;
01734                 // Ablaufzeit = 1 Minute
01735                 case 2:
01736                                 if( zeitLetzteSchaltungGlobal_ >= (schaltzeit_ * 2) ){
01737                                         schalten = 1;
01738                                         zeitLetzteSchaltungGlobal_ = 0;
01739                                         mengeLetzteSchaltungGlobal_ = 0;
01740                                 }
01741                             break;
01742         }
01743 
01744 
01745         // Schalte oder schalte nicht
01746         if( schalten != 0 ){
01747                 schaltungstakt_++;
01748                 if( schaltungstakt_ > 2 )
01749                         schaltungstakt_ = 1;
01750                 zeitLetzteSchaltungGlobal_ = 0;
01751                 mengeLetzteSchaltungGlobal_ = 0;
01752         
01753                 // Stelle die Ampeln entsprechend des aktuellen Taktes ein
01754                 switch( schaltungstakt_ ){
01755                         //      1. Nord gerade, Sued gerade, Nord rechts, Sued rechts bekommen gruen ... alle anderen rot
01756                         case 1:{
01757                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01758                                                 spurenListe_[NORD-1][LINKS-1]->setzeRot();
01759                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01760                                                 spurenListe_[NORD-1][MITTE-1]->setzeRot();
01761                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01762                                                 spurenListe_[NORD-1][RECHTS-1]->setzeRot();
01763 
01764                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01765                                                 spurenListe_[SUED-1][LINKS-1]->setzeRot();
01766                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01767                                                 spurenListe_[SUED-1][MITTE-1]->setzeRot();
01768                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01769                                                 spurenListe_[SUED-1][RECHTS-1]->setzeRot();
01770 
01771                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01772                                                 spurenListe_[OST-1][LINKS-1]->setzeRot();
01773                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01774                                                 spurenListe_[OST-1][MITTE-1]->setzeRot();
01775                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01776                                                 spurenListe_[OST-1][RECHTS-1]->setzeRot();
01777 
01778                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01779                                                 spurenListe_[WEST-1][LINKS-1]->setzeRot();
01780                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01781                                                 spurenListe_[WEST-1][MITTE-1]->setzeRot();
01782                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01783                                                 spurenListe_[WEST-1][RECHTS-1]->setzeRot();
01784 
01785                                         break;
01786                                 }
01787 
01788                                 case 2:{
01789                                         if( spurenListe_[NORD-1][LINKS-1] != 0 )
01790                                                 spurenListe_[NORD-1][LINKS-1]->setzeGruen();
01791                                         if( spurenListe_[NORD-1][MITTE-1] != 0 )
01792                                                 spurenListe_[NORD-1][MITTE-1]->setzeGruen();
01793                                         if( spurenListe_[NORD-1][RECHTS-1] != 0 )
01794                                                 spurenListe_[NORD-1][RECHTS-1]->setzeGruen();
01795 
01796                                         if( spurenListe_[SUED-1][LINKS-1] != 0 )
01797                                                 spurenListe_[SUED-1][LINKS-1]->setzeGruen();
01798                                         if( spurenListe_[SUED-1][MITTE-1] != 0 )
01799                                                 spurenListe_[SUED-1][MITTE-1]->setzeGruen();
01800                                         if( spurenListe_[SUED-1][RECHTS-1] != 0 )
01801                                                 spurenListe_[SUED-1][RECHTS-1]->setzeGruen();
01802 
01803                                         if( spurenListe_[OST-1][LINKS-1] != 0 )
01804                                                 spurenListe_[OST-1][LINKS-1]->setzeGruen();
01805                                         if( spurenListe_[OST-1][MITTE-1] != 0 )
01806                                                 spurenListe_[OST-1][MITTE-1]->setzeGruen();
01807                                         if( spurenListe_[OST-1][RECHTS-1] != 0 )
01808                                                 spurenListe_[OST-1][RECHTS-1]->setzeGruen();
01809 
01810                                         if( spurenListe_[WEST-1][LINKS-1] != 0 )
01811                                                 spurenListe_[WEST-1][LINKS-1]->setzeGruen();
01812                                         if( spurenListe_[WEST-1][MITTE-1] != 0 )
01813                                                 spurenListe_[WEST-1][MITTE-1]->setzeGruen();
01814                                         if( spurenListe_[WEST-1][RECHTS-1] != 0 )
01815                                                 spurenListe_[WEST-1][RECHTS-1]->setzeGruen();
01816 
01817                                         break;
01818                                 }
01819                 }
01820         }
01821 }

Erzeugt am Tue Jun 14 18:36:50 2005 für TraffSpot von  doxygen 1.3.9.1