Cześć,
potrzebuje pomocy lub zlecę wykonanie gry - warcabów.
Zrobiłem: plansze, pionki, ruch pionków (niedokładne)
Mam problem ze zrobieniem:
- granicy szachownicy (aby nie można było przesunąć pionków poza szachownice)
- gdy nacisnę na dany kafelek (kwadrat) ma w konsoli pokazywać się nazwa danego kafelka np. A1
- przesuwanie się pionków tylko i wyłącznie o jedno pole w lewo-skos i prawo-skos (teraz można je przesuwać po całej szachownicy)
- bicie przeciwnika
- dodanie damek
- uporządkowanie kodu
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;
public class Plansza extends JComponent {
private final static int SQUAREDIM = (int) (Pionek.getDimension() * 1.25);
private final Dimension dimPrefSize;
private boolean ruch = false;
private int deltax, deltay;
private PozycjaPionka kontrolaPozycji;
private int oldcx, oldcy;
private final List<PozycjaPionka> posChecks;
public Plansza() {
posChecks = new ArrayList<>();
int BOARDDIM = 8 * SQUAREDIM;
dimPrefSize = new Dimension(BOARDDIM, BOARDDIM);
addMouseListener(new MouseAdapter() {
@Override
// mysz wcisnieta
public void mousePressed(MouseEvent me) {
int x = me.getX();
int y = me.getY();
for (PozycjaPionka posCheck : posChecks)
if (Pionek.contains(x, y, posCheck.cx, posCheck.cy)) {
Plansza.this.kontrolaPozycji = posCheck;
//wracanie na swoje pole, po złej próbie ruchu
oldcx = posCheck.cx;
oldcy = posCheck.cy;
// nie wiem co to
deltax = x - posCheck.cx;
deltay = y - posCheck.cy;
ruch = true;
return;
}
}
@Override
// zwolnienie myszy
public void mouseReleased(MouseEvent me) {
if (ruch)
ruch = false;
else
return;
int x = me.getX();
int y = me.getY();
kontrolaPozycji.cx = (x - deltax) / SQUAREDIM * SQUAREDIM + SQUAREDIM / 2;
kontrolaPozycji.cy = (y - deltay) / SQUAREDIM * SQUAREDIM + SQUAREDIM / 2;
for (PozycjaPionka posCheck: posChecks)
if (posCheck != Plansza.this.kontrolaPozycji && posCheck.cx
== Plansza.this.kontrolaPozycji.cx && posCheck.cy == Plansza.this.kontrolaPozycji.cy) {
Plansza.this.kontrolaPozycji.cx = oldcx;
Plansza.this.kontrolaPozycji.cy = oldcy;
break;
}
kontrolaPozycji = null;
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
// przeciaganie myszy
public void mouseDragged(MouseEvent me) {
if (ruch) {
kontrolaPozycji.cx = me.getX() - deltax;
kontrolaPozycji.cy = me.getY() - deltay;
repaint();
}
}
});
}
public void dodaj(Pionek pionek, int row, int col) {
PozycjaPionka posCheck = new PozycjaPionka();
posCheck.pionek = pionek;
posCheck.cx = (col - 1) * SQUAREDIM + SQUAREDIM / 2;
posCheck.cy = (row - 1) * SQUAREDIM + SQUAREDIM / 2;
posChecks.add(posCheck);
}
@Override
public Dimension getPreferredSize() {
return dimPrefSize;
}
@Override
protected void paintComponent(Graphics g) {
rysowaniePlanszy(g);
for (PozycjaPionka posCheck: posChecks) {
if (posCheck != Plansza.this.kontrolaPozycji) {
posCheck.pionek.draw(g, posCheck.cx, posCheck.cy);
}
}
if (kontrolaPozycji != null) {
kontrolaPozycji.pionek.draw(g, kontrolaPozycji.cx, kontrolaPozycji.cy);
}
}
private void rysowaniePlanszy(Graphics g) {
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
for (int row = 0; row < 8; row++) {
g.setColor(((row & 1) != 0) ? Color.GRAY : Color.WHITE);
for (int col = 0; col < 8; col++) {
g.fillRect(col * SQUAREDIM, row * SQUAREDIM, SQUAREDIM, SQUAREDIM);
g.setColor((g.getColor() == Color.GRAY) ? Color.WHITE : Color.GRAY);
}
}
}
private static class PozycjaPionka {
public Pionek pionek;
public int cx;
public int cy;
}
}
import java.awt.*;
public final class Pionek {
public enum JakiPionek {
BLACK,RED
}
private final static int DIMENSION = 50;
private final JakiPionek jakiPionek;
public Pionek(JakiPionek jakiPionek) {
this.jakiPionek = jakiPionek;
}
public void draw(Graphics g, int cx, int cy) {
int x = cx - DIMENSION / 2;
int y = cy - DIMENSION / 2;
g.setColor(jakiPionek == JakiPionek.BLACK ? Color.BLACK : Color.WHITE);
g.fillOval(x, y, DIMENSION, DIMENSION);
g.drawOval(x, y, DIMENSION, DIMENSION);
}
public static boolean contains(int x, int y, int cx, int cy) {
return (cx - x) * (cx - x) + (cy - y) * (cy - y) < DIMENSION * DIMENSION / 2;
}
public static int getDimension() {
return DIMENSION;
}
}
import javax.swing.*;
import java.awt.*;
public class Main extends JFrame {
public Main (String tytul) {
super(tytul);
setDefaultCloseOperation(EXIT_ON_CLOSE); //pozwala zakonczyc program x-em
Plansza plansza = new Plansza(); // tworzenie planszy do gry
// dodawanie pionkow
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 1, 2);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 1, 4);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 1, 6);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 1, 8);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 2, 1);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 2, 3);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 2, 5);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 2, 7);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 3, 2);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 3, 4);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 3, 6);
plansza.dodaj(new Pionek(Pionek.JakiPionek.RED), 3, 8);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 6, 1);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 6, 3);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 6, 5);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 6, 7);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 7, 2);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 7, 4);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 7, 6);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 7, 8);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 8, 1);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 8, 3);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 8, 5);
plansza.dodaj(new Pionek(Pionek.JakiPionek.BLACK), 8, 7);
setContentPane(plansza);
pack();
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
Runnable warcaby = () -> new Main("W A R C A B Y");
EventQueue.invokeLater(warcaby);
}
}