Hello!
A köv feladathoz kérénk egy kis segítséget!
Készítsünk dialógus alapú játékot a következők alapján! A játék egy 9x9-es táblán folyik, melynek mind a négy sarkából kivágtunk egy-egy 3x3-es részt. A mezőkön bábuk állnak, kivéve a középsőt. Egy bábuval át lehet ugrani egy másikat, ha az átugrandó bábu után az ugrás irányában közvetlenül üres hely található. Ekkor az átugrott bábut levesszük a tábláról, a másikat pedig áthelyezzük az ugrásnak megfelelően. Ugrani négy irányba lehet: fel, jobbra, le illetve balra. A játék célja, hogy egyetlen bábu maradjon a táblán. Adjon a program lehetőségünk a játék újrakezdésére! Tartsuk nyilván és kérésre jelenítsük meg az 5 legkevesebb bábut fennhagyó játékos nevét és a fennmaradt bábuk számát, ezeket kilépéskor egy szöveges állományba mentsük el, újraindításkor onnan töltsük be!
A gombokat legenerálom és a két kiválasztott gomb közötti gombot nem tudom sehogyse átszinezni
Van valakinek valami ötlete
ifndef BABU_H
#define BABU_H
#include <QApplication>
#include <QWidget>
#include <QProgressBar>
#include <QPushButton>
#include <QString>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QStringList>
#include <QLabel>
#include <QFont>
#include <QPixmap>
#include <QPalette>
#include <QDir>
class BabuButton : public QPushButton
{
public:
BabuButton(QWidget* parent = 0);
void setIndex(int i,int j) { sor = i; oszlop = j; }
int getSor() { return sor; }
int getOszlop() { return oszlop; }
private:
int sor;
int oszlop;
};
class GameForm : public QWidget
{
Q_OBJECT
public:
GameForm(QWidget *parent = 0);
void Initialize();
private:
bool sel;
BabuButton **babuk;
QPushButton *btnQuit;
QPushButton *btnNew;
QPushButton *btnTop;
public slots:
void newGame();
void topList();
//void leptet(int sor, int oszlop);
void leptet();
signals:
void buttonClicked(int i, int j);
};
#endif
//babu.cpp
#include "babu.h"
GameForm::GameForm(QWidget *parent) : QWidget(parent)
{
const int dbBabu = 45;
btnQuit = new QPushButton(tr("Quit"), this);
btnNew = new QPushButton(tr("New Game"), this);
btnTop = new QPushButton(tr("Top List"), this);
connect(btnQuit, SIGNAL(clicked()), qApp, SLOT(quit()));
connect(btnNew, SIGNAL(clicked()), this, SLOT(newGame()));
connect(btnTop, SIGNAL(clicked()), this, SLOT(topList()));
this->setGeometry(100,10,285,250);
btnQuit->setGeometry(190,205,80,30);
btnNew->setGeometry(10,205,80,30);
btnTop->setGeometry(100,205,80,30);
sel = false;
babuk = new BabuButton* [dbBabu];
for (int j=0; j<9; ++j)
{
for (int i=0; i<9; ++i)
{
if ((i>2 || j>2) && (i<6 || j<6) && (i<6 || j>2) && (i>2 || j<6))
{
QString str, str_i, str_j;
str_i = str_i.setNum(i);
str_j = str_j.setNum(j);
str = str_j + "," + str_i;
babuk[i,j] = new BabuButton(this);
babuk[i,j]->setIndex(i,j);
int sor = babuk[i,j]->getSor();
int oszlop = babuk[i,j]->getOszlop();
babuk[i,j]->setGeometry(60+i*20, 10+j*20, 20, 20);
babuk[i,j]->setPalette(QPalette(Qt::darkBlue));
if (i==4 && j==4)
{
babuk[i,j]->setPalette(QPalette(Qt::white));
}
babuk[i,j]->setText(str);
connect(babuk[i,j], SIGNAL(clicked()), this, SLOT(leptet()));
}
}
}
}
void GameForm::leptet()
{
BabuButton *button = (BabuButton*)sender();
if (!sel)
{
//button->setEnabled(false);
button->setPalette(QPalette(Qt::white));
sel = true;
}
else
{
button->setPalette(QPalette(Qt::red));
int i = button->getSor();
int j = button->getOszlop();
i--;
button->setIndex(i,j);
button->setPalette(QPalette(Qt::green));
//babuk[0,0]->setPalette(QPalette(Qt::yellow)); //nem valtozik az index alapjan a helye
/*QMessageBox *about2;
QString gombok_ii, gombok_jj;
gombok_ii.setNum(i);
gombok_jj.setNum(j);
about2 = new QMessageBox("Index", "Az indexek: " + gombok_jj + " "+ gombok_ii , QMessageBox::Information, 1, 0, 0, this, 0);
about2->exec();
*/
sel = false;
}
}
void GameForm::newGame()
{
Initialize();
}
void GameForm::topList()
{
}
void GameForm::Initialize()
{
}
BabuButton::BabuButton(QWidget* parent) : QPushButton(parent)
{
}
//main.cpp
#include <QApplication>
#include "babu.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
GameForm* form = new GameForm();
form->show();
return app.exec();
}
- 1541 megtekintés
Hozzászólások
Csak a szinezésre koncentrálva íme egy helyes megoldás:
QPushButton *gomb = new QPushButton("gomb");
QPalette pal = gomb->palette();
pal.setColor(QPalette::Normal, QPalette::Button, QColor(Qt::white));
gomb->setPalette(pal);
Tehát a gomb palette()-je komplexan tárolja minden állapotában (aktív, inaktív, stb) az adott widget színeit. Ezt kimásoljuk egy az egyben egy QPalette-ba. Ott átállítjuk a "normal" működésnél a "button" színt a megadott QColor-ra. Azt feltöltjük vissza a gomb jellemzőit. Remélem érthető :) kicsit nyakatekert, de ha érted, akkor van értelme.
- A hozzászóláshoz be kell jelentkezni
Nem itt kellene megoldatnod az EAF beadandódat. Képzeld, a gyakvezek is olvassák a portált :).
- A hozzászóláshoz be kell jelentkezni
Sajnos ez így van ;-)
- A hozzászóláshoz be kell jelentkezni
:))
Valahogy éreztem már a feladat leírásánál, hogy ez EAF lesz. :)
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Hello!
Bocsi, de miért gond, hogy segítséget kérek, nem azt kértem senkitől, hogy megoldja az egész feladatot, csak egy résznél megakadtam, ha megoldáss kell az úgyis megszerzem, és mert sok helyen ez a hozzáálás ezért sokan nem használják a levlistát sem. Akkor mondjatok egy helyet ahol segítenek is az emberek? :)
- A hozzászóláshoz be kell jelentkezni