mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-11 17:04:31 -05:00
181 lines
6.6 KiB
C++
181 lines
6.6 KiB
C++
|
#include "Highscore.h"
|
||
|
#include "Proportionen.h"
|
||
|
#include <QTableWidgetItem>
|
||
|
#include <QStringList>
|
||
|
#include <QDir>
|
||
|
#include <QInputDialog>
|
||
|
#include <QSettings>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
Highscore::Highscore(QWidget *parent) : QDialog(parent), einstellungen(0)
|
||
|
{
|
||
|
setupUi(this);
|
||
|
|
||
|
tabelle->setRowCount(HIGHSCORE_ZEILEN);
|
||
|
|
||
|
// die tabelle mit elementen befuellen
|
||
|
for (register int idx1 = 0; idx1 < tabelle->rowCount(); idx1++)
|
||
|
{
|
||
|
for (register int idx2 = 0; idx2 <= HIGHSCORE_ZEIT_POSITION; idx2++)
|
||
|
{
|
||
|
QTableWidgetItem *tmp_item = new QTableWidgetItem();
|
||
|
|
||
|
tmp_item->setText(HIGHSCORE_LEER);
|
||
|
|
||
|
tabelle->setItem(idx1, idx2, tmp_item);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
Highscore::~Highscore()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
bool Highscore::neues_ergebnis(int punkte, long sekunden)
|
||
|
{
|
||
|
bool erg = false;
|
||
|
int ziel = -1;
|
||
|
|
||
|
for (register int idx = HIGHSCORE_ZEILEN - 1; idx >= 0; idx--)
|
||
|
{
|
||
|
int element_sekundenverbrauch = 0, element_ergebnis = 0;
|
||
|
|
||
|
QStringList tmp_zeit(tabelle->item(idx, HIGHSCORE_ZEIT_POSITION)->text().split(HIGHSCORE_SPLITTER, QString::SkipEmptyParts));
|
||
|
|
||
|
// wenn das element an idx leer ist ist es auf jeden fall unterlegen
|
||
|
if (tabelle->item(idx, HIGHSCORE_NAME_POSITION)->text() == HIGHSCORE_LEER || tabelle->item(idx, HIGHSCORE_PUNKTE_POSITION)->text() == HIGHSCORE_LEER || tabelle->item(idx, HIGHSCORE_ZEIT_POSITION)->text() == HIGHSCORE_LEER)
|
||
|
{
|
||
|
ziel = idx;
|
||
|
}
|
||
|
|
||
|
// ansonsten
|
||
|
else if (tmp_zeit.size() == 3)
|
||
|
{
|
||
|
// die bewertung des tabellenelements an idx berechnen. je mehr mienen und felder, je mehr punkte
|
||
|
element_ergebnis = tabelle->item(idx, HIGHSCORE_PUNKTE_POSITION)->text().toInt();
|
||
|
|
||
|
// den sekundenverbrauch fuer des tabellenelements an idx berechnen
|
||
|
element_sekundenverbrauch = (tmp_zeit.at(0).toInt() * 3600) + (tmp_zeit.at(1).toInt() * 60) + tmp_zeit.at(2).toInt();
|
||
|
}
|
||
|
|
||
|
// wenn das neue ergebnis mehr punkte hat als das tabellenelement oder gleich viel punkte wie das tabellenelement enthaelt, aber weniger zeit verbraucht hat ist es ueberlegen
|
||
|
if (punkte > element_ergebnis || (punkte == element_ergebnis && sekunden < element_sekundenverbrauch)) ziel = idx;
|
||
|
}
|
||
|
|
||
|
// wenn das neue element in die tabelle darf
|
||
|
if (ziel >= 0 && ziel < tabelle->rowCount())
|
||
|
{
|
||
|
// eine neue reihe an ziel in die tabelle einfuegen ...
|
||
|
tabelle->insertRow(ziel);
|
||
|
|
||
|
// ... und mit elementen befuellen
|
||
|
tabelle->setItem(ziel, HIGHSCORE_NAME_POSITION, new QTableWidgetItem());
|
||
|
tabelle->setItem(ziel, HIGHSCORE_PUNKTE_POSITION, new QTableWidgetItem());
|
||
|
tabelle->setItem(ziel, HIGHSCORE_ZEIT_POSITION, new QTableWidgetItem());
|
||
|
|
||
|
// der letzte muss die tabelle verlassen
|
||
|
tabelle->removeRow(tabelle->rowCount() - 1);
|
||
|
|
||
|
erg = true;
|
||
|
bool ok;
|
||
|
|
||
|
// den namen des nutzers abfragen
|
||
|
QString name_vorbereitung(QDir::home().dirName());
|
||
|
|
||
|
// wenn name_vorbereitung nicht leer ist
|
||
|
if (name_vorbereitung.isEmpty() == false)
|
||
|
{
|
||
|
QChar erstes_zeichen = name_vorbereitung.at(0);
|
||
|
|
||
|
if (erstes_zeichen.isLower() == true) name_vorbereitung[0] = erstes_zeichen.toUpper();
|
||
|
}
|
||
|
|
||
|
QString name = QInputDialog::getText(parentWidget(), tr("Patience"), tr("You got a Highscore !"), QLineEdit::Normal, name_vorbereitung, &ok);
|
||
|
|
||
|
// wenn kein nutzername eingegeben wurde den namen auf unbekannt setzen
|
||
|
if (ok == false || name.isEmpty() == true) name = tr("Unknown");
|
||
|
|
||
|
// wenn der name LEER entspricht den namen ebenfalls auf unbekannt setzen
|
||
|
if (name == HIGHSCORE_LEER) name = tr("Unknown");
|
||
|
|
||
|
int stunden = sekunden / 3600;
|
||
|
|
||
|
int minuten = (sekunden - (stunden * 3600)) / 60;
|
||
|
|
||
|
int sekunden_ = sekunden - (minuten * 60) - (stunden * 3600);
|
||
|
|
||
|
QString stunden_string = QString::number(stunden);
|
||
|
QString minuten_string = QString::number(minuten);
|
||
|
QString sekunden_string = QString::number(sekunden_);
|
||
|
|
||
|
if (stunden < 10) stunden_string.prepend('0');
|
||
|
if (minuten < 10) minuten_string.prepend('0');
|
||
|
if (sekunden_ < 10) sekunden_string.prepend('0');
|
||
|
|
||
|
tabelle->item(ziel, HIGHSCORE_NAME_POSITION)->setText(name);
|
||
|
tabelle->item(ziel, HIGHSCORE_PUNKTE_POSITION)->setText(QString::number(punkte));
|
||
|
tabelle->item(ziel, HIGHSCORE_ZEIT_POSITION)->setText(stunden_string + HIGHSCORE_SPLITTER + minuten_string + HIGHSCORE_SPLITTER + sekunden_string);
|
||
|
|
||
|
// die highscoretabelle anzeigen
|
||
|
show();
|
||
|
}
|
||
|
|
||
|
return erg;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Highscore::registriere_einstellungen(QSettings* einstellungen_)
|
||
|
{
|
||
|
einstellungen = einstellungen_;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Highscore::einstellungen_laden()
|
||
|
{
|
||
|
if (einstellungen != 0)
|
||
|
{
|
||
|
// die breite der spalten laden
|
||
|
tabelle->setColumnWidth(HIGHSCORE_NAME_POSITION, einstellungen->value(QString("tabelle/spalte_") + QString::number(HIGHSCORE_NAME_POSITION), HIGHSCORE_NAME_SPALTE_STANDARTGROESSE).toInt());
|
||
|
tabelle->setColumnWidth(HIGHSCORE_PUNKTE_POSITION, einstellungen->value(QString("tabelle/spalte_") + QString::number(HIGHSCORE_PUNKTE_POSITION), tabelle->columnWidth(HIGHSCORE_PUNKTE_POSITION)).toInt());
|
||
|
tabelle->setColumnWidth(HIGHSCORE_ZEIT_POSITION, einstellungen->value(QString("tabelle/spalte_") + QString::number(HIGHSCORE_ZEIT_POSITION), tabelle->columnWidth(HIGHSCORE_ZEIT_POSITION)).toInt());
|
||
|
}
|
||
|
|
||
|
// den inhalt der tabelle laden
|
||
|
for (register int idx = 0; idx < tabelle->rowCount() && einstellungen != 0; idx++)
|
||
|
{
|
||
|
// den namen laden
|
||
|
tabelle->item(idx, HIGHSCORE_NAME_POSITION)->setText(einstellungen->value(QString("highscore/") + QString::number(idx) + QString("name"), HIGHSCORE_LEER).toString());
|
||
|
|
||
|
// die punkte laden
|
||
|
tabelle->item(idx, HIGHSCORE_PUNKTE_POSITION)->setText(einstellungen->value(QString("highscore/") + QString::number(idx) + QString("breite"), HIGHSCORE_LEER).toString());
|
||
|
|
||
|
// die zeit laden
|
||
|
tabelle->item(idx, HIGHSCORE_ZEIT_POSITION)->setText(einstellungen->value(QString("highscore/") + QString::number(idx) + QString("hoehe"), HIGHSCORE_LEER).toString());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Highscore::einstellungen_speichern()
|
||
|
{
|
||
|
// die breite der spalten speichern
|
||
|
einstellungen->setValue(QString("tabelle/spalte_") + QString::number(HIGHSCORE_NAME_POSITION), tabelle->columnWidth(HIGHSCORE_NAME_POSITION));
|
||
|
einstellungen->setValue(QString("tabelle/spalte_") + QString::number(HIGHSCORE_PUNKTE_POSITION), tabelle->columnWidth(HIGHSCORE_PUNKTE_POSITION));
|
||
|
einstellungen->setValue(QString("tabelle/spalte_") + QString::number(HIGHSCORE_ZEIT_POSITION), tabelle->columnWidth(HIGHSCORE_ZEIT_POSITION));
|
||
|
|
||
|
// den inhalt der tabelle speichern
|
||
|
for (register int idx = 0; idx < tabelle->rowCount() && einstellungen != 0; idx++)
|
||
|
{
|
||
|
// den namen speichern
|
||
|
einstellungen->setValue(QString("highscore/") + QString::number(idx) + QString("name"), tabelle->item(idx, HIGHSCORE_NAME_POSITION)->text());
|
||
|
|
||
|
// die punkte speichern
|
||
|
einstellungen->setValue(QString("highscore/") + QString::number(idx) + QString("breite"), tabelle->item(idx, HIGHSCORE_PUNKTE_POSITION)->text());
|
||
|
|
||
|
// die zeit speichern
|
||
|
einstellungen->setValue(QString("highscore/") + QString::number(idx) + QString("hoehe"), tabelle->item(idx, HIGHSCORE_ZEIT_POSITION)->text());
|
||
|
}
|
||
|
}
|