PERMAINAN CATUR ONLINE DENGAN MENGGUNAKAN ...

124
i PERMAINAN CATUR ONLINE DENGAN MENGGUNAKAN MACROMEDIA FLASH MX 2004 SKRIPSI Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik Jurusan Teknik Informatika Disusun Oleh : Albertus Andre 015314002 JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS SANATA DHARMA YOGYAKARTA 2007

Transcript of PERMAINAN CATUR ONLINE DENGAN MENGGUNAKAN ...

i

PERMAINAN CATUR ONLINE

DENGAN MENGGUNAKAN MACROMEDIA FLASH MX 2004

SKRIPSI

Diajukan untuk Memenuhi Salah Satu Syarat

Memperoleh Gelar Sarjana Teknik

Jurusan Teknik Informatika

Disusun Oleh :

Albertus Andre

015314002

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS SANATA DHARMA

YOGYAKARTA

2007

ii

AN ONLINE CHESS

USING MACROMEDIA FLASH MX 2004

FINAL PROJECT

Presented as Partial Fulfillment of the Requirements

to Obtain the Sarjana Teknik Degree

in Informatics Engineering

By :

Albertus Andre

015314002

INFORMATICS ENGINEERING STUDY PROGRAMME

FACULTY OF ENGINEERING

SANATA DHARMA UNIVERSITY

YOGYAKARTA

2007

iii

TUGAS AKHIR

PERMAINAN CATUR ONLINE

DENGAN MENGGUNAKAN MACROMEDIA FLASH MX 2004

Disusun oleh :

Albertus Andre

015314002

Telah disetujui oleh :

Pembimbing I

Agnes Maria Polina, S.Kom., M.Sc. Tanggal………………….

Pembimbing II

Yudianto Asmoro, S.T. Tanggal………………….

iv

TUGAS AKHIR

PERMAINAN CATUR ONLINE DENGAN MENGGUNAKAN

MACROMEDIA FLASH MX 2004

Dipersiapkan dan ditulis oleh

Albertus Andre

NIM : 015314002

Telah dipertahankan di depan Panitia Penguji

pada tanggal 21 Juni 2007

dan dinyatakan memenuhi syarat

Susunan Panitia Penguji

Nama Lengkap Tanda Tangan

Ketua Agnes Maria Polina, S.Kom., M.Sc. ………….

Sekretaris Alb. Agung Hadhiatma, S.T., M.T. ………......

Anggota St. Yudianto Asmoro, S.T. ………….

Anggota St. Wisnu Wijaya, S.T. …………..

Yogyakarta, Juni 2007

Fakultas Teknik

Universitas Sanata Dharma

Dekan,

(Ir. Greg. Heliarko, S.J., S.S., B.S.T., M.A., M.Sc.)

v

For with GOD

Nothing shall be impossible. (Luke 1 : 37)

Everything that humans can imagine is

a possibility in reality. Physicist, Willy Karen

Don’t worry,

Be Happy

Bobby

vi

This undergraduate thesis is dedicated to

My beloved parents,

My brother,

My sister,

My beloved mate,

And also those who will always be there for me

vii

PERNYATAAN KEASLIAN KARYA

Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini

tidak memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan

dalam kutipan dan daftar pustaka, sebagaimana layaknya sebuah karya ilmiah.

Yogyakarta, Juni 2007

Penulis,

Albertus Andre

viii

ABSTRAKSI

PERMAINAN CATUR ONLINE

DENGAN MENGGUNAKAN MACROMEDIA FLASH MX 2004

Albertus Andre

015314002

Game pada Personal Computer (PC) merupakan salah satu unsur penting

dalam perkembangan PC. Walaupun pada saat sekarang ini sudah banyak game

dengan berbagai macam fitur yang sangat canggih, tetapi game dengan fitur yang

lebih sederhana seperti solitaire atau minesweeper tetap memiliki penggemarnya,

karena ada kalanya seseorang ingin memainkan game yang sederhana. Maka dari

itu, penulis terinspirasi untuk membuat game dengan fitur sederhana namun

‘menjual’ berkat teknologi yang menyertainya, yaitu permainan catur online

dengan menggunakan Macromedia Flash MX 2004.

Dalam pembuatan game ini, penulis memilih untuk menggunakan

Macromedia Flash MX 2004 mengingat kemampuan flash di bidang animasi,

serta kemampuan format .swf yang dimilikinya yang dapat mengompres file

gambar dan suara, termasuk format-format vector menjadi file dengan ukuran

yang sangat kecil. Dalam pembuatan game ini, Macromedia Flash MX 2004

didukung oleh ElectroServer 3 yang merupakan sebuah socket server yang

dirancang khusus oleh Electrotank untuk aplikasi multiplayer game dan chat

sehingga nantinya akan menghasilkan sebuah aplikasi yang mampu mengirimkan

dan menerima data dalam jaringan dengan menggunakan bahasa pemrograman

dari flash itu sendiri, yaitu ActionScript 2.0.

Hasil akhir yang diperoleh adalah forum online dimana terdapat fasilitas

bagi 2 orang user untuk bermain catur. Tak hanya itu, program aplikasi ini juga

memungkinkan bagi semua user yang ada di dalamnya untuk menggunakan

fasilitas chatting sekaligus menjadi penonton dari pertandingan catur yang

ditampilkan.

ix

ABSTRACT

AN ONLINE CHESS USING MACROMEDIA FLASH MX 2004

Albertus Andre

015314002

Personal Computer (PC) game is one of important aspects in PC

development. Though there are a lot of games using latest features recently, yet

games with simpler features like solitaire or minesweeper still popular, since

sometimes people love to play just a simple game. Considering that, the writer

was inspired to make a game having simple features conducting with latest

technology inside, which is an online chess using Macromedia Flash MX 2004.

Macromedia Flash MX 2004 is chosen because of its ability in animation

and its .swf format ability to compress picture and sound files, including the

vector formats, into tiny files. In this game, Macromedia Flash MX 2004 is

supported by ElectroServer 3, a socket server specially constructed by Electrotank

for multiplayer game and chat application. The cooperation of Macromedia Flash

MX 2004 and ElectroServer 3 will later on come to an application which is

capable to send and accept data in a network using programming language of

flash, which is ActionScript 2.0.

The result of this implementation is an online forum with a facility to play

chess for 2 users. Moreover, that application program also enables all users in the

forum to use chatting facility and being spectators of the played chess at the same

moment.

x

PRAKATA

Puji syukur penulis panjatkan kepada Tuhan Yesus Kristus karena atas

berkat dan pimpinan–Nya penulis dapat menyelesaikan skripsi berjudul

Permainan Catur Online Dengan Menggunakan Macromedia Flash MX 2004

sebagai salah satu syarat untuk memperoleh gelar Sarjana Teknik (S.T.) pada

Program Studi Teknik Informatika, Fakultas Teknik, Universitas Sanata Dharma.

Dalam penyusunan ini, penulis telah banyak memperoleh bantuan dari

berbagai pihak, berupa materi maupun bimbingan, serta dorongan semangat dan

doa.

Pada kesempatan ini penulis mengucapkan terima kasih kepada :

1. Agnes Maria Polina, S.Kom., M.Sc., selaku dosen pembimbing tugas akhir

yang telah meluangkan waktu untuk memberi bimbingan serta nasihat

kepada penulis.

2. St. Yudianto Asmoro, S.T., selaku dosen pembimbing dan dosen penguji.

3. Alb. Agung Hadhiatma, S.T., M.T., selaku dosen penguji dan dosen

pembimbing akademis.

4. St. Wisnu Wijaya, S.T., selaku dosen penguji.

5. Ir. Greg. Heliarko, S.J., S.S., B.S.T., M.A., M.Sc., selaku Dekan Fakultas

Teknik.

6. Papa & mama yang dengan sabar terus menerus memberikan dorongan

semangat dan omelan.

xi

7. Beben yang selalu memperhatikan dan memberi dukungan, walaupun

selalu kesulitan dalam menunjukkannya.

8. Cierra yang juga selalu memperhatikan by doing simple things.

9. My beloved Alice, sumber inspirasi yang memberikan perhatian yang

sangat besar yang sangat mendukung penulis baik dalam kegiatan

perkuliahan, penyusunan skripsi maupun dalam kehidupan sehari–hari.

10. Qme a-ay, om Deni, om Dede, I-ie Yuyin, om Kris, om Ness, Oma, Kung–

kung dan seluruh keluarga besar yang tidak dapat disebutkan satu persatu.

11. My little cousins Sammy, Dee dee, Ardi, Arli, Io, O’neil, Arcel, Fin fin,

Carla, David, Fiel, Beleza.

12. Teman–teman seperjuangan yang bersama-sama mengalami kerasnya

kehidupan skripsi, Bernad, Teguh, Tatag, Rita, Detty, Tina, Alice.

13. Teman–teman selama di Jogja yang secara langsung maupun tidak

langsung mendukung kegiatan perkuliahan dan yang mengalami susah

senang bersama, Tatag, Ndon, Lia, Bernad, Siska, Agus, Ucok, Tanto,

Teguh, Gatot, Munyuk, Claus, Batok, Emon, Tito, Heston, Yuli, Mono,

Ipung.

14. Teman–teman TI’01 yang banyak memberikan kenangan selama masa

perkuliahan.

15. Seluruh mahasiswa Teknik Informatika, yang membantu penulis melalui

masa perkuliahan.

16. Seluruh mahasiswa Teknik yang membantu penulis melalui masa

perkuliahan.

xii

17. Pdt. Victor & Bu Dhani, yang sangat memperhatikan penulis dan

memberikan dukungan pangan dan doa.

18. Keluarga besar GBI Anugerah, yang memberikan dukungan semangat dan

doa , Pdt.Aken, Sofi, Pak David, Magda, Agung, Dendi dan masih banyak

lagi.

19. Keluarga besar GBI Karunia Tuhan Bandar Lampung, Pdt. Sutoyo Sigar,

Kak Yusi, Yogi, Agus.

20. Teman–teman kampung halaman, Batok, Emon, Toni, Tono, Vinda,

Martha, Syang–syang, Jerry, Ramos.

21. Mas Samadi & Mbak Yanti, sebagai bapak dan ibu kost yang sangat

memperhatikan dan yang dengan sabar menunggu keterlambatan

pembayaran listrik.

22. Seluruh Dosen dan Staff Universitas Sanata Dharma.

23. Seluruh pihak yang pernah/sedang menyertai penulis dalam melalui lika-

liku kehidupan.

24. Pihak lain yang tidak dapat disebutkan satu persatu yang telah membantu

penulis dalam menyelesaikan tugas akhir ini.

Yogyakarta, Juni 2007

Penulis,

Albertus Andre

xiii

DAFTAR ISI

HALAMAN JUDUL ............................................................................................... i

HALAMAN PERSETUJUAN PEMBIMBING .................................................... iii

HALAMAN PENGESAHAN ............................................................................... iv

HALAMAN MOTTO..............................................................................................v

HALAMAN PERSEMBAHAN ............................................................................ vi

PERNYATAAN KEASLIAN KARYA ............................................................... vii

ABSTRAKSI ....................................................................................................... viii

ABSTRACT........................................................................................................... ix

PRAKATA...............................................................................................................x

DAFTAR ISI........................................................................................................ xiii

DAFTAR TABEL.............................................................................................. xviii

DAFTAR GAMBAR ........................................................................................... xix

BAB I .......................................................................................................................1

PENDAHULUAN ...................................................................................................1

1.1. Latar Belakang .........................................................................................1

1.2. Rumusan Masalah....................................................................................2

1.3. Batasan Masalah ......................................................................................2

1.4. Tujuan ......................................................................................................2

1.5. Metodologi Penelitian..............................................................................3

1.6. Sistematika Penulisan ..............................................................................4

BAB II......................................................................................................................6

LANDASAN TEORI...............................................................................................6

xiv

2.1. Permainan Catur.......................................................................................6

2.1.1. Perkenalan Permainan Catur ............................................................... 6

2.1.2. Proses dan Peraturan Permainan Catur ............................................... 7

2.1.2.1. Proses Permainan ........................................................................ 7

2.1.2.2. Peraturan Permainan ................................................................... 8

2.2. Macromedia Flash MX 2004 .................................................................15

2.2.1. ActionScript 2.0................................................................................. 18

2.2.1.1. Istilah-istilah dalam ActionScript 2.0 ........................................ 18

2.2.1.2. Syntax ActionScript 2.0 ............................................................. 21

2.3. ElectroServer 3 ......................................................................................22

2.3.1. Kelebihan ElectroServer 3 ................................................................ 23

2.3.2. Instalasi ............................................................................................. 24

BAB III ..................................................................................................................25

PERANCANGAN SISTEM ..................................................................................25

3.1. Proses Umum .........................................................................................25

3.1.1. Menu Start Game .............................................................................. 26

3.1.1.1. Menu Create Game ................................................................... 27

3.1.1.2. Menu Join Game ....................................................................... 29

3.1.1.3. Proses Permainan ...................................................................... 30

3.1.2. Menu Help......................................................................................... 35

3.1.3. Menu Credit ...................................................................................... 36

3.2. Perancangan Antarmuka ........................................................................37

3.2.1. Scene Menu ....................................................................................... 37

xv

3.2.2. Scene Setting ..................................................................................... 38

3.2.3. Scene Create Game ........................................................................... 38

3.2.4. Scene Menunggu Player ................................................................... 39

3.2.5. Scene Player Ditemukan................................................................... 39

3.2.6. Scene Join Game ............................................................................... 40

3.2.7. Scene Game ....................................................................................... 40

3.2.8. Scene Peringatan Skak ...................................................................... 41

3.2.9. Scene Penawaran Remis.................................................................... 41

3.2.10. Scene Penolakkan Remis .................................................................. 42

3.2.11. Scene Konfirmasi Menyerah............................................................. 42

3.2.12. Scene Ending ..................................................................................... 42

3.2.13. Scene Help......................................................................................... 43

3.2.14. Scene Credit ...................................................................................... 43

BAB IV ..................................................................................................................44

IMPLEMENTASI SISTEM...................................................................................44

4.1. Pengaturan PC........................................................................................44

4.2. Tampilan Program Aplikasi Dan Potongan Listing Program ................46

4.2.1. Menu Utama...................................................................................... 46

4.2.2. Menu Game ....................................................................................... 47

4.2.2.1. Koneksi ElectroServer .............................................................. 47

4.2.2.2. Login Game ............................................................................... 48

4.2.2.3. Scene Chat................................................................................. 51

4.2.2.3.1. User List ................................................................................ 52

xvi

4.2.2.3.2. Chat Room List...................................................................... 54

4.2.2.3.3. Game Room List .................................................................... 56

4.2.2.3.4. Chat History .......................................................................... 61

4.2.2.3.5. Chat Message Box................................................................. 62

4.2.2.3.6. Room Info .............................................................................. 63

4.2.2.3.7. User Info ............................................................................... 63

4.2.2.3.8. New Room Button.................................................................. 63

4.2.2.3.9. New Game Button ................................................................. 65

4.2.2.4. Scene Game ............................................................................... 67

4.2.2.4.1. Chess Board .......................................................................... 68

4.2.2.4.2. Timer Box & Player Info....................................................... 75

4.2.2.4.3. Move History Box.................................................................. 78

4.2.2.4.4. Chat History .......................................................................... 78

4.2.2.4.5. Chat Message Box................................................................. 79

4.2.2.4.6. Spectator List ........................................................................ 80

4.2.2.4.7. Resign Button ........................................................................ 81

4.2.2.4.8. Draw Button .......................................................................... 82

4.2.2.4.9. Rematch Button ..................................................................... 84

4.2.2.4.10. Lobby Button ........................................................................ 87

4.2.3. Menu Credit ...................................................................................... 87

4.2.4. Menu Help......................................................................................... 88

BAB V ...................................................................................................................89

ANALISA HASIL .................................................................................................89

xvii

5.1. Uji Coba Perangkat Lunak.....................................................................89

5.1.1. Uji Coba Scene Chat ......................................................................... 89

5.1.2. Uji Coba Scene Game ....................................................................... 90

5.2. Analisa Manfaat .....................................................................................91

5.3. Analisa Teknologi ..................................................................................91

5.4. Kelebihan dan Kekurangan aplikasi ......................................................92

BAB VI ..................................................................................................................94

PENUTUP..............................................................................................................94

6.1. Kesimpulan ............................................................................................94

6.2. Saran ......................................................................................................94

DAFTAR PUSTAKA ............................................................................................95

