• Tidak ada hasil yang ditemukan

3. PERENCANAAN DAN IMPLEMENTASI SISTEM

N/A
N/A
Protected

Academic year: 2022

Membagikan "3. PERENCANAAN DAN IMPLEMENTASI SISTEM"

Copied!
24
0
0

Teks penuh

(1)

25

Program permainan Mahjong ini dibuat dengan menggunakan Borland Delphi 5. Adapun alasan menggunakan Borland Delphi 5 karena kepraktisannya dalam mendesain interface yang berbasis grafik dalam sistem operasi windows.

Karena itu dalam program permainan Mahjong, interface dapat diatur sedemikian rupa agar pemain dapat melihat seluruh kartu dengan jelas. Dengan demikian dapat menjadikan permainan Mahjong yang baik menjadi tujuan akhir dari program.

Dalam permainan Mahjong akan ditampilkan semua kartu yang dilihat dari segi salah satu pemain, dimana pemain itu tinggal memilih langkah apa yang hendak dijalankannya. Program akan dengan otomatis akan mengaturkan kartu pemain agar dapat dengan enak dilihat dan dimengerti. Program juga akan memberi tahu pemain apabila ada kejadian tertentu dalam bermain, misalnya ada kartu yang dapat diambil dari buangan pemain lain. Dengan sederhana proses tersebut dapat digambarkan seperti pada gambar 3.1.

Gambar 3.1. Proses Permainan

Dari gambar dapat diketahui secara umum bahwa program permainan Mahjong sangat mempermudah pemain dalam memainkan permainan Mahjong.

Program akan memproses semua kejadian dalam permainan dan menampilkan peristiwa yang harus diketahui oleh pemain.

Memilih kartu

Pemain selanjutnya

Proses Pemain

(2)

3.1. Pembuatan Program

Pembuatan program permainan Mahjong akan menyediakan fasilitas penambahan orang secara otomatis agar mencapai empat orang dengan menambahkan pemain buatan. Pemain buatan akan dilengkapi dengan sistem kecerdasan buatan yang akan menentukan langkah yang diambilnya dalam permainan.

Dalam program terbagi menjadi empat elemen yang penting, yaitu:

1. Koneksi 2. Proses Awal

3. Pengambilan Keputusan 4. Proses Permainan

Keempat elemen tersebut masing-masing memegang suatu peranan dan setiap elemen memiliki keterkaitan dimana elemen yang satu dapat berjalan jika elemen sebelumnya telah dikerjakan.

3.1.1. Koneksi

Koneksi merupakan elemen pertama dalam pembuatan program permainan Mahjong. Dalam elemen koneksi, program akan dapat mengetahui berapa banyak pemain yang akan ikut bermain. Hal ini berguna untuk program agar dapat mengetahui berapa banyak pemain buatan yang harus dibuat. Dalam tahap ini, komputer yang satu dengan yang lain akan dapat melakukan hubungan agar nantinya dapat tercipta komunikasi yang baik antar komputer. Untuk koneksi penulis menggunakan komponen textclient dan textserver. Komponen ini adalah cara yang termudah untuk dapat melakukan koneksi. Programer hanya perlu mengeset IP komputer dan koneksi sudah dapat langsung berjalan dengan perintah listen pada Server dan open pada Client. Komponen ini sudah memiliki suatu prosedur yang dinamakan tlinesocket. Untuk mengirim data programer hanya perlu menuliskan perintah seperti berikut.

(permainan.servercom.client[0] as

tlinesocket).writeline('kartu_buang,'+inttostr(buang));

Kalimat yang dikirim akan dituliskan pada writeline diatas. Server akan menerima pesannya pada variabel line.

(3)

3.1.2. Proses Awal

Pada elemen proses ini, program akan menentukan segalanya dari awal.

Hal yang dimaksudkan adalah penentuan posisi kartu. Penentuan posisi kartu sangatlah penting, karena kartu yang telah diacak, posisinya tidak akan berubah lagi. Pemain akan mendapatkan kartu secara berurutan sesuai dengan posisi yang telah ditetapkan pertama. Setelah kartu selesai diacak, kartu akan dibagikan kepada pemain untuk yang pertama kalinya. Kartu tersebutlah yang akan diolah selanjutnya dalam proses permainan.

3.1.3. Pengambilan Keputusan

Pada elemen ini pemain maupun komputer akan melihat kartu yang dipegang masing-masing. Pemain akan mengambil keputusan untuk menyimpan kartu yang mana dan akan membuang kartu yang dianggap kurang berguna untuknya. Bagi pemain yang dijalankan dengan sistem cerdas buatan akan mengambil jalan yang tepat dimana telah ditentukan oleh program pada awal permainan.

3.1.4. Proses Permainan

Pada elemen proses ini, program akan mengatur semua jalannya permainan. Program akan mendeteksi semua kemungkinan yang ada dan menentukan pemain mana yang akan berjalan selanjutnya. Pada elemen ini, bagian yang cukup rumit terletak pada menentukan jalan apa yang bisa dilakukan dan mendeteksi apakah pemain tersebut telah memenangkan permainan atau tidak. Proses ini akan dijelaskan lebih lanjut pada sub bab yang lain, yang menjelaskan bagaimana cara melakukan pengecekan tersebut dan sebab dilakukannya.

