Cara Membuat Game Puzzle Menggunakan Bahasa C++



Kalian bosan dengan game kalian yang gitu - gitu aja? kalian punya waktu luang tapi gak tau mau ngapain? punya inisiatif ingin membuat game sendiri? cobalah bermain dan buat game puzzle ini dengan menggunakan bahasa c++. Saya akan memberikan contoh game puzzle yang dibuat menggunakan bahasa c++ seperti dibawah ini.

Tentang Program
•  Nama Program
Nama Program ini adalah program game puzzle angka.
•  Fungsi Program
Fungsi dari program ini hanyalah untuk mengurutkan angka-angka yang telah acak menjadi angka-angka yang berurutan.
•  Bahasa Pemrograman
Adapun bahasa pemrograman yang digunakan adalah Borland C++.
Cara Pengoperasian
Cara pengoperasian program game Puzzle ini adalah :
  1. Saat tampilan pertama tampil, lakukan intruksi awal yaitu menekan tombol apapun untuk memulai permainan.
  2. Lakukan intruksi selanjutnya, yaitu memilih level yang ingin dimainkan, dengan angka 1 = easy, 2 = medium, atau 3 = hard. Lalu tekan enter
  3. Maka akan tampil puzzle dengan angka acak sesuai dengan level yang telah anda pilih.
  4. Urutkan angka-angka yang acak menjadi angka yang berurutan benar.
  5. Apabila anda keluar atau reset permainan tekan tombol Esc, lalu pilih ‘y’ untuk keluar, dan ‘t’ untuk reset.
Tampilan Program beserta Penjelasannya
Setelah program di kompile maka tampilan pertama yang akan muncul adalah

Gambar 1
Saat program di kompile, tampilan pertama yang muncul adalah seperti gambar diatas. Tampilan pertama memperlihatkan susunan angka-angka yang benar. Untuk melanjutkan ke tahap berikutnya, kita akan diberikan intruksi agar menekan sembarang tombol.

Gambar 2
Tampilan diatas adalah tampilan kedua setelah di awal tadi kita menekan tombol sembarang. Didalam Tampilan kedua kita di instruksikan lagi untuk menginput level yang diinginkan. Input 1 jika ingin level easy,  input 2 jika ingin level hard, dan input 3 jika ingin level hard.

Gambar 3
Gambar diatas adalah tampilan setelah menginput level yang diinginkan, setelah tampilan diatas muncul gunakan tombol panah untuk menggerakkan kotak yang kosong  hingga angka yang acak tersusun dengan benar.

Gambar 4
Jika ingin keluar atau reset pada saat bermain belum selesai, tekan esc. Maka akan mucul tampilan diatas. Lalu tekan ‘y’ untuk keluar dan tekan ‘t’ untuk reset.

Gambar 5
Setelah angka telah tersusun dengan benar, maka akan mucul tampilan diatas. Jika ingin memainkan kembali maka tekan ‘y’, dan jika ingin keluar tekan ‘t’.
Kalian ingin tahu codingnya? berikut coding dari game di atas : 
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

#define atas 1
#define kiri 2
#define bawah 3
#define kanan 4

#define keyUp 0x048
#define keyDown 0x050
#define keyLeft 0x04b
#define keyRight 0x04d

#define true 1
#define false 0

#define easy 10
#define medium 20
#define hard 30

#define caption " ----------------\n// GAME PUZZLE //\n----------------\n"

#define fieldSize 4

char field[fieldSize][fieldSize];
char field2[fieldSize][fieldSize];
unsigned int seed;
int x, y;

int acak(int i);
void initField(int movement);
void move(int arah);
void generateOutput();
int cekUrut();

int acak(int i) {
    int a;
    seed += 5;
    srand(seed);

    a = (rand() % i) + 1;

    return(a);
}

