Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
Hei, jeg og 3 andre har et prosjekt, og vi har valgt sjakk. Vi har greid å lage brettet og vi har greid å lagt inn brikkene.

Problemet våres er at vi ikke vet hvordan man legger inn reglene i brikkene. Håper vi kan få noen tips.

 

TAKK :)

 

Hvordan ser klassestrukturen deres ut?

 

Werner

Lenke til kommentar

Vi har først klassen Game som er main programmet som setter opp

JFrame vinduet. Så har vi en klasse Chessboard som legger inn JPanel og metodene

som gjør at vi kan bevege brikkene. Så har vi en klasse Brikke som er ikoner av brikkene

som blir hentet inn av Chessboard.

 

 

ChessBoard klassen ser slik ut:

 

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

public class chessboard1 extends JFrame implements MouseListener, MouseMotionListener {

JLayeredPane layeredPane;

JPanel chessBoard;

JLabel chessPiece;

int x;

int y;

JPanel[][] tabell = new JPanel[8][8];

 

public chessboard1(){

Dimension boardSize = new Dimension(650, 650);

 

// Oppretter Layered Pane og legger til mouselistener og mousemotinlistener

layeredPane = new JLayeredPane();

getContentPane().add(layeredPane);

layeredPane.setPreferredSize(boardSize);

layeredPane.addMouseListener(this);

layeredPane.addMouseMotionListener(this);

 

//Add a chess board to the Layered Pane

 

chessBoard = new JPanel();

layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);

chessBoard.setLayout( new GridLayout(8, 8) );

chessBoard.setPreferredSize( boardSize );

chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);

 

for (int i = 0; i < 64; i++) {

JPanel square = new JPanel( new BorderLayout() );

chessBoard.add( square );

 

int row = (i / 8) % 2;

if (row == 0)

square.setBackground( i % 2 == 0 ? Color.DARK_GRAY : Color.white );

else

square.setBackground( i % 2 == 0 ? Color.white : Color.DARK_GRAY );

}

 

//Legger til brikker

//svarte brikker

 

Brikker brikker = new Brikker();

 

//legger til svarte tarn

JPanel panel = (JPanel)chessBoard.getComponent(0);

panel.add(brikker.tarn());

panel = (JPanel)chessBoard.getComponent(7);

panel.add(brikker.tarn());

 

//legger til svarte hester

panel = (JPanel)chessBoard.getComponent(1);

panel.add(brikker.hest());

panel = (JPanel)chessBoard.getComponent(6);

panel.add(brikker.hest());

 

//legger til svarte lopere

panel = (JPanel)chessBoard.getComponent(2);

panel.add(brikker.loper());

panel = (JPanel)chessBoard.getComponent(5);

panel.add(brikker.loper());

 

//legger til svart- dronning og konge

panel = (JPanel)chessBoard.getComponent(3);

panel.add(brikker.dronning());

panel = (JPanel)chessBoard.getComponent(4);

panel.add(brikker.konge());

 

//legger til svarte bonder

for(int i=0; i<8;i++){

panel = (JPanel)chessBoard.getComponent(8+i);

panel.add(brikker.bonde());

 

}

 

//legger komponentene på brettet inn i en tabell

int teller = 0;

for(int i=0; i<8;i++){

for(int j=0; j<8;j++){

tabell[j] = (JPanel)chessBoard.getComponent(teller);

teller++;

}

}

 

//hvite brikker

 

//legger til hvite tarn

panel = (JPanel)chessBoard.getComponent(56);

panel.add(brikker.tarn1());

panel = (JPanel)chessBoard.getComponent(63);

panel.add(brikker.tarn1());

 

//legger til svarte hester

panel = (JPanel)chessBoard.getComponent(57);

panel.add(brikker.hest1());

panel = (JPanel)chessBoard.getComponent(62);

panel.add(brikker.hest1());

 

//legger til svarte lopere

panel = (JPanel)chessBoard.getComponent(58);

panel.add(brikker.loper1());

panel = (JPanel)chessBoard.getComponent(61);

panel.add(brikker.loper1());

 

//legger til svart- dronning og konge

panel = (JPanel)chessBoard.getComponent(59);

panel.add(brikker.dronning1());

panel = (JPanel)chessBoard.getComponent(60);

panel.add(brikker.konge1());

 

//legger til svarte bonder

for(int i=0; i<8;i++){

panel = (JPanel)chessBoard.getComponent(48+i);

panel.add(brikker.bonde1());

 

}

 

 

 

 

 

 

 

}

 

public void mousePressed(MouseEvent e){

chessPiece = null;

Component c = chessBoard.findComponentAt(e.getX(), e.getY());

 

if (c instanceof JPanel)

return;

 

Point parentLocation = c.getParent().getLocation();

x = parentLocation.x - e.getX();

y = parentLocation.y - e.getY();

chessPiece = (JLabel)c;

chessPiece.setLocation(e.getX() + x, e.getY() + y);

chessPiece.setSize(chessPiece.getWidth(), chessPiece.getHeight());

layeredPane.add(chessPiece, JLayeredPane.DRAG_LAYER);

}

 

//Move the chess piece around

 

public void mouseDragged(MouseEvent me) {

if (chessPiece == null) return;

chessPiece.setLocation(me.getX() + x, me.getY() + y);

}

 

//Drop the chess piece back onto the chess board

 

public void mouseReleased(MouseEvent e) {

if(chessPiece == null) return;

 

chessPiece.setVisible(false);

Component c = chessBoard.findComponentAt(e.getX(), e.getY());

 

if (c instanceof JLabel){

Container parent = c.getParent();

parent.remove(0);

parent.add( chessPiece );

}

else {

Container parent = (Container)c;

parent.add( chessPiece );

}

 

chessPiece.setVisible(true);

}

 

public void mouseClicked(MouseEvent e) {

 

}

public void mouseMoved(MouseEvent e) {

}

public void mouseEntered(MouseEvent e){

 

}

public void mouseExited(MouseEvent e) {

 

}

}

Lenke til kommentar

Jeg foreslår at dere lærer dere hvordan man poster kode i forumet. Ikke svar på denne meldingen med ny kode, bare rediger den eksisterende meldingen (hint: bruk

 - taggen)

 

Werner

Endret av wernie
Lenke til kommentar

Jeg anbefaler dere at dere trekker ut brettlogikk fra GUI-klassen. Ha en Board-klasse og en BoardView-klasse. Board sin klasse bør ha ansvar for plasseringene til alle brikkene på brettet. I tillegg kan dere være tjent med å lage en GameController som har en Board-instans og en BoardView-instans og som tar imot input fra brukeren via BoardView og som kontrollerer brettet via regler.

Lenke til kommentar
  • 1 måned senere...

Skal dere implementere AI (KI) i dette sjakk spillet? Jeg lagde et sjakkspill en gang i tiden, var faktisk en del av min hovedoppgave. Hvor jeg brukte sjakkspillet til å illustrere bruken av forskjellige patterns. Det har dog ikke noe AI implementert. Dokumenterte og designet alt i UML. Kan sende dere noen av de dokumentene så dere ser den generelle oppbygningen. Tror dere kan finne mye informasjon om hvordan sjakkspill bygges opp generelt.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...