吃豆子重漆问题

时间:2017-01-19 03:33:17

标签: java swing user-interface interface paint

我正在通过轮次和给定的最终位置制作一个pacman。我已经让游戏在cmd中工作,有鬼逻辑,得分/分等等。现在我想在GUI中显示它,但我有一些问题。

这是VIEW

package vista;

import javax.swing.JFrame;
import controlador.Controlador;

public class Vista extends JFrame {

    Tablero t;
    JFrame frame;

    public Vista(Controlador c) {
        frame = new JFrame();
        t = new Tablero(c);
        frame.add(t);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setVisible(true);
    }

    public void actualizar() {
        t.repaint();
    }

}

这是“董事会”

package vista;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import controlador.Controlador;
import java.awt.Graphics;
import java.awt.GridLayout;

public class Tablero extends JPanel {

    JPanel[][] panelHolder = new JPanel[31][28];
    ImageIcon pacman = new ImageIcon("imagenes/pacman_der_abierto.gif");
    ImageIcon pared = new ImageIcon("imagenes/wall.gif");
    ImageIcon pellet = new ImageIcon("imagenes/pacdot.gif");
    ImageIcon powerPellet = new ImageIcon("imagenes/powerpellet.gif");
    ImageIcon vacio = new ImageIcon("imagenes/black.gif");
    Controlador c;

    public Tablero(Controlador con){
        c=con;    
        this.setLayout(new GridLayout(31,28));
            for(int y=0; y<31; y++)
                for(int x=0; x<28; x++){
                    panelHolder[y][x]=new JPanel();
                    panelHolder[y][x].setSize(230, 230);
                    this.add(panelHolder[y][x]);
                }
            this.setVisible(true);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int dataMap[][] = c.getDataMap();
        System.out.println("Actual : "+dataMap[y][x]); //Test, its working!
        for(int y=0; y<31; y++)
            for(int x=0; x<28; x++){
                //System.out.println("Actual : "+dataMap[y][x]);
                JLabel a = new JLabel();
                switch(dataMap[y][x]){
                case -1:
                    a.setIcon(pared);
                    panelHolder[y][x].add(a);
                    break;
                case 10:
                    a.setIcon(pellet);
                    panelHolder[y][x].add(a);
                    break;
                case 50:
                    a.setIcon(powerPellet);
                    panelHolder[y][x].add(a);
                    break;
                case 0:
                    a.setIcon(vacio);
                    panelHolder[y][x].add(a);
                    break;
                }

            }
    }

}

这是CONTROLLER类,其中一个(Pacman)是主类

package controlador;

import java.util.Scanner;

import modelo.personajes.Jugador;
import vista.Vista;

public class Pacman {

    public static void main(String[] args) {

        Jugador pacman = new Jugador();
        Controlador c = new Controlador();
        Vista v = new Vista(c);

        System.out.println("ej. Bolas de poder :\n(3,1) (3,26)" + "\n(23,1) (23,26)\n");
        Scanner sc = new Scanner(System.in);
        System.out.println("Ingrese el x del objetivo : ");
        int xO = sc.nextInt();
        System.out.println("Ingrese el y del objetivo : ");
        int yO = sc.nextInt();
        pacman.setPosObjetivo(xO, yO);
        System.out.println("Pos obj : (" + pacman.getPosObjetivo().getX() + "," + pacman.getPosObjetivo().getY() + ")");
        int nPasos = pacman.getCaminoATomar().getLength();

        while (pacman.isPacmanVivo() && pacman.getCaminoATomar() != null) {
            if (pacman.getCaminoATomar() == null) {
                System.out.println("El camino a tomar es incorrecto.");
            } else
                for (int ronda = 1; ronda < nPasos + 1; ronda++) {
                    v.actualizar();

                    System.out.println("\nRonda = " + ronda);
                    System.out.println("Puntuacion = " + pacman.getPuntuacion());

                    System.out.println("-- Turno de Pac-Man --");
                    pacman.moverse();

                    c.setDataMap(pacman.getPuntajeMap());
                    int timer = sc.nextInt();
                }
        }
    }
}


    公共课堂Controlador {

private int dataMap[][]=
    {
     {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
     {-1,10,10,10,10,10,10,10,10,10,10,10,10,-1,-1,10,10,10,10,10,10,10,10,10,10,10,10,-1},
     {-1,10,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,10,-1},
     {-1,50,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,50,-1},
     {-1,10,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,10,-1},
     {-1,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,-1},
     {-1,10,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,10,-1},
     {-1,10,-1,-1,-1,-1,10,-1,-1,10,10,10,10,-1,-1,10,10,10,10,-1,-1,10,-1,-1,-1,-1,10,-1},
     {-1,10,10,10,10,10,10,-1,-1,10,10,10,10,-1,-1,10,10,10,10,-1,-1,10,10,10,10,10,10,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,10,10,10,10,10,10,10,10,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {10,10,10,10,10,10,10,10,10,10,-1,-1,-1,-1,-1,-1,-1,-1,10,10,10,10,10,10,10,10,10,10},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,10,10,10,10,10,10,10,10,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,10,-1,10,-1,-1,-1,-1,-1,-1},
     {-1,10,10,10,10,10,10,10,10,10,10,10,10,-1,-1,10,10,10,10,10,10,10,10,10,10,10,10,-1},
     {-1,10,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,10,-1},
     {-1,10,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,10,-1},
     {-1,50,10,10,-1,-1,10,10,10,10,10,10,10,-1,-1,10,10,10,10,10,10,10,-1,-1,10,10,50,-1},
     {-1,-1,-1,10,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,10,-1,-1,-1},
     {-1,-1,-1,10,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,10,-1,-1,-1},
     {-1,10,10,10,10,10,10,-1,-1,10,10,10,10,-1,-1,10,10,10,10,-1,-1,10,10,10,10,10,10,-1},
     {-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1},
     {-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1},
     {-1,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,-1},
     {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
    };

public void setDataMap(int[][] dataMap) {
    this.dataMap = dataMap;
}

public int[][] getDataMap(){
    return this.dataMap;
}
}

当pacman吃的时候,我正在做的是改变CONTROLLER的数据地图,而且工作正常,但不重新绘制它。

对不起凌乱的代码和我的英语。

提前谢谢大家!!!

0 个答案:

没有答案