Tetapi sebelum itu, seperti biasa kita perlu menyiapkan beberapa hal agar segala yang saya tulis di sini menjadi bermanfaat dan tidak disia-siakan.
-pertama siapkan sebuah komputer!
-kedua siapkan OS linux apa saja dan pastikan sudah terinstall di komputer anda!
-ketiga siapkan doa kepada tuhan agar apa yang saya jelaskan di sini berhasil diimplementasikan!
Kita mulai ya, ini nih langkah mudah teman-teman untuk membuat game tebak-tebakan sederhana.
Bag I Membuat Kodingan Utama:
1. buka gedit text editor.
2. Masukkan copy and paste tulisan di bawah ini:
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#define MAX_BUF 28
int main()
{
int x=1,pos[17], takeshi_score=0,z,other=0, player_score=0,ranjau[17],temp,total=0;
char * tmp_takeshi = "/tmp/pipe_takeshi"; // Lokasi pipe untuk menyimpan input jebakan takeshi
char * tmp_player = "/tmp/pipe_player"; // Lokasi pipe untuk mengakses hasil jawaban player
char * tmp_fscore = "/tmp/pipe_fscore"; // Lokasi pipe untuk mengakses hasil jawaban takeshi
system("clear");
for(z=1;z<=16;z++)ranjau[z]=0;
for(z=1;z<=16;z++)pos[z]=0;
do
{
printf("Benteng Takeshi : \n\n");
int p[7],sum=1,jebakan=0,t[5],a=0,j, i=0, file_takeshi, file_player,file_fscore,score=0;
puts("---------------------");
puts("| Takeshi | Player |");
printf("| %d | %d |\n", takeshi_score, player_score);
puts("---------------------");
puts("");
printf("Babak ke - %d\n", x++);
puts("");
puts("-------------");
puts("| 1 | 2 | 3 | 4 |");
puts("|----|----|----|----|");
puts("| 4 | 5 | 6 | 8 |");
puts("|----|----|----|----|");
puts("| 9 | 10 | 11 | 12 |");
puts("|----|----|----|----|");
puts("| 13 | 14 | 15 | 16 |");
puts("|----|----|----|----|");
puts("");
puts("Masukkan posisi antara 1 sampai 16");
int trap[MAX_BUF];
while(1){
total=0;
for(z=1;z<=16;z++) total=total+ranjau[z];
printf("Posisi %d: ",i+1);
scanf("%d",&temp);
if(temp==0||total==16) break;
if(ranjau[temp]==0){
i++;
p[i]=temp;
ranjau[temp]=1;
jebakan++;
if(i==4)break;
}
else printf("Ranjau telah di pasang, ulangi input\n");
}
total=0;
//for(z=1;z<=16;z++) total=total+ranjau[z];
p[6]=total;
p[5]=jebakan;
mkfifo(tmp_takeshi, 0666); // membuat named pipe yang akan diisi dengan jebakan takeshi
puts("Menunggu player memberikan jebakan . . ");
file_takeshi = open(tmp_takeshi, O_WRONLY); // Membuka file yang sudah dibuat dengan akses write
write(file_takeshi, p, sizeof(p)); // Menyimpan penempatan jebakan takeshi pada named pipe yang telah dibuat
close(file_takeshi);
while((file_player = open(tmp_player, O_RDONLY)) == -1) // Menunggu player mengirimkan skor dan jebakan
sleep(1);
read(file_player, trap, MAX_BUF); // Ketika dapat di open, baca inputan skor dan jebakan player
close(file_player); // menyimpan perubahan yang dilakukan, atau dapat mengirimkan signal bahwa file tersebut selesai dipakai
//printf("%d",trap[0]);
for(i=0;i<7;i++)printf("%d\n",trap[i]);
puts("Masukkan tebakan dari 1 sampai 16");//inputkan tebakan takeshi
for(i = 1; i < 5; i++)
{
printf("Posisi %d: ",i);
scanf("%d",&temp);
if(temp<=0||temp>16||pos[temp]==1){
printf("Posisi tidak valid, coba lagi\n");
i--;
}
else{
t[i]=temp;
pos[temp]=1;
}
}
//cek jebakan dan tebakan
score=0;
/*for(i=0;i<5;i++){
//printf("%d",trap[i]);
}*/
for(i = 1; i < 5; i++)
{
if(trap[6]==16&&trap[5]==0){
printf("Tidak ada jebakan yang disiapkan");
break;
}
a=0;
for(j = 1; j <= trap[5]; j++){
if(t[i] == trap[j]){
a=1;
break;
}
}
if(a==0)score++;
}
other=trap[6];
p[0]=score;
mkfifo(tmp_fscore, 0666); // membuat named pipe yang akan diisi dengan jawaban takeshi
//puts("Menunggu player memberikan jebakan . . ");
file_fscore= open(tmp_fscore, O_WRONLY); // Membuka file yang sudah dibuat dengan akses write
write(file_fscore, p, sizeof(p)); // Menyimpan penempatan jebakan takeshi pada named pipe yang telah dibuat
close(file_fscore);
takeshi_score=takeshi_score+score+4-trap[0];
player_score=player_score+trap[0]+4-score;
sleep(3);
system("clear");
}while (total < 16 && other < 16);
if(takeshi_score>=20)
("Takeshi menang");
else ("Penantang menang");
return 0;
}
3. save dengan nama yang diinginkan di home.
4. Buat untuk player 2 juga
5. buka gedit text editor.
6. Masukkan copy and paste tulisan di bawah ini:
#include <fcntl.h>
#include <stdio.h> // printf, scanf, gets, puts, dll
#include <sys/stat.h> //
#include <unistd.h> //
#include <string.h> // fungsi string
#define MAX_BUF 28
int main()
{
char * tmp_takeshi = "/tmp/pipe_takeshi"; // Lokasi pipe jebakan takeshi
char * tmp_player = "/tmp/pipe_player"; // Lokasi pipe jebakan player
char * tmp_fscore = "/tmp/pipe_fscore"; // Lokasi pipe untuk mengakses hasil jawaban hiryuu
int x=1,a,i,j,z, takeshi_score=0,pos[17],other=0, player_score=0,rnd=0,ranjau[17],temp,total=0;
for(z=0;z<=16;z++)pos[z]=0;
for(z=0;z<=16;z++)ranjau[z]=0;
system("clear");
do
{
rnd++;
int trap[MAX_BUF];
printf("Benteng Takeshi : \n\n");
int p[7],t[5],sum=1,jebakan=0, i, j, file_takeshi, file_player,file_fscore,score=0;
puts("---------------------");
puts("| Takeshi | Player |");
printf("| %d | %d |\n",takeshi_score, player_score);
puts("---------------------");
puts("");
printf("Babak ke - %d\n", x++);
puts("");
puts("-------------");
puts("| 1 | 2 | 3 | 4 |");
puts("|----|----|----|----|");
puts("| 4 | 5 | 6 | 8 |");
puts("|----|----|----|----|");
puts("| 9 | 10 | 11 | 12 |");
puts("|----|----|----|----|");
puts("| 13 | 14 | 15 | 16 |");
puts("|----|----|----|----|");
puts("");
puts("Menunggu Takeshi menempatkan jebakan . . ");
while((file_takeshi = open(tmp_takeshi, O_RDONLY)) == -1) // Menunggu inputan jebakan takeshi hingga file pipe dibuat (dapat di open)
sleep(1);
read(file_takeshi, trap, MAX_BUF); // Ketika dapat di open, baca inputan jebakan takeshi
close(file_takeshi); // menyimpan perubahan yang dilakukan, atau dapat mengirimkan signal bahwa file selesai dipakai
//if(rnd>1)takeshi_score=takeshi_score+trap[0]+4-score;
// inputkan tebakan player
for(i=0;i<7;i++)printf("%d\n",trap[i]);
puts("Masukkan tebakan dari 1 sampai 16");
for(i = 1; i < 5; i++)
{
printf("Posisi %d: ",i);
scanf("%d",&temp);
if(temp<=0||temp>16||pos[temp]==1){
printf("Posisi tidak valid, coba lagi\n");
i--;
}
else{
t[i]=temp;
pos[temp]=1;
}
}
// cek hasil tebakan dengan jebakan takeshi
score=0;
for(i = 1; i < 5; i++)
{
if(trap[6]==16&&trap[5]==0){
printf("Tidak ada jebakan yang disiapkan");
break;
}
a=0;
for(j = 1; j <= trap[5]; j++){
if(t[i] == trap[j]){
a=1;
break;
}
}
if(a==0)score++;
}
//printf("%d",score);
i=0;
puts("Menempatkan jebakan di posisi antara 1 sampai 16");//menyiapkan jebakan player
while(1){
total=0;
for(z=1;z<=16;z++) total=total+ranjau[z];
printf("Posisi %d: ",i+1);
scanf("%d",&temp);
if(temp==0||total==16) break;
if(ranjau[temp]==0){
i++;
p[i]=temp;
ranjau[temp]=1;
jebakan++;
if(i==4)break;
}
else printf("Ranjau telah di pasang, ulangi input\n");
}
total=0;
//for(z=1;z<=16;z++) total=total+ranjau[z];
p[5]=jebakan;
p[0]=score;
p[6]=total;
mkfifo(tmp_player, 0666); // membuat named pipe yang akan diisi oleh jebakan dan skor player
puts("Mengirimkan jebakan kepada Takeshi . . ");
file_player = open(tmp_player, O_WRONLY); // Membuka file yang sudah dibuat dengan akses write
write(file_takeshi, p, sizeof(p)); // Menyimpan jebakan dan skor player pada named pipe yang telah dibuat
close(file_player); // menyimpan perubahan yang dilakukan, atau dapat mengirimkan signal bahwa file selesai dipakai
while((file_fscore = open(tmp_fscore, O_RDONLY)) == -1) // Menunggu inputan jebakan takeshi hingga file pipe dibuat (dapat di open)
sleep(1);
read(file_fscore, trap, MAX_BUF); // Ketika dapat di open, baca inputan jebakan takeshi
close(file_fscore); // menyimpan perubahan yang dilakukan, atau dapat mengirimkan signal bahwa file selesai dipakai
//for(i=0;i<7;i++)printf("%d\n",trap[i]);
takeshi_score=takeshi_score+4+trap[0]-score;
player_score=player_score+score+4-trap[0];
other=trap[6];
sleep(3);
system("clear");
}while (total < 16 && other < 16);
if(player_score>=20)
printf("Penantang menang");
else printf("Takeshi menang");
return 0;
}
7. save dengan nama yang diinginkan di home.
Menjalankan Program:
1. Buka bagian terminal pada os linux anda. Dengan cara pada tombol home ketik "terminal" tanpa tanda baca.
2. Ketik gcc *nama yang diinginkan* -o *namafile* (lakukan untuk kedua file).
3. Kemudian ketik ./*namafile*(lakukan untuk kedua file).
Aturan permainan:
-Player disediakan bom sebanyak 1-16.
-Dilarang menaruh bom di tempat yang sama 2x.
-Player dilarang menebak di tempat yang sama.
-Player bergantian memberi jebakan dan menebak tempat yang tidak di beri jebakan oleh player.
-Poin di dapat kalau player berhasil menghindari ranjau dan ranjau yang di pasang player mengenai player lawan.
Saya akan menjelaskan apa yang terjadi:
-untuk bagian yang pertama adalah user interface untuk pemain 1(saya namakan takeshi) dia adalah yang pertama memberikan jebakan pada awal ronde melalui pipe ke-1.
-setelah itu data jebakan diberikan ke pemain 2(saya namakan player).
-Player kemudian akan memberikan daftar posisi yang sekiranya tidak memiliki jebakan.
-Poin player bertambah setiap posisi yang tidak sesuai dengan jebakan yang di berikan dan poin Takeshi bertambah tiap jawaban yang diberikan sesuai dengan jebakan yang di pasang.
-Setelah itu player mengirimkan scorenya ke Takeshi melalui pipe ke-2.
-Setelah Takeshi menerima jawabannya, ia akan menjawab dan sama peraturannya dengan player.
-Score Takeshi kemudian dikirim ke player melalui pipe ke-3 agar player juga bisa melihat score Takeshi.
-Proses akan terus berulang hingga seluruh jebakan(1-16) di pasang.
Sekian rancauan saya yang kurang jelas. Mohon maaf bila ada kesalahan.
Tidak ada komentar:
Posting Komentar