Java 如何将玩家添加到迷宫
我建造了一个迷宫,并制作了一个玩家类。当我编译它时,我只看到迷宫而没有看到玩家。我尝试过不同的技巧,但仍然不适合我 我到底要做什么才能看到球员并移动他 还有,有没有办法调整迷宫,使其更大或与框架大小相同Java 如何将玩家添加到迷宫,java,swing,maze,Java,Swing,Maze,我建造了一个迷宫,并制作了一个玩家类。当我编译它时,我只看到迷宫而没有看到玩家。我尝试过不同的技巧,但仍然不适合我 我到底要做什么才能看到球员并移动他 还有,有没有办法调整迷宫,使其更大或与框架大小相同 import java.awt.*; import javax.swing.*; import java.awt.event.*; // Needed for ActionListener import javax.swing.event.*; // Needed for ActionLis
import java.awt.*;
import javax.swing.*;
import java.awt.event.*; // Needed for ActionListener
import javax.swing.event.*; // Needed for ActionListener
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;
class www extends JFrame
{
static Maze maze = new Maze ();
static Timer t;
//======================================================== constructor
public www ()
{
// 1... Create/initialize components
// 2... Create content pane, set layout
JPanel content = new JPanel (); // Create a content pane
content.setLayout (new BorderLayout ()); // Use BorderLayout for panel
JPanel north = new JPanel ();
north.setLayout (new FlowLayout ()); // Use FlowLayout for input area
DrawArea board = new DrawArea (500, 500);
// 3... Add the components to the input area.
content.add (north, "North"); // Input area
content.add (board, "South"); // Output area
// 4... Set this window's attributes.
setContentPane (content);
pack ();
setTitle ("MAZE");
setSize (490, 500);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo (null); // Center window.
}
public static void main (String[] args)
{
www window = new www ();
window.setVisible (true);
player p = new player ();
JFrame jf = new JFrame ();
//jf.setTitle("Tutorial");
//jf.setSize(600,400);
jf.setVisible(true);
}
class DrawArea extends JPanel
{
public DrawArea (int width, int height)
{
this.setPreferredSize (new Dimension (width, height)); // size
}
public void paintComponent (Graphics g)
{
maze.show (g); // display current state of colony
}
}
}
class Maze
{
private int grid [][];
public Maze ()
{
int [][] maze =
{ {1,0,1,1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,1,0,1,0,0,0,0,0,1},
{1,0,1,0,0,0,1,0,1,1,1,0,1},
{1,0,0,0,1,1,1,0,0,0,0,0,1},
{1,0,1,0,0,0,0,0,1,1,1,0,1},
{1,0,1,0,1,1,1,0,1,0,0,0,1},
{1,0,1,0,1,0,0,0,1,1,1,0,1},
{1,0,1,0,1,1,1,0,1,0,1,0,1},
{1,0,0,0,0,0,0,0,0,0,1,0,1},
{1,1,1,1,1,1,1,1,1,1,1,0,1}};
grid = maze;
}
public void show (Graphics g)
{
for (int row = 0 ; row < grid.length ; row++)
for (int col = 0 ; col < grid [0].length ; col++)
{
if (grid [row] [col] == 1) // life
g.setColor (Color.black);
else
g.setColor (Color.white);
g.fillRect (col * 30 + 30, row * 30 + 30, 30, 30); // draw life form
}
}
public class player extends JPanel implements ActionListener,KeyListener
{
Timer tm = new Timer(5,this);
private int x = 0;
private int y = 0;
private int velX = 0 ;
private int velY = 0;
public void player ()
{
tm.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent (Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(20,30,50,50);
}
public void actionPerformed(ActionEvent e)
{
x = x+velX;
y = y +velY;
repaint();
}
public void keyPressed(KeyEvent e)
{
int c = e.getKeyCode();
if(c == KeyEvent.VK_LEFT)
{
velX = -1;
velY = 0;
}
if (c == KeyEvent.VK_UP)
{
velX = 0;
velY = -1;
}
if( c==KeyEvent.VK_RIGHT)
{
velX = 1;
velY = 0;
}
if(c==KeyEvent.VK_DOWN)
{
velX = 0;
velY = 1;
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}
}
import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;//ActionListener需要
导入javax.swing.event.*;//ActionListener需要
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.event.ActionListener;
导入javax.swing.JPanel;
导入javax.swing.Timer;
类www扩展了JFrame
{
静态迷宫=新迷宫();
静态定时器t;
//====================================================================================构造函数
公共www()
{
//1…创建/初始化组件
//2…创建内容窗格,设置布局
JPanel content=newjpanel();//创建内容窗格
content.setLayout(新的BorderLayout());//对面板使用BorderLayout
JPanel north=新的JPanel();
north.setLayout(新的FlowLayout());//对输入区域使用FlowLayout
绘图区板=新绘图区(500500);
//3…将组件添加到输入区域。
content.add(北,“北”);//输入区域
content.add(board,“South”);//输出区域
//4…设置此窗口的属性。
setContentPane(内容);
包装();
片名(“迷宫”);
设置大小(490500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);//中心窗口。
}
公共静态void main(字符串[]args)
{
www window=newwww();
window.setVisible(true);
玩家p=新玩家();
JFrame jf=新的JFrame();
//jf.setTitle(“教程”);
//jf.设置尺寸(600400);
jf.setVisible(真);
}
类DrawArea扩展了JPanel
{
公共绘图区(内部宽度、内部高度)
{
this.setPreferredSize(新尺寸(宽度、高度));//尺寸
}
公共组件(图形g)
{
maze.show(g);//显示菌落的当前状态
}
}
}
班级迷宫
{
专用整数网格[];
公共迷宫()
{
int[][]迷宫=
{ {1,0,1,1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,1,0,1,0,0,0,0,0,1},
{1,0,1,0,0,0,1,0,1,1,1,0,1},
{1,0,0,0,1,1,1,0,0,0,0,0,1},
{1,0,1,0,0,0,0,0,1,1,1,0,1},
{1,0,1,0,1,1,1,0,1,0,0,0,1},
{1,0,1,0,1,0,0,0,1,1,1,0,1},
{1,0,1,0,1,1,1,0,1,0,1,0,1},
{1,0,0,0,0,0,0,0,0,0,1,0,1},
{1,1,1,1,1,1,1,1,1,1,1,0,1}};
网格=迷宫;
}
公共空间展示(图g)
{
对于(int row=0;row
我看到的问题:1)你创建了一个JFrame,jf,却什么也没放进去,却显示出来——为什么?2) 您创建了一个播放器对象p,并将其添加为nothing,因此它将永远不会显示。3) 你的玩家类扩展了JPanel——为什么?我猜你想让你的玩家在另一个JPAND绘制的迷宫中显示你的玩家,并让它扩展JPanel,你可以阻止他们轻松地一起工作。我猜你是从头开始在IDE中创建这个的,而不是先在纸上组织你的想法,如果是的话,考虑改变这个计划。相反,你应该先在纸上组织你的想法和程序,只有这样做之后,你才应该尝试将代码提交到你的IDE中。我自己,我会改变播放器,这样它就不会扩展JPanel,所以它是一个逻辑类,而不是一个组件类。然后我把它放在我程序的某个地方,然后让我的绘图JPanel,这里称为DrawArea,绘制玩家对象,类似于它绘制迷宫对象的方式。那么应该是一个方法而不是一个类吗?^---他说的。您的问题是,您创建了一个Player实例,但从未将其添加到任何内容中,而且您没有调用super.paintC,这违反了绘制链的要求