kesempatan kali ini karena ada tugas pemrograman yang inti dari tugasnya ialah implemntasi array maka saya akan coba untuk membuatnya dengan menggunakan bahasa c dan library GTK+.
GTK saya gunakan untuk membuat interfacenya agar lebih mudah.
1. buka text editor
2. simpan dengan nama 3x3tictac.c
3. kopikan source codenya(terlampir)
4. buka terminal
5. kemudian kompile dengan perintah
gcc -o 3x3tictac 3x3tictac.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 ./3x3tictac
9. selamat mencoba
lampiran source codenya
#include<gtk/gtk.h>
#include<string.h>
int turn=0;
GtkWidget *mark[3][3];
GtkWidget *turn_info;
void check()
{
int i,j,count=0;
char m[3][3];
for(i=0;i<3;i++)
{
for(j=0;j<3;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][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')))
{
GtkWidget *message,*label,*vbox,*frame;
char string[25];
sprintf(string,"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==9)
{
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[3][3], *vbox, *hbox[3], *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);
///////////////////////////////
//Packing
///////////////////////////////
sprintf(turns,"Giliran pemain ke %d",turn+1);
turn_info=gtk_label_new(turns);
for(i=0;i<3;i++)
{
for(j=0;j<3;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<3;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<3;i++)
{
gtk_box_pack_start(GTK_BOX(vbox),hbox[i],1,1,0);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
gtk_box_pack_start(GTK_BOX(hbox[i]),button[i][j],1,1,0);
}
}
//g_signal_connect(GTK_OBJECT(window),"destroy",gtk_main_quit,NULL);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
g_signal_connect(GTK_OBJECT(button[i][j]),"clicked",GTK_SIGNAL_FUNC(markit),mark[i][j]);
}
}
gtk_widget_show_all(window);
gtk_main();
}
No comments:
Post a Comment