Friday, 29 January 2010

Membaca Sebuah File

Apa jadinya kalau program hanya bisa membuat/menulis sebuah file tanpa dapat membaca file tersebut. Bisa nulis nggak bisa baca?. Akh... sudahlah , mari kita ajarkan program untuk membaca sebuah file. Berikut contoh programnya:

#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

int main()
{
ifstream PanggilFile("test.txt");

//jika tidak ada masalah / file yang dipanggil ada
if ( PanggilFile != NULL)
{
string Kalimat;

//menyimpan baris pertama file lalu menampilkannya
getline(PanggilFile,Kalimat);
cout<<Kalimat<<endl;

//baris kedua
getline(PanggilFile,Kalimat);
cout<<Kalimat;

//menutup file
PanggilFile.close();
}
else{
cout<<"File tidak ada";
}

//program berjalan dengan sempurna
getch();
return 0;
}
Setelah kita memanggil file "test.txt" di dalam direktori yang sama dengan program, selanjutnya adalah memeriksa apakah file ada (tidak sama dengan NULL) atau tidak. Jika file yang dipanggil ada maka akan diambil kalimat pada baris pertama, dengan menggunakan "getline(variabel ifstream, variabel string)". Jika file tidak memiliki baris kedua maka variabel kalimat tidak akan mendapat nilai/kalimat apapun. Dan masih memiliki nilai/kalimat pada baris pertama, maka nilai yang ditampilkan akan sama. Jika file tidak ada atau tidak dapat diakses maka akan muncul pesan error pada else. Contoh lainnya ada pada kode berikut:

#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

int main()
{
ifstream PanggilFile("test.txt");

//jika tidak ada masalah / file yang dipanggil ada
if ( PanggilFile != NULL)
{
string Kalimat;
int Angka;

PanggilFile>>Kalimat;
PanggilFile>>Angka;
cout<<Kalimat<<endl;
cout<<Angka;

//menutup file
PanggilFile.close();
}
else{
cout<<"File tidak ada";
}

//program berjalan dengan sempurna
getch();
return 0;
}
Setelah dijalankan program diatas, terlihat bahwa dengan operator ">>" maka variabel string diatas akan memperoleh sekian karakter selama tidak ketemu karakter spasi dan new line ("\n"). Tapi jika pada string akan terbentuk 1 buah kata, pada int (bilangan bulat) secara otomatis akan menjadi sebuah bilangan jika karakter/kata diawali dengan angka dari 0 - 9. Contoh isi dari file "test.txt" adalah "Tes 10" maka var (variabel) kalimat akan memperoleh kata Tes dan var angka memperoleh nilai 10. Jika isinya "Tes 9tesss", maka var angka akan memperoleh nilai 9. Tapi jika isinya "Tes a10", maka var Angka akan memperoleh nilai yang.... hmm.. coba aja sendiri . Source kode dapat didownload melalui link ini (size: 122 KB).

- krofz

Sunday, 24 January 2010

Membuat File Teks

Semakin kompleks game yang kita buat semakin tidak mungkin untuk diselesaikan dalam satu hari atau beberapa jam. Bayangkan sebuah game dengan cerita dan gameplay seperti Final Fantasy atau Tomba 2 (Tomba 1 belum pernah maen @_@) ditambah bumbu-bumbu rahasia di setiap peta atau quest-nya untuk membuat player terus mencari dan melengkapi quest-quest yang ada. Karena program tidak mungkin untuk terus dijalankan 24 jam x 7 hari alias terus-terusan, belum lagi nggak sengaja kepencet tombol reset dan hal-hal lainnya yang membuat program harus ditutup (close). Maka perlu dibuat sebuah file atau save-an (Save Game) yang dapat menyimpan informasi seputar game kita (jadi inget memory card PS dulu ). Intinya harus ada check point (kaya di Crash Bandicoot aja) agar game dapat dilanjutkan tanpa perlu memulai dari awal. Bisa stress orang!! ngulang terus nggak tamat-tamat.

Nggak perlu panjang lebar ngomongnya eh.. nulisnya..., nih aku kasih contoh programnya:

/*
Source Code ini adalah bahan/materi
untuk blog:

http://membuatgamedengancpp.blogspot.com/

*/

#include <iostream>
#include <conio.h>
//file stream
#include <fstream>

int main()
{
std::string namafile;

printf("Masukkan Nama File : ");
std::cin>>namafile;

namafile+=".txt";
//membuat file dengan nama dari variabel namafile
std::ofstream membuatfile( namafile.c_str()), tes("C:/Contoh Lainnya.txt");
//dapat juga seperti berikut:
// ...
// std::ofstream teslagi;
// teslagi.open(namafile.c_str());
// ...

membuatfile<<"Lagi belajar bikin Save Game";
printf("File %s Telah Dibuat",namafile.c_str());

membuatfile.close();
tes.close();

//program berjalan dengan sempurna
getch();
return 0;
}