3.2. Tahap-tahap Pembuatan Program

Dalam pembuatannya, program Mahjong memiliki beberapa tahap yaitu:

1. Tahap mendesain dan membuat interface

2. Tahap menginputkan perintah-perintah dalam permainan

(4)

3. Tahap memproses inputan untuk diolah agar sesuai dengan tujuannya

Masing-masing tahap memiliki alur kerjanya sendiri-sendiri tetapi tetap mambutuhkan bantuan dari tahap-tahap yang lainnya. Pada subbab berikut akan dijelaskan secara terperinci cara kerja tiap tahap beserta alur dan prosedur- prosedur pentingnya.

3.2.1. Desain dan Pembuatan Interface

Dalam mendesain meja Mahjong diperlukan interface yang bagus, dimana pemain dapat melihat semua semua kartu yang dimainkan. Karena meja dirancang untuk bisa digunakan untuk empat orang dari sisi yang berlainan, maka diperlukan dua strategi agar meja yang dibuat hanya satu tetapi dapat digunakan oleh semua pemain.

Strategi yang pertama digunakan adalah dengan menggunakan array yang berbeda pada setiap kartu pemain. Hal ini dapat dilihat jelas pada variabel yang digunakan seperti ‘kartu_p: array[1..4,0..13]’ of integer. Array yang digunakan adalah array dua dimensi. Dimensi yang pertama adalah dimensi pemain. Angka yang terletak disitu menentukan akan mengakses kartu pemain yang keberapa. Sedangkan dimensi yang kedua menandakan kartu apa saja yang dimiliki pemain pada saat itu.

Strategi yang kedua adalah cara menggambarkan posisi pemain sesuai dengan yang dikehendaki. Pada proses gambar dibedakan menjadi empat, yaitu gambar bawah, gambar kanan, gambar atas dan gambar kiri. Setiap pemain akan bersangkutan akan digambarkan kartu miliknya pada gambar bawah. Pemain selanjutnya akan digambarkan urut berlawanan dengan arah jarum jam. Hal ini bisa dilihat seperti pada gambar 3.2.

(5)

Gambar 3.2. Penentuan Pemain

Angin pada gambar 3.2 melambangkan pemain ada diurutan yang keberapa. Timur berarti pemain tersebut adalah server yang juga berarti pemain nomor satu. Selatan berarti pemain tersebut adalah pemain nomor dua. Barat berarti pemain tersebut adalah pemain nomor tiga. Utara berarti pemain tersebut adalah pemain nomor empat.

Desain nama kartu dalam data juga amat penting. Perlu dipikirkan agar terdapat perbedaan antara bunga satu dengan yang lain. penulis memberi kode yang sama pada tiap bunga yang ada. Kode tersebut adalah antara lain:

1. Nomor 11 sampai dengan nomor 19 adalah kode untuk bunga wan.

2. Nomor 21 sampai dengan nomor 29 adalah kode untuk bunga bendol 3. Nomor 31 sampai dengan nomor 39 adalah kode untuk bunga jarum 4. Nomor 45 adalah angin timur

5. Nomor 50 adalah angin selatan

(6)

6. Nomor 55 adalah angin barat 7. Nomor 60 adalah angin utara 8. Nomor 65 adalah naga merah 9. Nomor 70 adalah naga hijau 10. Nomor 75 adalah naga putih

Kartu yang memiliki nilai buang yang sama diberi jarak satu nomor. Hal ini dilakukan agar dalam pengecekan urut, program akan dengan mudah mengenali jenis bunga yang sama. Antara kartu bunga satu dengan bunga yang lain, ada nomor yang kosong, misalnya antara bunga wan dan bunga bendol, terdapat kosong no 20. Karena kekosongan ini, maka dalam pengecekan program, tidak akan terjadi urut antara kartu dengan bunga yang berbeda. Kartu angin dan naga diberi jarak yang besar karena memang kartu tersebut hanya dapat bernilai jika memiliki tiga dari angin yang sama atau naga yang sama. Dengan kata lain jika digabungkan beberapa angin yang berbeda maupun dengan naga, kartu pemain akan menjadi jelek.

3.2.2. Input Perintah Dalam Permainan

Tombol-tombol yang ada pada gambar 3.2 adalah tombol-tombol perintah.

Tombol tersebut hanya bisa ditekan apabila perintah yang bersangkutan bisa digunakan. Misalnya tombol pong, tombol tersebut akan berfungsi jika kartu yang dibuang pemain lain bisa di pong oleh pemain yang bersangkutan. Salah satu contoh lagi, tombol menang hanya bisa ditekan apabila kartu yang dimiliki pemain sudah jadi atau menang.

Pemain setelah menerima kartu akan memilih kartu apa yang akan dibuangnya. Pemain akan memilih kartu yang dibuangnya dengan menekan tombol yang ada tepat diatas kartu yang dipilih. Setelah memilih kartu, untuk sementara semua tombol akan tidak berfungsi. Hal ini akan berlangsung sampai giliran pemain tersebut lagi. Maka dari itu, jika tombol sudah dapat berfungsi maka menandakan giliran bermain telah tiba. Pemain dapat memilih kartu lagi sampai mencapai kemenangan.