void initField(int movement) {
    int arah, arahOld = -1, nPindah = movement, xOld, yOld;
    int c = 1, i, j;
    char temp;

    srand(time(NULL));
    seed = rand();
    x = y = (fieldSize - 1);

    for (i = 0; i <= (fieldSize - 1); i++) {
        for (j = 0; j <= (fieldSize - 1); j++) {
            field[i][j] = field2[i][j] = c;
            c++;
        }
    }
    field[fieldSize - 1][fieldSize - 1] = field2[fieldSize - 1][fieldSize - 1] = ' ';

    c = 0;
    while (c != nPindah) {
        xOld = x;
        yOld = y;
        arah = acak(4);

        if (arah != 0) {
            if ( c != 0) {
                if ((arah + 2) % 4 == arahOld) {
                    continue;
                }
            }

            switch (arah) {
                case atas :
                    if (y > 0) y--;
                    else continue;
                    break;
                case kiri:
                    if (x > 0) x--;
                    else continue;
                    break;
                case kanan :
                    if (x < fieldSize - 1) x++;
                    else continue;
                    break;
                case bawah :
                    if (y < fieldSize - 1) y++;
                    else continue;
                    break;
                default :
                    break;
            }

            if (x >= 0 && y >= 0 && x <= (fieldSize - 1) && y <= (fieldSize - 1)) {
                temp = field[y][x];
                field[y][x] = field[yOld][xOld];
                field[yOld][xOld] = temp;

                c++;
                arahOld = arah % 4;
            } else {
                x = xOld;
                y = yOld;
            }
        }
    }
}

void move(int arah) {
    int xOld, yOld;
    char temp;

    xOld = x;
    yOld = y;

    switch (arah) {
        case atas :
            if (y > 0) y--;
            break;
        case kiri:
            if (x > 0) x--;
            break;
        case kanan :
            if (x < (fieldSize - 1)) x++;
            break;
        case bawah :
            if (y < (fieldSize - 1)) y++;
            break;
        default :
            break;
    }

    if (x >= 0 && y >= 0 && x <= (fieldSize - 1) && y <= (fieldSize - 1)) {
        temp = field[y][x];
        field[y][x] = field[yOld][xOld];
        field[yOld][xOld] = temp;
    } else {
        x = xOld;
        y = yOld;
    }
    generateOutput();
}

void generateOutput() {
    int i, j, k;
    clrscr();
    puts(caption);
    puts("Tekan ESC untuk keluar / reset permainan...");
    for(k = 1; k <= fieldSize; k++) printf("+----"); puts("+");

    for (i = 0; i<=(fieldSize - 1); i++) {
        for (j= 0; j<=(fieldSize - 1); j++) {
            if (i == y && j == x) {
                printf("| %c  ", field[i][j]);
            } else {
                printf("| %2i ", field[i][j]);
            }
        }
        puts("|");

        for(k = 1; k <= fieldSize; k++) printf("+----"); puts("+");
    }
}

int cekUrut() {
    int c, d;
    int match = true;

    for (c = 0; c <= (fieldSize - 1); c++) {
        for (d = 0; d <= (fieldSize - 1); d++) {
            if (field[c][d] != field2[c][d]) {
                if (match == true) {
                    match = false;
                }
            }
        }
    }
    return(match);
}

main() {
    int i, j, k, level;
    char key;

    system("cls");
    puts(caption);
    puts("Mainkan puzzle dan menyusunnya menjadi urutan yang benar...");
    puts("Geser kotak kosong sehingga menjadi berurutan sbg berikut : \n");
    initField(0);
    for(k = 1; k <= fieldSize; k++) printf("+----"); puts("+");
    for (i = 0; i<=(fieldSize - 1); i++) {
        for (j= 0; j<=(fieldSize - 1); j++) {
            if (i == y && j == x) {
                printf("| %c  ", field2[i][j]);
            } else {
                printf("| %2i ", field2[i][j]);
            }
        }
        puts("|");

        for(k = 1; k <= fieldSize; k++) printf("+----"); puts("+");
    }
    puts("Gunakan tombol panah untuk menggeser kotak kosong...\n");
    puts("Tekan sembarang tombol untuk melanjutkan...");
    getch();
    for(;;) {
        system("cls");
        puts("Level : ");
        puts("\t1. Easy");
        puts("\t2. Medium");
        puts("\t3. Hard");
        printf("Pilih Level yang akan dimainkan : ");
         scanf("%i", &level);

        switch (level) {
            case 1 :
                initField(easy);
                break;
            case 2 :
                initField(medium);
                break;
            case 3 :
                initField(hard);
                break;
            default :
                puts("Level salah!!");
                getch();
                continue;
        }

        system("cls");

        generateOutput();

        while ((key = getch()) != 27) {
            switch(key) {
                case keyUp :
                    move(atas);
                    break;
                case keyDown :
                    move(bawah);
                    break;
                case keyLeft :
                    move(kiri);
                    break;
                case keyRight :
                    move(kanan);
                    break;
            }
            if (cekUrut() == true) {
                puts("\nANDA MENANG!!!");
                break;
            }
        }
        if (key == 27) {
            printf("Apakah anda ingin keluar ?\n['y' utk keluar / 't' utk reset] : ");
            if (toupper(getchar()) == 'Y') break;
            else continue;
        } else {
            printf("Apakah anda ingin main lagi ? [y/t] : ");
            if (toupper(getchar()) == 'T') {
                puts("\nTerima Kasih Telah Mencoba!!!");
                getch();
                break;
            }
            else continue;
        }
    }
}

