Senin, 12 Juni 2017

Membuat Game Sudoku - C

Halo bro sis, kembali lagi disini. Kali ini kita akan membuat game sudoku, tau kan sudoku apa? sudoku itu biasanya ada di game hp, awalnya aku tidak tau cara penyelesaian game tersebut, tapi sekarang kita akan mengetahuinya dengan program yang akan kita buat. Di program ini kita bisa mengetahui hasil dari sudoku itu sendiri. Jadi mudah gamenya, okelah langsung saja.
Berikut contoh programnya.

#include <stdio.h>

int sudoku[9][9]; //array yang menyimpan data sudoku

void solvesudoku(int, int);

int checkrow(int row, int num)
{
    //ini untuk memeriksa apakah kita bisa memasukkan num di row sudoku atau tidak
    int column;
    for(column=0;column<9;column++)
        if(sudoku[row][column]==num)
        return 0; //jika num yang ditemukan sudah ada return 0

    return 1; //jika num tidak ditemukan return 1
}

int checkcolumn(int column, int num)
{
    //ni untuk memeriksa apakah kita bisa memasukkan num di column sudoku atau tidak
    int row;
    for(row=0;row<9;row++)
        if(sudoku[row][column]==num)
        return 0; //jika num yang ditemukan sudah ada return 0

    return 1; //jika num tidak ditemukan return 1
}

int checkgrid(int row, int column, int num)
{
    //fungsi ini memeriksa apakah kita bisa memasukkan num digrid 3*3 atau tidak
    //kita set row dan column 3*3
    row=(row/3)*3;
    column=(column/3)*3;

    int r, c;
    for(r=0;r<3;r++)
        for(c=0;c<3;c++)
        if(sudoku[row+r][column+c]==num)
        return 0; //jika num yang ditemukan sudah ada return 0

    return 1; //jika num tidak ditemukan return 1
}

void navigate(int row, int column)
{

    if(column<8)
        solvesudoku(row, column+1);
    else
        solvesudoku(row+1, 0);
}

void display()
{
    //fungsi ini untuk menampilkan hasil penyelesaian sudoku
    int row, column;
    printf("\nHasil Penyelesaian\n");
    for(row=0;row<9;row++)
    {
        for(column=0;column<9;column++)
            printf("%d ", sudoku[row][column]);

            printf("\n");
    }
}

void solvesudoku(int row, int column)
{
    if(row>8) //jika jumlah barisnya sudah lebih dari 8 maka kita sudah mengisi semua dan dapat menyelesaikan sudoku
        display();
    if(sudoku[row][column]!=0)
        navigate(row, column); //jika nilai yang terisi bukan 0 kita lanjutkan
    else
    {
        int ctr; //ini counter untuk memeriksa apakah 1 sampai 9 bisa terisi atau tidak
        for(ctr=1;ctr<=9;ctr++)
        {
            //kita check row, column, dan grid
            if((checkrow(row, ctr)==1)&&(checkcolumn(column, ctr)==1)&&(checkgrid(row, column, ctr)==1))
            {
                sudoku[row][column]=ctr;
                navigate(row, column);
            }
        }
        sudoku[row][column]=0; //tidak ditemukan num yang benar sehingga kembali ke awal
    }
}

int main()
{
    int row, column;
    printf("Masukkan sudoku dan berikan 0 untuk hasil yang tidak diketahui\n");
    for(row=0;row<9;row++)
        for(column=0;column<9;column++)
        scanf("%d", &sudoku[row][column]);

    solvesudoku(0, 0); //kita mulai menyelesaikan sudoku
    return 0;
}
Maafnih jika program yang saya contohkan tidak sesuai dan terlalu susah, maklumlah masih belajar juga, ini hasil outputnya.
Semangat terus ya, jangan pelit sama ilmu, dan jangan lupa like, comment, dan subscribe. Terima kasih.

Dilarang berkomentar SARA, dan menyebarkan HOAX. Kami akan menghargai bila kalian sopan. Terima kasih.