xviii

DAFTAR TABEL

Tabel 2.1 Susunan buah catur pada awal permainan ...............................................7

Tabel 2.2 File Gambar ...........................................................................................16

Tabel 2.3 File Suara ...............................................................................................16

Tabel 2.4 File Video...............................................................................................16

Tabel 2.5 Tipe File Ekspor ....................................................................................17

Tabel 2.6 Tipe File Impor ......................................................................................17

xix

DAFTAR GAMBAR

Gambar 2.1 Papan Catur ..........................................................................................6

Gambar 2.2 Susunan buah catur pada awal permainan ...........................................7

Gambar 2.3 Gerakan bidak ......................................................................................9

Gambar 2.4 Gerakan benteng.................................................................................10

Gambar 2.5 Gerakan Kuda ....................................................................................11

Gambar 2.6 Gerakan gajah ....................................................................................11

Gambar 2.7 Gerakan menteri .................................................................................12

Gambar 2.8 Gerakan raja .......................................................................................12

Gambar 2.9 Blokir .................................................................................................13

Gambar 2.10 Promosi ............................................................................................14

Gambar 3.1 Flowchart Umum...............................................................................25

Gambar 3.2 Flowchart Start Game........................................................................26

Gambar 3.3 Flowchart Create Game.....................................................................27

Gambar 3.4 Flowchart Menunggu Player .............................................................28

Gambar 3.5 Flowchart Player Ditemukan.............................................................29

Gambar 3.8 Flowchart Konfirmasi Remis.............................................................34

Gambar 3.9 Flowchart Konfirmasi Menyerah.......................................................35

Gambar 3.10 Flowchart Scene Ending ..................................................................35

Gambar 3.12 Flowchart Credit ..............................................................................37

Gambar 3.13 Scene Menu ......................................................................................37

Gambar 3.14 Scene Setting ....................................................................................38

xx

Gambar 3.15 Scene Create Game ..........................................................................38

Gambar 3.16 Scene Menunggu Player ..................................................................39

Gambar 3.17 Scene Player Ditemukan..................................................................39

Gambar 3.18 Scene Join Game ..............................................................................40

Gambar 3.19 Scene Game ......................................................................................41

Gambar 3.20 Scene Peringatan Skak .....................................................................41

Gambar 3.21 Scene Penawaran Remis...................................................................41

Gambar 3.22 Scene Penolakkan Remis..................................................................42

Gambar 3.23 Scene Konfirmasi Menyerah............................................................42

Gambar 3.24 Scene Ending ....................................................................................43

Gambar 3.25 Scene Help........................................................................................43

Gambar 3.26 Scene Credit .....................................................................................43

Gambar 4.1 Download Flash Player – Opera .......................................................45

Gambar 4.2 Download Flash Player – Mozilla Firefox ........................................46

Gambar 4.3 Menu Utama.......................................................................................47

Gambar 4.4 Scene Login ........................................................................................49

Gambar 4.5 Pesan Username Telah Digunakan ....................................................51

Gambar 4.6 Scene Chat..........................................................................................52

Gambar 4.7 Popup clip private ..............................................................................53

Gambar 4.8 Popup Clip Join Room 1 ....................................................................55

Gambar 4.9 Popup Clip Join Room 2 ....................................................................56

Gambar 4.10 Gameclipholder................................................................................57

Gambar 4.11 Satu pemain putih.............................................................................58

xxi

Gambar 4.12 Satu pemain hitam............................................................................58

Gambar 4.13 Popup clip Join Game tanpa password ............................................59

Gambar 4.14 Popup clip Join Game dengan password .........................................59

Gambar 4.15 Chat History .....................................................................................62

Gambar 4.16 Chat Message Box............................................................................62

Gambar 4.17 Popup clip new room .......................................................................64

Gambar 4.18 Popup clip new room .......................................................................65

Gambar 4.19 Scene Game ......................................................................................68

Gambar 4.20 Scene Game 2 ...................................................................................69

Gambar 4.21 Popup clip promotion.......................................................................70

Gambar 4.22 Timer Box .........................................................................................76

Gambar 4.23 Move History Box.............................................................................78

Gambar 4.24 Chat History .....................................................................................79

Gambar 4.25 Chat Message Box............................................................................79

Gambar 4.26 Spectator list ....................................................................................80

Gambar 4.27 Popup clip resign .............................................................................81

Gambar 4.28 Popup clip draw ...............................................................................82

Gambar 4.29 Popup clip waiting ...........................................................................83

Gambar 4.30 Popup clip draw request ..................................................................83

Gambar 4.31 Popup clip draw yes .........................................................................84

Gambar 4.32 Popup clip draw no ..........................................................................84

Gambar 4.33 Restart request .................................................................................85

Gambar 4.34 Rematch waiting...............................................................................85

xxii

Gambar 4.35 Rematch request ...............................................................................86

Gambar 4.36 Restart no .........................................................................................86

Gambar 4.37 Menu Credit .....................................................................................87

Gambar 4.38 Menu Help ........................................................................................88

1

BAB I

PENDAHULUAN

1.1.Latar Belakang

Game pada Personal Computer (PC) merupakan salah satu unsur penting

dalam perkembangan PC, kini jenis game pada PC sudah tidak terhitung lagi

jumlahnya, mulai dari game sederhana seperti solitaire sampai pada game

simulasi 3 dimensi yang kualitasnya gambarnya hampir mendekati kenyataan

seperti Need For Speed Underground 2, bahkan kini bisnis game sangat erat

hubungannya dengan berbagai macam bisnis hiburan, seperti film dan animasi,

bahkan akhir-akhir ini bisnis game itu sendiri lebih melejit dibandingkan bisnis

hiburan lainnnya.

Walaupun pada saat sekarang ini sudah banyak game dengan berbagai

macam fitur yang sangat canggih, tetapi game dengan fitur yang lebih sederhana

seperti solitaire atau minesweeper tetap memiliki penggemarnya, karena ada

kalanya seseorang ingin memainkan game yang sederhana.

Sejak kemunculannya Macromedia Flash secara cepat telah menjadi suatu

teknologi pilihan untuk membuat animasi-animasi yang dinamis dan interaktif.

Beberapa Faktor yang mempunyai kontribusi besar pada teknologi yang membuat

animasi Flash menjadi populer adalah format .swf yang dapat mengompres file

gambar dan suara, termasuk format-format vector menjadi file dengan ukuran

yang sangat kecil. Lebih dari itu, Flash memiliki kemampuan untuk membangun

aplikasi yang mampu mengirimkan dan menerima data dalam jaringan dengan

2

menggunakan ElectroServer 3. ElectroServer 3 adalah sebuah socket server yang

dirancang khusus oleh Electrotank untuk aplikasi multiplayer gamer dan chat.

Dengan melihat fenomena yang berkembang di atas, maka timbullah suatu

ide untuk ikut berpartisipasi dalam membuat aplikasi permainan pada PC yang

berbasiskan jaringan, yaitu dengan membuat Game Catur Online.

1.2.Rumusan Masalah

Berdasarkan permasalahan di atas, aplikasi ini memiliki rumusan masalah,

yaitu bagaimana menerapkan teknologi Macromedia Flash untuk membuat

aplikasi permainan catur yang berbasiskan jaringan.

1.3.Batasan Masalah

Pembuatan aplikasi ini memiliki batasan-batasan masalah sebagai berikut:

a. Aplikasi permainan catur yang dibuat ditujukan untuk PC di dalam

jaringan.

b. Permainan catur hanya bisa berjalan jika ada 2 orang pemain, PC tidak

dapat berperan sebagai pemain lawan.

1.4.Tujuan

Pembuatan aplikasi ini memiliki tujuan untuk membangun aplikasi permainan

catur yang berbasis jaringan pada PC dengan menggunakan teknologi

Macromedia Flash khususnya Macromedia Flash MX 2004

.

3

1.5.Metodologi Penelitian

1. Observasi

Proses observasi dilakukan dengan cara bermain catur secara langsung.

Dari hasil observasi, maka dapat disusun algoritma untuk peraturan

permainan catur.

2. Studi Pustaka

Setelah melakukan proses observasi permainan catur, kemudian dipikirkan

hal-hal apa saja yang diperlukan untuk mendukung pembuatan aplikasi

permainan. Maka kemudian dipelajari berbagai literatur yang dapat

mendukung pembuatan aplikasi, meliputi:

a. Materi tentang peraturan permainan catur internasional.

b. Berbagai materi untuk menyusun suatu aplikasi game, khususnya

dengan menggunakan teknologi Macromedia Flash MX 2004.

c. Bahasa pemrograman dalam Macromedia Flash MX, yaitu

ActionScript, khususnya ActionScript 2.0, yaitu versi bahasa

pemrograman terbaru dalam Macromedia Flash MX 2004 yang

kemampuannya telah ditingkatkan dari versi sebelumnya.

d. Berbagai materi tentang ElectroServer 3, aplikasi yang memungkinkan

komunikasi atau pengiriman data antar aplikasi yang dibuat dengan

Macromedia Flash MX 2004.

3. Implementasi

Pada tahap ini semua rancangan permainan catur diterapkan dalam bentuk

aplikasi.

4

Perangkat lunak yang digunakan dalam implementasi antara lain:

1. Sistem Operasi Windows XP Profesional versi 5.1.2600 Service Pack 1

build 2600

2. Macromedia Flash MX 2004

3. JRE 1.4.2

4. ElectroServer 3

5. Adobe Photoshop CS

1.6.Sistematika Penulisan

BAB I PENDAHULUAN

Bab ini berisi tentang deskripsi umum isi tugas akhir yang

meliputi latar belakang masalah, rumusan masalah, batasan

masalah, tujuan tugas akhir, metodologi tugas akhir dan

sistematika penulisan.

BAB II LANDASAN TEORI

Bab ini berisi tentang pengenalan dan penjelasan permainan catur,

aturan permainan catur dan materi-materi tentang Macromedia

Flash MX 2004 dan ElectoServer 3

BAB III PERANCANGAN SISTEM

Bab ini berisi tentang perancangan proses dan perancangan

antarmuka dari aplikasi permainan yang dibuat.

BAB IV IMPLEMENTASI SISTEM

5

Bab ini berisi deskrpsi tentang tahap penulisan program dan

implementasi rancangan system ke dalam sistem yang

sesungguhnya.

BAB V ANALISA HASIL

Bab ini berisi analisa dari aplikasi melalui uji coba, baik dari segi

manfaat dan teknologi. Bab ini juga menjabarkan kelebihan dan

kekurangan aplikasi.

BAB VI PENUTUP

Bab ini berisi tentang kesimpulan penulis berdasarkan rumusan

masalah yang dihadapi dan saran yang diberikan penulis pada

pembaca berkaitan dengan pengembangan aplikasi Macromedia

Flash MX 2004 yang menjadi bahan penulisan.

6

BAB II

LANDASAN TEORI

2.1. Permainan Catur

2.1.1. Perkenalan Permainan Catur

Catur adalah permainan yang berasal dari India sekitar abad ke-6. Dari

kemunculannya yang pertama hingga sekarang permainan catur hanya mengalami

sedikit perubahan, yaitu munculnya menteri/ratu dan gerakan blokir pada abad ke-

15 dan sedikit penyesuaian perubahan gerakan pada abad ke-18.

Permainan Catur menggunakan sebuah papan yang terdiri dari 8 baris dan

8 kolom sehingga membentuk sebuah papan berbentuk persegi yang terdiri dari 64

persegi dengan pewarnaan yang bergantian.

Gambar 2.1 Papan Catur

Tujuan utama dari permainan ini adalah untuk menjebak raja dari pemain

lawan atau disebut ‘Skak-Mat’ dengan menggunakan buah-buah catur yang telah

disediakan untuk masing-masing pemain dimana tiap-tiap buah catur memiliki

fungsi dan kemampuan yang berbeda.

7

2.1.2. Proses dan Peraturan Permainan Catur

2.1.2.1. Proses Permainan

Pada permulaan permainan, seorang pemain mempunyai 16 buah catur

berwarna terang (putih), sedangkan pemain lainnya mempunyai 16 buah catur

yang juga berwarna gelap (hitam) yang disusun sedemikian rupa dengan patokan

menteri putih selalu berada di kolom berwarna putih dan sebaliknya. Baik buah

hitam maupun putih masing-masing mempunyai 1 Raja, 1 Menteri/Ratu, 2

Benteng, 2 Gajah, 2 Kuda dan 8 Bidak/Pion. Susunan awal buah catur pada dapat

dilihat pada tabel berikut.

Benteng Kuda Gajah Menteri Raja Gajah Kuda Benteng

Bidak Bidak Bidak Bidak Bidak Bidak Bidak Bidak

Bidak Bidak Bidak Bidak Bidak Bidak Bidak Bidak

Benteng Kuda Gajah Menteri Raja Gajah Kuda Benteng

Tabel 2.1 Susunan buah catur pada awal permainan

Gambar 2.2 Susunan buah catur pada awal permainan

8

Permainan catur dimainkan oleh dua orang pemain yang berlawanan

dengan jalan memindahkan buah catur di atas papan catur secara bergantian dan

pemain dengan buah catur berwarna putih selalu melakukan gerakan pertama.

Setiap buah catur memiliki metode gerakannya masing-masing dan tiap

buah catur dapat menangkap/memakan buah catur lawan dengan cara melangkah

ke tempat dimana buah catur lawan berada dengan tetap mengikuti aturan gerakan

dari buah catur tersebut.

Permainan berakhir pada saat raja dari salah satu pemain terjebak oleh

buah catur lawan atau dalam istilah catur disebut ‘skak’ dan raja tersebut tidak

mempunyai gerakan sah untuk menghindar dari buah catur lawannya atau disebut

‘skak-mat’.

Gerakan tidak sah adalah gerakan dari seorang pemain yang

mengakibatkan raja dari pemain itu sendiri terkena skak.

2.1.2.2. Peraturan Permainan

(a) Aturan Umum

Pada awal permainan pemain yang memiliki buah catur berwarna

putih melakukan gerakan pertama, dan kemudian gerakan dilakukan

secara bergantian dan kedua pemain memiliki kebebasan untuk

menjalankan buah caturnya..

Jika raja terkena ‘skak’, maka pemain diharuskan menghindari

ancaman ‘skak’ tersebut.

Permainan berakhir bila raja dari salah satu pemain tidak dapat

menghindar dari ancaman ‘skak’ dari pemain lawan, atau bila salah satu

9

pemain tidak mempunyai gerakan sah namun raja dari pemain tersebut

tidak dalam keadaan skak atau dikenal dengan istilah ‘remis’. Jika terjadi

keadaan ini, maka permainan dianggap berakhir seri.

(b) Aturan Gerakan

a. Bidak

Bidak adalah satu-satunya buah catur yang tidak dapat bergerak

mundur, bidak hanya dapat bergerak lurus ke depan kecuali

pada saat bidak tersebut menangkap buah catur lawan. Bidak

hanya dapat bergerak 1 kolom ke depan kecuali jika bidak itu

belum bergerak sama sekali, maka bidak tersebut boleh

bergerak sebanyak 2 kolom ke arah depan. Bidak hanya dapat

menangkap buah catur lawan yang berada di depannya 1 kolom

secara diagonal, bidak tidak dapat menangkap buah catur lawan

yang berada di depannya.

Gambar 2.3 Gerakan bidak (titik biru adalah gerakan bidak, titik merah

adalah gerakan bidak pada saat menangkap buah catur lawan)

b. Benteng

Benteng dapat bergerak secara vertikal dan horisontal dengan

bebas, benteng tidak mempunyai batasan kolom untuk

melakukan gerakan, benteng dapat berpindah kolom sebanyak

10

yang diinginkan pemain. Cara benteng bergerak sama dengan

cara benteng menangkap buah catur lawan, selama buah catur

lawan yang ingin ditangkap berada dalam garis vertikal atau

horisontal tempat benteng berada, maka buah catur lawan dapat

ditangkap oleh benteng, dengan catatan tidak ada buah catur

lain yang menghalangi buah catur tersebut, baik buah catur

lawan ataupun buah catur milik sendiri.

Gambar 2.4 Gerakan benteng

c. Kuda

Kuda adalah satu-satunya buah catur yang dapat melompati

buah catur lainnya, Gerakan kuda biasa disebut sebagai gerakan

yang membentuk huruf “L”, yaitu kuda bergerak satu langkah

secara horisontal kemudian dua langkah secara vertikal atau

