Kamis, 25 Mei 2017

TUGAS 4 PENGANTAR KOMPUTASI MODERN

Penerapan Komputasi Modern dalam Berbagai Bidang Kehidupan
Komputasi modern adalah sebuah konsep sistem yang menerima intruksi-intruksi dan menyimpannya dalam sebuah memory. Komputasi Modern merupakan sebuah sistem yang akan menyelesaikan masalah matematis menggunakan komputer dengan cara menyusun algoritma yang dapat dimengerti oleh komputer yang berguna untuk menyelesaikan suatu masalah. 
Komputasi modern saat ini tidak hanya berkembang dibidang teknologi saja. Saat ini komputasi modern sudah menjalar ke berbagai bidang aspek kehidupan seperti, pada bidang pendidikan, industry, kesehatan, bisnis, sains, keamanan, dan lainnya. Berikut beberapa contoh penerapan komputasi modern :

1.1  Penerapan Komputasi Modern Pada Bidang Matematika
Terdapat numerical analysis yaitu sebuah algoritma dipakai untuk menganalisa masalah-masalah matematika. Contohnya, penerapan teknik-teknik komputasi matematika meliputi metode numerik, scientific computing, metode elemen hingga, metode beda hingga, scientific data mining, scientific process control dan metode terkait lainnya untuk menyelesaikan masalah-masalah real yang berskala besar.

1.2  Penerapan Komputasi Modern Di Bidang Geologi
         Pada bidang geologi teori komputasi biasanya digunakan untuk pertambangan, sebuah sistem komputer digunakan untuk menganalisa bahan-bahan mineral dan barang tambang yang terdapat di dalam tanah. Contohnya, Pertambangan dan digunakan untuk menganalisa bahan-bahan mineral dan barang tambang yang terdapat di dalam tanah.

1.3  Penerapan Komputasi Modern Di bidang Fisika
Penerapan Komputasi Modern di bidang fisika ada Computational Physics yang mempelajari suatu gabungan antara Fisika, Komputer Sains dan Matematika Terapan untuk memberikan solusi pada “Kejadian dan masalah yang kompleks pada dunia nyata” baik dengan menggunakan simulasi juga penggunaan algoritma yang tepat. Pemahaman fisika pada teori, eksperimen, dan komputasi haruslah sebanding, agar dihasilkan solusi numerik dan visualisasi / pemodelan yang tepat untuk memahami masalah Fisika.Untuk melakukan pekerjaan seperti evaluasi integral, penyelesaian persamaan differensial, penyelesaian persamaan simultan, mem-plot suatu fungsi/data, membuat pengembangan suatu seri fungsi, menemukan akar persamaan dan bekerja dengan bilangan kompleks yang menjadi tujuan penerapan fisika komputasi. Banyak perangkat lunak ataupun bahasa yang digunakan, baik MatLab, Visual Basic, Fortran, Open Source Physics (OSP), Labview, Mathematica, dan lain sebagainya digunakan untuk pemahaman dan pencarian solusi numerik dari masalah-masalah pada Fisika komputasi.

1.4  Penerapan Komputasi Modern Di Bidang Ekonomi
Terdapat Computational Economics yang mempelajari titik pertemuan antara ilmu ekonomi dan ilmu komputer mencakup komputasi keuangan, statistika, pemrograman yang di desain khusus untuk komputasi ekonomi dan pengembangan alat bantu untuk pendidikan ekonomi.Contohnya, mempelajari titik pertemuan antara ekonomi dan komputasi, meliputi agent-based computational modelling, computational econometrics dan statistika, komputasi keuangan, computational modelling of dynamic macroeconomic systems dan pengembangan alat bantu dalam pendidikan komputasi ekonomi

1.5  Penerapan Komputasi Modern Di Bidang Kimia
Implementasi komputasi modern di bidang kimia adalah Computational Chemistry yaitu penggunaan ilmu komputer untuk  membantu menyelesaikan masalah kimia, contohnya penggunaan super komputer untuk menghitung struktur dan sifat molekul. Istilah kimia teori dapat didefinisikan sebagai deskripsi matematika untuk kimia, sedangkan kimia komputasi biasanya digunakan ketika metode matematika dikembangkan dengan cukup baik untuk dapat digunakan dalam program komputer. Perlu dicatat bahwa kata “tepat” atau “sempurna” tidak muncul di sini, karena sedikit sekali aspek kimia yang dapat dihitung secara tepat. Hampir semua aspek kimia dapat digambarkan dalam skema komputasi kualitatif atau kuantitatif hampiran.

1.6  Penerapan Komputasi Modern Di Bidang Biologi
Bioinformatika adalah (ilmu yang mempelajari) penerapan teknik komputasional untuk mengelola dan menganalisis informasi biologis. Bidang ini mencakup penerapan metode-metode matematika, statistika, dan informatika untuk memecahkan masalah-masalah biologis, terutama dengan menggunakan sekuens DNA dan asam amino serta informasi yang berkaitan dengannya. Contoh topik utama bidang ini meliputi basis data untuk mengelola informasi biologis, penyejajaran sekuens (sequence alignment), prediksi struktur untuk meramalkan bentuk struktur protein maupun struktur sekunder RNA, analisis filo genetik, dan analisis ekspresi gen.

1.7  Penerapan Komputasi Modern Di Bidang Kesehatan
Penerapan komputasi modern pada bidang kesehatan merupakan langkah baik untuk membantu melakukan pengecekan suatu penyakit dalam tubuh. Salah satu teknologi pada peralatan medis missal CT Scan (Computer Tomography) yang mampu memotret bagian dalam tubuh seseorang tanpa harus dilakukan pembedahan.

