Esercizio sugli SCACCHI

di Anonimizzato14954 il
19 risposte
Ecco la consegna:
Su una scacchiera 8x8 sono posizionati due pezzi: il Re bianco e la Regina nera. Si scriva un programma che, acquisite le posizioni del Re e della Regina, determini se la Regina è in posizione tale da poter mangiare il Re. Le posizioni dei due pezzi sono identificate da mediante la riga e la colonna su cui si trovano, espresse come numeri interi tra 1 e 8.

Siccome non so come funzionano gli scacchi ho solo fatto in modo di sapere se la regina ed il re sono nella stessa posizione. Se no come potrei fare?
ecco che ho fatto io:
package vacanze_estive_18;

import javax.swing.JOptionPane;

public class Vacanze_estive_18 {

    public static String dis(int regR, int regC, String matrice[][]) {

        String dis = "";
        for (int riga = 0; riga < 8; riga++) {
            for (int col = 0; col < 8; col++) {
                if (riga == regR && col == regC) {
                    dis += matrice[riga][col] = "   ?";

                } else {
                    dis += matrice[riga][col];
                }
            }
            dis += "\n";

        }
        return dis;

    }

    public static void main(String[] args) {
        String disegno = "";
        String input = JOptionPane.showInputDialog("In che RIGA si trova il Re?");
        int reR = Integer.parseInt(input) - 1;
        input = JOptionPane.showInputDialog("In che COLONNA si trova il Re?");
        int reC = Integer.parseInt(input) - 1;

        String matrice[][] = new String[8][8];

        for (int riga = 0; riga < 8; riga++) {
            for (int col = 0; col < 8; col++) {
                if (riga == reR && col == reC) {
                    disegno += matrice[riga][col] = "   •";
                } else {
                    disegno += matrice[riga][col] = "   O";
                }
            }
            disegno += "\n";
        }
        input = JOptionPane.showInputDialog("In che RIGA si trova la Regina?\n\n" + disegno);
        int regR = Integer.parseInt(input) - 1;
        input = JOptionPane.showInputDialog("In che COLONNA si trova la Regina?\n\n" + disegno);
        int regC = Integer.parseInt(input) - 1;

        JOptionPane.showMessageDialog(null, (regR == reR && regC == reC) ? "Il Re e la Regina si trovano"
                + " nella stessa posizione:\n\n" + disegno : "\"•\" è dove si trova il re e \" ?\" la regina:\n\n"
                + dis(regR, regC, matrice));
    }

}

