Sunday, 24 April 2016

Konsep Pembuatan Script Game Komputer

,


Pengantar Teknologi Game
Script dan Skenario
Skenario adalah adalah naskah yang sudah diberi karakterisasi dan adegan yang disuguhkan
kepada para pemain dan team produksi. kalau di amrik biasanya mengatakannya dengan
screenplay
            Script adalah acuan pembuatan produk audio-visual. Skenario bagian dari skrip. karena skrip juga dipae' untuk membuat program audio/radio, juga videoklip, film dokumenter,iklan. Hanya saja strukturnya yang beda2.
Konsep Pembuatan Scripting pada game
  • Pemilihan Bahasa Pemrograman
Pemrograman suatu game bisa menggunakan berbagai macam jenis bahasa pemrograman. Diantaranya yang terkenal adalah C++, C dan Java.
Proses pembuatan game modern bisa memakan waktu 1-3 tahun untuk menyelesaikannya. Lamanya suatu pengembangan bergantung pada sejumlah faktor, seperti genre, skala, platform pengembangan dan jumlah aset.
Sebagai contoh, sebuah game puzzle yang sederhana dengan menggunakan grafik 2D akan jauh lebih sedikit memakan waktu untuk dikembangkan daripada game role-playing komputer 3D.
Walaupun terdapat banyak sekali pilihan bahasa pemrograman untuk membuat game, namun pada intinya bahasa tersebut harus memenuhi syarat sebagai berikut :

a)      Speed
Bahasa scripting untuk game harus mampu berjalan secepat mungkin. Jika kita berniat untuk menggunakan banyak script untuk perilaku karakter dan kejadian di level game, maka script akan perlu untuk mengeksekusi sebagai bagian dari loop game utama. Ini berarti bahwa script yang lambat akan memakan waktu yang kita butuhkan untuk membuat suatu adegan, menjalankan mesin fisika, atau menyiapkan audio.

b)      Kompilasi dan Interpretasi (penyusunan dan penafsiran)
            Bahasa scripting secara luas diinterpretasikan,melalui susunan serangkaian byte. Penafsiran bahasa diambil melalui format teks. Interpreter melihat setiap baris, penyusunan bekerja sesuai yang maksud dari script, dan melakukan tindakan yang spesifik.
Bahasa byte-terkompilasi dikonversi dari teks ke format internal, yang disebut byte code. Kode byte biasanya jauh lebih padat daripada format teks. Karena kode byte dalam suatu format dioptimalkan ketika dieksekusi, agar dapat berjalan lebih cepat.

c)       Ekstensibilitas dan Integrasi
Bahasa scripting perlu memiliki akses ke fungsi yang signifikan ke dalam game. Sebuah script yang mengendalikan karakter, misalnya, harus mampu untuk menanyai game untuk mencari tahu apa yang bisa dilihat dan kemudian membiarkan game tahu apa yang akan dilakukan sebagai aksinya.
Serangkaian fungsi yang dibutuhkan untuk mengakses ini jarang diketahui ketika bahasa scripting telah diimplementasikan atau dipilih. Hal ini penting untuk memiliki sebuah bahasa yang dapat dengan mudah memanggil fungsi-fungsi atau menggunakan kelas main code dalam game. Biasanya, itu adalah penting bagi programmer untuk dapat mengekspos fungsi baru atau kelas yang dengan mudah ketika pembuat script memintanya.

d)     Re-Entrancy (ikut serta ulang)
            Fungsi ini sering berguna untuk memanggil script menjadi diikutsertakan ulang. Mereka dapat berjalan untuk sementara waktu, dan ketika anggaran waktu telah habis script akan dapat ditunda. Ketika script selanjutnya mendapatkan beberapa waktu kembali, maka akan dapat menjalankan kembali script yang ditunda sebelumnya.
Hal ini sering membantu untuk membiarkan kontrol hasil script saat mencapai jeda normal. Kemudian sebuah algoritma penjadwalan dapat memberikan lebih banyak waktu untuk meminimalisasi penggunaan sumber daya.
Sebuah script untuk mengendalikan sebuah karakter, misalnya, mungkin memiliki lima tahapan yang berbeda (memeriksa situasi, memeriksa kesehatan, menentukan gerakan, rencana rute, dan melaksanakan gerakan). Ini semua dapat dimasukkan dalam satu script yang menghasilkan penyekat antara setiap bagian. Kemudian masing-masing akan berjalan dengan setiap lima frame, dan beban dari eksekusi AI akan didistribusikan.
Re-entrancy yang lebih canggih harus memungkinkan penulis script untuk menandai bagian yang tidak boleh terputus.
  • Embedding (penanaman)