(7)

3.2.3. Proses-proses Dalam Program

Proses dalam program akan selalu berkaitan satu sama lain. Dalam arti yang lain, perintah yang telah dibuat akan langsung dilanjutkan dengan perintah yang berikutnya secara otomatis.

3.2.3.1. Acak Kartu

Dalam mengacak kartu Mahjong, pertama–tama yang dilakukan adalah merandom suatu angka yang besar, dalam kasus ini diambil angka 1000.

Komputer akan mengambil nilai sembarang yang ada diantara 1 sampai 1000.

Dari angka tersebut komputer akan merandom lagi yang range-nya diambil dari hasil random tersebut. Dari hasil yang kedua tadi, ditambahkan pada sebuah variabel yang disebut pos. Jika nilai pos tersebut lebih besar dari 136, maka nilainya akan dikurangi sebanyak 136 sampai nilai pos lebih kecil dari 136. Jika nilai pos sudah berada antara 1 sampai 136, maka akan dilihat apakah posisi tersebut sudah berisi kartu yang lain atau tidak. Jika tidak, maka kartu tersebut akan ditaruh diposisi itu. Jika iya, maka posisi akan terus ditambahkan 1 sampai mendapatkan posisi yang kosong. Hal ini dapat dilihat secara mendetail pada Flowchart pada gambar 3.3.

(8)

Ya

Tidak

Ya

Tidak

Gambar 3.3. Flowchart Acak Kartu

Agar pembaca dapat lebih jelas melihat pola berpikir acak kartu, akan ditampilkan potongan program untuk mengacak kartu wan.

Segmen 3.1. Acak Kartu

for j:=11 to 19 do begin

for k:=1 to 4 do begin

randomize;

temp1:=random(1000);

acak:=random(temp1);

pos:=pos+acak;

while pos>136 do pos:=pos-136;

if posisi_kartu[pos]=0 then posisi_kartu[pos]:=j else begin

while posisi_kartu[pos]<>0 do begin

pos:=pos+1;

A:Random(1000) B:Random(A)

Pos = Pos + B

If Pos > 136 Pos = Pos - 136

Posisi[Pos] = 0 Posisi[Pos] = Kartu

Selesai Pos = Pos +1

(9)

if pos>136 then pos:=pos-136;

end;

posisi_kartu[pos]:=j;

end;

end;

end;

Kartu yang telah diacak tidak akan bisa dirubah lagi ditengah permainan.

Kartu akan tetap seperti itu sampai permainan selesai. Setelah merandom kartu seperti diatas, program akan mendata banyak kartu dan memberi pointer ke kartu yang pertama. Pointer tersebut akan selalu bertambah seiring dengan kartu-kartu yang dibagikan kepada pemain maupun waktu pemain mencabut kartu dari tengah. Banyak kartu menentukan berapa lama waktu permainan dapat berlangsung. Lain dengan pointer, banyak kartu akan terus berkurang jika ada pemain yang mengambil kartu. Permainan akan berhenti jika kartu yang ada ditengah telah habis.

3.2.3.2. Bagi Kartu

Kartu yang akan dibagikan kepada pemain akan dibagi secara bergiliran.

Posisi kartu yang telah diacak diataskan dibagikan berurutan dari pemain pertama sampai pemain yang terakhir. Setiap pemain akan mendapatkan masing-masing 13 kartu. Setiap membagikan kartu, jumlah kartu yang ada pada kartu yang ditengah akan selalu dikurangi. Posisi pointer yang mengarah ke kartu yang nantinya menjadi kartu berikut akan terus ditambahkan. Variabel untuk menyimpan kartu pemain digunakan array bertipe dua dimensi yaitu

kartu_p[1..4,0..13]’. Nilai ‘1..4’ menandakan pemain. Nilai ‘0..13’

menandakan kartu milik pemain. Dari kartu milik pemain, yang biasanya diperlihatkan hanya 13 kartu saja. Kartu ke-14 hanya akan diperlihatkan jika pemain akan memenangkan permainan. Nilai 0 menandakan kartu yang ke-14.

3.2.3.3. Atur Kartu

Karena kartu yang dibagikan berdasarkan urutan dari acak kartu yang awal tadi, maka kartu akan keluar tidak teratur. Dalam hal ini diperlukan suatu prosedur untuk dapat mengurutkan kartu yang dipegang oleh masing-masing pemain. Disamping untuk dapat melihat kartu dengan lebih enak, kartu yang telah

(10)

terurut juga dapat dengan lebih mudah diperiksa. Dalam memeriksa kartu, data yang terurut sangatlah penting. Hal ini disebabkan dalam pengecekan sang sangat berpengaruh kartu yang sebelumnya dan kartu yang sesudahnya. Untuk lebih jelasnya cara pengaturan kartu dapat dilihat pada gambar 3.4.

Ya

Tidak

Ya

Tidak

Gambar 3.4. Flowchart Urut Kartu

