Java Pacman重绘问题
我在做一个吃豆人,一轮一轮地移动,并且有一个给定的最终位置。我已经有了cmd的游戏工作,与鬼逻辑,分数/积分等,现在我想在一个GUI中显示,但我有一些问题 这就是观点Java Pacman重绘问题,java,swing,user-interface,interface,paint,Java,Swing,User Interface,Interface,Paint,我在做一个吃豆人,一轮一轮地移动,并且有一个给定的最终位置。我已经有了cmd的游戏工作,与鬼逻辑,分数/积分等,现在我想在一个GUI中显示,但我有一些问题 这就是观点 package vista; import javax.swing.JFrame; import controlador.Controlador; public class Vista extends JFrame { Tablero t; JFrame frame; public Vista(Co
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();
}
}
这是“董事会”
我所做的是在pacman吃东西的时候改变控制器的数据映射,这样做很好,但是重新绘制它不是
对不起,代码太乱了,还有我的英语
提前谢谢大家 不要混合使用命令行和图形范例,它们有不同的工作方式,这使得它们在最好的时候有些不兼容。相反,请看一下从userdo
JLabel a=new JLabel()获取输入的方法
是个坏主意,绘制应该只绘制UI的当前状态,永远不要修改它。我还建议您查看并
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;
}
}
}
}
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();
}
}
}
}
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;
}
}