Embedding berhubungan dengan ekstensibilitas. Sebuah bahasa yang tertanam dirancang untuk dimasukkan ke dalam program lain. Ketika kita menjalankan bahasa scripting dari workstation, biasanya akan menjalankan program khusus untuk menafsirkan file source code. Dalam game, sistem scripting perlu dikontrol dari dalam program utama. Game yang menentukan jalannya script harus dijalankan dan harus dapat memberitahu mesin terkait bahasa scripting yang cocok untuk memproses script tersebut.
  • Bahasa Open Source
Banyak bahasa scripting game populer yang dirilis di bawah lisensi open source. Software open-source dirilis di bawah lisensi yang memberikan hak user untuk memasukkannya ke dalam perangkat lunak mereka sendiri tanpa membayar biaya tambahan.
Memulai sebagai teks dalam sebuah file teks, script biasanya melewati empat tahap:
  1. Tokenization :
Tokenizing mengidentifikasi unsur-unsur dalam teks. Sebuah file teks hanya berisi serangkaian karakter (dalam pengertian karakter ASCII). Hasil tokenizer keluar sebagai kumpulan byte tertentu dan jenis dari kelompok tertentu yang membentuk mereka.
  1. Parsing (penguraian) :
Makna dari sebuah program adalah sangat hirarkis: nama variabel dapat ditemukan dalam sebuah statement pemberian nilai, ditemukan di dalam pernyataan IF-, yang ada di dalam tubuh fungsi, di dalam definisi kelas, maupun di dalam sebuah deklarasi namespace, misalnya. Parser mengambil urutan token, mengidentifikasi peran masing-masing kode dalam program, dan mengidentifikasi struktur hirarkis keseluruhan program.
Contoh1          :  if (a < b) return;
dapat dilakukan proses parsing seperti pada bagan di bawah ini :
  1. Compiler :
mengubah parse tree ke dalam kode byte yang dapat dijalankan oleh interpreter. Kode byte biasanya berbentuk data biner berurutan. Compiler non-optimasi biasanya berisi output kode byte sebagai terjemahan literal dari parse tree.
  1. Interpreting :
Tahap akhir dari serangkaian ini ialah menjalankan kode byte. Dalam sebuah compiler untuk bahasa seperti C atau C++, produk akhir akan menjadi mesin instruksi yang dapat langsung dijalankan oleh prosesor. Dalam bahasa scripting, anda sering perlu untuk menyediakan layanan (seperti re-entrancy dan eksekusi yang aman) yang tidak mudah dicapai dengan bahasa mesin.Kode byte akhir dijalankan pada sebuah “mesin virtual”. Ini secara efektif menjadi sebuah emulator untuk sebuah mesin yang belum pernah ada di hardware. Anda menentukan instruksi agar mesin dapat mengeksekusi, dengan instruksi kode byte.


Contoh Pembuatan game mengunakan script bahasa Java.
Berikut ini adalah contoh scripting pada Bahasa pemrograman java menggunakan Netbeans.

Ini ilustrasinya:


Gambar di atas memiliki gambar utuh dalam bentuk lingkaran yang berwarna merah, dan garis sisi berwarna hitam. Berikut ini langkah-langkahnya:

1.      Buka NetBeans IDE 6.8
2.      File – New Project
3.      Klik Java
4.      Klik Java Application
5.      Klik tombol Next
6.      Ketik di kotak Project Name: MembuatPuzzle
7.      Tentukan lokasi dan nama folder di Project Location, misal D:\100java
8.      Hilangkan tanda centang pada kotak Create Main Class
9.      Klik Tombol Finish
10.  Klik kanan project MembuatPuzzle
11.   Klik New
12.  Klik Java Package
13.  Lihat gambar berikut:



14.  Ketik di kotak Package Name: MembuatPuzzlePackage
15.  Klik Tombol Finish
16.  Klik kanan pada MembuatPuzzlePackage
17.  Lihat gambar berikut:



18.  Ketik di kotak Class Name: MembuatPuzzleJFrame
19.  Klik tombol Finish
20.  Klik tombol Source
21.  Lihat gambar berikut ini:




22.  Di bawah teks package MembuatPuzzlePackage;
Ketik script berikut:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


