Instantly share code, notes, and snippets.

Embed
What would you like to do?
Tabela wyników
// ScoreBoard.h ************************************************************
#pragma once
/*
* Tworzenie tabeli wygranych i zapis do pliku
*/
class ScoreBoard
{
int score[10]{}; //Tabela najwyzszych 10 wynikow
bool filestatus; //status odczytu pliku
public:
ScoreBoard();
~ScoreBoard();
//pokazywanie i obsluga wyswietlania i dodawania wyniku do listy.
void showScoreBoard(int);
};
//ScoreBoard.cpp ********************************************************************
#include "ScoreBoard.h"
#include <fstream>
#include <string>
#include <iostream>
ScoreBoard::ScoreBoard() : filestatus(true)
{
std::ifstream scoreFile("score.dat"); //otwieranie pliku z wynikami do odczytu
if (!scoreFile.is_open()) //sprawdzanie czy plik jest poprawnie otwarty
{
filestatus = false;
for (auto& i : score) //zapis wyliczający kolejne komórki trablicy (uniemożliwia wyjście poza zakres)
i = 0; //ponieważ brak danych z pliku tworzymy tablicę i zapisujemy zerami
}
else
{
for (auto& i : score)
scoreFile >> i; //odczytyjemy wyniki z pliku i zapisujemy do tablicy wyników
scoreFile.close(); //zamykanie dostępu do pliku
//Sortowanie tabeli wynikow (bubble sorting - w wypadku tablicy 10 elementowej optymalne rozwiązanie)
for (int i = 0; i < 10; i++)
{
for (int j = 9; j >= 1; j--)
{
if (score[j] > score[j - 1])
{
int swap = score[j - 1];
score[j - 1] = score[j];
score[j] = swap;
}
}
}
}
}
ScoreBoard::~ScoreBoard()
{
std::ofstream scoreFile("score.dat"); //otwieranie(lub tworzenie) pliku z wynikami do zapisu
if (!scoreFile.is_open()) //sprawdzenie poprawności otwarcia pliku
{
std::cout << " BLAD ZAPISU PLIKU WYNIKOW !!" << std::endl;
}
else
{
for (int i : score) //zapis tabeli wyników do pliku
scoreFile << i << std::endl;
}
scoreFile.close(); //zamykanie dostępu do pliku
}
void ScoreBoard::showScoreBoard(const int current) //interfejs i dodawanie wyników do tablicy
{
if (filestatus)
{
int position = 1;
for (int i = 0; i < 10; i++)
{
std::cout << "Miejsce " << i + 1 << " - " << score[i] << " punkty" << std::endl;
if (score[i] > current) position++;
}
std::cout << "\nTwoj wynik " << current << " zapewnia ci " << position << " miejsce" << std::endl;
if (position <= 10) score[9] = current; //zapisujemy obecny ynik na ostatnim miejscu, czyli na miejscu wyniku, który "wypada z listy". Sortowanie nastąpi przy następnym odczycie.
}
else
{
std::cout << "wyglada na to, ze grasz pierwszy raz, lub plik z wynikami jest uszkodzony" << std::endl;
std::cout << "Twoj wynik " << current << " zapewnia ci automatycznie pierwsze miejsce" << std::endl;
score[0] = current;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment