Tuesday, November 29, 2011

CATUR SEDERHANA dengan JAVA (TUGAS 3 DDP)

package Chess;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
*
* @author Resika Arthana, Samuel Louvan
*/
public class CForm extends JFrame implements MouseListener {

public static PanelChess[][] panel = new PanelChess[8][8];
PanelChess PanelTemp; //menampung panel yang diklik sebelumnya
Piece pieceTemp; //menampung piece yang diklik sebeluumnya
Color cBackgroundJP; //menyimpan warna panel yang diklik

public static void main(String args[]) {
CForm cf = new CForm();
cf.createMainBoard();
}

public void createMainBoard() {
JFrame mainBoard = new JFrame();
mainBoard.setResizable(false);
mainBoard.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainBoard.setLayout(new BorderLayout());
mainBoard.add(createMenuPanel(), BorderLayout.NORTH);
mainBoard.add(createChessBoard(), BorderLayout.CENTER);
mainBoard.setSize(600, 700);
mainBoard.setVisible(true);
}

public JPanel createMenuPanel() {
JPanel panelMenu = new JPanel();


return panelMenu;
}

public JPanel createChessBoard() {
JPanel jf = new JPanel();
jf.setLayout(new GridLayout(8, 8)); //gunakan layout grid 8 x 8
jf.setSize(600, 600);
//PanelChess sebagai panel untuk menampung piece
/*
* Selanjutnya mengatur warna panel menjadi hitam dan putih
*/
boolean isBlack = true;

for (int i = 0; i < 8; i++) {
isBlack = (i % 2 == 0 ? true : false);
for (int j = 0; j < 8; j++) {
panel[i][j] = new PanelChess();
panel[i][j].setPosition(i, j);
/* TODO IMPLEMENTASI ANDA*/
if (isBlack) {
panel[i][j].setBackground(Color.BLACK);
} else {
panel[i][j].setBackground(Color.WHITE);
}
isBlack = !isBlack;
panel[i][j].addMouseListener(this); //menambah listener
jf.add(panel[i][j]);
}
}

/*
* Selanjutnya menambah piece pada panel
*/
for (int x = 0; x < 8; x++) {
panel[6][x].add(new Pawn());
}
panel[7][1].add(new Knight());
panel[7][6].add(new Knight());
panel[7][0].add(new Rook());
panel[7][7].add(new Rook());
panel[7][2].add(new Bishop());
panel[7][5].add(new Bishop());
panel[7][4].add(new King());
panel[7][3].add(new Queen());

/* TODO IMPLEMENTASI ANDA
Tambahkan piece catur yang lain ke dalam panel
yaitu Rook, Knight, Bishop, King Queen */


jf.setVisible(true);

return jf;
}

public void mouseClicked(MouseEvent e) {
PanelChess panelChess = (PanelChess) e.getComponent();
/* jika tidak ada piece yang diklik sebelumnya (pieceTemp kosong) maka
* jika panelChess yang diklik terdapat piece maka ambil piece tersebut
* simpan piecetemp, panel juga disimpan
* Jika ada piece yang diklik selanjutnya maka
* jika panelChess yang diklik saat ini kosong maka taruh piece yang ada pada piecetemp
* jika ternyata pada panelchess sudah ada piece maka anggap piece tersebut yang akan dipindah
*/
if (pieceTemp == null) {
if (panelChess.getComponentCount() != 0) {
Piece piece = (Piece) panelChess.getComponents()[0];
PanelTemp = panelChess;
pieceTemp = piece;
cBackgroundJP = panelChess.getBackground();
panelChess.setBackground(Color.GREEN);
panelChess.updateUI();
pieceTemp.updateUI();
}
} else {
PanelTemp.setBackground(cBackgroundJP);
if (panelChess.getComponentCount() == 0) {
/* KASUS VALID*/
if (pieceTemp.isValidMove(PanelTemp.getRowPosition(), PanelTemp.getColPosition(), panelChess.getRowPosition(), panelChess.getColPosition())) {
panelChess.add(pieceTemp);
PanelTemp.removeAll();
PanelTemp.updateUI();
panelChess.updateUI();
pieceTemp.updateUI();
pieceTemp = null;
} else {
/* KASUS TIDAK VALID
TODO IMPLEMENTASI ANDA
.....*/
PanelTemp.setBackground(Color.RED);
JOptionPane.showMessageDialog(null, "Langkah Anda tidak benar /n Silahkan coba lagi ^_^");

}

} else {
Piece piece = (Piece) panelChess.getComponents()[0];
PanelTemp = panelChess;
pieceTemp = piece;
cBackgroundJP = panelChess.getBackground();
panelChess.setBackground(Color.GREEN);
panelChess.updateUI();
pieceTemp.updateUI();
}

}
}

public void mousePressed(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}

public void mouseReleased(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}

public void mouseEntered(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}

public void mouseExited(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}
}