3.2.3.4. Langkah Komputer

Langkah yang diambil oleh komputer akan ditetapkan dari awal permainan. Hal ini diambil dari pengalaman bermain dan cara bermain yang diterapkan penulis dalam bermain Mahjong. Pemain harus konsisten dengan apa yang hendak ia lakukan. Hal ini sangat berpengaruh pada permainan. Jika setiap saat merubah pola permainan, maka kartu yang diperoleh akan semakin tidak

Start

I=0 J=I+1

Kartu[I]>

Kartu[J] Inc(I)

J=I+1 I=13

Temp=kartu(I) Kartu(I)=Kartu(J) Kartu(J)=Kartu(I) Finish

(11)

teratur. Kartu yang diperoleh dapat menjadi lebih buruk karena setiap saat merubah kartu yang dianggap jelek. Meskipun pada awalnya pemain tidak mendapatkan kartu yang diinginkan, akan tetapi permainan akan terus berlangsung dan kartu yang diinginkan pada suatu saat pasti akan datang juga.

Dengan demikian kartu akan semakin lama semakin bagus.

Pertama yang dilakukan program akan mengecek yang sama bunga ada sebanyak 10 atau tidak. Bunga wan, jarum dan bendol akan membuat kartu menjadi jelek jika digabungkan. Komputer harus menentukan pilihan memelihara hanya salah satu dari bunga tersebut.

Ada kasus lain, jika kartu yang dipegang merupakan kartu potensial pong semua. Dalam kasus ini, memelihara semua bungapun tidak menjadi masalah.

Kartu akan tetap dinilai bagus. Jika mendapat kartu seperti ini maka komputer hanya akan membuat pong saja untuk memenangkan permainan.

Kartu bunga jika tidak digabungkan dengan kartu naga dan angin adalah yang terbaik. Tetapi sangat sulit untuk mencapai kemenangan jika tidak dibantu dengan kartu naga dan angin. Kartu naga akan dengan otomatis memperindah kartu dan kartu angin jika tepat memelihara seperti pada posisi pemain juga dapat memperindah kartu. Jika tidak sesuai dengan angin pemain, kartu angin yang berbeda hanya dianggap sebagai pelengkap saja.

Kartu gabungan dengan kartu naga dan kartu angin adalah kartu yang biasa. Maka dari itu program akan memprioritaskan mulai dari kartu satu bunga saja, terserah bunga tersebut wan atau jarum atau bendol saja. Setelah itu program akan mencarikan kartu kembar. Bila kartu yang ada di tangan, kembarnya lebih dari empat, maka kartu tersebut akan sangat cepat menang. Perioritas yang terakhir adalah kartu gabungan kartu bunga dan kartu naga maupun kartu angin.

Untuk lebih jelasnya dapat dilihat pada gambar 3.5 yang berisi flowchart cara penentuan langkah komputer.

(12)

Ya

Tidak

Ya Ya

Tidak Tidak

Ya Ya

Tidak

Tidak Ya

Tidak

Gambar 3.5. Flowchart Penentuan Langkah Komputer

Setiap komputer akan membuang kartu akan selalu melihat data langkah yang telah dibuat pertama. Penulis akan menampilkan potongan program dimana komputer mengambil keputusan untuk membuang kartu yang ada ditangannya.

Istilah ‘kompi[k]’ dilambangkan sebagai langkah yang diambil komputer. Dalam program dibawah program akan mengecek langkah yang ditetapkan adalah wan semuanya.

Segmen 3.2. Komputer Memilih Kartu

if kompi[k]=1 then begin

d:=0;

while (sudah_buang = false) and (d<sisa_player[k]) do begin

inc(d);

if (kartu_p[k,d]<11) or (kartu_p[k,d]>19) then begin

if makan=false then begin

inc(temp_buang);

Start Wan>9

Jarum>9

Bendol>9

Kembar>4

Finish

Wan>Jarum Wan>bendol

Jarum>Wan Jarum>

Bendol

(13)

buang:=kartu_p[k,d];

kartu_p[k,d]:=kartu_p[k,0];

kartu_p[k,d]:=0;

atur(k);

sudah_buang:=true;

pbuang;

end else begin

inc(temp_buang);

buang:=kartu_p[k,d];

kartu_p[k,d]:=999;

atur(k);

sudah_buang:=true;

pbuang;

end;

end;

end;

if sudah_buang = false then begin

if makan=false then begin

inc(temp_buang);

buang:=kartu_p[k,sisa_player[k]];

kartu_p[k,sisa_player[k]]:=kartu_p[k,0];

kartu_p[k,0]:=0;

atur(k);

sudah_buang:=true;

pbuang;

end else begin

inc(temp_buang);

buang:=kartu_p[k,d];

kartu_p[k,d]:=999;

atur(k);

sudah_buang:=true;

pbuang;

end;

end;

end;

3.2.3.5. Cabut Kartu

Pemain akan mencabut kartu dari tengah jika kartu yang dibuang pemain lain tidak dapat diambil oleh pemain yang main. Pemain akan mengambil kartu yang ditunjuk oleh pointer. Program akan menggambarkan kartu tersebut pada image yang disediakan. Pemain dapat melihat kartu apa yang keluar. Program akan mengurutkan kartu pemain dengan kartu yang baru dicabut tersebut.

