Programming Forums
User Name Password Register
 

RSS Feed
FORUM INDEX | TODAY'S POSTS | UNANSWERED THREADS | ADVANCED SEARCH

Reply
 
Thread Tools Display Modes
Old Sep 9th, 2004, 11:11 PM   #1
Mjordan2nd
The Supreme Ruler
 
Join Date: May 2004
Location: Houston
Posts: 1,476
Rep Power: 6 Mjordan2nd is on a distinguished road
Well, we've been working on a Checkers program in Computer Science 3 for around 3 days now. This is an unfinished, and probably badly coded program, but it works for the most part. It does have it's share of bugs, though. First of all, if you click a piece that can't move anywhere, you're stuck. You have to restart the game. Also, the pieces are able to move in an L-shape at time, which I will fix. Also the king can move 2 squares, so I'll need to fix that, and occasionally the left-most colum crashes the code for some reason. Also, I haven't added code to check for a win yet. I'll do all this later. I'll fix these bugs, but at a later time. I will also attach all the images for the board and the pieces at a later time. This is what I have so far:

Board.java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;


public class Board extends JPanel
{
	
	public Piece board[][] = new Piece[8][8];
	private Image boardImage = Toolkit.getDefaultToolkit().getImage("Board.JPG");
	private Image greyPieceImage = Toolkit.getDefaultToolkit().getImage("greyPiece.JPG");
	private Image redPieceImage = Toolkit.getDefaultToolkit().getImage("redPiece.JPG");
	private Image redKingImage = Toolkit.getDefaultToolkit().getImage("redKing.jpg");
	private Image greyKingImage = Toolkit.getDefaultToolkit().getImage("greyKing.jpg");
	
	public Board(){
 
 for(int x = 0; x < board.length; x++)
 	for(int y = 0; y < board[x].length; y++)
  board[x][y]= new Piece(0, false);
 
 setBoard();
 repaint();
 show();
	}
	
	public void setBoard(){
 
 for(int c = 0; c <= 2; c++){
 	
 	if(c == 1){
  
  for(int r = 0; r <= 6; r+=2){
  	
  	board[c][r].setPlayer(1);
  	
  }
  
 	}
 	
 	if(c == 0 || c==2){
  
  for(int r = 1; r <= 7; r+=2){
  	
  	board[c][r].setPlayer(1);
  	
  }
  
 	}
 	
 }
 
 //----------------------------------------------\\
 
 for(int c = 7; c >= 5; c--){
 	
 	if(c == 7 || c == 5){
  
  for(int r = 0; r <= 6; r+=2){
  	
  	board[c][r].setPlayer(2);
  	
  }
  
 	}
 	
 	if(c == 6){
  
  for(int r = 1; r <= 7; r+=2){
  	
  	board[c][r].setPlayer(2);
  	
  }
  
 	}
 	
 }
 
 for(int x = 0; x < board.length; x++){
 	
 	for(int y = 0; y < board[x].length; y++){
  
  System.out.print(board[x][y].getPlayer() + " ");
  
 	}
 	
 	System.out.println();
 	
 }
 
	}
	
	public void paint(Graphics window){
 
 window.drawImage(boardImage, 0, 0, 320, 320, this);
 
 for(int i = 0; i<8; i++)
 {
 	for(int j = 0; j<8; j++)
 	{
  if(board[i][j].getPlayer()==1)
  {
  	window.drawImage(redPieceImage, 40*j, 40*i, 39, 39, this);	
 	// System.out.println("1");
  }
  
  if(board[i][j].getPlayer()==2)
  {
  	window.drawImage(greyPieceImage, 40*j, 40*i, 39, 39, this);	
  //	System.out.println("2");
  }
  
  if(board[i][j].getPlayer()==3)
  {
  	window.drawImage(redKingImage, 40*j, 40*i, 39, 39, this);
  }
  
  if(board[i][j].getPlayer()==4)
  {
  	window.drawImage(greyKingImage, 40*j, 40*i, 39, 39, this);
  }
 	}
 }
 
	}
	
}

Checkers.java:

public class Checkers {
  