satu langkah secara vertikal kemudian dua langkah secara

horisontal. Cara kuda menangkap buah catur lawan, sama

dengan cara kuda bergerak.

11

Gambar 2.5 Gerakan Kuda

d. Gajah

Buah catur ini hanya dapat bergerak secara diagonal tanpa

batasan banyaknya kolom yang dapat dilewati dalam sekali

gerakan. Cara gajah menangkap buah catur lawan sama dengan

caranya bergerak.

Gambar 2.6 Gerakan gajah

e. Menteri

Menteri atau biasa dikenal sebagai ratu dapat bergerak secara

vertikal, horisontal, dan diagonal tanpa batasan banyak kolom

yang harus dilalui dalam tiap gerakan. Cara menteri menangkap

buah catur lawan sama dengan caranya bergerak.

12

Gambar 2.7 Gerakan menteri

f. Raja

Sama dengan menteri raja juga dapat bergerak secara

horisontal, vertikal dan diagonal, tetapi dengan pengecualian

raja hanya dapat bergerak sebanyak satu langkah atau satu

kolom, dan raja tidak dapat bergerak ke kolom dimana dia akan

terkena ancaman ‘skak’. Cara raja menangkap buah catur lawan

sama dengan cara raja bergerak.

Gambar 2.8 Gerakan raja

g. Blokir

Blokir adalah suatu gerakan spesial dimana pemain dapat

memindahkan lebih dari satu buah catur dalam 1 kali gerakan

13

yaitu raja dan benteng. Blokir juga satu-satunya gerakan

dimana raja boleh bergerak lebih dari satu kolom.

Agar dapat melakukan blokir ada 3 syarat yang harus dipenuhi

yaitu :

1. Baik raja ataupun benteng yang akan melakukan blokir

harus belum pernah melakukan gerakan.

2. Tidak boleh ada buah catur sama sekali diantara raja dan

benteng yang akan melakukan blokir.

3. Raja tidak sedang dalam kondisi ‘skak’, dan tidak ada buah

catur lawan yang dapat mengancam raja dengan kondisi

‘skak’ baik pada tempat raja akan berpindah ataupun di

kolom yang akan dilalui raja.

Cara melakukan gerakan blokir adalah dengan memindahkan

benteng tepat ke samping raja kemudian raja melompati

benteng yang mendekatinya itu. Untuk lebih jelasnya bisa

dilihat pada Gambar 2.9.

Gambar 2.9 Blokir

14

Posisi buah catur pada gambar adalah posisi awal sebelum

melakukan blokir, titik berwarna kuning adalah posisi raja

setelah melakukan blokir, titik berwarna merah muda adalah

posisi benteng setelah melakukan blokir. Titik yang berada di

sebelah kiri raja adalah posisi buah catur setelah melakukan

blokir bila raja melakukan blokir dengan benteng sebelah kiri,

sedangkan titik yang berada di sebelah kanan raja adalah posisi

buah catur setelah melakukan blokir bila raja melakukan blokir

dengan benteng sebelah kanan.

h. Promosi

Promosi hanya dapat dilakukan oleh bidak. Promosi terjadi

apabila bidak salah seorang pemain mencapai ujung papan

catur (daerah lawan). Bila bidak tersebut berhasil mencapai

ujung dari papan catur, maka pemain berhak untuk mengganti

bidak tersebut dengan buah catur lainnya kecuali raja. Untuk

lebih jelasnya dapat dilihat pada gambar 2.10 berikut.

Gambar 3.10 Promosi

15

Posisi awal adalah posisi awal bidak pada awal permainan, jika

sebuah bidak dapat mencapai posisi akhir seperti pada gambar

maka terjadi promosi. Semua bidak dalam permainan catur

dapat melakukan promosi, dan tidak ada batasan berapa banyak

bidak yang dapat melakukan promosi.

2.2.Macromedia Flash MX 2004

Macromedia Flash MX 2004 adalah merupakan versi terbaru dari

Macromedia Flash. Macromedia Flash adalah suatu aplikasi untuk

membuat aplikasi animasi yang dinamis dan interaktif yang diproduksi oleh

Macromedia.

Pada awalnya Macromedia Flash mempunyai fungsi utama untuk

membuat animasi namun seiring dengan perkembangannya Macromedia

Flash kini telah memiliki kemampuan yang sangat luas, dan dapat dipakai

untuk membuat berbagai macam aplikasi seperti Mp3 Player, voice chat,

basisdata dalam jaringan, organizer dan berbagai macam game online.

Macromedia Flash MX 2004 memiliki banyak sekali fitur,

diantaranya adalah ActionScript 2.0, yaitu versi terbaru bahasa pemrograman

di dalam Macromedia Flash yang sudah menggunakan konsep Object

Oriented Programming (OOP).

16

Jenis-jenis file yang didukung oleh Macromedia Flash MX 2004

untuk diimpor :

1. File Gambar

Tipe File Extensi Adobe Illustrator .eps, ai AutoCad DXF .dxf Bitmap .bmp Enhanced Windows Metafile .emf FreeHand .fh7, .fh8, .fh9, .fh10 Future Splash Player .spl GIF dan Animated GIF .gif JPEG .jpg PICT .pct, .pic PNG .png Flash Player .swf Windows Metafile .wmf

Tabel 2.2 File Gambar

2. File Suara

Tipe File Extensi Mp3 .mp3 WAV Audio .wav

Tabel 2.3 File Suara

3. File Video

Tipe File Extensi Audio Video Interleaved .avi Digital Video .dv Motion Picture Express Group .mpg, .mpeg Quick Time Movie .mov Windows Media File .wmv, .asf

Tabel 2.4 File Video

17

Jenis – jenis file yang didukung oleh Macromedia Flash MX 2004

untuk diekspor :

Tipe File Extensi Adobe Ilustrator .ai Animated GIF, GIF Sequence .gif Bitmap .bmp DXF Sequence & AutoCad .dxf Enhanced Metafile .emf EPS .eps Flash Movie .swf Future Splash Player .spl JPEG Sequence & JPEG Image .jpg PNG Sequence & JPEG Image .png WAV Audio .wav Windows Metafile .wmf Audio Video Interleaved .avi

Tabel 2.5 Tipe File Ekspor

Jenis – jenis file yang dapat dihasilkan oleh Macromedia Flash MX

2004 :

Tipe File Extensi Flash Movie .swf HTML .html GIF Image .gif JPEG Image .jpg PNG Image .png Windows Projector .exe Macintosh Projector .hqx QuickTime Movie .mov

Tabel 2.6 Tipe File Impor

18

2.2.1. ActionScript 2.0

ActionScript 2.0 merupakan bahasa pemrograman di dalam Macromedia

Flash MX 2004 yang sudah mendukung OOP dan bersifat case sensitive.

2.2.1.1. Istilah-istilah dalam ActionScript 2.0

1. Actions

Pernyataan yang menginstruksikan file .swf untuk melakukan aksi

saat file tersebut dijalankan.

2. Boolean

Pernyataan yang berisi nilai true atau false

3. Class

Suatu tipe data untuk mendefinisikan suatu objek.

4. Konstanta

Merupakan suatu elemen yang tidak berubah. Seperti konstanta

untuk tombol tab pada keyboard selalu sama.

5. Constructors

Fungsi yang digunakan untuk mendefinisikan properti dan method

suatu kelas. Constructor merupakan suatu fungsi yang mempunyai

nama yang sama dengan nama dari kelas tersebut.

6. Tipe Data

19

Pendefinisian jenis informasi suatu variabel. Tipe data dalam

ActionScript antara lain : String, Number, Boolean, Object,

Movieclip, Function, null, dan undefined.

7. Events

Suatu pernyataan yang menginstruksikan file .swf untuk

melakukan aksi pada saat file tersebut tengah berjalan.

8. Event Handlers

Pernyataan khusus yang mengatur event.

9. Ekspresi

Suatu kombinasi dari simbol ActionScript yang mempunyai nilai.

Contoh : x + 2

10. Fungsi

Blok koding yang bersifat reusable dan dapat melewatkan

parameter dan mengembalikan suatu nilai.

11. Identifier

Nama yang mengindikasikan suatu variabel, property, objek,

fungsi, atau method. Suatu identifier diawali dengan karakter “_”

atau karakter “$”.

12. Instances

Suatu Objek dari class tertentu, setiap instance dari class

mengandung semua property dan method dari class tersebut.

13. Nama Instance

20

Nama yang unik dari instance movieclip dan button.

14. Methods

Fungsi yang merupakan bagian dari class.

15. Objek

Kumpulan properti dan method. Setiap objek mempunyai namanya

sendiri sebagai instance dari suatu class.

16. Operators

Istilah dari perhitungan nilai yang baru.

Contoh : Operator tambah (+)

17. Parameters

Penampung nilai yang dapat dapat dilewatkan ke dalam suatu

fungsi.

18. Target Paths

Hirarki nama instance movie clip, variabel dan objek dalam file

.swf yang digunakan untuk memberikan perintah pada suatu

movie clip atau mengambil atau memberi nilai pada suatu variabel.

19. Variables

Identifikasi yang menampung suatu niali dari berbagai macam tipe

data. Variabel dapat dibuat, diubah dan diperbaharui.

21

2.2.1.2. Syntax ActionScript 2.0

Seperti halnya bahasa pemrograman lainnya, ActionScript mempunyai

aturan syntax yang harus dipatuhi untuk mendapatkan script yang dapat di

dikompilasi dan dijalankan dengan benar.

Elemen-elemen yang perlu diperhatikan dalam ActionScript 2.0 antara

lain :

1. Case Sensitive

Karena ActionScript 2.0 bersifat CaseSensitive, variabel dengan

nama yang sama dapat menjadi variabel yang berbeda jika

penulisan namanya berbeda.

Contoh : Catur ≠ catur ≠ CATUR

Case Sensitive juga berlaku pada fungsi, class, method dan

keyword.

2. Dot Syntax

Dot/titik (.) digunakan untuk mengindikasikan properti atau

method suatu objek atau movieclip. Titik juga digunakan untuk

mengidentifikasikan target path ke suatu movieclip, variabel,

fungsi, atau objek.

3. Kurung Kurawal

Event handler dari ActionScript, definisi class dan juga fungsi

dikelompokkan dalam suatu blok dengan menggunakan kurung

kurawal.

22

4. Titik koma

Kalimat dalam ActionScript dipisahkan oleh titik koma.

5. Kurung

Digunakan untuk menempatkan parameter dari suatu fungsi.

6. Komentar

Komentar dalam ActionScript dibuat dengan menggunakan