Setelah itu program akan mengecek apakah dengan kartu yang baru itu, pemain memenangkan permainan atau tidak. Jika menang, maka permainan akan dihentikan. Jika tidak, maka tombol-tombol untuk membuang kartu akan diaktifkan. Tombol untuk mencabut kartu akan di non-aktifkan, karena pemain

(14)

tidak bisa mencabut kartu sebanyak dua kali. Untuk lebih jelasnya dapat dilihat pada gambar 3.6.

Ya

Tidak

Ya

Tidak

Gambar 3.6. Flowchart Cabut Kartu

3.2.3.6. Pilih Kartu Yang Akan Dibuang

Pemain dapat memilih apakah mau menyimpan kartu yang baru atau menggantikannya dengan kartu yang ada di tangan pemain. Kartu yang telah

Start

Mengambil kartu pemain lain

Cabut Kartu dari tengah

Menang

Mengaktifkan tombol untuk membuang kartu

Finish Tombol untuk cabut di

non-aktifkan

(15)

dibuang akan dimasukkan dalam variabel buang. Posisi kartu yang dibuang akan diisikan dengan kartu yang baru dicabut. Kartu akan dibuang oleh pemain akan digambarkan ditengah meja permainan secara berurut.

Karena dalam Delphi, image tidak bisa ditambahkan secara otomatis maka diperlukan suatu prosedur untuk membuang kartu. Setiap membuang kartu, program akan menandakan telah berapa kali membuang kartu. Program akan menggambarkan kartu yang telah dibuang pada image yang disediakan sesuai dengan banyak jumlah kartu yang telah dibuang. Kartu yang telah dibuang akan menjadi kartu yang selanjutnya untuk pemain lain.

3.2.3.7. Cek Kemenangan

Jika mau mengecek kemenangan dalam program, maka semua data dalam array yang digunakan harus direset dulu. Hal ini agar tidak terjadi kesalahan dalam pengecekan jika ada data yang tertinggal pada pengecekan sebelumnya.

Program akan memulai dengan mencari semua kemungkinan sang, pong dan kembar yang ada dalam kartu. Kemungkinan tersebut semua disimpan dalam tiga array yang berbeda, yaitu status_sang, status_pong dan status_kembar.

Program akan mengecek dari banyaknya kembar yang ada dalam kartu.

Kembar yang pertama dicek karena dalam kartu harus ada satu kembar untuk dapat memenangkan permainan. Kartu kembar yang telah terpakai akan diberi tanda agar dalam pengecekan kartu selanjutnya tidak menggunakan kartu itu lagi.

Kartu sisa yang lain akan dimulai dicari semua sang dulu. Jika sang sudah tidak ada maka dicari kemungkinan pong. Jika kemenangan belum tercapai maka sang yang terakhir akan diabaikan dan mencari lagi kemungkinan pong dari kartu yang tersisa. Jika hal ini belum bisa membuktikan bahwa kemenangan kartu telah tercapai, maka kemungkinan akan mulai dicari dari pong dulu. Setelah kartu tidak bisa pong lagi, maka kemungkinan sang akan dicari dari kartu yang tersisa. Sama seperti diatas, jika kemenangan belum tercapai maka pong yang terakhir akan diabaikan. Hal ini akan berlangsung sampai pongnya tidak ada kemungkinan lagi.

Jika kartu kembar masih ada selain yang pertama tadi, maka pengecekan akan berlanjut sampai semua kemungkinan menang dengan menggunakan kartu kembar yang ada telah habis. Untuk lebih jelasnya bisa dilihat dari algoritma 3.1.

(16)

Algoritma 3.1. Prosedur menang.

Algoritma ini berfungsi agar dapat mengetahui kartu pemain apakah sudah menang atau belum.

Input : Array dari kartu yang akan dicek

Output : Win bernilai true atau false

Procedur menang;

1. [Mengecek kartu kembarnya yang ada]

1.1. temp akan diisi dengan 2

1.2. posisi kartu kembar akan diberi tanda agar kartu tersebut tidak digunakan untuk yang lain lagi.

2. [Mencari semua kemungkinan dimulai dari sang]

2.1. jika ada sang maka temp akan ditambahkan 3

2.2. posisi kartu sang akan diberi tanda agar kartu tersebut tidak digunakan untuk yang lain lagi.

3. [Mencari semua kemungkinan pong]

3.1. jika ada pong maka temp akan ditambahkan 3

3.2. posisi kartu pong akan diberi tanda agar kartu tersebut tidak digunakan untuk yang lain lagi.

4. [Melakukan backtrak untuk mencoba semua kemungkinan]

4.1. jika temp sama dengan jumlah kartu maka kartu tersebut telah menang 4.2. jika kemenangan belum dicapai maka posisi sang yang terakhir akan

dibatalkan lalu mengecek kemungkinan pong lagi 4.3. temp akan dikurangi 3

4.4. hal tersebut diatas akan diulangi terus sampai tidak ada sang lagi 5. [Jika kemenangan belum tercapai maka akan dicoba dari pong dulu]