1.8  Penerapan Komputasi Modern Di Bidang Perbankan
Dalam bidang perbankan penerapan komputasi modern sangat dibutuhkan, agar segala transaksi keuangan dalam bidang perbankan dapat berjalan dengan baik. Teknologi komputasi modern dalam bidang perbankan berfungsi untuk menyimpan dan mengelola berbagai data keuangan. Misalnya, pada e-banking sebuah aplikasi yang terpasang untuk dapat memberikan dan melakukan transaksi untuk setiap nasabah.

2.   Kesimpulan
Komputasi Modern sangat bermanfaat dan dapat diimplementasikan hampir di segala bidang kehidupan manusia. Dengan adanya komputasi modern kita dapat lebih mudah dalam melakukan aktivitas.

Sumber :
http://rhodyezekiel.blogspot.co.id/2017/03/komputasi-modern.html?m=0

Kamis, 30 Maret 2017

TUGAS 1 PENGANTAR KOMPUTASI MODERN

TUGAS 1 PENGANTAR KOMPUTASI MODERN


1.   Pengertian Teori Komputasi dan Komputasi Modern

1.1 Teori komputasi

Adalah cabang ilmu komputer dan matematika yang membahas apakah dan bagaimanakah suatu masalah dapat dipecahkan pada model komputasi, menggunakan algoritma. Bidang ini dibagi menjadi dua cabang: teori komputabilitas dan teori kompleksitas, namun kedua cabang berurusan dengan model formal komputasi.

Untuk melakukan studi komputasi dengan ketat, ilmuwan komputer bekerja dengan abstraksi matematika dari komputer yang dinamakan model komputasi. Ada beberapa model yang digunakan, namun yang paling umum dipelajari adalah mesin Turing. Sebuah mesin Turing dapat dipikirkan sebagai komputer pribadi meja dengan kapasitas memori yang tak terhingga, namun hanya dapat diakses dalam bagian-bagian terpisah dan diskret.

Ilmuwan komputer mempelajari mesin Turing karena mudah dirumuskan, dianalisis dan digunakan untuk pembuktian, dan karena mesin ini mewakili model komputasi yang dianggap sebagai model paling masuk akal yang paling ampuh yang dimungkinkan. Kapasitas memori tidak terbatas mungkin terlihat sebagai sifat yang tidak mungkin terwujudkan, namun setiap permasalahan yang “terputuskan” (decidable) yang dipecahkan oleh mesin Turing selalu hanya akan memerlukan jumlah memori terhingga. Jadi pada dasarnya setiap masalah yang dapat dipecahkan (diputuskan) oleh meisn Turing dapat dipecahkan oleh komputer yang memiliki jumlah memori terbatas.

1.2  Komputasi Modern

Komputasi modern adalah sebuah konsep sistem yang menerima intruksi-intruksi dan menyimpannya dalam sebuah memory. Komputasi Modern merupakan sebuah sistem yang akan menyelesaikan masalah matematis menggunakan komputer dengan cara menyusun algoritma yang dapat dimengerti oleh komputer yang berguna untuk menyelesaikan suatu masalah. 

Dalam komputasi modern terdapat perhitungan dan pencarian solusi dari masalah. Perhitungan dari komputasi modern adalah akurasi, kecepatan, problem, volume dan besar kompleksitas. Jenis-jenis komputasi modern :
a.    Mobile computing
Mobile computing atau komputasi bergerak memiliki beberapa penjelasan, salah satunya komputasi bergerak merupakan kemajuan teknologi komputer sehingga dapat berkomunikasi menggunakan jaringan tanpa menggunakan kabel dan mudah dibawa atau berpindah tempat, tetapi berbeda dengan komputasi nirkabel.
b.     Grid computing
Komputasi grid menggunakan komputer yang terpisah oleh geografis, didistibusikan dan terhubung oleh jaringan untuk menyelasaikan masalah komputasi skala besar.
c.     Cloud computing

Komputasi cloud merupakan gaya komputasi yang terukur dinamis dan sumber daya virtual yang sering menyediakan layanan melalui internet.

2.   Sejarah Komputasi Modern (John Von Neumann)

John Von Neumann (1903-1957) adalah salah satu tokoh yang paling berpengaruh terhadap perkembangan komputasi modern. John menggagas sebuah konsep yang menjadi dasar dari arsitektur komputer yaitu dimana sebuah sistem yang menerima instruksi-instruksi dan menyimpannya dalam sebuah memori.

Von Neumann dilahirkan di Budapest, Hungaria pada 28 Desember 1903 dengan nama Neumann Janos. Dia adalah anak pertama dari pasangan Neumann Miksa dan Kann Margit. Di sana, nama keluarga diletakkan di depan nama asli. Sehingga dalam bahasa Inggris, nama orang tuanya menjadi Max Neumann. Pada saat Max Neumann memperoleh gelar, maka namanya berubah menjadi Von Neumann. Setelah bergelar doktor dalam ilmu hukum, dia menjadi pengacara untuk sebuah bank. Pada tahun 1903, Budapest terkenal sebagai tempat lahirnya para manusia genius dari bidang sains, penulis, seniman dan musisi.

Keahlian Von Neumann terletak pada bidang teori game yang melahirkan konsep seluler automata, teknologi bom atom, dan komputasi modern yang kemudian melahirkan komputer. Kegeniusannya dalam matematika telah terlihat semenjak kecil dengan mampu melakukan pembagian bilangan delapan digit (angka) di dalam kepalanya.

