//--------------------------------------------------------------------------- #include #pragma hdrstop #include "TdieGUI.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TdieGUI *dieGUI; //--------------------------------------------------------------------------- Steuerung *dieSteuerung; //--------------------------------------------------------------------------- __fastcall TdieGUI::TdieGUI(TComponent* Owner) : TForm(Owner) { dieGUI->DoubleBuffered = true; //weg mit dem lästigen "flackern" pnlSpielstarten->DoubleBuffered = true; pnlHighscores->DoubleBuffered = true; pnlCredits->DoubleBuffered = true; pnlBeenden->DoubleBuffered = true; pnlMenu->DoubleBuffered = true; pnlZurueck->DoubleBuffered = true; pnlPause->DoubleBuffered = true; pnlPauseWeiter->DoubleBuffered = true; pnlPauseBeenden->DoubleBuffered = true; pnlHighscore->DoubleBuffered = true; pnlHighscoreSpeichern->DoubleBuffered = true; pnlHilfe->DoubleBuffered = true; pnlHilfeButton->DoubleBuffered = true; status=0; //Highscore-Labels erzeugen: for(int i=0; i<10; i++){ for(int j=0; j<2; j++){ highscores[i][j] = new TLabel(pnlMenu); highscores[i][j]->Parent = pnlMenu; highscores[i][j]->Transparent = true; highscores[i][j]->Font->Size = 12; highscores[i][j]->Font->Name = "Arial"; highscores[i][j]->Font->Style = highscores[i][j]->Font->Style << fsBold; highscores[i][j]->Top = 120+i*30; highscores[i][j]->Left = 40+260*j; highscores[i][j]->Visible = false; if(j>0){ highscores[i][j]->BiDiMode = bdLeftToRight; highscores[i][j]->Alignment = taRightJustify; } } } //Brick-Bilder laden AnsiString bildpfad[7]; bildpfad[0] = "system/gfx/brick_25x25_hellblau.jpg"; bildpfad[1] = "system/gfx/brick_25x25_blau.jpg"; bildpfad[2] = "system/gfx/brick_25x25_orange.jpg"; bildpfad[3] = "system/gfx/brick_25x25_gelb.jpg"; bildpfad[4] = "system/gfx/brick_25x25_gruen.jpg"; bildpfad[5] = "system/gfx/brick_25x25_lila.jpg"; bildpfad[6] = "system/gfx/brick_25x25_rot.jpg"; for(int i=0; i<7; i++) { if(FileExists(bildpfad[i])){ bild[i] = new TJPEGImage(); bild[i]->LoadFromFile(bildpfad[i]); } else { //Timer1 stoppen Timer1->Enabled = false; //Fehlermeldung? Fehlermeldung! AnsiString text = "Bitte überprüfen sie, ob folgende Datei existiert:\n\n"+bildpfad[i]; Application->MessageBoxA(text.c_str(),"Kritischer Fehler: Bilddatei nicht gefunden",0); //Und um weiteren Schaden zu vermeiden: Application->Terminate(); } } //Spielfeld aufbauen aus 10x20 TImages for(int x=0; x<10; x++) { for(int y=0; y<20; y++) { spielfeld[x][y] = new TImage(this); spielfeld[x][y]->Width = 25; spielfeld[x][y]->Height = 25; spielfeld[x][y]->Top = y*25; spielfeld[x][y]->Left = 10+x*25; spielfeld[x][y]->Parent = this; //testcode um zu zeigen das das TImage Feld aufgebaut wird //spielfeld[x][y]->Picture->Assign(bild[random(7)]); } } //Vorschau aufbauen for(int x=0; x<2; x++) { for(int y=0; y<4; y++) { vorschaufeld[x][y] = new TImage(this); vorschaufeld[x][y]->Width = 25; vorschaufeld[x][y]->Height = 25; vorschaufeld[x][y]->Top = 50+y*25; vorschaufeld[x][y]->Left = 286+x*25; vorschaufeld[x][y]->Parent = this; //testcode um zu zeigen das das TImage Feld aufgebaut wird //vorschaufeld[x][y]->Picture->Assign(bild[random(7)]); } } dieSteuerung = new Steuerung(); } void TdieGUI::initialisiereSpielfeld(){ for(int x=0; x<10; x++){ for(int y=0; y<20; y++){ loescheSegment(x,y); } } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::Timer1Timer(TObject *Sender) { dieSteuerung->fallen(); } //--------------------------------------------------------------------------- void TdieGUI::setzeSegment(int x, int y, int farbe) { setzeSegment(x,y,farbe,false); } void TdieGUI::setzeSegment(int x, int y, int farbe, bool vorschau) { if(farbe >= 0 && farbe < 7) { if(vorschau){ if( (x >= 0 && x < 2) && (y >= 0 && y < 4) ) { vorschaufeld[x][y]->Picture->Assign(bild[farbe]); } }else{ if( (x >= 0 && x < 10) && (y >= 0 && y < 20) ) { spielfeld[x][y]->Picture->Assign(bild[farbe]); } } } } void TdieGUI::loescheSegment(int x, int y) { loescheSegment(x,y,false); } void TdieGUI::loescheSegment(int x, int y, bool vorschau) { if(vorschau){ if( (x >= 0 && x < 2) && (y >= 0 && y < 4) ) { vorschaufeld[x][y]->Picture->Bitmap->ReleaseHandle(); } }else{ if( (x >= 0 && x < 10) && (y >= 0 && y < 20) ) { spielfeld[x][y]->Picture->Bitmap->ReleaseHandle(); } } } void TdieGUI::gameOver(bool highscore) { if(highscore){ pnlHighscore->Visible = true; edtName->SetFocus(); }else{ pnlGameover->Visible = true; tmrGameover->Enabled = true; } } void TdieGUI::loescheReihe(int reihe) { for(int x = 0; x<10; x++) dieGUI->loescheSegment(x,reihe); } void __fastcall TdieGUI::CMDialogKey(TWMKey &AMsg) { TForm::Dispatch(&AMsg); switch(AMsg.CharCode) { case VK_LEFT: dieSteuerung->tasteGedruecktLinks(); break; case VK_RIGHT: dieSteuerung->tasteGedruecktRechts(); break; case VK_DOWN: dieSteuerung->tasteGedruecktUnten(); break; case VK_UP: dieSteuerung->tasteGedruecktOben(); break; case VK_ESCAPE: if(!pnlHilfe->Visible){ dieSteuerung->tasteGedruecktPause(); } break; } } void TdieGUI::pause(bool pause){ pnlPause->Visible = pause; } void TdieGUI::vorschau(int steinTyp){ switch(steinTyp) { case 0: // # for(int i=0; i<4; i++) { // # xPositionVorschauBrick[i] = 0; // # yPositionVorschauBrick[i] = i; // # } break; case 1: // # for(int i=0; i<4; i++) { // # xPositionVorschauBrick[i] = 1-(i/3); // ## yPositionVorschauBrick[i] = 1+i-(i/3); } break; case 2: // # for(int i=0; i<4; i++) { // # xPositionVorschauBrick[i] = (i/3); // ## yPositionVorschauBrick[i] = 1+i-(i/3); } break; case 3: // ## for(int i=0; i<4; i++) { // ## xPositionVorschauBrick[i] = (i/2); yPositionVorschauBrick[i] = 1+i-(i/2)-(2*(i/3)); } break; case 4: // # for(int i=0; i<4; i++) { // ## xPositionVorschauBrick[i] = (i/2); // # yPositionVorschauBrick[i] = 1+i-(i/2); } break; case 5: // # for(int i=0; i<4; i++) { // ## xPositionVorschauBrick[i] = (i/3); // # yPositionVorschauBrick[i] = 1+i-(2*(i/3)); } break; case 6: // # for(int i=0; i<4; i++) { // ## xPositionVorschauBrick[i] = 1-(i/2); // # yPositionVorschauBrick[i] = 1+i-(i/2); } break; } for(int x=0; x<2; x++) { for(int y=0; y<4; y++) { loescheSegment(x,y,true); } } for(int i=0; i<4; i++) { setzeSegment(xPositionVorschauBrick[i],yPositionVorschauBrick[i],steinTyp,true); } } void TdieGUI::zeigeAnzahlReihen(int anzahlReihen){ lblReihen->Caption = IntToStr(anzahlReihen); } void TdieGUI::zeigePunkte(int pPunkte){ lblScore->Caption = IntToStr(pPunkte); } void TdieGUI::zeigeLevel(int pLevel){ lblLevel->Caption = IntToStr(pLevel); } void __fastcall TdieGUI::tmrCreditsTimer(TObject *Sender) { int y=1; Label1->Top -= y; Label2->Top -= y; Label3->Top -= y; Label4->Top -= y; Label5->Top -= y; Label6->Top -= y; if(Label6->Top < 90){ Label1->Top = 488; Label2->Top = 568; Label3->Top = 592; Label4->Top = 608; Label5->Top = 640; Label6->Top = 664; pnlSpielstarten->Visible = true; pnlHighscores->Visible = true; pnlCredits->Visible = true; pnlBeenden->Visible = true; pnlZurueck->Visible = false; tmrCredits->Enabled = false; } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgSpielstartenMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_spiel_starten_on.jpg")){ imgSpielstarten->Picture->LoadFromFile("system/gfx/menu_spiel_starten_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgSpielstartenMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_spiel_starten.jpg")){ imgSpielstarten->Picture->LoadFromFile("system/gfx/menu_spiel_starten.jpg"); } pnlMenu->Visible = false; pnlHilfeButton->Visible = true; dieSteuerung->neuesSpiel(); } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgCreditsMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_credits_on.jpg")){ imgCredits->Picture->LoadFromFile("system/gfx/menu_credits_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgCreditsMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_credits.jpg")){ imgCredits->Picture->LoadFromFile("system/gfx/menu_credits.jpg"); } pnlSpielstarten->Visible = false; pnlHighscores->Visible = false; pnlCredits->Visible = false; pnlBeenden->Visible = false; pnlZurueck->Visible = true; tmrCredits->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgZurueckMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_zurueck_on.jpg")){ imgZurueck->Picture->LoadFromFile("system/gfx/menu_zurueck_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgZurueckMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_zurueck.jpg")){ imgZurueck->Picture->LoadFromFile("system/gfx/menu_zurueck.jpg"); } int spielstatus = dieSteuerung->gibSpielstatus(); if(spielstatus>0){ pnlMenu->Visible = false; if(spielstatus==1){ dieSteuerung->tasteGedruecktPause(); } }else{ pnlSpielstarten->Visible = true; pnlHighscores->Visible = true; pnlCredits->Visible = true; pnlBeenden->Visible = true; } if(dieSteuerung->gibSpielstatus()>0){ pnlHilfeButton->Visible = !pnlHilfeButton->Visible; } pnlHilfe->Visible = false; pnlZurueck->Visible = false; Label1->Top = 488; Label2->Top = 568; Label3->Top = 592; Label4->Top = 608; Label5->Top = 640; Label6->Top = 664; for(int i=0; i<10; i++){ for(int j=0; j<2; j++){ highscores[i][j]->Visible = false; highscores[i][j]->Caption = ""; } } tmrCredits->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgBeendenMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_beenden_on.jpg")){ imgBeenden->Picture->LoadFromFile("system/gfx/menu_beenden_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgBeendenMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_beenden.jpg")){ imgBeenden->Picture->LoadFromFile("system/gfx/menu_beenden.jpg"); } Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgHighscoresMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_highscores_on.jpg")){ imgHighscores->Picture->LoadFromFile("system/gfx/menu_highscores_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgHighscoresMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/menu_highscores.jpg")){ imgHighscores->Picture->LoadFromFile("system/gfx/menu_highscores.jpg"); } pnlSpielstarten->Visible = false; pnlHighscores->Visible = false; pnlCredits->Visible = false; pnlBeenden->Visible = false; pnlZurueck->Visible = true; dieSteuerung->ladeHighscores(); for(int i=0; i<10; i++){ if(dieSteuerung->gibScore(i)>-1){ highscores[i][0]->Caption = dieSteuerung->gibName(i); highscores[i][1]->Caption = dieSteuerung->gibScore(i); highscores[i][0]->Visible = true; highscores[i][1]->Visible = true; } } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgPauseBeendenMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/pause_beenden_on.jpg")){ imgPauseBeenden->Picture->LoadFromFile("system/gfx/pause_beenden_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgPauseBeendenMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/pause_beenden.jpg")){ imgPauseBeenden->Picture->LoadFromFile("system/gfx/pause_beenden.jpg"); } dieSteuerung->spielBeenden(); pnlPause->Visible = false; } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgPauseWeiterMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/pause_weiter_on.jpg")){ imgPauseWeiter->Picture->LoadFromFile("system/gfx/pause_weiter_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgPauseWeiterMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/pause_weiter.jpg")){ imgPauseWeiter->Picture->LoadFromFile("system/gfx/pause_weiter.jpg"); } pnlPause->Visible = false; dieSteuerung->tasteGedruecktPause(); } //--------------------------------------------------------------------------- void __fastcall TdieGUI::tmrGameoverTimer(TObject *Sender) { pnlGameover->Visible = false; pnlHilfeButton->Visible = false; pnlMenu->Visible = true; tmrGameover->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgGameoverClick(TObject *Sender) { pnlGameover->Visible = false; pnlHilfeButton->Visible = false; pnlMenu->Visible = true; tmrGameover->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TdieGUI::edtNameKeyPress(TObject *Sender, char &Key) { if(!( (Key >= 48 && Key <= 57) || (Key >= 65 && Key <= 90) || (Key >= 97 && Key <= 122) || Key==8 || Key==32 )){ Key=char(); } if(Key == 32 && edtName->Text==""){ Key=char(); } if(Key == '\0'){ if(edtName->Text != ""){ dieSteuerung->speichereHighscore(edtName->Text); pnlHighscore->Visible = false; pnlHilfeButton->Visible = false; pnlMenu->Visible = true; } } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgHighscoreSpeichernMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/highscore_speichern_on.jpg")){ imgHighscoreSpeichern->Picture->LoadFromFile("system/gfx/highscore_speichern_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgHighscoreSpeichernMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/highscore_speichern.jpg")){ imgHighscoreSpeichern->Picture->LoadFromFile("system/gfx/highscore_speichern.jpg"); } if(edtName->Text != ""){ dieSteuerung->speichereHighscore(edtName->Text); pnlHighscore->Visible = false; pnlHilfeButton->Visible = false; pnlMenu->Visible = true; } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::FormKeyPress(TObject *Sender, char &Key) { if(Key == 'h' || Key == 'H'){ if(status==0 && dieSteuerung->gibSpielstatus()==2){ dieSteuerung->tasteGedruecktPause(); status=1; }else if(status==1 && dieSteuerung->gibSpielstatus()==1){ dieSteuerung->tasteGedruecktPause(); status=0; } pnlHilfe->Visible = !pnlHilfe->Visible; pnlZurueck->Visible = !pnlZurueck->Visible; if(dieSteuerung->gibSpielstatus()>0){ pnlHilfeButton->Visible = !pnlHilfeButton->Visible; } } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgHilfeButtonMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/background_help_on.jpg")){ imgHilfeButton->Picture->LoadFromFile("system/gfx/background_help_on.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::imgHilfeButtonMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(FileExists("system/gfx/background_help.jpg")){ imgHilfeButton->Picture->LoadFromFile("system/gfx/background_help.jpg"); } if(status==0 && dieSteuerung->gibSpielstatus()==2){ dieSteuerung->tasteGedruecktPause(); status=1; }else if(status==1 && dieSteuerung->gibSpielstatus()==1){ dieSteuerung->tasteGedruecktPause(); status=0; } pnlHilfe->Visible = !pnlHilfe->Visible; pnlZurueck->Visible = !pnlZurueck->Visible; if(dieSteuerung->gibSpielstatus()>0){ pnlHilfeButton->Visible = !pnlHilfeButton->Visible; } } //--------------------------------------------------------------------------- void __fastcall TdieGUI::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if(Key == VK_F1){ if(status==0 && dieSteuerung->gibSpielstatus()==2){ dieSteuerung->tasteGedruecktPause(); status=1; }else if(status==1 && dieSteuerung->gibSpielstatus()==1){ dieSteuerung->tasteGedruecktPause(); status=0; } pnlHilfe->Visible = !pnlHilfe->Visible; pnlZurueck->Visible = !pnlZurueck->Visible; if(dieSteuerung->gibSpielstatus()>0){ pnlHilfeButton->Visible = !pnlHilfeButton->Visible; } } } //---------------------------------------------------------------------------