+++++++++++++++++++++++++++++++++++++++++++++++++

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Chess;

/**
*
* @author amin
*/
public class Bishop extends Piece {

public Bishop(){

super("/Chess/resource/bishop.png");
}
public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol) {
boolean validMove = (Math.abs(oldRow-newRow)==Math.abs(oldCol-newCol));
boolean noPawn=true;

int y = oldRow;
int x = oldCol;

for (int i=0; inewCol){
if(oldRow>newRow){
x--;
y--;
}else{
x--;
y++;
}
}else{
if(oldRow>newRow){
x++;
y--;
}else{
x++;
y++;
}
}

if(CForm.panel[y][x].getComponentCount()!=0){
noPawn = false;
break;
}


}

return validMove && noPawn;
}



}


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Chess;

/**
*
* @author amin
*/
public class King extends Piece {

public King(){

super("/Chess/resource/king.png");
}
public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol) {
return ((oldCol==newCol)&&( Math.abs(oldRow-newRow)==1)||(Math.abs(oldCol-newCol)==1)&&( oldRow==newRow)||(Math.abs(oldCol-newCol)==1)&&Math.abs( oldRow-newRow)==1);
}



}


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Chess;

/**
*
* @author amin
*/
public class Knight extends Piece {

public Knight(){

super("/Chess/resource/knight.png");
}
public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol) {

return ((Math.abs(oldRow-newRow)==1 &&Math.abs(oldCol-newCol)==2)|| (Math.abs(oldRow-newRow)==2&&Math.abs(oldCol-newCol)==1));

}
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

package Chess;
import javax.swing.JPanel;
/**
*
* @author Resika Arthana
*/
public class PanelChess extends JPanel {
private int rowPosition=0;
private int colPosition=0;

public void setPosition(int rowPosition, int colPosition){
this.rowPosition=rowPosition;
this.colPosition=colPosition;
}
public int getRowPosition(){
return rowPosition;
}
public int getColPosition(){
return colPosition;
}

}
+++++++++++++++++++++++++++++++++++++++++++++++++


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package Chess;
/**
*
* @author Resika Arthana, Samuel Louvan
*/
public class Pawn extends Piece {

public Pawn(){

super("/Chess/resource/pawn.png");
}
public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol) {
return ((oldCol==newCol && oldRow-newRow==1) || ((oldCol==newCol) && (oldRow==6) && (oldRow-newRow==2) && (CForm.panel[5][oldCol].getComponentCount()==0)));
}



}


++++++++++++++++++++++++++++++++++++++++++++++++++++++++

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package Chess;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

/**
*
* @author Resika Arthana, Samuel Louvan
*/
public abstract class Piece extends JLabel {
abstract public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol);
public Piece(String str) {
this.setIcon(new ImageIcon(getClass().getResource(str)));
}
}


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Chess;

/**
*
* @author amin
*/
public class Queen extends Piece {

public Queen(){

super("/Chess/resource/queen.png");
}
public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol) {
boolean validMove = ((Math.abs(oldRow-newRow)==Math.abs(oldCol-newCol))||((oldRow==newRow)||(oldCol==newCol)));
boolean noPawn=true;
int start = 0;
int end = 0;

if (oldCol==newCol){
if (oldRow>newRow)
{
start = newRow;
end=oldRow;
}else{
start = oldRow;
end=newRow;
}
for(int i = start+1; inewCol)
{
start = newCol;
end=oldCol;
}else{
start = oldCol;
end=newCol;
}
for(int i = start+1; inewCol){
if(oldRow>newRow){
x--;
y--;
}else{
x--;
y++;
}
}else{
if(oldRow>newRow){
x++;
y--;
}else{
x++;
y++;
}
}

if(CForm.panel[y][x].getComponentCount()!=0){
noPawn = false;
break;
}


}



return validMove && noPawn;
}



}




+++++++++++++++++++++++++++++++++++++++++


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Chess;

/**
*
* @author amin
*/
public class Rook extends Piece {

public Rook(){

super("/Chess/resource/rook.png");
}
public boolean isValidMove(int oldRow, int oldCol, int newRow, int newCol) {
boolean validMove = (oldRow==newRow)||(oldCol==newCol);
boolean noPawn = true;

int start = 0;
int end = 0;

if (oldCol==newCol){
if (oldRow>newRow)
{
start = newRow;
end=oldRow;
}else{
start = oldRow;
end=newRow;
}
for(int i = start+1; inewCol)
{
start = newCol;
end=oldCol;
}else{
start = oldCol;
end=newCol;
}
for(int i = start+1; i
Facebook