Setelah mengajar di Berlin dan Hamburg, Von Neumann pindah ke Amerika pada tahun 1930 dan bekerja di Universitas Princeton serta menjadi salah satu pendiri Institute for Advanced Studies. Dipicu ketertarikannya pada hidrodinamika dan kesulitan penyelesaian persamaan diferensial parsial nonlinier yang digunakan, Von Neumann kemudian beralih dalam bidang komputasi.  Sebagai konsultan pada pengembangan ENIAC, dia merancang konsep arsitektur komputer yang masih dipakai sampai sekarang. Arsitektur Von Nuemann adalah komputer dengan program yang tersimpan (program dan data disimpan pada memori) dengan pengendali pusat, I/O, dan memori.



3.   Teori Automata dan Bahasa Formal

3.1 Teori Bahasa

Teori bahasa membicarakan bahasa formal (formal language), terutama untuk kepentingan perancangan kompilator (compiler) dan pemroses naskah (text processor). Bahasa formal adalah kumpulan kalimat. Semua kalimat dalam sebuah bahasa dibangkitkan oleh sebuah tata bahasa (grammar) yang sama. Sebuah bahasa formal bisa dibangkitkan oleh dua atau lebih tata bahasa berbeda. Dikatakan bahasa formal karena grammar diciptakan mendahului pembangkitan setiap kalimatnya. Tata bahasa (grammar) adalah kaidah/aturan pembentukan kata/kalimat. Pada pembahasannya, bahasa formal hanya disebut bahasa saja.

3.2  Teori Automata

Automata berasal dari bahasa Yunani automatos, yang berarti sesuatu yang bekerja secara otomatis (mesin). Istilah automata merupakan bentuk tunggal, sedangkan bentuk jamaknya adalah automaton. Teori automata adalah teori tentang mesin abstrak yang bekerja secara sekuensial yang menerima dan mengeluarkan output dalam bentuk diskrit. Automata berkaitan erat dengan teori bahasa formal. ada beberapa hal yang berkaitan dengan Otomata, yaitu Grammar. Grammar adalah bentuk abstrak yang dapat diterima (accept) untuk membangkitkan suatu kalimat otomata berdasarkan suatu aturan tertentu.



4.   Finite State Machine

FSM adalah sebuah metodologi perancangan sistem kontrol yang menggambarkan tingkah laku atau prinsip kerja sistem dengan menggunakan tiga hal berikut: State (Keadaan), Event (kejadian) dan action (aksi). Pada satu saat dalam periode waktu yang cukup signifikan, sistem akan berada pada salah satu state yang aktif. Sistem dapat beralih atau bertransisi menuju state lain jika mendapatkan masukan atau event tertentu, baik yang berasal dari perangkat luar atau komponen dalam sistemnya itu sendiri. Transisi keadaan ini umumnya juga disertai oleh aksi yang dilakukan oleh sistem ketika menanggapi masukan yang terjadi. Aksi yang dilakukan tersebut dapat berupa aksi yang sederhana atau melibatkan rangkaian proses yang relatif kompleks

Secara formal FSM dinyatakan oleh 5 tupel atau M=(Q, ∑, δ, S, F), 
(Utdirartama, 2001) dimana : 
Q = himpunan state/kedudukan 
∑ = himpunan symbol input/masukan/abjad 
δ = fungsi transisi 
S = state awal/ kedudukan awal (initial state), S Q 

F = himpunan state akhir, F Q

5.   Mesin Turing

Alan Turing pada tahun 1936 telah mengeluarkan gagasannya berupa model mesin abstrak sebagai alat mekanik untuk mengerjakan prosedur yang efektif. Model ini disebut Mesin Turing. Mesin turing dapat diadaptasi untuk mensimulasi logika dari setiap algoritma oleh karena itu cara kerja mesin turing adalah ekivalen dengan cara kerja komputer sekarang ini dan mesin turing juga ekivalen dengan problema komputasi matematika. Mesin turing tidak ditujukan sebagai teknologi komputasi praktis tetapi lebih sebagai eksperimen pemikiran yang mewakili sebuah mesin komputasi. Mesin turing membantu para ilmuan komputer memahami batas-batas komputasi mekanis. Sebagai input dari mesin turing adalah kata atau untai atas suatu alfabet T. Mesin turing berhenti dengan keadaan menerima atau menolak untai. Kadang-kadang terjadi pula perulangan atau looping tak terhingga.



Keterangan :
a. Tape
Tempat diletakannya inputan yang berupa kata/untai.

b. Head
Membaca dan menulisi sel pita mesin turing, bisa bergerak ke kiri atau ke    kanan.
·
c.    Finite StateControl (FSC)
Otak dari TM, diimplementasikan dari algoritma pengenalan kalimat.


1.1 Notasi formal Mesin Turing

Mesin Turing dijelaskan oleh 7-tuple:
M = (Q, S, G, d, q0, B, F)
Komponen-komponennya adalah:
  • Q:  Himpunan berhingga dari state dari finite control.
  • S: himpunan berhingga dari simbol-simbol input.
  • G: Himpunan dari tape symbol.  S merupakan subset dari G.
  • d:  Fungsi transisi.  Argumen d(q, X) adalah sebuah state q dan sebuah tape symbol X.  Nilai dari d(q, X), jika nilai tersebut didefinisikan, adalah triple (p, Y, D), dimana p adalah next state dalam Q, Y adalah simbol, dalam G, ditulis dalam sel yang sedang di-scan, menggantikan simbol apapun yang ada dalam sel tersebut. D adalah arah, berupa L atau R, berturut-turut menyatakan left atau right, dan menyatakan arah dimana head bergerak.
  • q0: start state, sebuah anggota dari Q, dimana pada saat awal finite control ditemukan.
  • B: simbol blank.  Simbol ini ada dalam G tapi tidak dalam S, yaitu B bukan sebuah simbol input.
  • F: himpunan dari final state, subset dari Q.




Pustaka :

Selasa, 28 Juni 2016

User Interface pada Game Komputer

Desain user interface dalam game berbeda dari desain UI lainnya karena melibatkan unsur tambahan fiksi. Fiksi melibatkan avatar dari pengguna yang sebenarnya, atau player. Pemain menjadi elemen tak terlihat, tapi kunci untuk cerita, seperti halnya narator dalam novel atau film. Fiksi ini dapat langsung dihubungkan ke UI, sebagian terkait, atau tidak sama sekali. Game historis tidak memiliki hubungan nyata untuk narasi game, kemungkinan besar karena game semasa dulu jarang memiliki unsur-unsur cerita yang kuat.

User interface berarti tampilan antar muka pengguna. Jika didefinisikan secara sederhana User interface adalah penghubung atau mediator antar komputer dan manusia atau user komputer itu agar hubungan antara perangkat komputer dengan user bisa terjalin. User interface sangat berperan penting dalam dunia komputer karena dengan adanya user interface maka kemudahan user dalam mengoprasikan suatu perangkat komputer menjadi lebih mudah.

Dalam desain antarmuka game terdapat beberapa elemen yang diantaranya adalah 
Diegetic
Elemen user interface yang diegetik ada dalam dunia permainan (fiksi dan geometris) sehingga pemain dan avatar dapat berinteraksi dengan mereka melalui visual, audible atau haptic. Elemen UI diegetik yang dieksekusi dengan baik dapat meningkatkan pengalaman narasi untuk pemain, memberikan pengalaman yang lebih mendalam dan terintegrasi. Salah satu game yang mengimplementasikan elemen diegetic adalah Assassin’s Creed. Assassin’s Creed berhasil menggunakan banyak pola diegetic meskipun itu diatur dalam dunia sejarah karena pemain pemain menggunakan sistem virtual reality di masa depan. Jadi cerita sebenarnya futuristik daripada sejarah
Non-Diegetic
Antarmuka yang diberikan di luar dunia game, hanya terlihat dan terdengar ke pemain di dunia nyata desain interface ini semuanya mengunakan visual heads-up display (HUD). Semua menjadi sangat nyaman dengan penggunaan heads-up display (HUD) dalam permainan. Sistem ini memberikan informasi penting dengan cara yang cukup sederhana. Jika dilakukan dengan benar pemain bahkan tidak tahu itu ada. Mass Effect 3 menggunakan banyak Non-diegetik elemen UI untuk menginformasikan pemain senjata karakter dipilih dan kekuasaan – antara lain.

Meta
Gambaran yang bisa muncul dalam dunia game, namun tidak selalu divisualisasikan spasial untuk pemain. Contoh yang paling jelas adalah efek ditampilkan di layar, seperti percikan darah pada kamera untuk menunjukkan kerusakan.

Spatial
Elemen User Interface yang disajikan dalam ruang permainan 3D dengan atau tanpa suatu entitas dari dunia permainan yang sebenarnya (diegetik atau non-diegetik). Fable 3 adalah contoh di mana unsur-unsur spatial yang digunakan untuk memberikan informasi lebih kepada pemain dan mencegah mereka dari melompat ke layar peta. Jejak bersinar hampir cocok dalam fiksi mengingat kualitas estetika ajaib itu tapi karakter tidak dimaksudkan untuk menyadari hal itu. Ini memandu pemain ke tujuan berikutnya. Beralih dari elemen-elemen di atas, penggunaan icon pada game juga mempengaruhi kenyamanan pemain dalam memilih perintah-perintah pada game.

sumber :
http://www.kamu-info.web.id/2016/03/pengantar-teknologi-game.html
http://caralengkap.com/2012/10/definisi-interfaceantar-muka-dan-contohnya.html
http://ayudyaditta11.blogspot.co.id/2016/05/petgame-user-interface-pada-game.html

Jumat, 01 April 2016

Konsep Pembuatan Script Game Komputer

Script dan Skenario
Perkembangan teknologi komputer sangat mempengaruhi perkembangan yang ada dalam dunia game. Pembentukan karakter pada game semakin mendekati dengan keadaan sebenarnya pada dunia nyata. Ketika proses pembuatan game membutuhkan susunan yang lebih kompleks, timbullah kebutuhan untuk memisahkan konten (desain perilaku) dari mesin. Kehandalan seorang desainer game benar-benar dibutuhkan untuk merancang perilaku yang luas dari karakter. Banyak tersedia berbagai macam bentuk bahasa pemrograman yang ada. Tentunya dari kesemuanya itu memiliki kelebihan dan kekurangan masing-masing. Maka game developer harus benar-benar teliti dalam memilih bahasa dan menyusun script untuk membuat suatu game, agar nantinya game dapat berjalan lancar, tanpa bug, dan mampu menjalankan script dengan kebutuhan hardware seminimum mungkin.
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.
2. 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 :

tes
3. 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.

4. 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 C.

Disini kami mengunakan game snake mengunakan script bahasa C

Langkah pertama maskan sintaks library

1.      #include <stdio.h>
2.      #include <stdlib.h>
3.      #include <time.h>
4.      #include <sys\timeb.h>
5.      #include <Windows.h>

Dalam sintaks digunakan Array dimana Array ini kita gunakan untuk menampung ular. Satu elemen pada array sama dengan satu segmen ular. Tiap elemen berisi posisi koordinat (x,y) segmen di layar. Berikut ini bentuk strukturnya. Kita beri nama Segment.

1.      /** Struktur **********/
2.       
3.      /**
4.          Struktur untuk menampung data tiap segment dari snake 
5.          (array)
6.       */
7.      struct Segment {
8.          int x, y;
9.      };

Kita tambahkan dua variabel global, yaitu array snake, dan length untuk menyimpan panjangnya.