tanda 2 garis miring (//) atau diawali dengan tanda /* dan

diakhiri dengan tanda */.

7. Kata Kunci

Kata yang secara default digunakan ActionScript untuk tujuan

tertentu, kata kunci tidak dapat digunakan sebagai nama

variabel, fungsi atau label nama.

2.3.ElectroServer 3

ElectroServer 3 adalah socket server yang diciptakan oleh Electrotank.

Walaupun ElectroServer 3 dapat digunakan untuk hampir semua aplikasi multi-

user, pada dasarnya ElectroServer 3 dibuat untuk Aplikasi game multiplayer dan

chat. Dengan demikian ElectroServer 3 memiliki fitur-fitur yang membuat

pembuatan aplikasi chat dan game multiplayer menjadi mudah.

ElectroServer 3 merupakan suatu aplikasi Java, yang artinya ElectroServer 3

dapat dijalankan oleh komputer yang dapat Menjalankan Java Runtime

Environment (JRE),atau dikenal juga dengan nama Java Virtual Machine. Sistem

Operasi yang mendukung JRE antara lain Windows 98/NT/ME/2000/XP,

23

Macintosh, Unix, Solaris dan Linux. Jadi dapat disimpulkan bahwa ElectroServer

3 dapat dijalankan hampir dimana saja.

2.3.1. Kelebihan ElectroServer 3

1. Sangat Stabil

ElectroServer 3 telah diuji dengan lebih dari 10.000 koneksi secara

bersamaan dan masih tetap berjalan dengan baik tidak seperti socket

server lain pada umumnya yang hanya mampu menampung beberapa

ratus koneksi.

2. Client – side API(Application Protocol Interface) yang baik

Telah tersedia protokol untuk koneksi dengan Flash, baik dengan

ActionScript 1.0 atau ActionScript 2.0.

3. Admin Client berbasis web yang baik

Didalam ElectroServer 3 telah disediakan Client yang dapat berlaku

sebagai Admin dalam sebuah aplikasi yang berbasis web yang dapat

mengkonfigurasi berbagai fungsi server, juga dapat digunakan untuk

melihat informasi real-time tentang CPU dan penggunaan memori.

4. Dapat dijalankan dimana saja

ElectroServer 3 dapat berjalan pada platform manapun yang

mendukung Java, antara lain Windows 98/NT/ME/2000/XP,

Macintosh, Unix, Solaris dan Linux. Jadi dapat disimpulkan bahwa

ElectroServer 3 dapat dijalankan hampir dimana saja.

24

2.3.2. Instalasi

Untuk dapat menginstal ElectroServer 3, sebelumnya dibutuhkan Java

Runtime Environment 1.4.2. Secara default ElectroServer 3 akan mengeset IP

address untuk web server pada alamat 127.0.0.1 pada port 8080 dan IP untuk

listener pada alamat 127.0.0.1 pada port 9875, alamat default ini hanya dapat

digunakan untuk pengetesan ElectroServer 3 pada komputer lokal, jika

ElectroServer ingin dijalankan dalam suatu jaringan, maka alamat tersebut harus

diubah pada alamat yang dapat dilihat oleh komputer lain.

25

BAB III

PERANCANGAN SISTEM

Pada bab ini akan dibahas tantang proses umum, perancangan antarmuka dan

perancangan proses dan contoh kasus.

3.1. Proses Umum

Proses secara umum yang terjadi pada aplikasi permainan catur ini, dapat

dilihat pada gambar 3.1.

Start

Scene Menu

Memilih Start

Memilih Credit

Memilih Help 3

2

1

no

no

yes

yes

yes

no

Gambar 3.1 Flowchart Umum

26

Pada saat permainan dieksekusi, maka akan akan muncul scene

menu yang terdiri dari tombol – tombol antara lain Start Game, Help,

Credit dan Exit. Bila user memilih tombol Exit, maka aplikasi permainan

ini akan berhenti, namun bila user memilih tombol lainnya selain tombol

Exit, maka aplikasi permainan akan menjalankan Scene lain sesuai dengan

fungsi dari tombol tersebut.

3.1.1. Menu Start Game

Menu Start Game adalah menu utama dalam aplikasi permainan catur ini,

karena di dalam menu inilah terjadi proses permainan antara user 1 melawan user

2. Menu Start Game ini memiliki 2 Sub menu dan 1 tombol. Proses Menu Start

Game dapat dilihat pada Gambar 3.2 berikut.

1

Scene GameSetting

Create Game

Join Game

Memilih Back Scene Menu

no

no

no

yes

yes

yes

1a

1b

Gambar 3.2 Flowchart Start Game

27

Setelah user memilih Menu Start Game pada Scene Menu, maka aplikasi

akan menampilkan scene Start game yang memiliki 1 tombol dan 2 sub menu

yaitu Create Game dan Join Game yang masing – masing akan mengeksekusi

scene lain sesuai dengan fungsinya. Jika user memilih tombol Back, maka

Aplikasi akan kembali ke Scene Menu.

3.1.1.1. Menu Create Game

Jika user memilih Menu Create Game maka aplikasi akan

menampilkan Scene Create Game, dan user akan memainkan buah catur yang

berwarna putih. Proses pada Scene Create Game ini dapat dilihat pada Gambar

3.3.

Nam a Gam e Sudah D iinput yes

1a

Scene Create Gam e

Scene Gam e Setting

M em ilih Back

no

1a1

Gambar 3.3 Flowchart Create Game

Pada Scene Create Game ini juga, user diharuskan menginputkan

nama dari game. Jika user memilih tombol back, maka aplikasi akan kembali ke

Scene Game Setting. Setelah user menginputkan nama game, kemudian aplikasi

28

permainan akan menampilkan Scene Menunggu Player. Proses Scene Menunggu

Player dapat dilihat pada gambar berikut.

Player Ditemukan

Scene Menunggu

Player

1a1

yes

no

1a2

Sudah X detik/Player ditemukan

yes

no

Memilih Cancel

no

Scene Create Game

Gambar 3.4 Flowchart Menunggu Player

Setelah User menginputkan nama game, maka aplikasi akan menunggu

adanya player lain (user kedua) agar proses permainan dapat dijalankan, jika

dalam jangka waktu tertentu client tidak juga ditemukan, atau belum ada user

kedua, maka user yang membuat game akan ditanya apakah user akan tetap

menunggu atau tidak, jika user memilih tidak, maka aplikasi permainan akan

kembali ke Scene Create Game, jika user memilih untuk tetap menunggu, maka

aplikasi permainan akan tetap menunggu user kedua. Jika user ditemukan maka

aplikasi permainan akan menampilkan Scene Player Ditemukan. Proses dari Scene

Player Ditemukan dapat dilihat pada gambar berikut.

29

G

Scene Player Ditemukan

1a2

Memilih Start

Memilih Cancel

Scene Create Game

no

yes

yesno

Gambar 3.5 Flowchart Player Ditemukan

Pada Scene Player Ditemukan ini, aplikasi permainan akan terus

menampilkan scene ini sebelum user memilih antara tombol Start atau Cancel,

jika user memilih tombol Start, maka aplikasi permainan akan memulai

permainan catur ( mengeksekusi Scene Game), namun jika user memilih Cancel,

maka aplikasi permainan akan kembali ke Scene Create Game.

3.1.1.2. Menu Join Game

Jika user memilih menu Join Game, maka user tersebut secara

otomatis akan menjadi player kedua dalam aplikasi permainan ini dan akan

memainkan buah catur berwarna hitam. Namun user hanya dapat menggunakan

menu ini jika sebelumnya sudah ada user yang membuat game dalam aplikasi

permainan ini, atau telah menyelesaikan proses Create Game. Proses menu Join

Game ini dapat dilihat pada gambar berikut.

30

Game Ditemukan Gyes Game Sudah Dipilih yes

no

1b

Scene Join Game

no

Memilih Game

Gambar 3.6 Flowchart Join Game

Setelah user memilih menu Join Game, aplikasi akan secara otomatis

memeriksa apakah sudah ada user yang menjadi player pertama dalam aplikasi

permainan ini, jika tidak ada, maka aplikasi ini akan menampilkan Scene

Peringatan selama beberapa detik, kemudian aplikasi permainan akan kembali ke

Scene Game Setting. Jika game ditemukan, maka user harus memilih game

dimana user tersebut akan bermain, karena dimungkinkan adanya lebih dari 1

game. Setelah user memilih game, maka aplikasi permainan akan memulai

permainan.

3.1.1.3. Proses Permainan

Proses permainan adalah proses utama dan terpenting di dalam aplikasi

permainan ini. Dalam proses permainan inilah kedua user bermain catur dan

berusaha untuk saling mengalahkan lawannya. Seperti yang telah dijelaskan

sebelumnya, user pertama akan memainkan buah catur berwarna putih dan user

kedua akan memainkan buah catur berwarna hitam. Proses permainan memiliki 3

sub proses, yaitu Konfirmasi Remis, Konfirmasi Menyerah dan Proses Ending

1. Scene Game

Proses permainan ini dapat dilihat pada gambar 3.7.

31

G

Scene Game

Pemain X, Giliran = APemain Y, Giliran = B

Giliran = 1

Gerakan Aktif

Gerakan Sah

Terjadi Skak

Scene Peringatan

Skak

Gerakan Tidak Aktif

Pemain lawan sudah melangkah

Gerakan Dibatalkan

C = AA = BB = C

yes

no

noyes

yes

no

no

yes

yes

Sudah X Detik yes

no

Pemain Melakukan Gerakan

G1

G2

A = 1B = 0C = 0

G3

no

Memilih Give Up

no

yes

no

Terjadi Skak Mat

Terjadi remis

no

yes

Memilih Draw Offer

no

yes G0

Timer Start

Timer Stop

G4

Gambar 3.7 Flowchart Permainan

32

Pada awal permainan aplikasi permainan akan mendeklarasikan 3 buah

variabel dengan tipe integer, yaitu A, B dan C, serta mengisi nilainya, yaitu A = 1,

B = 0 dan C = 0, dimana 3 buah variabel tersebut akan digunakan untuk mengatur

giliran user untuk melangkah. Kemudian aplikasi permainan akan menentukan

bahwa giliran pemain X adalah A dan giliran pemain Y adalah B.

Dalam Scene Game ini terdapat tombol 2 tombol, yaitu tombol Draw

Offer dan tombol Give Up, tombol Draw Offer adalah tombol untuk mengakhiri

permainan dalam keadaan seri atau ‘remis’, namun memilih tombol ini tidak

membuat permainan langsung berakhir dalam keadaan seri, tetapi user yang

memilih tombol ini memerlukan persetujuan pemain lawan untuk mengakhiri

permainan dalam keadaan seri, jika persetujuan pemain lawan tidak didapatkan,

maka permainan akan dilanjutkan kembali. Sedangkan tombol Give Up adalah

tombol untuk menghentikan permainan, pemain yang menekan tombol ini, secara

otomatis akan kalah dan permainan berakhir.

Setelah aplikasi menentukan giliran pemain, aplikasi akan memeriksa

apakah salah satu pemain memilih tombol Give Up, jika ya maka pemain tersebut

akan ditampilkan Scene Konfirmasi Menyerah. Jika tidak, maka aplikasi akan

memeriksa pemain mana yang memiliki giliran bernilai 1.

Pemain yang memiliki giliran bernilai 1 akan mendapat giliran untuk

menggerakkan buah caturnya, sedangkan pemain yang tidak memiliki nilai giliran

1, harus menunggu pemain lawannya selesai melakukan gerakan .

Scene Game ini memiliki timer untuk menghitung berapa lama waktu

yang dibutuhkan oleh pemain untuk berpikir sebelum melakukan gerakan. Timer

33

mulai menghitung pada saat gerakan diaktifkan dan berhenti pada saat pemain

selesai melangkah. Walaupun gerakan yang dilakukan oleh pemain tidak sah,

sehingga gerakan tersebut akan dibatalkan dengan mengembalikan buah catur

yang baru saja digerakkan ke posisi sebelumnya, timer tetap menghitung waktu

yang dihabiskan.

Setelah pemain melakukan gerakan, aplikasi permainan akan memeriksa

apakah gerakan yang dibuat sah atau tidak, jika gerakan tidak sah, maka gerakan

akan dibatalkan dan pemain harus melakukan gerakan lagi, jika gerakan sah, maka

aplikasi permainan akan memeriksa apakah terjadi ‘skak’, jika terjadi ‘skak’ maka

aplikasi permainan akan memeriksa apakah ‘skak’ yang terjadi adalah ‘skak mat’

atau bukan, jika terjadi ‘skak mat’, maka aplikasi akan masuk ke Scene Ending.

Jika ‘skak’ yang terjadi bukan ‘skak mat’, maka aplikasi akan memberikan

peringatan pada pemain yang terkena ‘skak’. Jika ‘skak’ tidak terjadi, aplikasi

permainan akan memeriksa, apakah terjadi ‘remis’, jika ya maka permainan akan

masuk ke scene Ending, jika tidak, permainan akan menukar nilai giliran jalan

kedua pemain.

Setelah menukar nilai giliran kedua pemain, aplikasi akan kemabali

memeriksa pemain mana yang mempunyai nilai giliran = 1, demikian seterusnya

sampai permainan berakhir.

2. Scene Konfirmasi Remis

Scene ini ditampilkan kepada lawan main dari pemain yang menekan tombol

Draw Offer. Dalam Scene ini pemain lawan diharuskan memilih apakah pemain

tersebut menerima penawaran untuk mengakhiri permainan dalam keadaan

34

‘remis’ atau tetap melanjutkan permainan. Jika pemain lawan memilih tombol yes,

maka permainan akan berakhir dalam keadaan seri, namun jika pemain lawan

memilih no, maka permainan akan dilanjutkan kembali.

Untuk lebih jelasnya dapat dilihat di Gambar 3.8 berikut.

G0

Memilih Tombol Yes

Scene Penawaran Remis di pc

pemain lawan

G2

no

yes

Scene Penolakan

Remis

G4

Gambar 3.8 Flowchart Konfirmasi Remis

3. Scene Konfirmasi Menyerah

Dalam Scene ini, user akan ditanyakan, apakah user akan menyerah, jika user

memilih yes, maka permainan akan berakhir, tetapi jika user memilih no, maka

permainan akan dilanjutkan kembali.

Untuk lebih jelasnya dapat dilihat di gambar 3.9

35

Memilih YesScene

Konfirmasi Menyerah

G1 Memlih Nono

Scene Ending

yes

no

G3

yes

Gambar 3.9 Flowchart Konfirmasi Menyerah

4. Scene Ending

Scene Ending ini menampilkan siapa pemenang permainan kali ini, atau

permainan berakhir seri(remis). Jika user sudah melihat, user dapat mengakhiri

Scene Ending ini dengan memilih OK.

Untuk lebih jelasnya dapat dilihat pada gambar 3.10

Scene Ending Scene MenuMemilih OK yes

no

G2

Gambar 3.10 Flowchart Scene Ending

3.1.2. Menu Help

Bila user memilih menu help, maka aplikasi permainan akan menampilkan

Scene Help, yang berisi peraturan dari permainan ini, Scene Help ini terdiri dari

beberapa halaman, user dapat melihat halaman berikut atau halaman sebelumnya

dengan memilih tombol yang telah disediakan.

36

Untuk lebih jelasnya, proses menu help dapat dilihat pada gambar 3.11

3

Scene HelpTampilkan

Halaman ke-“Page”

Halaman Berikut !=

NULL

Halaman Sebelum !=

NULL

Memilih Back

Tombol Next Aktif

Page =1

Tombol Previous Aktif

Memilih Next

Memilih Previous

Page = Page + 1

Page = Page - 1

Scene Menu

yes

yes

yes

no

no

yes

yes

no

no

no

Gambar 3.11 Flowchart Help

3.1.3. Menu Credit

Jika user memilih menu credit, maka aplikasi permainan akan

menampilkan Scene Credit, yang berisi tentang profil dari game dan game

developer.

Flowchart Scene Credit dapat dilihat pada gambar 3.12.

37

2

Scene Credits

Memilih Back Scene Menuyesno

Gambar 3.12 Flowchart Credit

3.2. Perancangan Antarmuka

3.2.1. Scene Menu

Pada saat awal aplikasi permainan dijalankan, maka akan muncul Scene

menu. Scene menu ini bertujuan untuk menyambut user dengan tampilan yang

menarik. Kemudian user dapat memilih menu yang tersedia dalam Scene menu.

Gambar 3.13 Scene Menu

38

3.2.2. Scene Setting

Scene Setting ini merupakan scene yang tampil jika user memilih menu

Start, Scene ini memiliki 2 sub Scene, yaitu Scene Create Game dan Scene Join

Game. Dalam scene ini user harus memilih apakah ia akan menjadi host atau

guest dalam permainan. Jika user memilih Create Game, maka user akan menjadi

Player pertama dalam permainan, tetapi jika user memilih Join Game, maka user

akan menjadi player kedua dalam permainan.

Gambar 3.14 Scene Setting

3.2.3. Scene Create Game

Scene ini akan muncul bila user memilih Create Game di Scene Setting.

Dalam Scene ini pemain harus memberi input nama pada game, kemudian pemain

akan menjadi player pertama pada game dengan nama yang baru saja diinputkan.

Gambar 3.15 Scene Create Game

39

3.2.4. Scene Menunggu Player

Scene ini muncul setelah user selesai menginputkan nama game di Scene

Create Game. Scene ini akan terus ditampilkan sampai jangka waktu tertentu, atau

sampai aplikasi permainan menemukan pemain kedua untuk memulai permainan.

Gambar 3.16 Scene Menunggu Player

3.2.5. Scene Player Ditemukan

Scene ini akan muncul jika aplikasi permainan menemukan pemain kedua,

jika user memilih tombol Cancel maka aplikasi permainan akan kembali ke Scene

Create Game, jika user memilih tombol start, maka aplikasi permainan akan

memulai permainan (masuk ke Scene Game).

Gambar 3.17 Scene Player Ditemukan

40

3.2.6. Scene Join Game

Scene ini akan muncul jika user memilih Join Game di Scene Setting, di

scene ini user yang menjadi Player kedua harus memilih salah satu dari game

yang ada.

Gambar 3.18 Scene Join Game

3.2.7. Scene Game

Scene Game akan muncul setelah user menyelesaikan setting permainan di

Scene Setting. Dalam Scene Game inilah kedua user bermain untuk saling

mengalahkan. Scene ini terbagi menjadi 6 elemen penting, yaitu :

1. Nama Pemain

2. Papan Catur

3. Tempat buah catur lawan yang sudah dimakan

4. Informasi kejadian

5. Tombol Penawaran Remis

6. Tombol Menyerah

41

Gambar 3.19 Scene Game

3.2.8. Scene Peringatan Skak

Scene Peringatan Skak muncul jika salah satu pemain terkena ‘skak’.

Gambar 3.20 Scene Peringatan Skak

3.2.9. Scene Penawaran Remis

Jika pemain memilih Draw Offer, maka aplikasi permainan akan

menampilkan Scene Penawaran Remis kepada pemain lawannya.

Gambar 3.21 Scene Penawaran Remis

42

3.2.10. Scene Penolakkan Remis

Scene Penolakkan Remis akan ditampilkan jika pemain lawan menolak

penawaran ‘remis’ yang diberikan.

Gambar 3.22 Scene Penolakkan Remis

3.2.11. Scene Konfirmasi Menyerah

Scene ini akan ditampilkan jika pemain memilih tombol Give Up. Dalam

scene ini pemain harus memilih, apakah pemain tersebut yakin akan menyerah,

jika memilih yes, maka permainan berakhir, tetapi jika memilih no, maka

permainan akan dilanjutkan kembali.

Gambar 3.23 Scene Konfirmasi Menyerah

3.2.12. Scene Ending

Scene Ending ditampilkan pada saat permainan berakhir, scene ini

memberituhukan kepada pemain status akhir dari permainan, siapa pemenangnya,

ataukah berakhir seri.

43

Gambar 3.24 Scene Ending

3.2.13. Scene Help

Dalam Scene Help ini, user dapat melihat peraturan dalam aplikasi

permainan ini.

Gambar 3.25 Scene Help

3.2.14. Scene Credit

Scene credit ini menampilkan tentang profil game dan profil pembuat

game.

Gambar 3.26 Scene Credit

44

BAB IV

IMPLEMENTASI SISTEM

Pada bab ini, penulis akan menjelaskan mengenai proses implementasi

dari sistem yang telah selesai dianalisis dan didesain agar siap untuk digunakan.

Antara lain akan dijelaskan mengenai pengaturan pada sederhana PC agar dapat

menjalankan aplikasi dengan baik. Selain itu juga akan dibahas mengenai lsiting

progam aplikasi maupun listing program ActionScript yang digunakan.

4.1. Pengaturan PC

Karena aplikasi ini merupakan aplikasi berbasis web, maka PC harus

terkoneksi dengan internet, namun penulis tidak akan membahas bagaimana

cara mengkoneksikan PC dengan internet, karena penulis menganggap itu

adalah hal yang umum. Selain itu untuk dapat menjalankan aplikasi ini, PC

juga harus memiliki Flash Player minimal versi 7 karena aplikasi ini dibuat

dengan Macromedia Flash MX 2004. Flash Player dapat didownload secara

gratis pada situs http://www.macromedia.com/go/getflashplayer. Kemudian

jika semua persiapan telah dilakukan, maka user dapat mengakses situs

dimana aplikasi ini berada. Penulis mengasumsikan bahwa user tidak akan

mengalami masalah dalam mendapatkan Flash Player, selain dengan adanya

kenyataan bahwa Flash Player dapat didownload secara gratis, hampir

semua jenis browser pada saat ini sudah memiliki kemampuan untuk

45

mendeteksi ada tidaknya Flash Player terinstal. Jika tidak masing-masing

browser akan memiliki caranya sendiri untuk mengatasi masalah tersebut.

Contohnya Opera yang langsung menanyakan user bahwa untuk melihat

halaman ini dibutuhkan Flash Player, apakah user ingin mendownload?

Gambar 4.1 Download Flash Player – Opera

Sedangkan Mozilla Firefox akan menampilkan bagian dari halaman web

yang membutuhkan Flash Player untuk dijalankan sebagai kotak kosong,

dengan tulisan yang mengatakan : klik disini untuk mendownload Plug-in

yang dibutuhkan.

46

Gambar 4.2 Download Flash Player – Mozilla Firefox

4.2. Tampilan Program Aplikasi Dan Potongan Listing Program

4.2.1. Menu Utama

Pada saat user memasuki situs pertama kali, maka user akan disambut

dengan animasi flash sederhana sebagai halaman pembuka, dan didalam halaman

tersebut terdapat 3 tombol yang berfungsi sebagai link untuk menuju ke sub-menu

yang tersedia, yaitu menu Start Game untuk memulai permainan catur, menu

Credit untuk melihat informasi tentang penulis, dan menu Help, dimana user bisa

mendapatkan informasi tentang aturan permainan catur dan informasi tentang

aplikasi ini. Tampilan halaman pembuka adalah sebagai berkut :

47

Gambar 4.3 Menu Utama

4.2.2. Menu Game

4.2.2.1. Koneksi ElectroServer

Aplikasi Game catur akan ditampilkan bila user memilih tombol Start

Game pada menu utama, pada saat aplikasi pertama kali berjalan, maka yang

pertama dilakukan adalah mengkoneksikan aplikasi dengan ElektroServer sebagai

socket server.

var serverSettings = new XML(); serverSettings.ignoreWhite = true; serverSettings.onLoad = function() { var children = this.firstChild.childNodes; for (var i=0;i<children.length;++i) { var name = children[i].nodeName var value = children[i].firstChild.nodeValue if (name == "IP") { ip = value; } else if (name == "Port") { port = Number(value); }

48

} System.security["loadPolicyFile"]("xmlsocket://"+ip+":"+port); } serverSettings.load("ServerSettings.xml"); this.onEnterFrame = function() { if (this.getBytesLoaded()/this.getBytesTotal() >=1 && getTimer() >= 1*1000) { delete this.onEnterFrame; gotoAndStop("Code"); } }

Potongan listing program di atas berfungsi untuk mempersiapkan koneksi antara

aplikasi dengan ElektroServer dengan cara membaca alamat IP dan Port yang

digunakan oleh ElektroServer yang terletak pada file ServerSettings.xml.

<ServerSettings> <IP>192.168.0.1</IP> <Port>9875</Port> </ServerSettings>

Listing Program di atas adalah merupakan isi dari file ServerSettings.xml yang

menyimpan alamat IP dan Port yang digunakan oleh ElektroServer. Isi dari file

ServerSettings.xml ini dapat diubah sesuai dengan alamat IP dan Port yang

digunakan oleh ElektroServer.

Setelah itu aplikasi akan mengkoneksikan diri dengan ElektroServer dengan

perintah

es.connect();

4.2.2.2. Login Game

Setelah koneksi berjalan dengan baik, aplikasi akan mengatur agar di

dalam ElektroServer, user akan terdaftar sebagai user dari aplikasi permainan

catur ini dan dalam permainan catur ini user akan dimasukkan dalam room utama,

yaitu Lobby.

49

var gameInfo:Object = new Object(); var es:ElectroServer = ElectroServer.getInstance(); es.setModeratorLabel(true, " [Mod]"); es.setDebug(false); function joinRoom() { var roomOb:Object = new Object(); roomOb.roomName = "Lobby"; roomOb.zone = "Chess Zone"; es.createRoom(roomOb); } es.roomJoined = function(Results, myRoom) { if (Results.success) { gotoAndStop("Chat"); } else { msg.text = Results.error; } };

Potongan dari listing program di atas adalah listing program yang menjalankan

operasi tersebut. Listing program diatas akan membuat suatu zone baru dalam

ElektroServer untuk menampung operasi aplikasi dengan nama Chess Zone.

Setelah itu user diharuskan memasukkan nama untuk login kedalam

aplikasi permainan catur ini.

Gambar 4.4 Scene Login

50

function loginFXN() { var username:String = username_txt.text; if (username.length>2 && username.length<15) { es.login(username); gotoAndStop("Waiting"); } } login_btn.onRelease = function() { if (username_txt.length > 2) { loginFXN(); } } function loginFXN() { var username:String = username_txt.text; if (username.length>2 && username.length<15) { es.login(username); gotoAndStop("Waiting"); } } login_btn.onRelease = function() { if (username_txt.length > 2) { loginFXN(); } }

Potongan Listing Program di atas akan memeriksa apakah username yang

diinputkan oleh user lebih dari 2 karakter dan kurang dari 15 karakter, jika tidak

maka aplikasi akan tetap menampilkan scene login sampai user menginputkan

username antara 3 sampai 14 karakter.

Jika username yang diinputkan sudah digunakan oleh user lain, maka

ElectroServer secara otomatis akan memberikan pesan bahwa username tersebut

telah digunakan.

51

Gambar 4.5 Pesan Username Telah Digunakan

4.2.2.3. Scene Chat

Setelah login berhasil, maka aplikasi akan menampilkan scene chat

dalam scene ini user dapat melihat daftar user yang sedang menjalankan aplikasi

ini, melihat daftar chat room dan game room yang dibuat oleh user lain,

melakukan chatting dengan user lain, baik untuk mencari lawan permainan

ataupun hanya sekedar chatting, di scene ini user juga dapat membuat room

sendiri untuk chatting, membuat room permainan sendiri dan mengirimkan pesan

pribadi yang hanya diterima oleh user yang dipilih. Scene chat ini terdiri dari

beberapa komponen antara lain :

a. User List

b. Chat Room List

52

c. Game Room List

d. Chat History

e. Chat Message Box

f. Room Info

g. User Info

h. New Room Button

i. New Game Button

Gambar 4.6 Scene Chat

4.2.2.3.1. User List

User list adalah daftar nama user yang sedang menjalankan aplikasi ini

dan berada di room yang sama.

function showUsers() { var userlist:Array = es.getUserList();

53

userListBox.dataProvider = userlist; }

Potongan listing program di atas akan mengambil daftar user yang

berada di Chess Zone dan menampilkannya di textbox User List.

user.text = username; Selection.setFocus(message); function cancel() { gotoAndStop(1); } function ok() { var msg = message.text; if (msg.length>0) { _parent.es.sendMessage("private", msg, [username]); gotoAndStop(1); } } function enterPressed() { ok(); }

Sedangkan potongan listing program di atas akan menampilkan popup clip private

yang akan muncul jika user mengklik ganda pada salah satu nama user yang

berada di user list, dengan munculnya popup clip private tersebut, user dapat

mengirimkan pesan pribadi yang hanya dapat dibaca oleh user yang dipilihnya

tersebut.

OK Cancel

Send to:

Message:

Send Private Message

Gambar 4.7 Popup clip private

54

4.2.2.3.2. Chat Room List

Chat Room List akan menampilkan semua room yang ada di dalam

Chess Zone.

function showRooms() { var roomlist = es.getRoomList(); RoomList = new Array(); var list = new Array(); var str = es.getZone().numUsers+" users playing chess"; users_playing.text = str; for (var i = 0; i<roomlist.length; ++i) { var room = roomlist[i]; var protected; if (!room.Description.attributes.isRoom) { if (room.attributes.IsPasswordProtected) { protected = " [locked] "; } else { protected = ""; } var label = room.Name.value+protected+" ("+room.attributes.Users+")"; var ob = new Object(); ob.label = label; ob.data = room; list.push(ob); } else { RoomList.push(room); } } roomListBox.setDataProvider(list); showRooms(); }

Potongan listing program di atas akan mengambil data room yang tersimpan di

dalam ElektroServer dan menampilkannya di Chat Room List, listing program di

atas juga akan memeriksa apakah Room yang ada di Chat Room List diproteksi

dengan password. Jika ya, maka nama room akan ditambahkan dengan attribut

[locked], contoh : nama room : chess, maka nama yang tertulis di dalam Chat

Room List adalah chess[locked], dan untuk dapat mengakses room tersebut, user

harus mengetahui password dari room tersebut. Jika seorang user ingin

mengakses suatu room tertentu, maka ia hanya perlu mengklik ganda pada room

yang dikehendakinya, jika room tersebut tidak diproteksi oleh password, maka

55

akan muncul popup clip joinroom1, yang hanya mengkonfirmasi room yang

dipilih user.

OK Cancel

Join Room

Gambar 4.8 Popup Clip Join Room 1

var name:String; name = roomOb.Name.value; roomName.text = name; function ok() { _parent.es.joinRoom(name); delete roomOb; delete name; gotoAndStop(1); } function cancel() { delete roomOb; delete name; gotoAndStop(1); } function enterPressed() { ok(); }

Potongan Listing Program di atas merupakan actionscript yang mengatur popup

clip join room 1, jika tombol ok di klik, maka maka clip ini akan menjalankan

fungsi ok( ), dan user akan langsung masuk kedalam room yang dipilihnya, jika

tombol cancel di klik, maka user akan kembali ke scene sebelumnya, jika user

menekan tombol enter pada keyboard, maka fungsi ok( ) akan dijalankan, sama

seperti user mengklik tombol ok.

Jika room yang dipilih oleh user diproteksi oleh password, maka akan

muncul popup clip join room 2 yang akan mengkonfirmasi room yang akan

diakses oleh user dan sekaligus meminta validasi password.

56

OK Cancel

Enter password:

Join Room

Gambar 4.9 Popup Clip Join Room 2

name = roomOb.Name.value; Selection.setFocus(pass); roomName.text = name; function ok() { _parent.es.joinRoom(name, pass.text); delete roomOb; delete name; gotoAndStop(1); } function cancel() { delete roomOb; delete name; gotoAndStop(1); } function enterPressed() { ok(); }

Potongan listing program di atas adalah actionscript yang mengatur popup clip

join room 2 jika user mengklik tombol ok atau menekan tombol enter pada

keyboard, jika password benar, maka user akan langsung masuk ke dalam room

yang dipilihnya, namun jika password salah maka akan ditampilkan popup clip

errorr. Jika user mengklik tombol cancel, maka user akan kembali ke tampilan

sebelumnya.

4.2.2.3.3. Game Room List

Game Room List adalah text box didalam scene chat yang

menampilkan daftar permainan yang dibuat oleh user.

57

function showGameRooms() { var width = gameClipHolder.content.game._width+10; var height = gameClipHolder.content.game._height+10; gameClipList = new Array(); for (var i = 0; i<gameRoomList.length; ++i) { var room = gameRoomList[i]; var name = "game"+i; var clip = gameClipHolder.content.game.duplicateMovieClip(name, i+1); var gameName:String = room.Description.attributes.name; clip.name.text = gameName;

Potongan listing program di atas akan menampilkan game room yang telah dibuat

oleh user, dengan menampilkan sebuah gambar untuk tiap-tiap game roomnya, di

dalam gambar juga tertedapat nama game room. Di dalam aplikasi ini, gambar

tersebut dinamai gameclipholder.

Gambar 4.10 Gameclipholder

if (room.Description.attributes.playersArrived == 1) { if (col == "white") { clip.white_clip._visible = true; clip.black_clip._visible = false; } else { clip.white_clip._visible = false; clip.black_clip._visible = true; } } else if (room.Description.attributes.playersArrived == 2) { clip.white_clip._visible = true; clip.black_clip._visible = true; }

Potongan listing program diatas adalah actionscript yang mengatur tampilan

gameclipholder jika game room tersebut baru memiliki satu pemain yang

memainkan buah catur berwarna putih, maka di dalam gameclipholder akan

ditampilkan gambar bidak berwarna putih, secara otomatis jika ada user yang

ingin mengakses permainan tersebut, maka ia akan memainkan buah catur

58

berwarna hitam, demikian juga sebaliknya, namun jika permainan, telah lengkap

memiliki 2 orang pemain, makan gameclipholder yang ditampilkan akan menjadi

seperti pada Gambar 4.10.

Gambar 4.11 Satu pemain putih

Gambar 4.12 Satu pemain hitam

function showGameInfo(show, room) { if (!show) { gameInfo_txt.text = ""; } else { var msg:String = ""; var atts = room.Description.attributes; msg += "<b>"+atts.name+"</b>"+newline; msg += atts.username+newline if (atts.allowSpectators) { msg += "Spectators allowed"+newline; } else { msg += "No spectators"+newline; } if (atts.timeGame) { msg += atts.time_minutes+" min, "+atts.time_seconds+" sec"+newline; if (atts.time_increment>0) { msg += "Time inc "+atts.time_increment+" sec"+newline; } } else { msg += "Not timed"+newline; } gameInfo_txt.text = msg; } }

Potongan listing program di atas adalah actionscript yang akan menampilkan

informasi tentang game room yang terdapat di dalam Game Room List, informasi

59

tersebut antara lain yaitu user yang membuat Game Room, status waktu

permainan dan status penonton.

function rolledOver(room) { showGameInfo(true, room); } function rolledOut() { showGameInfo(false); }

Dengan adanya listing program di atas, maka status informasi tentang Game

Room akan ditampilkan jika GameClipHolder di highlight oleh cursor.

Jika seorang user ingin bergabung dengan suatu Game Room, maka ia hanya

harus mengklik pada GameClipHolder dari Game Room yang dikehendakinya,

setelah user tersebut mengklik GameClipHolder tersebut, maka secara otomatis

aplikasi akan menampilkan popupclip join game.

Gambar 4.13 Popup clip Join Game tanpa password

Gambar 4.14 Popup clip Join Game dengan password

60

Di dalam popupclip join game user dapat memilih apakah di dalam game room

tersebut ia ingin menjadi player (pemain) atau spectator (penonton), jika ia

memilih mejadi penonton, maka ia hanya dapat menonton permainan dan

memberikan komentar-komentar dalam permainan tersebut.

if (IsPasswordProtected != true) { pword_clip._visible = false; } function cancel() { gotoAndStop(1); } function ok() { _parent.joiningGame = true; if (IsPasswordProtected) { var password = pword_clip.password.text; } else { var password = ""; } var name = _parent.pendingGame.Name.value _parent.es.joinGame(name, password, joinType); } roomName.text = _parent.pendingGame.Description.attributes.name if (!_parent.pendingGame.Description.attributes.allowSpectators) { spec._visible = false; } var radioListener:Object = new Object(); radioListener.click = function(evt:Object) { joinType = evt.target.selection.data; }; radioGroup.addEventListener("click", radioListener); if (gameFull) { joinType = "spectator"; player_radio.enabled = false; player_radio.selected = false; spectator_radio.selected = true; } else { joinType = "player"; } if (!withinBounds) { joinType = "spectator"; player_radio.enabled = false; player_radio.selected = false; spectator_radio.selected = true; } function enterPressed() { ok(); }

Potongan listing program diatas akan menentukan pengaturan pada popupclip join

game. Jika Game Room diberikan password oleh user pembuatnya, maka di dalam

popupclip join game akan tersedia textbox untuk menginput password seperti pada

61

gambar 4.13, namun jika password tidak diberikan, maka dalam popupclip join

game tidak akan ada textbox tersebut seperti pada gambar 4.12. Jika didalam game

room telah terdapat 2 orang pemain, dan Game Rom tersebut mengijinkan

spectator, maka user hanya dapat bergabung sebagai spectator, dan pilihan untuk

bergabung sebagai pemain tidak akan dapat dipilih. Jika di dalam Game Room

telah terdapat 2 orang pemain dan Game Room tidak mengijinkan spectator, maka

akan ditampilkan pesan bahwa user tidak dapat bergabung dengan Game Room

tersebut.

if (room.Description.attributes.allowSpectators == false) { popItUp = false; showPopUp("error", "This game is full and does not

allow spectators.");

Potongan Listing program di atas adalah actionscript yang menampilkan pesan

jika di dalam Game Room telah terdapat 2 orang pemain dan Game Room tidak

mengijinkan spectator.

4.2.2.3.4. Chat History

Chat History adalah sebuah textbox yang akan menampilkan seluruh

pesan yang dikirimkan antar user, baik pesan itu bersifat public atau private. Jika

suatu pesan bersifat public, maka pesan tersebut akan ditampilkan pada textbox

semua user, namun jika pesan bersifat private, maka pesan hanya akan

ditampilkan pada textbox user tujuan.

62

Gambar 4.15 Chat History

es.messageReceived = function(type:String, message:String, from:String) { if (type == "public") { chatHistory += from+": "+message+newline; } else if (type == "private") { chatHistory += from+"[private]: "+message+newline; } chatBox.text = chatHistory; chatBox.vPosition = chatBox.maxVPosition; };

Potongan listing program di atas akan mengambil pesan yang dikirimkan oleh

user melalui ElectroServer, jika pesan bersifat private, setelah nama pengirim

pesan akan diberi text [private], seperti pada gambar 4.15.

4.2.2.3.5. Chat Message Box

Chat Message Box adalah sebuah textbox dimana user mengetikkan

pesan yang akan dikirimkan. Pesan akan dikirimkan melalui ElectroServer.

Semua pesan yang dikirimkan melalui Chat Message Box secara otomatis akan

bersifat public. Pesan akan terkirim setelah user mengklik tombol send di sebelah

Chat Message Box.

Gambar 4.16 Chat Message Box

63

function sendClicked() { var msg:String = msgBox.text; if (msg.length>0) { es.sendMessage("public", msg); msgBox.text = ""; } }

Potongan listing program di atas akan mengidentifikasikan pesan sebagai pesan

yang bersifat public, kemudian mengirimkan pesan tersebut ke ElectroServer

untuk kemudian dibaca oleh user lain.

4.2.2.3.6. Room Info

Room info adalah pesan berupa text yang terletak di atas Chat History

yang menampilkan informasi tentang Chat Room dimana user berada, seperti pada

gambar 4.15.

function setRoomName() { var roomName = es.getRoom().Name.value; current_room_txt.text = "You are chatting in: "+roomName; }

Potongan listing program diatas akan mengambil nama Chat Room tempat user

berada dari ElectroServer, kemudian akan menampilkannya di Room Info.

4.2.2.3.7. User Info

User info adalah pesan berupa text yang terletak di atas Game Room

List yang akan menampilkan jumlah user yang sedang menjalankan aplikasi ini.

var str = es.getZone().numUsers+" users playing chess";

Potongan listing program di atas akan mengambil jumlah user yang berada di

dalam Chess Zone untuk ditampilkan pada User Info.

4.2.2.3.8. New Room Button

New Room Button adalah sebuah tombol yang digunakan user untuk

membuat Chat Room baru.

64

Key.addListener(keyListener); newRoom_btn.onRelease = function() { showPopUp("New Room"); };

Potongan listing program diatas akan menampilkan popup clip new room. Di

popup clip ini, user harus menginputkan nama dari room yang akan dibuatnya,

dan jika ingin, user dapat juga memberikan password pada room tersebut, namun

penginputan password bersifat optional.

Gambar 4.17 Popup clip new room

Popup clip New Room memiliki actionscript sebagai berikut.

Selection.setFocus(roomName); function makeRoom() { var roomOb:Object = new Object(); roomOb.roomName = roomName.text; roomOb.password = pass.text; _parent.es.createRoom(roomOb); } function cancel() { gotoAndStop(1); } function ok() { if (roomName.text.length>3) { makeRoom(); gotoAndStop(1); } } function enterPressed() { ok(); }

ActionScript di atas akan membuat Chat Room baru di dalam ElectroServer jika

nama room yang diinputkan user memenuhi syarat, yaitu lebih dari 3 karakter

pada saat user mengklik tombol ok atau menekan tombol enter pada keyboard.

65

4.2.2.3.9. New Game Button

New Game Button adalah tombol yang berfungsi untuk membuat

Game Room baru. Pada saat user mengklik New Game Button, maka ActionScript

berikut akan menampilkan Popup clip New Game yang mengijinkan user untuk

mengkonfigurasi Game Room-nya.

newGame_btn.onRelease = function() { showPopUp("New Game"); };

Gambar 4.18 Popup clip new room

Selection.setFocus(roomName); var allowSpectators = true; var timeGame = true; var time_minutes = 5; var time_seconds = 0; var time_increment = 0; var chosenColor = "white"; Selection.setFocus(roomName);

Potongan listing program di atas adalah actionscript yang mengatur kondisi

default konfigurasi permainan, kondisi default Game Room adalah Game Room

66

mengijinkan spectator, pemain menggunakan buah catur berwarna putih, dan

permainan diberi waktu 5 menit.

function ok() { if (roomName.text.length>1) { var gameRoomOb:Object = new Object(); gameRoomOb.roomName = roomName.text; gameRoomOb.password = pass.text; gameRoomOb.attributes = new Object(); gameRoomOb.attributes.name = roomName.text; gameRoomOb.attributes.numPlayers = 2; gameRoomOb.attributes.playersArrived = 1; gameRoomOb.attributes.allowSpectators = allowSpectators; gameRoomOb.attributes.timeGame = timeGame; gameRoomOb.attributes.time_minutes = time_minutes; gameRoomOb.attributes.time_seconds = time_seconds; gameRoomOb.attributes.time_increment = time_increment; gameRoomOb.attributes.master_color = chosenColor; gameRoomOb.attributes.username = parent.es.getUser().Name.value; _root.max_min = time_minutes; _root.max_sec = time_seconds; _root.time_inc = time_increment; _root.time_game = timeGame; _root.master_color = chosenColor; _parent.es.createGameRoom(gameRoomOb); _parent.joiningGame = true; gotoAndStop(1); }

Potongan listing program di atas adalah actionscript yang berupa fungsi yang

akan mengambil konfigurasi dari Game Room yang dibuat oleh user, kemudian

konfigurasi tersebut akan dikirimkan ke ElectroServer lalu ElectroServer akan

membuat Game Room baru sesuai dengan konfigurasi tersebut. Fungsi ini akan

dieksekusi pada saat user mengklik tombol OK.

function cancel() { gotoAndStop(1); }

Potongan listing program di atas akan mengembalikan tampilan ke scene

sebelumnya jika user mengklik tombol cancel.

67

4.2.2.4. Scene Game

Scene game merupakan scene utama dari aplikasi ini, scene ini adalah

scene dimana user bermain catur dan sekaligus melakukan chatting dengan user

lainnya. Komponen utama dari scene game ini adalah Chess Board, dan selain

Chess Board, scene game ini juga memiliki beberapa komponen yang berguna

sebagai pelengkap permainan, antara lain :

a. Time Box

b. Move History

c. Chat History

d. Chat Message Box

e. Spectator List

f. Player Info

g. Resign Button

h. Draw Button

i. Rematch Button

j. Lobby Button

68

Gambar 4.19 Scene Game

4.2.2.4.1. Chess Board

Secara garis besar chess board terdiri dari actionscript yang mengatur

jalannya permainan, seperti gerakan buah catur. Sesuai dengan peraturan catur

yang ada, maka pemain yang memiliki giliran jalan pertama adalah pemain

dengan buah catur berwarna putih. Tampilan pada kedua orang pemain memiliki

sedikit perbedaan, yaitu setiap pemain akan melihat bahwa buah catur yang ia

miliki akan berada di bagian bawah chess board, jadi pemain dengan buah catur

berwarna putih akan melihat tampilan seperti pada gambar 4.19, sedangkan

pemain dengan buah catur berwarna hitam akan melihat tampilan seperti pada

gambar 4.20

69

Gambar 4.20 Scene Game 2

function placePiece(id:String, x:Number, y:Number) { var clip = board_mc["piece"+id]; if (boardReverse) { x = 7-x; y = 7-y; } }

Potongan listing program di atas adalah actionscript yang akan membalik

peletakan buah catur. Didalam clip Chees board ini juga terdapat actionscript

untuk mengatur gerakan buah catur, sehingga user yang bermain catur tidak dapat

meletakkan buah caturnya secara sembarangan. Setiap gerakan yang dibuat oleh

user harus sesuai dengan peraturan catur yang berlaku. Jika user meletakkan buah

caturnya secara sembarangan, misalnya menjalankan kuda secara horisontal, maka

gerakan akan dibatalkan dan kuda tersebut kembali ke posisi sebelumnya.

70

if (type == "pawn") { var firstMove:Boolean = chessPiece.isFirstMove; var sign:Number; if (color == "white") { sign = 1; } else if (color == "black") { sign = -1; } var next_y:Number = start_y+sign; var nextTile:Tile = getTile(start_x, next_y); if (start_x == end_x && (end_y-start_y == sign*1 || (end_y-start_y == sign*2 && firstMove && !nextTile.isFilled)) && !containsPiece) { returnVal = true; } else if (Math.abs(start_x-end_x) == 1 && end_y-start_y == sign*1 && containsEnemy) { returnVal = true; if (returnVal && ((color == "white" && end_y == 7) || (color == "black" && end_y == 0))) { promotePawn = true; }

Potongan listing program di atas adalah actionscript yang mengatur gerakan

bidak, gerakan bidak adalah satu langkah lurus kedepan, namun jika bidak belum

pernah bergerak, bidak dapat maju 2 langkah, dengan catatan tidak ada buah catur

lawan yang menghalangi. Bidak hanya dapat bergerak 1 langkah diagonal pada

saat sedang memakan buah catur lawan. Jika bidak mencapai ujung dari papan

permainan, bidak mendapat promosi. Pada saat bidak mendapat promosi, maka

akan ditampilkan popup clip promotion, dimana user dapat memilih buah catur

yang akan ditukar dengan bidak tersebut.

Select a piece.

Gambar 4.21 Popup clip promotion

71

function clicked() { var newPiece:String; if (this == button1) { newPiece = "rook"; } else if (this == button2) { newPiece = "bishop"; } else if (this == button3) { newPiece = "knight"; } else if (this == button4) { newPiece = "queen"; } _parent.pieceSelected(newPiece); } button1.onRelease = clicked; button2.onRelease = clicked; button3.onRelease = clicked; button4.onRelease = clicked;

Potongan actionscript di atas adalah actionscript yang mengoperasikan popup clip

promosi. Bidak catur akan ditukar sesuai dengan pilihan user, jika user memilih

tombol satu, maka bidak akan ditukar dengan benteng, tombol dua dengan gajah,

tombol tiga dengan kuda dan tombol 4 dengan ratu.

var id:String = ob.id; var newPiece:String = ob.promotionPiece; var col:String = ob.color; board_mc["piece"+id].gotoAndStop(col+" "+newPiece);

Potongan actionscript diatas akan menukar bidak catur yang mendapat promosi

dengan buah catur pilihan pemain.

else if (type == "king") { var firstMove:Boolean = chessPiece.isFirstMove; if ((Math.abs(start_y-end_y) == 1 && start_x-end_x == 0) || (Math.abs(start_x-end_x) == 1 && (Math.abs(start_y-end_y) == 1 || start_y-end_y == 0))) { if (!containsSameColor) { returnVal = true; } } else if (firstMove && start_y == end_y) { if (end_x == 1) { var rookTile:Tile = getTile(0, start_y); var rook:ChessPiece = rookTile.getPiece(); var tile1:Tile = getTile(2, start_y); var tile2:Tile = getTile(1, start_y); var tileCondition:Boolean; if (color == "white") { tileCondition = !tile1.isFilled && !(tile1.isBlackHot && tile1.pawnCheck("black")) && !tile2.isFilled && !(tile2.isBlackHot && tile2.pawnCheck("black")); } else if (color == "black") {

72

tileCondition = !tile1.isFilled && !(tile1.isWhiteHot && tile1.pawnCheck("white")) && !tile2.isFilled && !(tile2.isWhiteHot && tile2.pawnCheck("white")); } if (rook.isFirstMove && tileCondition) { castling = true; var rook_dest:Tile = getTile(2, start_y); castlingInfo = [[starting_tile, ending_tile], [rookTile, rook_dest]]; returnVal = true; } } else if (end_x == 5) { var rookTile:Tile = getTile(7, start_y); var rook:ChessPiece = rookTile.getPiece(); var tile1:Tile = getTile(6, start_y); var tile2:Tile = getTile(5, start_y); var tileCondition:Boolean; if (color == "white") { tileCondition = !tile1.isFilled && !(tile1.isBlackHot && tile1.pawnCheck("black")) && !tile2.isFilled && !(tile2.isBlackHot && tile1.pawnCheck("black")); } else if (color == "black") { tileCondition = !tile1.isFilled && !(tile1.isWhiteHot && tile1.pawnCheck("white")) && !tile2.isFilled && !(tile2.isWhiteHot && tile2.pawnCheck("white")); } if (rook.isFirstMove && tileCondition) { castling = true; var rook_dest:Tile = getTile(4, start_y); castlingInfo = [[starting_tile, ending_tile], [rookTile, rook_dest]]; returnVal = true; } } }

Potongan listing program diatas adalah actionscript yang mengatur gerakan raja.

Raja dapat bergerak secara bebas baik secara vertikal, horisontal , maupun

diagonal, namun hanya sebanyak satu langkah. Sebelum raja bergerak, maka akan

dilakukan pengecekan terlebih dahulu, apakah ditempat raja akan bergerak, raja

akan terkena skak,dan tidak ada buah catur teman. Jika ya, maka raja tidak dapat

bergerak ke tempat tersebut. Selain gerakan umum, raja juga memiliki satu

gerakan khusus, yaitu blokir, sebelum melakukan blokir, listing proram akan

memeriksa apakah raja dan benteng yang akan melakukan blokir belum pernah

bergerak dan tidak ada buah catur diantara raja dan benteng yang akan melakukan

73

blokir, dan jalur blokir tidak ada yang terancam oleh buah catur lawan. Jika semua

syarat tersebut terpenuhi, maka raja dapat melakukan blokir.

else if (type == "knight") { if ((Math.abs(start_x-end_x) == 1 && Math.abs(start_y-end_y) == 2) || (Math.abs(start_x-end_x) == 2 && Math.abs(start_y-end_y) == 1)) { if (!c_ntainsSameColor) { returnVal = true; }

Potongan listing program diatas akan mengatur jalannya buah catur kuda. Kuda

bergerak 2 langkah horisontal, kemudian 1 langkah vertikal, atau 2 langkah

vertikal kemudian 1 langkah horisontal, gerakan kuda biasa dikenal dengan

gerakan huruf “L”. Kuda dapat bergerak bebas walaupun dihalangi oleh buah

catur lain, selama tempat dimana kuda akan bergerak tidak ada buah catur dengan

warna yang sama.

if (start_x == end_x && hor_vert) { var sign:Number; if (end_y-start_y>0) { sign = 1; } else { sign = -1; } for (var i = start_y+sign; i-end_y != sign; i += sign) { var currTile:Tile = getTile(start_x, i); var currPiece:ChessPiece = currTile.getPiece(); var filled:Boolean = currTile.isFilled; if (filled && i != end_y) { break; } else if (filled && i == end_y && currPiece.getColor() != color) { returnVal = true; break; } else if (i == end_y && !filled) { returnVal = true; } } } else if (start_y == end_y && hor_vert) { //horizontal only move var sign:Number; if (end_x-start_x>0) { sign = 1; } else { sign = -1; } for (var i = start_x+sign; i-end_x != sign; i += sign) { var currTile:Tile = getTile(i, start_y); var currPiece:ChessPiece = currTile.getPiece(); var filled:Boolean = currTile.isFilled;

74

if (filled && i != end_x) { break; } else if (filled && i == end_x && currPiece.getColor() != color) { returnVal = true; break; } else if (i == end_x && !filled) { returnVal = true; } }

Potongan Listing Program diatas adalah fungsi hor_vert yang berfungsi untuk

mengatur gerakan benteng. Benteng bergerak secara horisontal atau vertikal

dengan jumlah langkah yang tidak terbatas, selama tempat tujuannya tidak

dihalangi baik oleh buah catur lawan ataupun kawan. Benteng tidak dapat

bergerak ditempat dimana terdapat buah catur kawan.

else if (Math.abs(start_y-end_y) == Math.abs(start_x-end_x) && diag) { var sign_x:Number; var sign_y:Number; if (end_x-start_x>0) { sign_x = 1; } else { sign_x = -1; } if (end_y-start_y>0) { sign_y = 1; } else { sign_y = -1; } var j:Number = start_y+sign_y; for (var i = start_x+sign_x; i-end_x != sign_x; i += sign_x) { var currTile:Tile = getTile(i, j); var currPiece:ChessPiece = currTile.getPiece(); var filled:Boolean = currTile.isFilled; if (filled && i != end_x) { break; } else if (filled && i == end_x && currPiece.getColor() != color) { returnVal = true; break; } else if (i == end_x && !filled) { returnVal = true; } j += sign_y; }

75

Potongan Listing Program diatas adalah fungsi diag yang berfungsi untuk

mengatur gerakan gajah. Gajah bergerak secara diagonal dengan jumlah langkah

yang tidak terbatas, selama tempat tujuannya tidak dihalangi baik oleh buah catur

lawan ataupun kawan. Gajah tidak dapat bergerak ditempat dimana terdapat buah

catur kawan.

Gerakan ratu adalah merupakan gabungan dari gerakan benteng dan gajah,

maka untuk fungsi gerakan ratu aplikasi akan menggunakan fungsi hor_vert dan

fungsi diag.

else if (type == "queen" || type == "rook" || type == "bishop") { var hor_vert:Boolean = false; var diag:Boolean = false; if (type == "queen") { hor_vert = true; diag = true; } else if (type == "rook") { hor_vert = true; } else if (type == "bishop") { diag = true; }

Potongan listing program di atas adalah potongan listing yang mengatur jalannya

ratu, gajah dan benteng, jika buah catur yang dijalankan adalah benteng, maka

aplikasi akan mengeset nilai fungsi hor_vert = true , jika buah catur yang

dijalankan adalah gajah, maka aplikasi akan mengeset nilai fungsi diag = true ,

jika buah catur yang dijalankan adalah ratu, maka aplikasi akan mengeset nilai

fungsi hor_vert = true dan diag = true.

4.2.2.4.2. Timer Box & Player Info

Timer Box adalah suatu movie clip yang menampilkan aturan waktu

dalam permainan catur ini, aturan waktu yang ditampilkan sesuai dengan

konfigurasi user pada saat membuat new game room. Timer box terdiri dari 4

76

komponen, yaitu 2 timer, satu untuk masing masing pemain, dan 2 tombol, satu

untuk masing-masing pemain. Timer dan tombol milik masing-masing pemain

ditandai dengan player info di tiap-tiap timer, player info memberikan informasi

tentang buah catur berwarna apa yang dimainkan oleh user dan nama user.

Gambar 4.22 Timer Box

Didalam timerbox terdapat beberapa pengaturan waktu, antara lain

waktu awal, penambahan waktu dan pengurangan waktu. Waktu awal dan

penambahan waktu dapat dikonfigurasi oleh user, sedangkan waktu akan

berkurang secara otomatis sesuai dengan giliran jalan pemain. Jika konfigurasi

default belum diubah, maka masing-masing pemain akan memiliki waktu awal 5

menit yang akan berkurang pada saat pemain tersebut mendapat giliran jalan, dan

pengurangan waktu tersebut akan berhenti setelah pemain melakukan sebuah

gerakan legal yang membuat giliran jalan berpindah ke pemain lawannya dan

secara otomatis waktu dari pemain lawannya akan mulai berkurang sampai ia

melakukan sebuah gerakan legal.

Jika konfigurasi default belum diubah, maka dalam permainan tidak

ada penambahan waktu. User dapat mengubah konfigurasi penambahan waktu /

time increment ini. Dengan adanya penambahan waktu, maka setiap kali seorang

pemain melakukan gerakan, maka jumlah waktu yang dimilikinya akan

ditambahkan sesuai dengan nilai penambahan waktu.

77

Pada saat pemain mendapat giliran jalan, maka tombol timerbox milik

pemain tersebut akan berada diatas, dan tombol pemain yang sedang menunggu

giliran jalan akan tertekan ke bawah. Pada saat giliran jalan berubah, maka begitu

juga dengan tombol timerbox masing-masing pemain.

function timerBoxRequest() { timerBox.setTimeParameters(_root.max_min, _root.max_sec, _root.time_inc); timerBox.setMyColor(myColor); } function startGame() { //After both players have arrived and player 1 has pressed the start button, start the game if (myColor == "black") { timerBox.startCounting("white"); } else { sendNames(); } }

Potongan listing program di atas akan memulai perhitungan waktu dan akan

mengatur tombol pada timerbox sesuai dengan giliran pemain.

function startCounting(which) { if (_root.time_game) { start_time = getTimer(); counting = true; if (which == "white") { currentColor = white; white_plunger.gotoAndStop(2); } else if (which == "black") { currentColor = black; black_plunger.gotoAndStop(2); } render(); } } function stopCounting(increment_it) { if (counting) { counting = false; if (currentColor.color == myColor && increment_it) { currentColor.seconds += inc; } currentColor.seconds = render(); white_plunger.gotoAndStop(1); black_plunger.gotoAndStop(1); } }

78

Potongan listing program di atas berfungsi untuk memulai penghitungan waktu,

menghentikan penghitungan waktu dan melakukan penambahan waktu sesuai

dengan giliran jalan. Potongan listing program diatas juga akan mengubah tombol

pada timerbox sesuai dengan giliran jalan.

4.2.2.4.3. Move History Box

Move history adalah sebuah textbox yang mencatat koordinat setiap

gerakan buah catur yang dibuat oleh user.

Gambar 4.23 Move History Box

moveOb.action = "move"; moveOb.x1 = starting_tile.getColumn(); moveOb.y1 = starting_tile.getRow(); moveOb.x2 = ending_tile.getColumn(); moveOb.y2 = ending_tile.getRow(); var resultOb:Object = chess.move(starting_tile, ending_tile); history_box.dataProvider = resultOb.history; historyBox.text = chess.getHistory();

Potongan listing program di atas akan mengambil koordinat gerakan yang dibuat

oleh kedua pemain, kemudian menampilkannya di move history box.

4.2.2.4.4. Chat History

Sama seperti pada scene chat, chat history pada scene game juga

merupakan sebuah textbox yang akan menampilkan seluruh pesan yang

dikirimkan antar user, baik pesan itu bersifat public atau private. Jika suatu pesan

79

bersifat public, maka pesan tersebut akan ditampilkan pada textbox semua user,

namun jika pesan bersifat private, maka pesan hanya akan ditampilkan pada

textbox user tujuan.

Gambar 4.24 Chat History

Key.addListener(keyListener); es.messageReceived = function(type:String, message:String, from:String) { if (type == "public") { chatHistory += from+": "+message+newline; } else if (type == "private") { chatHistory += from+"[private]: "+message+newline; } chatBox.text = chatHistory; chatBox.vPosition = chatBox.maxVPosition; };

Potongan listing program di atas akan mengambil pesan yang dikirimkan oleh

user melalui ElectroServer, jika pesan bersifat private, setelah nama pengirim

pesan akan diberi text [private].

4.2.2.4.5. Chat Message Box

Sama seperti pada scene chat, chat message box pada scene game juga

merupakan sebuah textbox dimana user mengetikkan pesan yang akan dikirimkan.

Pesan akan dikirimkan melalui ElectroServer. Semua pesan yang dikirimkan

melalui Chat Message Box secara otomatis akan bersifat public. Pesan akan

terkirim setelah user mengklik tombol send di sebelah Chat Message Box.

Gambar 4.25 Chat Message Box

80

Key.removeListener(keyListener); var chatHistory:String = ""; var playerList:Array; var spectatorList:Array; function sendClicked() { var msg:String = msgBox.text; if (msg.length>0) { es.sendMessage("public", msg); msgBox.text = ""; } } send_btn.onRelease = sendClicked; var keyListener:Object = new Object(); keyListener.onKeyDown = function(ev) { if (Key.isDown(13)) { sendClicked(); } };

Potongan listing program di atas akan mengidentifikasikan pesan sebagai pesan

yang bersifat public, kemudian mengirimkan pesan tersebut ke ElectroServer

untuk kemudian dibaca oleh user lain.

4.2.2.4.6. Spectator List

Spectator list adalah sebuah textbox yang menampilkan nama user

yang berperan sebagai spectator didalam sebuah game room.

Gambar 4.26 Spectator list

function showUsers(userList, type, name) { if (type == "userleft" && name == opponent) { game_clip.opponent_left(); } //get the user list var userlist = es.getUserList(); playerList = new Array(); spectatorList = new Array(); allowSpectators = es.getRoom().Description.attributes.allowSpectators; for (var i = 0; i<userlist.length; ++i) { var user:Object = userlist[i]; var num:Number = user.AssignedNumber.value;

81

if (num>=0 && num != undefined && num != null && num<maxPlayers) { if (num>highestNum) { highestNum = num; } user.gamePlayer = true; playerList.push(user); } else { user.gamePlayer = false; spectatorList.push(user); } } game_clip.setGamePlayerList(playerList); game_clip.setSpectatorList(spectatorList); }

Potongan listing program di atas akan mengambil daftar user yang berada di

Game room, kemudian memisahkan antara player dan spectator, dan kemudian

menampilkan spectator pada spectator list.

4.2.2.4.7. Resign Button

Resign button adalah tombol yang digunakan oleh user untuk

menyerah. Jika user mengklik tombol resign, maka aplikasi akan menampilkan

popup clip resign.

Gambar 4.27 Popup clip resign

resign_btn.onRelease = function() { _parent.resign(true); gotoAndStop(1); } cancel_btn.onRelease = function() { gotoAndStop(1); }

82

Potongan listing diatas akan mengset nilai fungsi resign() dengan nilai true pada

saat user mengklik tombol resign game.

function resign(val) { if (!val) { popUp("Resign"); } else { iLost(); } }

Potongan listing program di atas akan mengeksekusi fungsi ilost() jika fungsi

resign() memiliki nilai true. Fungsi iLost() akan menghentikan permainan dan

user yang melakukan resign akan dinyatakan kalah.

4.2.2.4.8. Draw Button

Draw buttton adalah sebuah tombol yang digunakan seorang pemain

jika ia ingin menawarkan permainan berakhir remis/seri. Pada saat seorang

pemain mengklik tombol draw, maka aplikasi akan menampilkan popup clip draw

yang akan menanyakan apakah pemain tersebut ingin menawarkan remis ke

pemain lawan.

Gambar 4.28 Popup clip draw

Jika user memilih yes, maka akan ditampilkan popup clip draw waiting yang akan

memberitahu bahwa aplikasi sedang menunggu jawaban penawaran tersebut dari

pemain lawan.

yes_btn.onRelease = function() { _parent.draw(true);

83

gotoAndStop("Draw Waiting"); }; no_btn.onRelease = function() { gotoAndStop(1); };

Potongan listing program di atas menampilkan popup clip draw waiting jika user

mengklik tombol yes.

Waiting for your opponent's reply...

Gambar 4.29 Popup clip waiting

Sedangkan di layar pemain lawan akan ditampilkan popup clip draw request yang

menyatakan bahwa, lawan menawarkan remis.

Gambar 4.30 Popup clip draw request

yes_btn.onRelease = function() { _parent.drawAnswer("yes"); gotoAndStop(1); }; no_btn.onRelease = function() { _parent.drawAnswer("no"); gotoAndStop(1); }; requestingDraw = true

Potongan listing program diatas akan memberi nilai yes pada draw jika user

mengklik tombol yes dan nilai no jika user mengklik tombol no.

Jika Pemain lawan memilih accept, maka permainan berakhir dan berakhir

remis/seri, dan aplikasi akan menampilkan popup clip draw yes, yang akan

memberitakan bahwa permainan berakhir seri.

84

Gambar 4.31 Popup clip draw yes

Jika lawan memilih decline, maka permainan akan dilanjutkan dan aplikasi akan

menampilkan popup clip no, yang menyatakan bahwa penawaran remis ditolak.

Gambar 4.32 Popup clip draw no

function gameIsDraw() { inPlay = false; timerBox.stopCounting(); enableRestart(true); textBox.text = "Game is a draw!"; if (myNum == 0) { _parent.endGame_plugin(.5); } }

Potongan listing program di atas akan mengakhiri permainan dengan status seri.

4.2.2.4.9. Rematch Button

Rematch button berfungsi untuk mengulang permainan setelah

permainan berkhir, dan kedua pemain masih berada di dalam game room. Pada

saat salah seorang user mengklik tombol rematch, maka aplikasi akan

menampilkan popup clip restart request yang berfungsi untuk mengkonfirmasi

apakah user ingin mengulang permainan.

85

Play a rematch?

Yes No

Gambar 4.33 Restart request

Jika user memilih yes, maka aplikasi akan menampilkan popup clip rematch

waiting, selagi menunggu respon dari pemain lawan, apakah permintaan untuk

mengulang permainan diterima.

yes_btn.onRelease = function() { _parent.sendRestart(); gotoAndStop("Rematch Waiting"); }; no_btn.onRelease = function() { gotoAndStop(1); };

Potongan listing program di atas akan menampilkan popup clip rematch waiting

dan menampilkan popupclip rematch request di layar pemain lawan jika user

memilih yes, dan akan kembali ke tampilan sebelumnya jika user memilih no.

Waiting for a response form your opponent...

Gambar 4.34 Rematch waiting

86

Sedangkan di layar pemain lawan, aplikasi akan menampilkan popup clip rematch

request yang menanyakan apakah pemain lawan ingin mengulang permainan atau

tidak.

Your opponent would like a rematch. Do you accept?

Yes No

Gambar 4.35 Rematch request

Jika pemain lawan memilih yes, maka permainan akan dimulai lagi dari awal, jika

memilih no, maka aplikasi akan menampilkan popup clip restart no, yang

menyatakan bahwa pemain lawan menolak untuk mengulang permainan.

yes_btn.onRelease = function() { _parent.rematchAnswer("yes") gotoAndStop(1); }; no_btn.onRelease = function() { _parent.rematchAnswer("no") gotoAndStop(1); };

Potongan listing program diatas akan memberi nilai yes pada fungsi

rematchanswer jika user mengklik tombol yes dan nilai no jika user mengklik

tombol no.

Your opponent has declined your request for a rematch.

OK

Gambar 4.36 Restart no

87

function rematchAnswer(val) { var sendOb:Object = new Object(); sendOb.action = "restart answer"; sendOb.answer = val; sendMove(sendOb); if (val == "yes") { _root.gotoAndStop("Refresh"); } }

Potongan listing program di atas akan merestart permaian jika nilai dari rematch

answer adalah yes.

4.2.2.4.10. Lobby Button

Lobby button berfungsi untuk kembali ke chat scene setelah permainan

berakhir, jika user mengklik lobby button, maka user akan kembali ke scene chat

dan secara otomatis akan masuk ke room default, yaitu Lobby.

lobby_clip.lobby_btn.onRelease = function() { _root.joinRoom(); _root.gotoAndStop("Chat"); };

Potongan listing program di atas akan mengembalikan user ke scene chat jika

user mengklik Lobby button.

4.2.3. Menu Credit

Menu credit akan menampilkan informasi tentang penulis.

Gambar 4.37 Menu Credit

88

4.2.4. Menu Help

Menu help akan memberikan informasi tentang aturan permainan catur

yang dilengkapi dengan animasi gerakan tiap bidak, serta memberikan penjelasan

secara detail tentang aplikasi ini.

Gambar 4.38 Menu Help

89

BAB V

ANALISA HASIL

5.1. Uji Coba Perangkat Lunak

Pengujian terhadap aplikasi game dilakukan setelah ElectroServer sebagai

web server dan socket server terinstal, seperti pada uraian Bab IV. Pada uji coba

ini diasumsikan user akan menggunakan fasilitas chatting dan permainan pada

aplikasi Game Online Chess.

5.1.1. Uji Coba Scene Chat

Dalam scene ini user akan melihat daftar chat room yang tersedia, daftar

user yang berada pada room user tersebut berada dan daftar game room. User

dapat mengetikkan pesan kepada user lain, pesan ini dapat bersifat umum (dapat

dibaca oleh semua user) atau juga dapat bersifat pribadi (hanya dapat dibaca oleh

user tujuan). Untuk mengirimkan pesan,maka user mengetikkan pesan pada Chat

Message Box, maka pesan tersebut akan ditampilkan pada Chat History dan dapat

dibaca oleh semua user pada room yang sama. Untuk mengirimkan pesan pada

user tertentu, maka user akan mengklik pada nama user tujuan dan aplikasi akan

menampilkan sebuah textbox untuk mengetikkan pesan kepada user tersebut dan

pesan akan ditampilkan pada chat history milik user tujuan.

Untuk bergabung dengan salah satu chat room yang tersedia, maka user

dapat mengklik salah satu room di dalam textbox daftar room(Chat Room List),

jika room tersebut tidak diberi password oleh user yang membuatnya, maka user

akan langsung masuk ke dalam room tersebut dan daftar user berubah menurut

90

room yang dipilihnya. Jika room tersebut diberi password, maka user harus

mengetikkan password di text box yang telah disediakan, jika tidak atau password

salah, maka user kembali ke room sebelumnya.

Untuk membuat chat room, maka user dapat mengklik tombol new room

yang tersedia, dan jika room tersebut ingin diberi password, maka user dapat

mengetikkan password di textbox yang disediakan, jika tidak user dapat

mengosongkan textbox tersebut.

Untuk bergabung dengan salah satu game room, maka user dapat

mengklik salah satu game room yang tersedia pada Game Room List, Jika room

tersebut diberi password, maka user harus mengetikkan password di textbox yang

telah disediakan, jika tidak atau password salah, maka user kembali ke room

sebelumnya. Pada saat memilih Game Room, user dapat memilih ingin bergabung

sebagai pemain atau penonton, namun jika jumlah pemain sudah mencapai jumlah

maksimal (2), maka secara otomatis user bergabung sebagai penonton.

Untuk membuat game room maka user dapat mengklik tombol New Game

yang telah disediakan, jika room tersebut ingin diberi password, maka user dapat

mengetikkan password di textbox yang disediakan, jika tidak user dapat

mengosongkan textbox tersebut.

5.1.2. Uji Coba Scene Game

Untuk mulai bermain catur seorang user harus menunggu adanya user lain

yang bergabung dengan Game Room nya sebagai pemain. Untuk bermain catur

user akan mengklik buah catur yang ingin dijalankannya dan menggeser buah

catur tersebut ke tempat tujuan. Jika buah catur diletakkan pada tempat yang tidak

91

sesuai aturan, misalnya, raja maju tiga langkah diagonal, maka buah catur tersebut

akan kembali ke posisi awal.

5.2.Analisa Manfaat

Berdasarkan proses implementasi yang telah dilaksanakan diperoleh

analisa manfaat sebagai berikut:

1. Bagi pemain catur pemula, atau bahkan bagi user yang sama sekali

tidak tahu cara bermain catur, dapat mempelajari aturan-aturan catur

yang diberikan pada menu help.

2. User dapat bermain sekaligus berkomunikasi dengan user lain dengan

adanya fasilitas chatting.

3. Karena aplikasi ini berbasis web, maka seorang user dapat bermain

catur atau pun hanya sekedar chatting dengan user lain yang berada di

tempat lain.

5.3.Analisa Teknologi

Beberapa analisa teknologi yang diperoleh setelah proses implementasi antara

lain:

1. Kemampuan Macromedia Flash MX 2004 ini di dalam kompresi file sangat

berguna sekali, mengingat, aplikasi yang dibuat menggunakan banyak sekali

file gambar dan beberapa file audio, yang dapat membuat ukuran file

membengkak, dan juga mengingat aplikasi yang dibuat merupakan aplikasi

berbasis web sehingga akan lebih baik jika ukuran file menjadi semakin

kecil untuk mempercepat transfer data.

92

2. Sebagai socket server, ElectroServer 3 memiliki banyak sekali fasilitas yang

mempermudah penulis dalam pembuatan aplikasi. Namun sebagai web

server, ElectroServer3 memiliki konfigurasi yang lebih rumit dan kurang

lengkap dibandingkan dengan web server seperti Apache.

3. Untuk menjalankan aplikasi tidak perlu menginstal apapun, hanya perlu

sebuah perangkat komputer yang terhubung ke internet dengan browser

yang mendukung flash.

5.4.Kelebihan dan Kekurangan aplikasi

Program aplikasi yang penulis buat tentu saja memiliki kelebihan dan

kekurangannya.

Kelebihan program aplikasi yang penulis buat antara lain :

1. Dengan aplikasi permainan catur ini selain user dapat bermain catur,

user juga dapat berkomunikasi dengan user lain dengan adanya fasilitas

chatting.

2. Karena aplikasi ini berbasis web, untuk dapat mengakses aplikasi ini,

user tidak perlu menginstal program apapun, user hanya perlu

mengakses situs dimana aplikasi ini berada, tentu saja dengan browser

yang mendukung flash.

3. Dengan aplikasi ini juga, user dapat bermain catur dengan lawan main

yang berada di tempat yang jauh.

4. Aplikasi ini dibuat sepenuhnya dengan menggunakan bahasa inggris,

sehingga diharapkan dapat diakses oleh user internasional.

93

Kekurangan program aplikasi yang dibuat oleh penulis antara lain :

1. Karena aplikasi ini berbasis flash, maka dibutuhkan koneksi internet

yang cukup cepat, agar aplikasi dapat berjalan secara maksimal.

2. Aplikasi permainan ini tidak bisa melakukan save game (menyimpan

permainan untuk dilanjutkan lain kali).

3. Aplikasi menggunakan ElectroServer 3 sebagai web server dan socket

server, sedangkan sampai saat ini masih jarang sekali jasa web hosting

yang menggunakan teknologi tersebut.

94

BAB VI

PENUTUP

6.1.Kesimpulan

Dari proses pembuatan aplikasi ini penulis dapat mengambil beberapa

kesimpulan, antara lain:

1. Aplikasi dapat berjalan dengan baik, baik permainan catur itu sendiri,

maupun fasilitas chatting yang ada, sehingga tidak menutup kemungkinan

untuk digunakan dalam keadaan yang sesungguhnya, seperti lomba catur,

atau hanya sekedar forum untuk para penggemar catur.

2. Macromedia Flash MX 2004 sangat cocok digunakan untuk membangun

aplikasi berbasis web karena memiliki kemampuan kompresi data gambar

dan suara yang sangat baik, yaitu dengan membuat file .swf. Macromedia

Flash MX 2004 juga memiliki bahasa pemrograman yang berorientasi

objek yaitu ActionScript 2.0 dan fasilitas animasi yang dapat membuat

tampilan game menjadi lebih menarik.

6.2.Saran

Untuk pengembangan sistem yang akan datang penulis menyarankan agar

aplikasi permainan catur ini memiliki fasilitas save game, yaitu kemampuan untuk

menyimpan permainan agar dapat dilanjutkan lain kali.

DAFTAR PUSTAKA

Andreas Andi Suciadi, Menguasai Pembuatan Animasi Dengan Macromedia Flash MX,

Jakarta: PT Elex Media Komputindo, 2003.

Bernard Hartanto & Ferdianto Wijaya, The Magic of Flash MX 2004, Jakarta: PT Elex

Media Komputindo 2004.

Jhonsen, Membuat berbagai Efek dengan Flash MX, Jakarta: PT Elex Media

Komputindo, 2003

Yahya Kurniawan, ST, Kiat Praktis Menguasai ActionScript 2.0, Jakarta: PT Elex Media

Komputindo,2005

www.electrotank.com

www.conservativebookstore.com/chess/

www.koni.or.id/koni_pb_percasi.htm

LAMPIRAN

(LISTING PROGRAM)

stop(); var serverSettings = new XML(); serverSettings.ignoreWhite = true; serverSettings.onLoad = function() { var children = this.firstChild.childNodes; for (var i=0;i<children.length;++i) { var name = children[i].nodeName var value = children[i].firstChild.nodeValue if (name == "IP") { ip = value; } else if (name == "Port") { port = Number(value); } } System.security["loadPolicyFile"]("xmlsocket://"+ip+":"+port); } serverSettings.load("ServerSettings.xml"); this.onEnterFrame = function() { if (this.getBytesLoaded()/this.getBytesTotal() >=1 && getTimer() >= 1*1000) { delete this.onEnterFrame; gotoAndStop("Code"); } }

var gameInfo:Object = new Object(); var es:ElectroServer = ElectroServer.getInstance(); es.setModeratorLabel(true, " [Mod]"); es.setDebug(false); function joinRoom() { var roomOb:Object = new Object(); roomOb.roomName = "Lobby"; roomOb.zone = "Chess Zone"; es.createRoom(roomOb); } es.roomJoined = function(Results, myRoom) { if (Results.success) { gotoAndStop("Chat"); } else { msg.text = Results.error; } }; es.loggedIn = function(success, error, variables) { if (success) { for (var i = 0; i<variables.length; ++i) { var name:String = variables[i].Name.value; var value:String = variables[i].Data.value; gameInfo[name] = value; } joinRoom(); } else { msg.text = error; tryAgain_clip.gotoAndStop(2); } }; es.onConnection = function(success, error) { if (success) { gotoAndStop("Login"); } else { msg.text = error; } }; es.connectionClosed = function(val) { //disconnected }; es.setIP('192.168.0.1');//tergantung alamat ip web server es.setPort(9875);// port number jangan dirubah2 kacau semua!!!! gotoAndStop("Connecting");

msg.text = "Connecting..." es.connect();

function loginFXN() { var username:String = username_txt.text; var password:String = password_txt.text; if (username.length>2 && username.length<15) { es.login(username, password); gotoAndStop("Waiting"); } } login_btn.onRelease = function() { if (username_txt.length > 2) { loginFXN(); } }

Key.removeListener(keyListener); var chatHistory:String = ""; var playerList:Array; var spectatorList:Array; function sendClicked() { var msg:String = msgBox.text; if (msg.length>0) { es.sendMessage("public", msg); msgBox.text = ""; } } send_btn.onRelease = sendClicked; var keyListener:Object = new Object(); keyListener.onKeyDown = function(ev) { if (Key.isDown(13)) { sendClicked(); } }; Key.addListener(keyListener); es.messageReceived = function(type:String, message:String, from:String) { if (type == "public") { chatHistory += from+": "+message+newline; } else if (type == "private") { chatHistory += from+"[private]: "+message+newline; } chatBox.text = chatHistory; chatBox.vPosition = chatBox.maxVPosition; }; function showUsers(userList, type, name) { if (type == "userleft" && name == opponent) { game_clip.opponent_left(); } //ambil user list var userlist = es.getUserList(); //buat player list sama spectator list. playerList = new Array(); spectatorList = new Array(); //player max di gameroom maxPlayers = es.getRoom().Description.attributes.numPlayers; allowSpectators = es.getRoom().Description.attributes.allowSpectators; myNum = es.getUser().AssignedNumber.value; var highestNum:Number = 0; for (var i = 0; i<userlist.length; ++i) { var user:Object = userlist[i]; var num:Number = user.AssignedNumber.value; if (num>=0 && num != undefined && num != null && num<maxPlayers) { //masukkin ke player list if (num>highestNum) { highestNum = num;

} user.gamePlayer = true; playerList.push(user); } else { //masukin ke spectator list user.gamePlayer = false; spectatorList.push(user); } } //tampilin isi player list sama spectator list showBothListBoxes(); if (playerList.length == maxPlayers && myNum == 0) { //pemain lengkap , pesan mulai main sendStartMove(playerList[1].Name.value); } else if (playerList.length == maxPlayers && myNum == 1) { sendStartMove(); } else if (playerList.length == maxPlayers) { spectatorStart(); } if (!es.getUser().gamePlayer && es.getUser().AssignedNumber.value>=maxPlayers) { //jika join game sudah penuh //ada tampilan pilihan jadi spectator atau pergi. if (!allowSpectators) { //langsung buang kalo no spectator goBack(); } } if (es.getRoom().Description.attributes.playersArrived != highestNum+1 && es.getUser().isGameMaster) { //+1 hitungnya mulai dari 0 changeDetail(highestNum+1); } game_clip.setGamePlayerList(playerList); game_clip.setSpectatorList(spectatorList); } function showBothListBoxes() { spectatorListBox.dataProvider = spectatorList; } function sendStartMove() { game_clip.start(); } function spectatorStart() { game_clip.spectatorStart(); } function changeDetail(num) { var descOb = es.getRoom().Description; descOb.attributes.playersArrived = num; es.changeRoomDetail("description", descOb); } es.userListUpdated = showUsers; es.moveReceived = function(type:String, moveOb:Object, from:String) { game_clip.moveReceived(moveOb, from); }; function createRoomVar() { var room = es.getRoom(); var master_name = room.Description.attributes.username; if (es.getUser().Name.value == master_name) { var ob = new Object(); ob.name = "master_is_here"; ob.data = "yes"; ob.locked = true; ob.persistent = false; es.createRoomVariable(ob); } } function checkRoomVar() { var master_name = es.getRoom().Description.attributes.username; if (es.getUser().Name.value != master_name) { var ob = es.getRoomVariables(); if (ob.master_is_here != "yes") { game_clip.masterLeft();

} } } function roomVariablesUpdated(type:String, ob:Object, name:String) { var master_name = es.getRoom().room.Description.attributes.username; if (ob.master_is_here != "yes" && es.getUser().Name.value != master_name) { game_clip.masterLeft(); } } es.roomVariablesUpdated = roomVariablesUpdated; createRoomVar();

var min, sec, inc; var start_time; var white:Object = new Object(); white.color = "white"; var black:Object = new Object(); black.color = "black"; var counting = false; var myColor; function getMySeconds():Number { if (_parent.myColor == "white") { return white.seconds; } else { return black.seconds; } } function getHisSeconds():Number { if (_parent.myColor == "white") { return black.seconds; } else { return white.seconds; } } function setSeconds(who, num) { if (who == "white") { currentColor = white; } else if (who == "black") { currentColor = black; } currentColor.seconds = num; render_spectator(); } function iLost() { _parent.iLost(); stopCounting(); } function setMyColor(which) { myColor = which; } function startCounting(which) { if (_root.time_game) { start_time = getTimer(); counting = true; if (which == "white") { currentColor = white; white_plunger.gotoAndStop(2); } else if (which == "black") { currentColor = black; black_plunger.gotoAndStop(2); } render(); } } function stopCounting(increment_it) { if (counting) { counting = false; if (currentColor.color == myColor && increment_it) { currentColor.seconds += inc;

} currentColor.seconds = render(); white_plunger.gotoAndStop(1); black_plunger.gotoAndStop(1); } } function setTimeParameters(tmp_min, tmp_sec, tmp_inc) { start_time = getTimer(); min = tmp_min; sec = tmp_sec; inc = tmp_inc; white.seconds = min*60+sec; black.seconds = min*60+sec; currentColor = white; render(); currentColor = black; render(); } function updateTime(col, seconds) { if (_root.time_game) { start_time = getTimer(); if (col == "white") { currentColor = white; } else if (col == "black") { currentColor = black; } currentColor.seconds = Number(seconds); render(); } } function render() { if (_root.time_game) { var now = getTimer(); var seconds_depleted = Math.round((now-start_time)/1000); var seconds_left = currentColor.seconds-seconds_depleted; if (seconds_left<0) { seconds_left = 0; } if (seconds_left<=0 && currentColor.color == myColor) { if (counting) { iLost(); } } var mins = Math.floor(seconds_left/60); var secs = seconds_left%60; if (secs<10) { secs = "0"+secs; } if (mins<10) { mins = "0"+mins; } var str = mins+":"+secs; if (currentColor.color == "white") { white_counter_txt.text = str; } else { black_counter_txt.text = str; } return seconds_left; } } function render_spectator() { if (_root.time_game) { var seconds_left = currentColor.seconds; if (seconds_left<0) { seconds_left = 0; } var mins = Math.floor(seconds_left/60); var secs = seconds_left%60; if (secs<10) { secs = "0"+secs;

} if (mins<10) { mins = "0"+mins; } var str = mins+":"+secs; if (currentColor.color == "white") { white_counter_txt.text = str; } else { black_counter_txt.text = str; } return seconds_left; } } this.onEnterFrame = function() { if (counting && _root.time_game) { render(); } }; _parent.timerBoxRequest();

if (type == "pawn") { var firstMove:Boolean = chessPiece.isFirstMove; var sign:Number; if (color == "white") { sign = 1; } else if (color == "black") { sign = -1; } var next_y:Number = start_y+sign; var nextTile:Tile = getTile(start_x, next_y); if (start_x == end_x && (end_y-start_y == sign*1 || (end_y-start_y == sign*2 && firstMove && !nextTile.isFilled)) && !containsPiece) { returnVal = true; } else if (Math.abs(start_x-end_x) == 1 && end_y-start_y == sign*1 && containsEnemy) { returnVal = true; if (returnVal && ((color == "white" && end_y == 7) || (color == "black" && end_y == 0))) { promotePawn = true; }

else if (type == "king") { var firstMove:Boolean = chessPiece.isFirstMove; if ((Math.abs(start_y-end_y) == 1 && start_x-end_x == 0) || (Math.abs(start_x-end_x) == 1 && (Math.abs(start_y-end_y) == 1 || start_y-end_y == 0))) }

else if (type == "knight") { if ((Math.abs(start_x-end_x) == 1 && Math.abs(start_y-end_y) == 2) || (Math.abs(start_x-end_x) == 2 && Math.abs(start_y-end_y) == 1)) { if (!c_ntainsSameColor) { returnVal = true; }

else if (type == "queen" || type == "rook" || type == "bishop") { var hor_vert:Boolean = false; var diag:Boolean = false; if (type == "queen") { hor_vert = true; diag = true; } else if (type == "rook") { hor_vert = true; } else if (type == "bishop") { diag = true; }