Java > affichage sudoku

Titreaffichage sudoku
Postée le01-05-2010
Affichée1131
Mini-lien
Description

le code qui permet d'afficher la grille

EtatInconnu. Inconnu.
Code d'insertion
Options
Afficher les numéros de lignes  Mettre la source en plein ecran  Selectionner la source  Partager sur Facebook 
Téléchargement Telecharger en format txt  Telecharger en format pdf  Telecharger en format java
Plein ecran
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;

/** Cette classe réalise l'affichage de grilles de sudoku stockées dans des tableaux bidimensionnels d'entiers.
 *  Le 1er indice du tableau doit désigner le numéro de ligne, et le 2ème le numéro de colonne.
 *  Les 0 ne sont pas affichés et représentent une case vide.
 *  Pour afficher un tableau t, il suffit de créer une fenêtre d'affichage par new AffichageSudoku(t, grille, i) où
 *      t est le tableau contenant les valeurs initiales et celles ajoutées par le joueur (humain ou programme)
 *              grille est le tableau initial (contenant des 0 partout sauf là où il existe des valeurs initiales)
 *              i est le temps d'attente entre chaque action, en millisecondes
 *  Pour rafraichir simplement l'affichage avec les valeurs d'un tableau t, il faut utiliser refresh(t) */

public class AffichageSudoku extends JFrame{
       
        private int[][] t;
        private int[][] grille;
        private Graphic p;
        private int border = 20;
        private int attente;
       
        public AffichageSudoku(int[][] t, int[][] grille, int attente){
                super("SUDOKU");
                this.t = t;
                this.grille = grille;
                this.attente = attente;
                this.p = new Graphic();
                this.getContentPane().add(this.p);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setSize(new Dimension(500,500));
                this.setLocation((java.awt.Toolkit.getDefaultToolkit().getScreenSize().width-500)/2,(java.awt.Toolkit.getDefaultToolkit().getScreenSize().height-500)/2);
                this.setVisible(true);
        }
       
        public void refresh(int[][] t){
                this.t = t;
                this.repaint();
                try{
                        Thread.sleep(attente);
                }
                catch(InterruptedException e){
                        System.out.println("interruption");
                }
        }
       
        public void afficheGagne(){
                JOptionPane.showMessageDialog(this,"Une solution a été trouvée!");
        }
       
        public void affichePasDeSolution(){
                JOptionPane.showMessageDialog(this,"Pas de solution possible dans cette grille");
        }
       
        private class Graphic extends JPanel{
                               
                public void paint(Graphics g){
                        int w = this.getWidth();
                        int h = this.getHeight();
                        g.setColor(Color.WHITE);
                        g.fillRect(0,0,w,h);
                        g.setColor(Color.BLACK);
                        for(int i = 0;i<t.length+1;i++){
                                if(i%((int) Math.sqrt(t.length)) == 0) ((Graphics2D) g).setStroke(new BasicStroke(1.5f));
                                else ((Graphics2D) g).setStroke(new BasicStroke(0.5f));
                                g.drawLine(border,border+i*(h-2*border)/t.length,w-border,border+i*(h-2*border)/t.length);
                                g.drawLine(border+i*(w-2*border)/t.length,border,border+i*(w-2*border)/t.length,h-border);
                        }
                        g.setFont(g.getFont().deriveFont((float) (h-2*border)/(t.length*2)));
                        Rectangle2D rect = g.getFont().getStringBounds("0",((Graphics2D) g).getFontRenderContext());
                        double wChar = rect.getWidth();
                        double hChar = rect.getHeight();
                        for(int i=0;i<t.length;i++){
                                for(int j=0;j<t.length;j++){
                                        if(t[i][j] != 0){
                                                if(grille[i][j] != 0) g.setColor(Color.BLACK);
                                                else g.setColor(Color.RED);
                                                g.drawString(t[i][j]+"",(int) (border-(wChar/2)+(j+0.5)*(w-2*border)/t.length),(int) (border+(hChar*0.4)+(i+0.5)*(h-2*border)/t.length));
                                        }
                                }
                        }
                }
               
        }
       
       
}