1.      /** Variabel global **********/
2.       
3.      // Array untuk menampung data ular
4.      struct Segment snake[2000];
5.       
6.      // Variabel untuk menyimpan panjang ular (array snake)
7.      int length = 0;
Untuk game ini, kita menggunakan konsep queue. Artinya, elemen pada array akan ditambahkan di awal (head), dan ketika dihapus, yang hilang adalah bagian akhir (tail). Istilahnya first in first out.
Berikut ini fungsi untuk melakukan penambahan push() dan penghapusan pop().

1.      /** Fungsi-fungsi **********/
2.       
3.      /**
4.          Push segment ke snake (pada bagian head).
5.       */
6.      void push(int x, int y) {
7.          for(int i = length; i > 0; i--) {
8.              snake[i] = snake[i-1];
9.          }
10.      snake[0].x = x;
11.      snake[0].y = y;
12.      length++;
13.  }
14.   
15.  /**
16.      Pop bagian ekor snake.
17.   */
18.  void pop() {
19.      length--;
20.  }

 

Ular 3 Segment

Sekarang mari kita coba buat ular sepanjang 3 segmen pada bagian main(). Oke, supaya mudah untuk mengubah-ubah pengaturan panjang awalnya, kita simpan nilai 3 tersebut di variabel globalsnake_size. Ketiga segmen ini kita tempatkan di baris pertama (y = 0), di kolom ke 1, 2, dan 3 (x = 0 s.d. 2).

1.      /** Konfigurasi permainan **********/
2.       
3.      // Panjang segment snake saat awal permainan
4.      int snake_size = 3;
5.       
6.      /**
7.          Program utama
8.       */
9.      int main() {
10.      // Pertama-tama, push segment (node) ke kanan 
11.      // sebanyak 3 segment (sesuai nilai variable snake_size)
12.      for (int i = 0; i < snake_size; i++) {
13.          push(i, 0);
14.      }
15.   
16.      return 0;
17.  }

Rendering

Setelah ular dibuat, kita akan mencetak ular tersebut di layar. Untuk mencetak, kita buat fungsidisplay(). Fungsi display() ini akan membaca nilai x dan y setiap element lalu mencetak satu karakter ‘O’ di posisi tersebut.
Untuk bisa mencetak di posisi (x,y), kita harus memindahkan kursor ke posisi tersebut. Untuk itu kita buat juga fungsi gotoxy().

1.      /**
2.          Pindahkan posisi kursor di layar
3.          Fungsi ini spesifik untuk OS windows.
4.      */
5.      void gotoxy(int x, int y) {
6.          COORD pos;
7.          pos.X = x;
8.          pos.Y = y;
9.          SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
10.  }
11.   
12.  /**
13.      Gambar snake (array) di layar
14.   */
15.  void display() {
16.      for(int i = 0; i < length; i++) {
17.          // Cetak di posisi x,y
18.          gotoxy(snake[i].x, snake[i].y);
19.          printf("O");
20.      }
21.  }

Sekarang, mari panggil display() di main(), jalankan program dan lihat hasilnya (lihat baris 11-19).

1.      /**
2.          Program utama
3.       */
4.      int main() {
5.          // Pertama-tama, push segment (node) ke kanan 
6.          // sebanyak 3 segment (sesuai nilai variable snake_size)
7.          for (int i = 0; i < snake_size; i++) {
8.              push(i, 0);
9.          }
10.   
11.      // Tampilkan kondisi permainan saat ini di layar...
12.   
13.      // Bersihkan layar
14.      system("cls");
15.   
16.      // Cetak (render) snake di layar
17.      display();
18.   
19.      getchar();
20.      return 0;
21.  }

 

Game Loop

Bagaimana caranya agar ular bisa bergerak? Caranya, adalah dengan membuat infinite loop untuk me-render ulang layar setiap putarannya. Dengan demikian, setiap ada perubahan situasi (state) pada arraysnake, entah itu jumlah element (length) atau nilai x dan y nya, perubahan itu akan langsung tercermin di layar.
Mari kita taruh bagian rendering tadi ke dalam infinite loop (lihat baris 11-20).

1.      /** 
2.          Program utama 
3.       */ 
4.      int main() { 
5.          // Pertama-tama, push segment (node) ke kanan  
6.          // sebanyak 3 segment (sesuai nilai variable snake_size) 
7.          for (int i = 0; i < snake_size; i++) { 
8.              push(i, 0); 
9.          } 
10.    
11.      // Game loop. Bagian di dalam while akan dieksekusi terus menerus 
12.      while (true) { 
13.          // Tampilkan kondisi permainan saat ini di layar... 
14.   
15.          // Bersihkan layar 
16.          system("cls"); 
17.   
18.          // Cetak (render) snake di layar 
19.          display(); 
20.      }
21.   
22.      getchar(); 
23.      return 0;
24.  }
Untuk menggerakkan ular ke kanan setiap 200ms, pertama-tama, di dalam game loop kita menghitung berapa waktu yang sudah terlewati, jika waktu yang berlalu sudah lebih atau sama dengan 200ms, maka kita geser ular. Sama dengan sebelumnya, agar nilai 200 ini mudah diubah-ubah, kita simpan dalam variabel global snake_speed.

