Sunday, 1 December 2013
Membuat game tic tac toe 4x4 menggunakan c dan GTK+ pada linux ubuntu
kesempatan kali ini pembembang dari tugas sebelumnya ialah implemntasi array pada game tic tac toe.saya akan coba untuk membuatnya dengan menggunakan bahasa c dan library GTK+ dan beruuran 4x4.
GTK saya gunakan untuk membuat interfacenya agar lebih mudah.
1. buka text editor
2. simpan dengan nama 4x4tictac.c
3. kopikan source codenya(terlampir)
4. buka terminal
5. kemudian kompile dengan perintah
gcc -o 4x4tictac 4x4tictac.c `pkg-config gtk+-2.0 --libs --cflags`
6. kemudian periksa file executablenya dengan perintah ls
7. jika ada file "3x3tictac" berarti sukses dikompile
8. running program dengan perintah ./4x4tictac
9. selamat mencoba
lampiran source codenya
#include<gtk/gtk.h>
#include<string.h>
int turn=0;
GtkWidget *mark[4][4];
GtkWidget *turn_info;
void check()
{
int i,j,count=0;
char m[4][4];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
char *tmp=(char *)gtk_label_get_label(GTK_LABEL(mark[i][j]));
m[i][j]=tmp[0];
if(strlen(tmp)>0)
{
count++;
}
}
}
//menentukan menang
if((
(m[0][0]=='X'&&m[0][1]=='X'&&m[0][2]=='X')||
(m[0][0]=='X'&&m[1][0]=='X'&&m[2][0]=='X')||
(m[0][0]=='X'&&m[1][1]=='X'&&m[2][2]=='X')||
(m[1][0]=='X'&&m[1][1]=='X'&&m[1][2]=='X')||
(m[2][0]=='X'&&m[2][1]=='X'&&m[2][2]=='X')||
(m[0][1]=='X'&&m[1][1]=='X'&&m[2][1]=='X')||
(m[0][2]=='X'&&m[1][2]=='X'&&m[2][2]=='X')||
(m[2][0]=='X'&&m[1][1]=='X'&&m[0][2]=='X')||
(m[0][1]=='X'&&m[1][2]=='X'&&m[2][3]=='X')||
(m[0][1]=='X'&&m[0][2]=='X'&&m[0][3]=='X')||
(m[0][3]=='X'&&m[1][2]=='X'&&m[2][1]=='X')||
(m[0][3]=='X'&&m[1][3]=='X'&&m[2][3]=='X')||
(m[1][0]=='X'&&m[2][0]=='X'&&m[3][0]=='X')||
(m[1][0]=='X'&&m[2][1]=='X'&&m[3][2]=='X')||
(m[1][1]=='X'&&m[1][2]=='X'&&m[1][3]=='X')||
(m[1][1]=='X'&&m[2][2]=='X'&&m[3][3]=='X')||
(m[1][1]=='X'&&m[2][1]=='X'&&m[3][1]=='X')||
(m[1][2]=='X'&&m[2][1]=='X'&&m[3][0]=='X')||
(m[1][2]=='X'&&m[2][2]=='X'&&m[3][2]=='X')||
(m[1][3]=='X'&&m[2][2]=='X'&&m[3][1]=='X')||
(m[1][3]=='X'&&m[2][3]=='X'&&m[3][3]=='X')||
(m[2][1]=='X'&&m[2][2]=='X'&&m[2][3]=='X')||
(m[3][0]=='X'&&m[3][1]=='X'&&m[3][2]=='X')||
(m[3][1]=='X'&&m[3][2]=='X'&&m[3][3]=='X')
)||(
(m[0][0]=='0'&&m[0][1]=='0'&&m[0][2]=='0')||
(m[0][0]=='0'&&m[1][0]=='0'&&m[2][0]=='0')||
(m[0][0]=='0'&&m[1][1]=='0'&&m[2][2]=='0')||
(m[1][0]=='0'&&m[1][1]=='0'&&m[1][2]=='0')||
(m[2][0]=='0'&&m[2][1]=='0'&&m[2][2]=='0')||
(m[0][1]=='0'&&m[1][1]=='0'&&m[2][1]=='0')||
(m[0][2]=='0'&&m[1][2]=='0'&&m[2][2]=='0')||
(m[2][0]=='0'&&m[1][1]=='0'&&m[0][2]=='0')||
(m[0][1]=='0'&&m[1][2]=='0'&&m[2][3]=='0')||
(m[0][1]=='0'&&m[0][2]=='0'&&m[0][3]=='0')||
(m[0][3]=='0'&&m[1][2]=='0'&&m[2][1]=='0')||
(m[0][3]=='0'&&m[1][3]=='0'&&m[2][3]=='0')||
(m[1][0]=='0'&&m[2][0]=='0'&&m[3][0]=='0')||
(m[1][0]=='0'&&m[2][1]=='0'&&m[3][2]=='0')||
(m[1][1]=='0'&&m[1][2]=='0'&&m[1][3]=='0')||
(m[1][1]=='0'&&m[2][2]=='0'&&m[3][3]=='0')||
(m[1][1]=='0'&&m[2][1]=='0'&&m[3][1]=='0')||
(m[1][2]=='0'&&m[2][1]=='0'&&m[3][0]=='0')||
(m[1][2]=='0'&&m[2][2]=='0'&&m[3][2]=='0')||
(m[1][3]=='0'&&m[2][2]=='0'&&m[3][1]=='0')||
(m[1][3]=='0'&&m[2][3]=='0'&&m[3][3]=='0')||
(m[2][1]=='0'&&m[2][2]=='0'&&m[2][3]=='0')||
(m[3][0]=='0'&&m[3][1]=='0'&&m[3][2]=='0')||
(m[3][1]=='0'&&m[3][2]=='0'&&m[3][3]=='0')
))
{
GtkWidget *message,*label,*vbox,*frame;
char string[25];
sprintf(string,"selamat pemain %d menang",2-turn);
message=gtk_window_new(GTK_WINDOW_POPUP);
gtk_window_set_position(GTK_WINDOW(message),GTK_WIN_POS_CENTER);
gtk_window_resize(GTK_WINDOW(message),200,70);
gtk_window_set_modal(GTK_WINDOW(message),TRUE);
frame=gtk_frame_new(NULL);
label=gtk_label_new(string);
vbox=gtk_vbox_new(0,0);
gtk_container_add(GTK_CONTAINER(message),frame);
gtk_container_add(GTK_CONTAINER(frame),vbox);
gtk_box_pack_start(GTK_BOX(vbox),label,0,0,0);
gtk_widget_show_all(message);
}
//terjadi draw
else if(count==16)
{
GtkWidget *message,*label,*vbox,*frame;
message=gtk_window_new(GTK_WINDOW_POPUP);
gtk_window_set_position(GTK_WINDOW(message),GTK_WIN_POS_CENTER);
gtk_window_resize(GTK_WINDOW(message),200,70);
gtk_window_set_modal(GTK_WINDOW(message),TRUE);
frame=gtk_frame_new(NULL);
label=gtk_label_new("permainan imbang");
vbox=gtk_vbox_new(0,0);
gtk_container_add(GTK_CONTAINER(message),frame);
gtk_container_add(GTK_CONTAINER(frame),vbox);
gtk_box_pack_start(GTK_BOX(vbox),label,0,0,0);
gtk_widget_show_all(message);
}
}
void markit(GtkWidget *button,GtkWidget *label)
{
char *str=(char *)gtk_label_get_label(GTK_LABEL(label));
//menentukan pemain 1
if(turn==0&&str[0]==0)
{
char turns[25];
gtk_label_set(GTK_LABEL(label),"X");
turn=1;
//pindah pemain ke 2
sprintf(turns,"Giliran pemain ke %d",turn+1);
gtk_label_set(GTK_LABEL(turn_info),turns);
}
//menentukan pemain 2
else if(turn==1&&str[0]==0)
{ char turns[25];
gtk_label_set(GTK_LABEL(label),"0");
turn=0;
//pindah pemain ke 1
sprintf(turns,"Giliran pemain ke %d",turn+1);
gtk_label_set(GTK_LABEL(turn_info),turns);
}
check();
}
int main(int argc,char *argv[])
{
GtkWidget *window, *button[4][4], *vbox, *hbox[4], *frame, *separator;
GtkWidget *menubar,*file_menu,*file,*quit,*Reset,*keluar;
char turns[15];
int i,j;
//initialize();
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
//nama bar file atas
gtk_window_set_title(GTK_WINDOW(window),"TIC TAC TOE ");
//posisi ketika main pertama di tengah layar
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
//default ukuran window
gtk_window_set_default_size(GTK_WINDOW(window),300,350);
frame=gtk_frame_new(NULL);
separator=gtk_hseparator_new();
vbox=gtk_vbox_new(0,0);
gtk_container_add(GTK_CONTAINER(window),frame);
gtk_container_add(GTK_CONTAINER(frame),vbox);
sprintf(turns,"Giliran pemain ke %d",turn+1);
turn_info=gtk_label_new(turns);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
button[i][j]=gtk_button_new_with_label(NULL);
mark[i][j]=gtk_label_new("");
gtk_container_add(GTK_CONTAINER(button[i][j]),mark[i][j]);
}
}
for(i=0;i<4;i++)
{
hbox[i]=gtk_hbox_new(0,0);
}
gtk_box_pack_start(GTK_BOX(vbox),separator,0,0,0);
gtk_box_pack_start(GTK_BOX(vbox),turn_info,0,0,0);
for(i=0;i<4;i++)
{
gtk_box_pack_start(GTK_BOX(vbox),hbox[i],1,1,0);
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
gtk_box_pack_start(GTK_BOX(hbox[i]),button[i][j],1,1,1);
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
g_signal_connect(GTK_OBJECT(button[i][j]),"clicked",GTK_SIGNAL_FUNC(markit),mark[i][j]);
}
}
gtk_widget_show_all(window);
gtk_main();
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment