先上效果图
可以通过AWSD进行移动和推箱子
自己弄出来的代码玩起来还是很有意思的。
代码一共是三个.java文件,代码内容如下所示
package ss;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
* 1.继承窗体类为当前类的父类
* @author lizhicheng
*
*/
public class PushBox extends JFrame implements KeyListener{
/**
* 3.声明一个二维数组的地图
*/
int[][] maps=
{
{3,3,3,3,3,3,3,3},
{3,0,0,0,0,0,0,3},
{3,0,0,0,0,2,0,3},//3表示墙
{3,0,0,0,3,0,3,3},//2表示箱子
{3,0,0,1,0,0,0,3},//1表示人
{3,0,3,0,2,0,0,3},//0表示空地
{3,0,0,0,0,0,0,3},
{3,3,3,3,3,3,3,3},
};
/**
* 6.声明两个变量来保存图标的起始位置
*
*/
int top=10,left=25;
int posX=3,posY=4;//保存大力水手的位置
/**
* 2.构造方法添加固定的窗体设置
*/
public PushBox()
{
//设置标题
this.setTitle("http://ai.52learn.online");
//设置窗体大小
this.setSize(500, 350);
//设置窗体默认关闭操作
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体可见
this.setVisible(true);
//设置窗体居中显示
this.setLocationRelativeTo(null);
//进行监听
this.addKeyListener(this);
}
/**
* 4.窗体的绘制
* @param args
*/
@Override
public void paint(Graphics g) {
super.paint(g);
refresh();//7.调用刷新
}
/**
* 5.重绘所有当前窗体的组件
* @param args
*/
public void refresh()
{
//获取当前窗体的画笔
Graphics gs=this.getGraphics();
//将图片资源引入
ImageIcon wall = new ImageIcon("bian.png");
ImageIcon area = new ImageIcon("kongdi.png");
ImageIcon human = new ImageIcon("ren.png");
ImageIcon box = new ImageIcon("xiang.png");