5.1. jika ada pong maka temp akan ditambahkan 3

5.2. posisi kartu pong akan diberi tanda agar kartu tersebut tidak digunakan untuk yang lain lagi.

6. [Mencari semua kemungkinan sang]

6.1. jika ada sang maka temp akan ditambahkan 3

6.2. posisi kartu sang akan diberi tanda agar kartu tersebut tidak digunakan untuk yang lain lagi.

7. [Melakukan backtrak untuk mencoba semua kemungkinan]

7.1. jika temp sama dengan jumlah kartu maka kartu tersebut telah menang 7.2. jika kemenangan belum dicapai maka posisi pong yang terakhir akan dibatalkan lalu mengecek kemungkinan sang lagi

7.3. temp akan dikurang 3

7.4. hal tersebut diatas akan diulangi terus sampai tidak ada pong lagi 8. [Jika kemenangan belum tercapai juga maka akan dicoba dari kartu kembar

yang lain]

8.1. temp akan kembali bernilai 2

8.2. akan mengulangi semua perintah diatas sampai kemungkinan kembar telah dipakai semua

(17)

Dari algoritma diatas penulis akan menampilkan potongan program penting untuk menentukan pemenang agar dapat dilihat lagi dengan lebih jelas.

Segmen 3.3. Cek Kemenangan

for i:=0 to 13 do kartutemp[i]:=false;

s:=0;t:=0;

win[p]:=false;

{pengulangan}

if kembar > 0 then begin

for i:=1 to kembar do begin

for j:=0 to 13 do kartutemp[j]:=false;

kartutemp[status_kembar[i,1]]:=true;

kartutemp[status_kembar[i,2]]:=true;

f:=2;

{======cari kemungkinan dari sang dulu=====}

if sang>0 then begin

cari_sang;

if pong>0 then cari_pong;

while (f<>(sisa_player[p]+1)) and (s>0) do begin

f:=f-3;

kartutemp[bs[s,1]]:=false;

kartutemp[bs[s,2]]:=false;

kartutemp[bs[s,3]]:=false;

dec(s);

if pong>0 then cari_pong;

end;

end;

if f=(sisa_player[p]+1) then win[p]:=true;

end;

{==============cari kemungkinan dari pong======}

if win[p]=false then begin

for i:=1 to kembar do begin

for j:=0 to 13 do kartutemp[j]:=false;

kartutemp[status_kembar[i,1]]:=true;

kartutemp[status_kembar[i,2]]:=true;

f:=2;

if pong>0 then begin

cari_pong;

if sang>0 then cari_sang;

while (f<>(sisa_player[p]+1)) and (t>0) do begin

f:=f-3;

kartutemp[bs[t,1]]:=false;

kartutemp[bs[t,2]]:=false;

kartutemp[bs[t,3]]:=false;

dec(t);

if sang>0 then cari_sang;

end;

(18)

end;

if f=(sisa_player[p]+1) then win[p]:=true end;

end;

end;

3.2.3.8. Cek Ada Pong Setelah Buang Kartu

Kartu yang telah dibuang oleh pemain lain harus dicek dengan semua kartu pemain yang lain. Hal ini karena dalam Mahjong, terdapat perintah pong.

Pong adalah perintah dimana pemain dapat mengambil kartu dari pemain mana saja, tidak terikat dengan urutan permainan. Jadi jika salah seorang pemain mengatakan pong, maka permainan langsung akan berpindah tangan dari pemain yang membuang kartu ke pemain yang menyatakan pong. Misalnya jika pemain ke-1 membuang kartu dan di pong oleh pemain ke-4, maka pemain ke-2 dan ke-3 akan terlewati. Permainan akan berjalan seperti biasa lagi dan tidak kembali pada pemain ke-2 dan ke-3. Permainan akan dilanjutkan lagi oleh pemain ke-1 setelah pemain ke-4 membuang kartunya. Dibawah ini akan ditampilkan potongan program untuk perpindahan pemain karena pong.

Segmen 3.4. Pindah Pemain

ada_pong := false;

temp_play_cek:=play;

for i:=1 to 3 do begin

if ada_pong = false then begin

temp_play_cek:=temp_play_cek+1;

if temp_play_cek>4 then temp_play_cek:=temp_play_cek-4;

adajalan(next_card,temp_play_cek);

for j:=1 to 12 do begin

if ada_pong = false then begin

if jalan[4,j] = true then begin

ada_pong:=true;

yang_main:=temp_play_cek;

play_sementara:=play;

permainan.pass.Enabled:=true;

end;

end;

end;

end;

end;

(19)

Untuk lebih jelasnya dapat dilihat dari flowchart pada gambar 3.7.

Tidak

Tidak

Ya Ya

Tidak

Ya

Gambar.3.7. Flowchart Pindah Pemain

3.2.3.9. Cek Ada Jalan

Jika pada kartu yang dibuang tidak di pong oleh pemain lain, maka akan dicek jalan yang bisa dilakukan oleh pemain selanjutnya. Pemain dapat memilih perintah-perintah untuk mengambil kartu dengan cara yang diinginkan. Tombol perintah akan diaktifkan apabila ada jalan yang bisa diambil oleh pemain tersebut.