23.  Di bawah teks public class MembuatPuzzleJFrame extends javax.swing.JFrame {
Ketik script berikut:

    private JPanel centerPanel;
    private JButton button;
    private JLabel label;
    private Image source;
    private Image image;
    int[][] pos;
    int width, height;


24.  Ubah teks public class MembuatPuzzleJFrame extends javax.swing.JFrame {
Menjadi:
public class MembuatPuzzleJFrame extends JFrame implements ActionListener{

25.  Hapus teks initComponents();
26.  Di bawah teks public MembuatPuzzleJFrame() {
Ketik script berikut:
pos = new int[][] {
                            {0, 1, 2},
                            {3, 4, 5},
                            {6, 7, 8},
                            {9, 10, 11}
                        };

        centerPanel = new JPanel();
        centerPanel.setLayout(new GridLayout(4, 4, 0, 0));

//        ImageIcon sid = new ImageIcon(Puzzle.class.getResource("bulat.jpg"));
        ImageIcon sid = new ImageIcon(MembuatPuzzleJFrame.class.getResource("bulat.jpg"));
        source = sid.getImage();

        width = sid.getIconWidth();
        height = sid.getIconHeight();

        add(Box.createRigidArea(new Dimension(0, 5)), BorderLayout.NORTH);
        add(centerPanel, BorderLayout.CENTER);

        for ( int i = 0; i < 4; i++) {
            for ( int j = 0; j < 3; j++) {
                if ( j == 2 && i == 3) {
                    label = new JLabel("");
                    centerPanel.add(label);
                } else {
                    button = new JButton();
                    button.addActionListener(this);
                    centerPanel.add(button);
                    image = createImage(new FilteredImageSource(source.getSource(),
                        new CropImageFilter(j*width/3, i*height/4,
                            (width/3)+1, height/4)));
                    button.setIcon(new ImageIcon(image));
                }
            }
        }

        setSize(220, 280);
        setTitle("Membuat Puzzle");
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {

        new MembuatPuzzleJFrame();

    }

    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        Dimension size = button.getSize();

        int labelX = label.getX();
        int labelY = label.getY();
        int buttonX = button.getX();
        int buttonY = button.getY();
        int buttonPosX = buttonX / size.width;
        int buttonPosY = buttonY / size.height;
        int buttonIndex = pos[buttonPosY][buttonPosX];

        if (labelX == buttonX && (labelY - buttonY) == size.height ) {

             int labelIndex = buttonIndex + 3;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }

        if (labelX == buttonX && (labelY - buttonY) == -size.height ) {

             int labelIndex = buttonIndex - 3;
             centerPanel.remove(labelIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.validate();
        }

        if (labelY == buttonY && (labelX - buttonX) == size.width ) {

             int labelIndex = buttonIndex + 1;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, buttonIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }

        if (labelY == buttonY && (labelX - buttonX) == -size.width ) {

             int labelIndex = buttonIndex - 1;

             centerPanel.remove(buttonIndex);
             centerPanel.add(label, labelIndex);
             centerPanel.add(button,labelIndex);
             centerPanel.validate();
        }
}  

27.  Kemudian, hapus semua tulisan berikut ini:
public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MembuatPuzzleJFrame().setVisible(true);
            }
        });
}

28.  Simpan gambar dengan nama bulat.jpg di D:\100java\MembuatPuzzle\src\MembuatPuzzlePackage

Atau pada folder src\MembuatPuzzlePackage sesuai lokasi folder anda

Catatan:
Saya sendiri membuat gambar bulat.jpg mengunakan Paint (Start – All Programs – Accessories – Paint)

Atau copy saja gambar ini:



29.  Jalankan program di Netbeans (Run – Run File)
30.  Hasilnya seperti ini:


Keterangan:
Yang tanda bitang merah itu sebenarnya kotak kosong. Apabila salah satu pecahan gambar yang paling dekat dengan kotak kosong tersebut diklik, maka potongan gambar tersebut akan menempati kotak kosong tersebut.

Apabila kita acak-acak, kemudian disusun kembali, maka permainannya cukup memusingkan juga. he…he..

31.  Selesai.

StoryBoard
Referensi         :

0 komentar to “Konsep Pembuatan Script Game Komputer”

Post a Comment

 

Maryadi Irvan's Blog Copyright © 2011 -- Template created by O Pregador -- Powered by Blogger Templates