Permainan Tebak Kata Berbasis C++
Untuk tugas akhir perkuliahan Algoritma dan Struktur Data I.
Permainan ini bernama Blindwords. Terinspirasi oleh permainan Hangman, namun tidak ada animasi stickman digantung yang legendaris itu. Blindwords hanya mengimplementasi tebak katanya saja. Program ini dibuat untuk menyelesaikan tugas akhir semester satu mata kuliah Algoritma dan Struktur Data I jurusan Ilmu Komputer dan Sistem Informasi, Sekolah Vokasi Universitas Gadjah Mada.
Kode Sumber
/*
BLINDWORDS
-------------
You don't have permission to reuse this source code in academic or commercial purposes.
(C) 2016
Made by:
Salim Romadhon
Nanda Septyaningrum
Iva Faradilla F
Arum Puspitasari
Nur Haryani
Diyan Ayu Hari Murni T
Aji Setyo A
*/
#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>
using namespace std;
string clean(string s) { // remove repeating character(s) in a string
string out = "";
for (int i = 0; (unsigned) i < s.length(); i++) {
bool exist = 0;
for (int j = i+1; (unsigned) j < s.length(); j++) {
if (s[i] == s[j]) {
exist = 1;
}
}
if (exist == 0) out += s[i];
}
return out;
}
bool doesExist(char c, string s) {
bool exist = 0;
for (int i = 0; (unsigned) i < s.length() && exist == 0; i++) {
if (c == s[i]) {
exist = 1;
}
}
return exist;
}
string addChar(char c, string a, string b) {
for (int i = 0; (unsigned) i < b.length(); i++) {
if (c == b[i]) {
a[i] = c;
}
}
return a;
}
string makeSpace(int x) {
string s = "";
for (int i = 0; i < x; i++) {
s += "*";
}
return s;
}
void game() {
// source: http://stackoverflow.com/questions/1647557/ifstream-how-to-tell-if-specified-file-doesnt-exist
ifstream myFile("BLINDWORDS.txt");
if (myFile.fail()) {
cout << "THE FILE `BLINDWORDS.txt` DOESN'T EXIST. PLEASE MAKE IT FIRST BEFORE CONTINUING TO PLAY THIS GAME." << endl << endl
<< "-------------" << endl << endl
<< "Make some lines like the example below." << endl << endl
<< "WORD\tclue" << endl << "WORD\tthis-is-a-clue" << endl << "WORD\tanother-clue" << endl;
} else {
cout << endl << "WELCOME TO BLINDWORDS!\n\nYou have to guess characters to be a nice word based on the clues given.\nYou have 5 times tolerance at each word if you wrong.\nPlease use your `CAPS LOCK`.\nHappy playing. Good luck :)" << endl << endl;
// source: http://stackoverflow.com/questions/17392218/how-to-parse-string-file-txt-into-array-with-c
std::ifstream in("BLINDWORDS.txt");
// initialize the vector from the values in the file:
std::vector<string> words(( std::istream_iterator<string>(in)), std::istream_iterator<string>() );
string s;
int score = 0;
bool gameOver = 0;
for (int i = 0, number = 1; (unsigned) i < words.size() && gameOver == 0; i += 2) {
cout << "-------------" << endl
<< number++ << endl
<< "-------------" << endl // display the question number
<< "SCORE: " << score << endl
<< "-------------" << endl
<< endl;
bool match = 0; // stop when word is complete
string space = makeSpace(words[i].length()); // make a space to fill
int wrongs = 0; // count wrongs
cout << words[i+1] << endl << endl; // the clue
cout << space << endl; // the space, stars
while (wrongs < 6 && match == 0) {
cin >> s;
s = clean(s);
for (int j = 0; (unsigned) j < s.length(); j++) {
if (doesExist(s[j], words[i]) == 1) {
space = addChar(s[j], space, words[i]);
} else {
wrongs++;
}
}
cout << space << endl;
if (space == words[i]) {
match = 1;
score += 10-2*wrongs;
cout << endl << endl;
} else if (wrongs >= 6) {
gameOver = 1;
cout << endl << endl;
}
}
}
cout << "GAME OVER!" << endl
<< "-------------" << endl
<< "SCORE: " << score << endl
<< endl << endl;
}
}
int main() {
game();
return 0;
}
Cara Penggunaan
Gunakan perangkat lunak IDE seperti Dev-C++, Code::Blocks, atau Geany untuk melakukan bangun (compile and build) kode program C++ tersebut. Setelah itu, buat berkas BLINDWORDS.txt
pada direktori (folder) di mana berkas aplikasi yang sudah dibangun berada. Berkas ini berfungsi untuk menyimpan pertanyaan yang akan diproses oleh program Blindwords.
Setelah semua langkah di atas dilakukan, Blindwords dapat dijalankan melalui IDE, atau klik ganda pada berkas .exe
hasil bangun, atau jika Anda menggunakan Linux ketikkan ./<application-name>
dari terminal.
Isi Berkas BLINDWORDS.txt
Berikut ini adalah contoh isi berkas yang valid.
CPLUSPLUS bahasa-pemrograman
KOMPUTER mesin-canggih
PROSESOR otak
CPU komputer
KEYBOARD ketik
MOUSE pointer
PRINTER cetak
SPEAKER suara
MOTHERBOARD papan
LAN kabel
ROUTER jaringan
BUS jaringan
RAID disk
SATA disk
ATA disk
IDE DevC++
DATABASE basis
FORMULA fungsi
PROGRAM fungsi
ALGORITMA cara
COMPILER susun
PERULANGAN loop
PERCABANGAN if
OVERCLOCK prosesor
PLATTER disk
HARDDISK disk
SSD disk
SSHD disk
RAM memori
BOOLEAN y/t
Lisensi
Program ini boleh digunakan untuk dipelajari namun tidak untuk diplagiasi sebagai pemenuhan tugas-tugas akademik.
Pembaharuan 8 September 2018. Melihat lagi pos ini, ternyata kode ini di beberapa bagian kurang efisien. Silakan cari dan perbaiki sendiri :)