我正在通过轮次和给定的最终位置制作一个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的数据地图,而且工作正常,但不重新绘制它。
对不起凌乱的代码和我的英语。
提前谢谢大家!!!