1.      // Kecepatan gerakan snake dalam ms 
2.      int snake_speed = 200;
Untuk menghitung interval waktu yang berlalu, kita gunakan fungsi ftime() untuk mendapat kan penanda waktu.
Cara menggeser ular, adalah dengan melakukan pop(), lalu push() kembali di posisi koordinat headdengan nilai x ditambah 1 karena saat ini kepala ular mengarah ke kanan.
(Lihat baris 6-8, 17-40)
1.      /** 
2.          Program utama 
3.       */ 
4.      int main() {  
5.       
6.          // Untuk menyimpan penanda waktu saat snake bergerak 
7.          struct timeb last_timestamp; 
8.          ftime(&last_timestamp); // Set nilai awal 
9.       
10.      // Pertama-tama, push segment (node) ke kanan  
11.      // sebanyak 3 segment (sesuai nilai variable snake_size) 
12.      for (int i = 0; i < snake_size; i++) { 
13.          push(i, 0); 
14.      } 
15.      // Game loop. Bagian di dalam while akan dieksekusi terus menerus 
16.      while (true) { 
17.          // Ambil penanda waktu saat ini 
18.          struct timeb current_timestamp; 
19.          ftime(&current_timestamp); 
20.   
21.          // Selisih waktu terakhir dengan waktu sekarang dalam ms 
22.          int interval = 1000 * (current_timestamp.time - last_timestamp.time) + (current_timestamp.millitm - last_timestamp.millitm); 
23.   
24.          // Snake bergerak setiap 200 ms (sesuai nilai variable snake_speed) 
25.          // Dihitung dengan membandingkan selisih waktu sekarang dengan waktu  
26.          // terakhir kali snake bergerak. 
27.          if (interval >= snake_speed) { 
28.              // Tentukan posisi x,y ke mana snake akan bergerak. 
29.              int x, y; 
30.              x = snake[0].x + 1; 
31.              y = snake[0].y;
32.    
33.              // Pop ekor, lalu push segment ke depan head sehingga  
34.              // snake tampak bergerak maju.  
35.              pop(); 
36.              push(x, y);
37.   
38.              // Perbarui penanda waktu 
39.              last_timestamp = current_timestamp;
40.          }
41.   
42.          // Tampilkan kondisi permainan saat ini di layar... 
43.   
44.          // Bersihkan layar 
45.          system("cls"); 
46.   
47.          // Cetak (render) snake di layar 
48.          display(); 
49.      }
50.   
51.      ...
52.  }

Coba jalankan lagi. Sekarang ular sudah bisa bergerak!
Tapi layar tampaknya berkedip-kedip. Hal ini terjadi karena program mencoba mengosongkan layar dengan system(“cls”); sebelum menggambar lagi. Umumnya pembuat game akan melakukan teknik double buffering untuk menghindari layar berkedip (flicker). Namun untuk menyederhanakan tutorial ini, kita akan lakukan pendekatan lain, yaitu dengan me-render ulang layar hanya ketika ular bergerak. Sehingga rendering hanya terjadi setiap 200ms sekali (5 FPS).
Caranya mudah, kita pindahkan baris-baris rendering ke dalam blok if(interval >= snake_speed) { } (lihat baris 30-37).

1.      /** 
2.          Program utama 
3.       */ 
4.      int main() { 
5.          ...
6.       
7.          // Game loop. Bagian di dalam while akan dieksekusi terus menerus 
8.          while (true) { 
9.              // Ambil penanda waktu saat ini 
10.          struct timeb current_timestamp; 
11.          ftime(&current_timestamp); 
12.   
13.          // Selisih waktu terakhir dengan waktu sekarang dalam ms 
14.          int interval = 1000 * (current_timestamp.time - last_timestamp.time) + (current_timestamp.millitm - last_timestamp.millitm); 
15.   
16.          // Snake bergerak setiap 200 ms (sesuai nilai variable snake_speed) 
17.          // Dihitung dengan membandingkan selisih waktu sekarang dengan waktu  
18.          // terakhir kali snake bergerak. 
19.          if (interval >= snake_speed) { 
20.              // Tentukan posisi x,y ke mana snake akan bergerak. 
21.              int x, y; 
22.              x = snake[0].x + 1; 
23.              y = snake[0].y;
24.    
25.              // Pop ekor, lalu push segment ke depan head sehingga  
26.              // snake tampak bergerak maju.  
27.              pop(); 
28.              push(x, y); 
29.   
30.              // Tampilkan kondisi permainan saat ini di layar... 
31.   
32.              // Bersihkan layar 
33.              system("cls"); 
34.   
35.              // Cetak (render) snake di layar 
36.              display();
37.   
38.              // Perbarui penanda waktu 
39.              last_timestamp = current_timestamp;
40.          }
41.      }
42.   
43.      ...
44.  }

 

Mengontrol Arah Gerakan Ular

Untuk bisa mengontrol arah gerakan ular, kita membuat sebuah variabel global tambahan bernamadir. Variabel ini memberitahu arah push() berikutnya, apakah ke kanan, bawah, kiri, atau atas. Arah ini akan ditentukan berdasarkan input tombol panah yang ditekan.
Pertama-tama, buat variabel global dir, dengan nilai awal ke arah kanan. VK_RIGHT adalah konstanta berisi kode untuk tombol panah kanan.