Lumayan sedikit menyulitkan yaa. Apa salahnya untuk berkreasi disaat ada waktu kosong. Semoga bermanfaat dan selamat mencoba.

Previous
Next Post »

19 comments

Click here for comments
Tech
admin
February 20, 2017 at 10:09 PM ×

Mantap sob. Terperinci

Reply
avatar
Anonymous
admin
February 20, 2017 at 10:12 PM ×

game yg sederhana ini aja udah pusing ane gan,, apalagi kalo bikin game HD.. bisa pecah kepala ane gan.. :D

Reply
avatar
Widi Prayogo
admin
February 20, 2017 at 10:19 PM ×

Game puzzle kodenya rumit sekali ya, mungkin karena saya belum memahami kode - kode untuk membuat game..

Reply
avatar
WLB
admin
February 20, 2017 at 10:30 PM ×

game console terumit gan.

Reply
avatar
Unknown
admin
February 20, 2017 at 10:32 PM ×

rumusnya lumayan rumit apalagi bikin games dengan resolusi tinggi... mantap jiwa

Reply
avatar
February 20, 2017 at 10:37 PM ×

Rumit rumusnya gan. Butuh pembelajaran lebih untuk memahaminya

Reply
avatar
DroidTech
admin
February 20, 2017 at 10:45 PM ×

Rumus rumusnya ternyata agak sedikit rumit

Reply
avatar
Publisher
admin
February 20, 2017 at 10:51 PM ×

waduh, bikin game sederhana gitu aja script nya panjang amet ya gan.

Reply
avatar
Mediasiana
admin
February 20, 2017 at 11:29 PM ×

Wah keren gan, bermanfaat

Reply
avatar
Mediasiana
admin
February 20, 2017 at 11:29 PM ×

Wah keren gan, bermanfaat

Reply
avatar
Unknown
admin
February 20, 2017 at 11:33 PM ×

wah keren gan, coba review tentang borland yang tidak bisa diinstal gan

Reply
avatar
Unknown
admin
February 21, 2017 at 12:01 AM ×

wih keren, ane baru belajar dasar" C++

Reply
avatar
Diki ALhafiz
admin
February 21, 2017 at 12:43 AM ×

Wah ane baru aja belajar c++ gan... Ternyata bisa bikin game sederhana.. Coba ahh...

Reply
avatar
Unknown
admin
February 21, 2017 at 3:03 AM ×

wah keren nih, tapi mesti belajar dulu supaya lancar, makasih infonya min

Reply
avatar
Alpi
admin
February 21, 2017 at 3:23 AM ×

Nice info bang (y)
btw, Anak TKJ ya ?
SMK mana ? :3

Reply
avatar
Unknown
admin
February 21, 2017 at 3:39 AM ×

Nice gan..lumayan buat belajar

Reply
avatar
Candra DP
admin
February 22, 2017 at 4:57 AM ×

boleh juga nih
udah lama gak pegang c++

Reply
avatar
Thanks for your comment