Skocz do zawartości
PL
Szukaj na Pecetowiczu
  • Utwórz konto

Gra warcaby Java Swing


Rekomendowane odpowiedzi

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

  • 2 lata później...

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

Kontynuuj dyskusję

Dołącz do Pecetowicza, aby kontynuować dyskusję w tym wątku.

  • Dodaj nową pozycję...
  • Dodaj nową pozycję...