Start

Pemain [X] membuang kartu Ulang=0

Y=X

Pemain [Y]

ada pong Inc(Y) Inc(Ulang)

Ulang=3

Makan Pong Yang main Pemain [X+1]

Finish Yang main Pemain [Y]

Cek kemungkinan Jalan yang ada

(20)

Dalam prosedur cek ada jalan ini, program pertama-tama melakukan membuat tombol untuk makan menjadi non-aktif. Program akan mencari kemungkinan sang yang dari bawah. Jika ada jalan maka tombol untuk sang bawah akan diaktifkan dan tempatnya akan dimasukkan ke dalam array. Begitu juga dengan kemungkinan jalan yang lain seperti sang tengah, sang atas, pong dan kong. Cek ada jalan ini melibatkan kartu selanjutnya yang telah dibuang oleh pemain lain. Untuk lebih jelasnya dapat dilihat pada program cak ada jalan dibawah ini.

3.2.3.10. Mengambil Kartu Dari Pemain Lain

Mengambil kartu dari pemain lain ada lima cara. Mengambil dengan pong dan kong. Cara mengambil sang dibedakan menjadi 3 cara. Mengambil kartu yang berada lebih kecil daripada kartu yang ada pada pemain disebut sang bawah.

Kartu yang berada di tengah kartu pemain disebut sang tengah. Sedangkan kartu yang nilainya lebih besar dari kartu pemain disebut sang atas.

Kartu yang telah digunakan untuk mengambil kartu pemain lain, tidak bisa lagi digunakan dalam permainan. Kartu tersebut akan diperlihatkan kepada semua pemain sebagai bukti untuk mengambil kartu pemain lain.

Dalam program telah disediakan lima tombol perintah untuk masing- masing perintah. Setelah penekanan tombol perintah tersebut, kartu akan digambarkan terbuka agar semua pemain dapat melihatnya. Begitu juga jika komputer mangambil kartu pemain lain, kartunya akan digambarkan dalam keadaan terbuka dan agak dipisahkan dari kartu yang dipegang komputer.

3.2.3.11. Cara Koneksi dan Penentuan Pemain

Cara koneksi antar komputer menggunakan fasilitas Dwinsock pada Delphi. Komponen yang digunakan adalah komponen TextClient dan TextServer.

Untuk Server yang pertama-tama dilakukan Server akan listen pada Client yang mau melakukan koneksi. Client akan bisa melakukan koneksi selama permainan belum dimulai. Hal ini disebabkan karena jika program belum mulai, setiap ada Client yang masuk maka jumlah pemain akan ditambahkan. Setelah permainan

(21)

dimulai, jumlah pemain tidak akan bertambah lagi dan sisa pemain akan langsung diisi dengan komputer.

Client yang melakukan koneksi akan ditentukan Server, ia adalah pemain keberapa yang masuk. Pemain yang pertama kali masuk akan dijadikan pemain kedua. Begitu juga dengan pemain yang masuk kedua dan ketiga akan menjadi pemain ketiga dan keempat. Proses menentukan banyak pemain dapat dilihat dengan jelas pada gambar 3.8.

Ya

Tidak

Tidak

Ya

Gambar 3.8. Flowchart Proses Penentuang Banyak Pemain

3.2.3.12. Cara Mengirim Data dan Menerima Data Dari Client

Cara mengirim data dari Server ke Client dengan menggunakan kata sandi. Dalam program ini, Server hanya mengirimkan satu kalimat saja. Dari kalimat tersebut Client akan mengolahnya dan merubahnya menjadi berbagai macam perintah-perintah. Cara yang dipakai dengan perintah ‘copy’ untuk membagi kalimat menjadi perintah. Client memberitahu jalan yang diambilnya dengan mengirimkan satu kalimat juga kepada Server. Server akan mengolah datanya dan melanjutkan permainan.

Start Finish

Ada Client yang masuk Menunggu Koneksi

Banyak pemain ditambah satu

Permainan telah mulai

(22)

Data yang dikirim Server ke Client adalah sebagai berikut:

a. Data yang menyatakan Client sebagai pemain di urutan yang keberapa.

Pemain dapat mengetahui ia ada diurutan yang keberapa dengan melihat angin yang tertulis di meja permainannya. Kalimat yang dikirimkan Server seperti berikut:

Selatan : pemain yang kedua

Barat : pemain yang ketiga

Utara : pemain yang keempat

b. Data yang menyatakan Client memenangkan permainan atau tidak.

Kalimat yang dikirim Server ke Client untuk mengatakan Client tersebut menang atau tidak adalah seperti berikut:

menang : Client tersebut menang

kalah : Client tersebut kalah

c. Data yang menggambarkan kartu apa yang dipegang oleh Client.

Kalimat yang dikirim Server ke Client untuk mengatakan kartu Client seperti kalimat berikut:

kartu_pemain,00,21,22,34,34,35,37,39,45,45,50,55,55,75Kartu yang dipegang oleh Client ini akan dapat dilihat di gambar 3.9.