19 Risposte

  • Adesso che ho riletto la consegna mi sa che ho sbagliato XD Ma come si fa a sapere se la regina è in posizione di mangiare il Re?
  • Devi verificare una di queste condizioni:
    - la regina si trova sulla stessa riga del re
    - la regina si trova sulla stessa colonna del re
    - la regina si trova su una stessa diagonale
    Magari, per ora come primo passo, potresti controllare le prime due condizioni.
  • Grazie mille Candaluar! Adesso faccio
  • Ma deve essere solo nella posizione vicina secondo te o può anche essere per esempio in diagonale ma distante?
  • Il Re si può muovere solo di una casella alla volta, sopra/sotto, a destra/sinistra o in diagonale; la Regina invece può spostarsi sempre nelle stesse direzioni ma anche di più di una casella.
    Pertanto data la posizione del Re (x1,y1) e della Regina (x2,y2) quest'ultima può "mangiare" il re se
    x1==x2 OPPURE
    y1==y2 OPPURE
    abs(x1-x2)==abs(y1-y2)
  • Grazie mille ora guardo
  • Mi sa che prenderò una pausa da questo esercizi perché è un bordello, grazie del link, sembra interessante, lo guarderò
  • Sta venendo un bordello assurdo, io mi auguro che qualcuno mi sappia dare consigli anche su questo, non è possibile sia cosi lungo
  • Scommetto che ci sono 346456893749 errori ...
    package vacanze_estive_18;
    
    import javax.swing.JOptionPane;
    
    public class Vacanze_estive_18 {
    
        public static String d(int rR, int cR, int rReg, int cReg, String m[][]) {
            String d = "";
            boolean b = (rReg > -1 && cReg > -1);
    
            for (int r = 0; r < 8; r++) {
                for (int c = 0; c < 8; c++) {
    
                    if (rR == r && cR == c) {
                        d += m[r][c] = "  •";
                    } else if (b) {
                        if (rReg == r && cReg == c) {
                            d += m[r][c] = "  ?";
                        } else {
                            d += m[r][c] = "  O";
                        }
                    } else {
                        d += m[r][c] = "  O";
                    }
                }
                d += "\n";
            }
            d += "\n\n";
    
            return d;
    
        }
    
        public static int colonna(int c, int i) {
    
            switch (i) {
    
                case 0:
                    c--;
                    break;
                case 1:
                    c++;
                    break;
                case 2:
                    c--;
                    break;
                case 3:
                    c++;
                    break;
                case 5:
                    c++;
                    break;
                case 7:
                    c--;
                    break;
    
            }
            return c;
        }
    
        public static int riga(int r, int i) {
            switch (i) {
                case 0:
                    r--;
                    break;
                case 1:
                    r--;
                    break;
                case 2:
                    r++;
                    break;
                case 3:
                    r++;
                    break;
                case 4:
                    r--;
                    break;
                case 6:
                    r++;
                    break;
    
            }
            return r;
        }
    
        public static String risultato(int rR, int cR, int rReg, int cReg) {
            String o;
            boolean b;
            int r = rReg;
            int c = cReg;
    
            for (int i = 0; i < 8; i++) {
    
                do {
                    b = (colonna(c, i) == cR && riga(r, i) == rR);
                } while ((c >= 0 && r >= 0 && c <= 7 && r <= 7) || b);
                c = cReg;
                r = rReg;
                if (b) {
                    i = 8;
                    o = "La regina è in posizione tale da poter mangiare il Re";
                } else {
                    o = "La regina NON è in posizione tale da poter mangiare il Re";
                }
            }
            return o;
        }
    
        public static void main(String[] args) {
            int rR;
            int cR;
            int rReg = -1;
            int cReg = -1;
            String input = "";
            String m[][] = new String[8][8];
    
            do {
                input = JOptionPane.showInputDialog("In che RIGA si trova il Re?");
                rR = Integer.parseInt(input) - 1;
                input = JOptionPane.showInputDialog("In che COLONNA?");
                cR = Integer.parseInt(input) - 1;
            } while (rR > 7 || cR > 7);
    
            do {
                input = JOptionPane.showInputDialog(d(rR, cR, rReg, cReg, m
                ) + "In che RIGA si trova la Regina?");
                rReg = Integer.parseInt(input) - 1;
                input = JOptionPane.showInputDialog(d(rR, cR, rReg, cReg, m
                ) + "In che COLONNA?");
                cReg = Integer.parseInt(input) - 1;
    
                // JOptionPane.showMessageDialog(null, d(rR, cR, rReg, cReg, m));
                JOptionPane.showMessageDialog(null, (rReg == cReg) ? "Le posizioni coincidono, riprovare"
                        : risultato(rR, cR, rReg, cReg));
            } while ((rR > 7 || cR > 7) || (rReg == rR && cR == cReg));
    
        }
    
    }
    



    Ho provato a farlo andare anche se da errore e mi va in un ciclo infinito. Poi mi da errore in una funzione. Cacchio sto sfollando
  • Entra nello switch e incrementa una volta uscito dallo switch mantiene il numero e una volta uscito dalla funziona torna come prima... cme mai?
  • Guarda, non capisco cosa stai facendo!
    Ti basta far inserire 4 valori, x1, y1, x2 e y2.
    se x1 == x2 allora REGINA MANGIA RE ed esci
    se y1 == y2 allora REGINA MANGIA RE ed esci
    se abs(x1-x2)==abs(y1-y2) allora REGINA MANGIA RE ed esci
    REGINA NON PUO' MANGIARE RE
  • candaluar ha scritto:


    Guarda, non capisco cosa stai facendo!
    Ti basta far inserire 4 valori, x1, y1, x2 e y2.
    se x1 == x2 allora REGINA MANGIA RE ed esci
    se y1 == y2 allora REGINA MANGIA RE ed esci
    se abs(x1-x2)==abs(y1-y2) allora REGINA MANGIA RE ed esci
    REGINA NON PUO' MANGIARE RE
    Non capisco che è sta roba
  • Adesso credo di aver capito. Comunque non c'è bisogno di scaldarsi eh
Devi accedere o registrarti per scrivere nel forum
19 risposte