  public static void main(String[] args) {
    // Create application frame.
    CheckersFrame frame = new CheckersFrame();
    
    // Show frame
    frame.setVisible(true);
  }
}

Piece.java:

public class Piece
{
	
	private int player = 0;
	private boolean king = false;
	
	public Piece(){
	}
	
	public Piece(int x, boolean y){
 
 player = x;
 king = y;
 
	}
	
	public void setPlayer(int x){
 
 player = x;
 
	}
	
	public int getPlayer(){
 
 return player;
 
	}
	
	public void setKing(boolean k)
	{
 king = k;
	}
	
	public boolean getKing()
	{
 return king;
	}
}

CheckersFrame.java:

import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.DecimalFormat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.MouseListener;

public class CheckersFrame extends JFrame implements MouseListener
{
   
   Board myBoard = new Board(); 
   int currentPieceValue = -999;
   int firstX, firstY;
   int turn = 1;
   
   
   public CheckersFrame() {
        
    MenuBar menuBar = new MenuBar();
    Menu menuFile = new Menu();
    MenuItem menuFileExit = new MenuItem();
    
    menuFile.setLabel("File");
    menuFileExit.setLabel("Exit");
    
    // Add action listener.for the menu button
    menuFileExit.addActionListener
    (
      new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          CheckersFrame.this.windowClosed();
        }
      }
    ); 
    menuFile.add(menuFileExit);
    menuBar.add(menuFile);
    
    setTitle("Checkers");
    setMenuBar(menuBar);
    setSize(new Dimension(330, 370));
    
    // Add window listener.
    this.addWindowListener
    (
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          CheckersFrame.this.windowClosed();
        }
      }
    ); 
    
    // add MouseListener and multiple value by 40 then pass to drawboard
    
    Container screen;
  	screen = getContentPane();
  	JPanel row0 = new JPanel();
  	row0.setLayout( new GridLayout(1,1,1,1));
 screen.add(row0);
 row0.removeAll();
  	row0.add(myBoard); 
  	row0.updateUI();
  	row0.addMouseListener(this);
    
  }
  
  
  public void mouseClicked(MouseEvent e)
  {
  	
  	
  	int x = (e.getX()/40);
  	int y = (e.getY()/40);
  	
  	if(currentPieceValue == -999)
  	{
   firstX = x;
   firstY = y;
   currentPieceValue = myBoard.board[y][x].getPlayer();
   if(currentPieceValue==0)	
   {
   	currentPieceValue = -999;
   }
   myBoard.board[y][x].setPlayer(0);
   System.out.println(currentPieceValue);
  	}
  	
  	else if(currentPieceValue != 999 && myBoard.board[y][x].getPlayer() == 0)
  	{
   if(currentPieceValue==1 && (x == firstX+1 || x == firstX-1 || x == firstX+2 || x == firstX-2) && ((y == firstY+1 || y == firstY+2))) //&& turn == 1)
   {
    
   	if((x == firstX+2 || x == firstX-2) && (y == firstY+2))
   	{
    if(x == firstX + 2 && y == firstY+2 && myBoard.board[y-1][x-1].getPlayer() == 2 || myBoard.board[y-1][x-1].getPlayer() == 4)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	
    	if(y==7)
    	{
     myBoard.board[y][x].setPlayer(3);
    	}
    	
    	currentPieceValue = -999;
    	myBoard.board[y-1][x-1].setPlayer(0);
    	myBoard.repaint();
    
    }
   	
    else if(x == firstX - 2 && y == firstY+2 && myBoard.board[y-1][x+1].getPlayer() == 2 || myBoard.board[y-1][x+1].getPlayer() == 4)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	
    	if(y==7)
    	{
     myBoard.board[y][x].setPlayer(3);
    	}
    	
    	currentPieceValue = -999;
    	myBoard.board[y-1][x+1].setPlayer(0);
    	myBoard.repaint();
    }
   	}
    
   	
   	else
   	{
    
    myBoard.board[y][x].setPlayer(currentPieceValue);
    if(y==7)
    {
    	myBoard.board[y][x].setPlayer(3);
    }
    
    currentPieceValue = -999;
    turn = 2;
    myBoard.repaint();	
   	}
   }
  	/////////////////////////////////////red on top; black on bottom///////////////////	
   else if(currentPieceValue==2 && (x == firstX+1 || x == firstX+2 || x == firstX-1 || x==firstX-2) && ((y == firstY-1) || y == firstY-2))// && turn == 2)
   {
   	
   	if((x == firstX+2 || x == firstX-2) && (y == firstY-2))
   	{
    if(x == firstX + 2 && y == firstY-2 && myBoard.board[y+1][x-1].getPlayer() == 1 || myBoard.board[y+1][x-1].getPlayer() == 3)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	if(y==0)
    	{
     myBoard.board[y][x].setPlayer(4);
    	}
    	currentPieceValue = -999;
    	myBoard.board[y+1][x-1].setPlayer(0);
    	myBoard.repaint();
    	
    }
    
    else if(x == firstX - 2 && y == firstY-2 && myBoard.board[y+1][x+1].getPlayer() == 1 || myBoard.board[y+1][x+1].getPlayer() == 3)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	if(y==0)
    	{
     myBoard.board[y][x].setPlayer(4);
    	}
    	currentPieceValue = -999;
    	myBoard.board[y+1][x+1].setPlayer(0);
    	myBoard.repaint();
    }
   	}
   	
   	else
   	{
    myBoard.board[y][x].setPlayer(currentPieceValue);
    
    if(y==0)
    {
    	myBoard.board[y][x].setPlayer(4);
    }
    
    currentPieceValue = -999;
    turn = 1;
    myBoard.repaint();	
   	}
   	
   }
   
   else if(currentPieceValue == 3 && (x == firstX+1 || x == firstX+2 || x == firstX-1 || x==firstX-2) && ((y == firstY-1 || y == firstY-2 || y == firstY+1 || y==firstY+2)))
   {
   	
      if(x == firstX + 2 && y == firstY-2 && myBoard.board[y+1][x-1].getPlayer() == 2)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y+1][x-1].setPlayer(0);
    	myBoard.repaint();
    }
   	
   	
    else if(x == firstX - 2 && y == firstY-2 && myBoard.board[y+1][x+1].getPlayer() == 2)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y+1][x+1].setPlayer(0);
    	myBoard.repaint();
    }
    
    else if(x == firstX+2 && y == firstY + 2 && myBoard.board[y-1][x-1].getPlayer() == 2)	
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y-1][x-1].setPlayer(0);
    	myBoard.repaint();
    }
    
    else if(x == firstX-2 && y == firstY + 2 && myBoard.board[y-1][x+1].getPlayer() == 2)	
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y-1][x+1].setPlayer(0);
    	myBoard.repaint();
    }
    
   	else
   	{
    myBoard.board[y][x].setPlayer(currentPieceValue);
    currentPieceValue = -999;
    turn = 1;
    myBoard.repaint();	
    
    
   	}
   }
   
   
   else if(currentPieceValue == 4 && (x == firstX+1 || x == firstX+2 || x == firstX-1 || x==firstX-2) && ((y == firstY-1 || y == firstY-2 || y == firstY+1 || y==firstY+2)))
   {
   
    if(x == firstX + 2 && y == firstY-2 && myBoard.board[y+1][x-1].getPlayer() == 1)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y+1][x-1].setPlayer(0);
    	myBoard.repaint();
    }
   	
   	
    else if(x == firstX - 2 && y == firstY-2 && myBoard.board[y+1][x+1].getPlayer() == 1)
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y+1][x+1].setPlayer(0);
    	myBoard.repaint();
    }
    
    else if(x == firstX+2 && y == firstY + 2 && myBoard.board[y-1][x-1].getPlayer() == 1)	
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y-1][x-1].setPlayer(0);
    	myBoard.repaint();
    }
    
    else if(x == firstX-2 && y == firstY + 2 && myBoard.board[y-1][x+1].getPlayer() == 1)	
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	myBoard.board[y-1][x+1].setPlayer(0);
    	myBoard.repaint();
    }
    
    else
    {
    	myBoard.board[y][x].setPlayer(currentPieceValue);
    	currentPieceValue = -999;
    	turn = 1;
    	myBoard.repaint();	
    }
    
   	
   }
   
  	}
  	
  }
  
  public void mouseReleased(MouseEvent e){}
  public void mousePressed(MouseEvent e){}
  public void mouseEntered(MouseEvent e){}
  public void mouseExited(MouseEvent e){}


  
  
  
  
  
  /**
   * Shutdown procedure when run as an application.
   */
  protected void windowClosed() {
  	
  	// TODO: Check if it is safe to close the application
  	
    // Exit application.
    System.exit(0);
  }
  
}

