-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFileWordSource.cpp
More file actions
51 lines (44 loc) · 2.14 KB
/
Copy pathFileWordSource.cpp
File metadata and controls
51 lines (44 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "FileWordSource.h"
#include "GameConfig.h"
#include <QFile>
#include <QTextStream>
#include <QRandomGenerator>
#include <QDebug> // Hata ayıklama mesajları için
// Constructor (Yapıcı Metot)
FileWordSource::FileWordSource(const QString& filePath) {
// Gerekçe: Bu metot, nesne oluşturulur oluşturulmaz ÇAĞRILIR.
// Amacı, kelime dosyasını SADECE BİR KEZ açıp tüm kelimeleri hafızadaki listemize yüklemektir.
// Böylece her kelime istediğimizde dosyayı tekrar tekrar açmak zorunda kalmayız.
QFile file(filePath);
// Dosyanın başarıyla açılıp açılmadığını kontrol edelim. Bu çok önemlidir.
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Kelime dosyasi acilamadi:" << filePath;
return; // Fonksiyondan çık, çünkü kelime listesi boş kalacak.
}
// QTextStream, metin dosyalarını satır satır okumayı çok kolaylaştırır.
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine().trimmed(); // Satırı oku ve başındaki/sonundaki boşlukları sil.
QString upper = line.toUpper();
if (upper.length() == GameConfig::WORD_LENGTH) { // Sadece 5 harfli kelimeleri listeye ekle
m_wordList.append(upper);
}
}
qDebug() << m_wordList.size() << "adet kelime dosyadan yuklendi.";
}
// getWord Metodu
QString FileWordSource::getWord() const {
// Gerekçe: Bu metot, IWordSource sözleşmesinde verdiğimiz "sana bir kelime vereceğim" sözünü tutar.
// Amacı, hafızaya yüklediğimiz listeden rastgele bir kelime seçip döndürmektir.
if (m_wordList.isEmpty()) {
return QString(); // Liste boşsa, boş bir QString döndür. Bu çökmemizi engeller.
}
// Qt 6'nın modern ve güvenli rastgele sayı üretecini kullanalım.
int randomIndex = QRandomGenerator::global()->bounded(m_wordList.size());
return m_wordList[randomIndex];
}
// contains Metodu
bool FileWordSource::contains(const QString& word) const {
// Tüm kelimeleri büyük harf olarak sakladığımız için burada da normalize ediyoruz
return m_wordList.contains(word.toUpper());
}