d. Data yang menunjukkan tombol apa yang bisa digunakan oleh Client.

Kalimat yang dikirim Server ke Client untuk mengatakan tombol Client yang dapat digunakan adalah seperti berikut:

tombol_pemain,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0’ Tanda 0 berarti tombol tidak aktif dan tanda 1 berarti tombol bisa digunakan.

Angka yang ke-1 sampai ke-14 adalah tombol untuk membuang kartu yang dipegang pemain. Sisa delapan angka yang terakhir adalah untuk tombol cabut, sang_bawah, sang_tengah, sang_atas, pong, kong, menang dan pass.

e. Data yang menggambarkan kartu yang dimakan oleh pemain-pemain dalam permainan Mahjong.

(23)

Kalimat yang dikirim Server ke Client untuk mengatakan kartu yang telah dimakan oleh pemain lain adalah seperti berikut:

makan,1,3,33,34,35,00 : kalimat ini berarti pemain no 1 makan yang ketiga kalinya dengan sang kartu jarum 3,4,5.

makan,2,1,22,22,22,00 : kalimat ini berarti pemain no 2 makan yang pertama kalinya dengan pong kartu bendol 2,2,2.

makan,4,4,45,45,45,45 : kalimat ini berarti pemain no 4 makan yang keempat kalinya dengan kong kartu angin timur.

Gambar 3.9. Contoh Gambar Kartu

f. Data yang menggambarkan kartu yang dibuang oleh pemain.

Kalimat yang dikirim Server ke Client untuk mengatakan kartu yang dibuang para pemain adalah seperti berikut:

kartu_buang,18 : kalimat ini berarti kartu 8 wan

kartu_buang,36 : kalimat ini berarti kartu 6 jarum

g. Data yang menunjukkan sisa kartu yang tersedia ditengah meja permainan.

Kalimat yang dikirim Server ke Client untuk mengatakan sisa kartu untuk dicabut adalah seperti berikut:

sisa,56 : artinya sisa 56 kartu

sisa,84 : artinya sisa 84 kartu

Data yang dikirim Client ke Server adalah sebagai berikut:

a. 0 : membuang kartu pada angka 0.

b. 1 : membuang kartu pada angka 1.

c. 2 : membuang kartu pada angka 2.

d. 3 : membuang kartu pada angka 3.

e. 4 : membuang kartu pada angka 4.

f. 5 : membuang kartu pada angka 5.

(24)

g. 6 : membuang kartu pada angka 6.

h. 7 : membuang kartu pada angka 7.

i. 8 : membuang kartu pada angka 8.

j. 9 : membuang kartu pada angka 9.

k. 10 : membuang kartu pada angka 10.

l. 11 : membuang kartu pada angka 11.

m. 12 : membuang kartu pada angka 12.

n. 13 : membuang kartu pada angka 13.

o. sangbawah : makan sang bawah.

p. sangtengah : makan sang tengah.

q. sangatas : makan sang atas.

r. pong : makan pong.

s. kong : makan kong.

t. menang : memenangkan permainan.

u. pass : tidak mau pong saat ada perpindahan pemain karena pong.

Sewaktu Client menerima data dari Server, Client akan mengecek kalimat yang masuk dan membaginya sesuai dengan perintah dari kalimat utama. Cara membagi kalimat yang masuk dengan menggunakan perintah ‘copy’ dalam Delphi. Misalnya jika kalimat yang masuk adalah ‘sisa,54’ maka komputer akan mengecek kalimat utama ‘sisa’ dan memasukkan ‘54’ kedalam variabel sisa kartu.

Referensi

Dokumen terkait

Pada aliran sistem informasi (ASI) sistem pengarsipan digital pada Sub Bagian Organisasi, Kepegawaian dan Penyusunan Peraturan IAIN Batusangkar ini penulis

Pada penelitian ini kami menemukan proporsi SGPA 38,2% atau lebih dari sepertiga kasus neonatus yang mengalami gawat napas. Proporsi yang kami temukan pada penelitian

Grafik perubahan nilai “b” kentang dengan coating Aloe vera Berdasarkan ketiga gambar di atas, dapat disimpulkan bahwa waktu perendaman kentang pada gel Aloe vera

 Tapi kalo sub-menu/sub-rubrik “JALAN” di-klik, maka akan muncul box/kotak penjelasan baru (penjelasan bukan bubble di atas karakter).. Pada contoh website yang

Seperti yang penulis sebutkan di atas bahwa Munas Alim Ulama tahun 1983 di Situbondo memutuskan hal terpenting yaitu NU menerima Pancasila dan memulihkan NU

Dalam hal ini, pembacaan hermenitik menghasilkan pemahan bahwa masyarakat beranggapan generasi muda sekarang (generasi Z) merupakan generasi yang

Akibat muka air laut relatif yang turun, terendapkan perselingan fasies grainstone (Gm) dan fasies packstone (Pm) dengan sisipan fasies batulempung (Cm) yang

Jika pemain ingin keluar maka pemain dapat memilih opsi quit dan pemain akan dikeluarkan menuju quest menu, jika tidak memilih quit maka player akan