1.      // Arah kepala saat awal permainan 
2.      int dir = VK_RIGHT;
Sekarang kita modifikasi penentuan nilai x dan y untuk melakukan push() berdasarkan variabel dir. Lalu di dalam game loop, dilakukan juga pengecekan tombol yang sedang ditekan. Jika merupakan salah satu dari empat tombol panah di keyboard, maka ubah nilai dir (lihat baris 17-37, 56-73).
1.      /** 
2.          Program utama 
3.       */ 
4.      int main() { 
5.          ...
6.       
7.          // Game loop. Bagian di dalam while akan dieksekusi terus menerus 
8.          while (true) { 
9.       
10.          ...
11.   
12.          // Snake bergerak setiap 200 ms (sesuai nilai variable snake_speed) 
13.          // Dihitung dengan membandingkan selisih waktu sekarang dengan waktu  
14.          // terakhir kali snake bergerak. 
15.          if (interval >= snake_speed) { 
16.              // Tentukan posisi x,y ke mana snake akan bergerak.  
17.              // Posisi dilihat dari koordinat segment kepala (head)  
18.              // dan arah (variable dir)
19.              int x, y;  
20.              switch (dir) { 
21.              case VK_LEFT: 
22.                  x = snake[0].x - 1; 
23.                  y = snake[0].y; 
24.                  break; 
25.              case VK_RIGHT: 
26.                  x = snake[0].x + 1; 
27.                  y = snake[0].y; 
28.                  break; 
29.              case VK_UP: 
30.                  x = snake[0].x; 
31.                  y = snake[0].y - 1; 
32.                  break; 
33.              case VK_DOWN: 
34.                  x = snake[0].x; 
35.                  y = snake[0].y + 1; 
36.                  break; 
37.              }
38.    
39.              // Pop ekor, lalu push segment ke depan head sehingga  
40.              // snake tampak bergerak maju.  
41.              pop(); 
42.              push(x, y); 
43.   
44.              // Tampilkan kondisi permainan saat ini di layar... 
45.   
46.              // Bersihkan layar 
47.              system("cls"); 
48.   
49.              // Cetak (render) snake di layar 
50.              display(); 
51.   
52.              // Perbarui penanda waktu 
53.              last_timestamp = current_timestamp;
54.          }
55.   
56.          // Ubah arah jika tombol panah ditekan 
57.          if (GetKeyState(VK_LEFT) < 0) { 
58.              dir = VK_LEFT; 
59.          } 
60.          if (GetKeyState(VK_RIGHT) < 0) { 
61.              dir = VK_RIGHT; 
62.          } 
63.          if (GetKeyState(VK_UP) < 0) { 
64.              dir = VK_UP; 
65.          } 
66.          if (GetKeyState(VK_DOWN) < 0) { 
67.              dir = VK_DOWN; 
68.          } 
69.   
70.          // Keluar dari program jika menekan tombol ESC 
71.          if (GetKeyState(VK_ESCAPE) < 0) { 
72.              return 0; 
73.          }
74.      }
75.   
76.      ...
77.  }

Kita juga bisa menambahkan pengecekan untuk keluar dari program jika pemain menekan tombol ESC.
Coba jalankan lagi program, sekarang kita bisa menggerakan ular dengan bebas

Collision Detection

Salah satu aspek yang penting dalam permainan ini adalah pengecekan apakah kepala ular bertabrakan dengan dinding atau dirinya sendiri. Di sini kita bisa melakukan pengecekan saat program memeroleh posisi x dan y yang baru, sebelum melakukan pop() dan push().
Jika posisi x berada di luar batasan 0-79 (panjang console) atau posisi y berada diluar batasan 0-24 (tinggi console), maka ular telah menabrak dinding, dan permainan berakhir. Sama seperti sebelum-sebelumnya, untuk nilai panjang dan lebar console bisa kita simpan di variabel global console_widthdan console_height.

1.      // Panjang console 
2.      int console_width = 80; 
3.       
4.      // Tinggi console 
5.      int console_height = 25;
Pengecekan berikutnya yaitu mengecek apabila posisi x dan y sama dengan posisi salah satu node, yang artinya ular menabrak dirinya sendiri. Untuk mengeceknya, kita buat fungsi check_collision().

1.      /** 
2.          Memeriksa apakah terdapat salah satu segment 
3.          snake (array) di koordinat x,y. 
4.          Return 0 artinya tidak bertumpuk, 1 artinya bertumpuk. 
5.       */ 
6.      int check_collision(int x, int y) { 
7.          for(int i = 0; i < length; i++) {
8.              if (snake[i].x == x && snake[i].y == y) { 
9.                  return 1; 
10.          } 
11.      } 
12.      return 0; 
13.  }

Berikut ini baris-baris yang ditambahkan di main() untuk melakukan pengecekan tadi, serta tambahan baris yang dilakukan di luar game loop, setelah permainan berakhir (game over) (lihat baris 18-32, 44-48).

1.      /** 
2.          Program utama 
3.       */ 
4.      int main() { 
5.          ...
6.       
7.          // Game loop. Bagian di dalam while akan dieksekusi terus menerus 
8.          while (true) { 
9.       
10.          ...
11.          // Snake bergerak setiap 200 ms (sesuai nilai variable snake_speed) 
12.          // Dihitung dengan membandingkan selisih waktu sekarang dengan waktu  
13.          // terakhir kali snake bergerak. 
14.          if (interval >= snake_speed) { 
15.   
16.              ...
17.   
18.              // Jika posisi kepala (head) menabrak tembok pembatas,  
19.              // maka permainan berakhir (keluar dari game loop) 
20.              if (x < 0 || x >= console_width || y < 0 || y >= console_height) { 
21.                  break; 
22.              } 
23.   
24.              // Jika posisi kepala (head) menabrak dirinya sendiri 
25.              // (posisi sama dengan salah satu segment), maka permainan  
26.              // berakhir (keluar dari game loop) 
27.              if (check_collision(x, y) == 1) { 
28.                  break; 
29.              } 
30.               
31.              // Jika tidak terjadi tabrakan (collision), maka snake  
32.              // boleh bergerak maju.. 
33.              // Pop ekor, lalu push segment ke depan head sehingga  
34.              // snake tampak bergerak maju.  
35.              pop(); 
36.              push(x, y); 
37.   
38.              // Tampilkan kondisi permainan saat ini di layar... 
39.              ...
40.          }
41.          ...
42.      }
43.   
44.      // Setelah keluar dari game loop, berarti permainan berakhir (game over) 
45.      system("cls"); 
46.      printf("GAME OVER\n"); 
47.   
48.      printf("Press ENTER to exit..."); 
49.      getchar(); 
50.      return 0;
51.  }

