Esercizio sugli SCACCHI

di il
19 risposte

Esercizio sugli SCACCHI

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

  • Re: Esercizio sugli SCACCHI

    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?
  • Re: Esercizio sugli SCACCHI

    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.
  • Re: Esercizio sugli SCACCHI

    Grazie mille Candaluar! Adesso faccio
  • Re: Esercizio sugli SCACCHI

    Ma deve essere solo nella posizione vicina secondo te o può anche essere per esempio in diagonale ma distante?
  • Re: Esercizio sugli SCACCHI

    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)
  • Re: Esercizio sugli SCACCHI

    Grazie mille ora guardo
  • Re: Esercizio sugli SCACCHI

    Comunque, per tua informazione, se "cerchi donna" con google potresti trovare
    Inoltre questo rompicapo potrebbe interessarti http://it.wikipedia.org/wiki/Rompicapo_delle_otto_regine
    Buon lavoro
  • Re: Esercizio sugli SCACCHI

    Mi sa che prenderò una pausa da questo esercizi perché è un bordello, grazie del link, sembra interessante, lo guarderò
  • Re: Esercizio sugli SCACCHI

    Sta venendo un bordello assurdo, io mi auguro che qualcuno mi sappia dare consigli anche su questo, non è possibile sia cosi lungo
  • Re: Esercizio sugli SCACCHI

    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
  • Re: Esercizio sugli SCACCHI

    Entra nello switch e incrementa una volta uscito dallo switch mantiene il numero e una volta uscito dalla funziona torna come prima... cme mai?
  • Re: Esercizio sugli SCACCHI

    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
  • Re: Esercizio sugli SCACCHI

    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
  • Re: Esercizio sugli SCACCHI

    Adesso credo di aver capito. Comunque non c'è bisogno di scaldarsi eh
Devi accedere o registrarti per scrivere nel forum
19 risposte