That's it.
__________________
&quot;Every gun that is made, every warship launched, every rocket signifies, in the final sense, a theft from those who hunger and are not fed, from those who are cold and are not clothed. The world in arms is not spending money alone. It is spending the sweat of its laborers, the genius of its scientists, the hopes of its children.&quot; - Dwight D. Eisenhower
Mjordan2nd is offline   Reply With Quote
Old Sep 9th, 2004, 11:28 PM   #2
Infinite Recursion
Programming Guru
 
Infinite Recursion's Avatar
 
Join Date: Jul 2004
Location: United States
Posts: 3,467
Rep Power: 8 Infinite Recursion is on a distinguished road
Send a message via MSN to Infinite Recursion Send a message via Yahoo to Infinite Recursion
looks cool. i will have to compile this on my box this weekend... perhaps I can help you get the things you mentioned working if time permits.
__________________
http://jasonpowers.net

"There are a thousand hacking at the branches of evil to one who is striking at the root."
Infinite Recursion is offline   Reply With Quote
Old Sep 10th, 2004, 3:15 AM   #3
Berto
Programming Guru
 
Join Date: Aug 2004
Posts: 1,022
Rep Power: 6 Berto is on a distinguished road
Send a message via AIM to Berto Send a message via MSN to Berto
Just a bit of advice, it wont affect performance i dont think, but in piece, a new piece will never be a king? if that is true you dont need to set king variable on load of the piece. Just set it to false in global variable.
__________________
"Put your hand on a hot stove for a minute, and it seems like an hour. Sit with a pretty girl for an hour, and it seems like a minute. THAT'S relativity."