Jalankan program sekali lagi, lalu coba arahkan ular ke dinding. Untuk pengetesan tabrakan terhadap diri sendiri, bisa dilakukan dengan mengubah snake_size dengan nilai yang lebih besar, agar ular cukup panjang untuk menabrak dirinya sendiri.


Tampilan layar saat terjadi tabrakan. Permainan berakhir.

Makanan!!!

Ini adalah bagian terakhir dari tutorial ini, makanan! Ular perlu melahap makanan untuk menjadi lebih panjang. Untuk itu, kita perlu menempatkan makanan di koordinat acak. Untuk menaruh koordinat makanan, kita tambahkan dua variabel global food_x dan food_y.

1.      // Posisi makanan
2.      int food_x, food_y;

Meskipun makanan ditaruh secara acak, ada dua hal yang perlu diperhatikan:
  1. Makanan harus berada di dalam layar console berukuran 80×25.
  2. Makanan tidak boleh bertumpuk dengan ular saat ditempatkan.
Maka dari itu, kita buat sebuah fungsi place_food() untuk menaruh makanan dengan memerhatikan kedua syarat tersebut. Untuk syarat nomor 2, kita bisa memanfaatkan fungsi check_collision() yang baru saja dibuat.

1.      /**
2.          Taruh makanan secara acak, namun memastikan 
3.          makanan tidak bertumpuk dengan salah satu segment 
4.          snake (array)
5.       */
6.      void place_food() {
7.          // Jika makanan bertumpuk dengan salah satu segment
8.          // snake, ulangi penempatan makanan secara acak.
9.          do {
10.          food_x = rand() % console_width;
11.          food_y = rand() % console_height;
12.      } while (check_collision(food_x, food_y) == 1);
13.  }

Di awal program sebelum memasuki game loop, kita menempatkan makanan pertama. Berikutnya, makanan akan ditempatkan ulang jika posisi x dan y baru dari ular sama dengan koordinat makanan, yang artinya ular memakan makanan. Dalam hal ini, kita hanya melakukan push() tanpa melakukanpop(), sehingga jumlah elemen bertambah.
Jangan lupa pula untuk melakukan rendering makanan di layar.
Di samping itu, kita juga bisa menerapkan sistem penilaian, misalnya nilai bertambah 100 jika ular memakan makanan. Lalu pada akhir permainan (saat game over), nilai yang sudah terkumpul ditampilkan kepada pemain.
(Lihat baris 5-6, 12-13, 21-22, 41-53, 64-67, 80)
1.      /**
2.          Program utama
3.       */
4.      int main() {
5.          // Randomize
6.          srand(time(NULL));
7.       
8.          // Untuk menyimpan penanda waktu saat snake bergerak
9.          struct timeb last_timestamp;
10.      ftime(&last_timestamp); // Set nilai awal
11.   
12.      // Untuk menyimpan nilai
13.      int score = 0;
14.   
15.      // Pertama-tama, push segment (node) ke kanan 
16.      // sebanyak 3 segment (sesuai nilai variable snake_size)
17.      for (int i = 0; i < snake_size; i++) {
18.          push(i, 0);
19.      }
20.   
21.      // Tempatkan makanan secara acak
22.      place_food();
23.   
24.      // Game loop. Bagian di dalam while akan dieksekusi terus menerus
25.      while (true) {
26.   
27.          ...
28.   
29.          // Snake bergerak setiap 500 ms (sesuai nilai variable snake_speed)
30.          // Dihitung dengan membandingkan selisih waktu sekarang dengan waktu 
31.          // terakhir kali snake bergerak.
32.          if (interval >= snake_speed) {
33.   
34.              ...
35.   
36.              // Jika tidak terjadi tabrakan (collision), maka snake 
37.              // boleh bergerak maju..
38.   
39.              // Pop ekor, lalu push segment ke depan head sehingga 
40.              // snake tampak bergerak maju. 
41.              // Namun jika posisi x,y ke mana kepala (head) snake akan 
42.              // bergerak berada di posisi makanan, tidak perlu pop 
43.              // sehingga segment bertambah panjang. 
44.              if (x == food_x && y == food_y) {
45.                  // Dalam hal snake memakan makanan, maka nilai bertambah
46.                  score += 100;
47.   
48.                  // Lalu makanan ditempatkan ulang secara acak
49.                  place_food();
50.              }
51.              else {
52.                  pop();
53.              }
54.              push(x, y);
55.    
56.              // Tampilkan kondisi permainan saat ini di layar...
57.   
58.              // Bersihkan layar
59.              system("cls");
60.   
61.              // Cetak (render) snake di layar
62.              display();
63.   
64.              // Cetak (render) makanan di layar
65.              gotoxy(food_x, food_y);
66.              printf("X");
67.   
68.              // Perbarui penanda waktu
69.              last_timestamp = current_timestamp;
70.          }
71.   
72.          ...
73.   
74.      }
75.   
76.      // Setelah keluar dari game loop, berarti permainan berakhir (game over)
77.      // Tampilkan nilai yang diraih pemain
78.      system("cls");
79.      printf("GAME OVER\n");
80.      printf("Your score : %d\n\n", score);
81.   
82.      printf("Press ENTER to exit...");
83.      getchar();
84.   
85.      ...
86.   
87.  }
Selesai! Uji coba program untuk terakhir kalinya, dan game sudah siap dimainkan!

Layar game over menunjukkan permainan berakhir beserta nilai yang diperoleh.

StoryBoard


Referensi         :