//- krofz

Dengan menggunakan tipe ofstream (dalam namespace std dan dengan file header <fstream>), cukup dengan mengisi parameter dalam variabel yang dibuat dengan namafile atau pada lokasi tertentu (contoh: "C:/tesdoang.txt"). namafile += ".txt", dibuat agar file yang terbentuk adalah file teks biasa dengan format ".txt" (walaupun isinya mungkin bukan teks biasa!). Kode diatas memang sedikit dicampur aduk dengan cin, mestinya-kan pasangan printf, scanf(), hehehe. Maklum nyoba kode berikut nggak berhasil-berhasil hahahaha :


...
printf("Masukkan Nama File (Tambahkan .txt) : ");
scanf("%s",namafile.c_str());

namafile+=".txt";
...

Yang penting kode sebelumnya bisakan (kayanya mesti banyak belajar lagi nih). Terakhir... setelah file telah dibuat dan diisi ("membuatfile<<"Lagi belajar bikin Save Game";"), selanjutnya adalah menutup file dengan "namavariabel.close()". Ditutup agar tidak terjadi hal-hal yang tidak diinginkan. Jika ingin download source code dan aplikasi-nya klik link ini, sizenya 139 KB.

- krofz

Thursday, 14 January 2010

SDL : Deteksi Tabrakan (2)

Tulisan ini merupakan lanjutan dari:

Gambar 1. Kotak Yang Sibuk!

Sebelumnya lupa dikasih screenshot program, yah udah tuh diatas screenshotnya hehehe... Oke dilanjutin, bagian terpenting ada di fungsi "void f_PeriksaTabrakan(SDL_Rect A, SDL_Rect B){}" yang akan memeriksa dua kotak, yah fungsinya sesuai namanyalah. Bagaimana fungsi ini melakukannya? Jawabannya ada didalam fungsi tersebut (ya iyalah). Pertama yang dilakukan membuat nilai-nilai yang akan dibandingkan:

int kiriA, kiriB;
int kananA, kananB;
int atasA, atasB;
int bawahA, bawahB;

kiriA = A.x;
kananA = A.x + A.w;
atasA = A.y;
bawahA = A.y + A.h;

kiriB = B.x;
kananB = B.x + B.w;
atasB = B.y;
bawahB = B.y + B.h;
Selanjutnya dengan kata kunci (keyword) if memeriksa nilai-nilai tersebut, kalau salah satu dari keempat bentuk if tersebut ada yang bernilai true dapat dipastikan tidak terjadi tabrakan:

if (bawahA <= atasB) return false;
if (atasA >= bawahB) return false;
if (kananA <=kiriB) return false;
if (kiriA >=kananB) return false;
Masih bingung kenapa bisa begitu? Oke kalau digambarkan akan seperti berikut keempat bentuk if-nya:

Gambar 2. If pertama

Jika titik terbawah dari kotak A (bawahA didapat dari titik y A ditambah tinggi kotak A) lebih kecil dari titik teratas dari kotak B (atasB didapat dari titik y B) maka dapat dipastikan tidak akan terjadi tabrakan biarpun si A atau si B ukurannya mau segede gajah (Gambar Kiri). Disini baru diperiksa sumbu y-nya antara kedua kotak, tapi jika false (nilainya bawahA lebih besar dari atasB) maka kemungkinan terjadi tabrakan masih ada (Gambar kanan). Wah komputer mesti mikir lagi nih buat meriksa nilai-nilai selanjutnya , seperti berikut:

Gambar 3. If kedua

Masih berada di sumbu y, pada gambar kiri bernilai false (tidak terjadi tabrakan). Pemeriksaan ini masih belum menemukan titik terang kalau nilai atasA lebih besar dari bawahB (Gambar kanan). Selanjutnya kita kesumbu x:
Gambar 4. If ketiga dan If keempat

Sudah selesai dengan sumbu y, sekarang kita ke sumbu x. Dengan menggunakan sudut-sudut kotak sebagai pembanding kita dapat menciptakan sebuah deteksi tabrakan yang sederhana. Jika melihat gambar-gambar diatas membingungkan hahaha , coba lihat gambar berikut:

Gambar 5. Tabrakan!

Semua hasil pengecekan nilai (keempat if) dapat dipastikan tidak ada yang sesuai, yang ujung-ujungnya fungsi tersebut bernilai true. Semoga sudah mengerti, gampang kok hehehe..

- krofz
 

back to top

back to top