davson98 6 Czerwca 2020 6 Czerwca 2020 Cześć! Potrzebuje pomocy lub zlecę wykonanie gry - warcabów w Java Swing. 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 Co wykonać?: Poniżej Za cenę: Do dogadania Sposób płatności: Przelew Kontakt: PW. 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; } } #2 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; } } #3 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); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SeNioR 22 Września 2022 22 Września 2022 Na GitHub można znaleźć projekt zaliczeniowy z grą Warcaby: PROJEKT-JAVA-WARCABY. A tutaj jest pełna implementacja, co prawda szachów ale można przerobić zasady gry: https://nanochess.org/chess5.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kontynuuj dyskusję
Dołącz do Pecetowicza, aby kontynuować dyskusję w tym wątku.