4.2. Tampilan Program Aplikasi Dan Potongan Listing Program
4.2.2. Menu Game
4.2.2.3. Scene Chat
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
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.
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 && 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.
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"));
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
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;
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; }
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.