- Albert Einstein
Berto is offline   Reply With Quote
Old Sep 10th, 2004, 5:51 AM   #4
Mjordan2nd
The Supreme Ruler
 
Join Date: May 2004
Location: Houston
Posts: 1,476
Rep Power: 6 Mjordan2nd is on a distinguished road
Good point. Actually, I'm not using my king variable at all, as I originally planned to. I need to go through and clean up the code a little before I actually turn it in. Thanks for the advice.
__________________
&quot;Every gun that is made, every warship launched, every rocket signifies, in the final sense, a theft from those who hunger and are not fed, from those who are cold and are not clothed. The world in arms is not spending money alone. It is spending the sweat of its laborers, the genius of its scientists, the hopes of its children.&quot; - Dwight D. Eisenhower
Mjordan2nd is offline   Reply With Quote
Old Sep 10th, 2004, 5:55 AM   #5
Berto
Programming Guru
 
Join Date: Aug 2004
Posts: 1,022
Rep Power: 6 Berto is on a distinguished road
Send a message via AIM to Berto Send a message via MSN to Berto
I would try to help with the few bugs you have but i am not a graphics programmer, i am either web or command line running programs at the minute, need to span out a bit just dont have the time.

And you must use your king variable at some point? otherwise, its not really object orientated, as the piece is either a king or not a king, so just calling your getKing method would save a lot of computations to work that out.
__________________
"Put your hand on a hot stove for a minute, and it seems like an hour. Sit with a pretty girl for an hour, and it seems like a minute. THAT'S relativity."

- Albert Einstein
Berto is offline   Reply With Quote
Reply

Bookmarks

« Previous Thread in Forum | Next Thread in Forum »

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump




DaniWeb IT Discussion Community
All times are GMT -5. The time now is 12:24 PM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC