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();
}

No comments:

Post a Comment