Tic Tac Toe



  • Muss für die schule ein SPiel Programmieren, habe leider ein kleines Problem und zwar das ich Probleme mit der MSg BOx von qt habe.

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "QMessageBox"
    #include "QtGui/QApplication"
    #include "QString"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent), ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
    }
    
    MainWindow::~MainWindow()
    {
    
        delete ui;
    
    }
    
    void MainWindow::on_pushButton_3_clicked()
    {
        if (ui->checkBox_1->isChecked())
        {
    ui->pushButton_3->setText ("x");
    
    }
    
           if (ui->checkBox->isChecked())
        {
    ui->pushButton_3->setText ("o");
    
    }
    
    }
    
    void MainWindow::on_pushButton_clicked()
    {
       if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton->setText("o");
    
        }
    
    }
    
    void MainWindow::on_checkBox_1_clicked()
    {
    
    }
    
    void MainWindow::on_pushButton_2_clicked()
    {
        if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_2->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_2->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_4_clicked()
    {
          if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_4->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_4->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_5_clicked()
    {
          if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_5->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_5->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_6_clicked()
    {
          if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_6->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_6->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_7_clicked()
    {
          if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_7->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_7->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_8_clicked()
    {
          if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_8->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_8->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_9_clicked()
    {
          if (ui->checkBox_1->isChecked())
    
        {
            ui->pushButton_9->setText ("x");
    
        }
    
      if (ui->checkBox->isChecked())
        {
            ui->pushButton_9->setText("o");
    
        }
    }
    
    void MainWindow::on_pushButton_10_clicked()
    {
        if (ui->pushButton_10->isChecked())
        {
    
        }
    
    }
    
    void MainWindow::on_pushButton_11_clicked()
    {
         if ( ui->pushButton->text("x"))
        {
         QMessageBox::warning(this,"huhu","haha");
     }
    }
    

    ich bekommme diese Fehlermeldung C:/Users/Legenda/Documents/tic/test/mainwindow.cpp:202: error: no matching function for call to `QPushButton::text(const char[2])'

    und noch weiteres würde ich gern wissen ob ich die Kontrolle in einer einer einzigen anweisung im Main deklarieren kann.

    Danke jetzt schon amal



  • die Methode die du suchst heisst vermutlich setText() ... schön das du die cpp tags gefunden hast, wenn du nun noch die vielen leerzeilen auf immer nur eine zusammenschrumpfen würdes wäre es etwas ... übersichtlicher. Ich kenne deine UI nicht, vermute aber mal das die beiden checkboxen die du immer abfragst anzeigen welcher Spieler dran ist ... da das ganze ein 2 Spieler Spiel ist kannst du das etwas vereinfachen:

    (ich verwende mal spieler1 und spieler2 statt checkBox_1/checkBox_2 ... sprechende Namen helfen)

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent), ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        spieler1.setChecked(true);
        spieler2.setChecked(false);
    
        connect( spieler1, SIGNAL(toggled(bool)), spieler2, SLOT(toggle());    // sorgt dafür das immer nur 1 Spieler aktiv ist
    
        // für jeden pushButton_1 ... pushButton_9
        connect( jederButtonDerWasSetzt, SIGNAL(pressed), cb1, SLOT(toggle()); // sorgt dafür das wenn du einen der 9 Feldbutton drückst automatisch der Spieler getoggelt wird
    }
    
    void MainWindow::on_pushButton_3_clicked()
    {
        if (ui->spieler1->isChecked())
        {
            ui->pushButton_3->setText ("x");
        } 
        else 
        {
            ui->pushButton_3->setText ("o");
        } 
        // der kann nimmer geklickt werden ...
        ui->pushButton_3->setEnabled(false);
    }
    

    Wenn du das Spielfeld mit 9 clickbaren Pushbuttons ohne Text drin startest und wenn einer geklickt wurde in mit setEnabled(false) inaktivierst erhältst du ein nettes Spiel.
    Eleganter ginge es mit einem QSignalMapper aber auch das ist schon nett schlecht...

    Achja meine SignalWrapper ohne UI hat knapp 60 Zeilen .h, und 110 Zeilen .cpp plus 11 Zeilen main.cpp ... ist also recht Übersichtlich :). Wenn du deins Funktionsfertig postest, poste ich meine Variante dagegen 😉


Anmelden zum Antworten