此代码参考传智播客推箱子视频并进行改进 增加esc关闭窗口,用adws或控制方向 的代码
import game.qust.cn.MainFrame;
//启动入口
public class App {
public static void main(String[] args) {
new MainFrame();
}
}
package game.qust.cn;
import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class MainFrame extends Frame implements KeyListener{
public MainFrame() {
wolfInit();//做人物
sheepInit();//做箱子
targetInit();//做笼子
treeInit();//做障碍
backgroundInit();//背景初始化
//设置整个窗体
setMainFrameUI();
this.addKeyListener(this);//使窗口监听键盘(写窗口初始化后面)
}
JLabel[][] sheeps=new JLabel[12][16];//用来存储三只羊
//场景数据模拟 二维数组
//1代表障碍 0代表空地
int[][] datas= {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1},
{1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1},
{1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1},
{1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1},
{1,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1},
{1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};
int wx ;//代表人物横向位置
int wy ;//代表人物纵向位置
//代表当前有多少个箱子移动到了目标中
int num = 0;
//代表箱子的总数
int total = 3;
private void treeInit() {
//创建图片
Icon ic=new ImageIcon("tree.png");
// 遍历二维数组
for(int i=0;i<datas.length;i++) {
for(int j=0;j<datas[i].length;j++) {
if(datas[i][j]==1) {
//障碍初始化
JLabel lab_tree=new JLabel(ic);
lab_tree.setBounds(12+50*j,36+50*i,50,50);//设置位置 大小
this.add(lab_tree);//添加图像到窗口
}
}
}
}
private void targetInit() {
//用jlabel制作一个笼子
Icon i=new ImageIcon("target.png");
JLabel lab_target1=new JLabel(i);
lab_target1.setBounds(700+12,200+36,50,50);//设置笼子位置 大小
this.add(lab_target1);//添加图像到窗口
datas[4][14] = 8;
JLabel lab_target2=new JLabel(i);
lab_target2.setBounds(700+12,300+36,50,50);//设置笼子位置 大小
this.add(lab_target2);//添加图像到窗口
datas[6][14] = 8;
JLabel lab_target3=new JLabel(i);
lab_target3.setBounds(700+12,250+36,50,50);//设置笼子位置 大小
this.add(lab_target3);//添加图像到窗口
datas[5][14] = 8;
}
private void sheepInit() {
//用jlabel制作一只羊
Icon i=new ImageIcon("sheep-no.png");
JLabel lab_sheep1=new JLabel(i);
lab_sheep1.setBounds(512,336,50,50);//设置羊位置 大小
this.add(lab_sheep1);//添加图像到窗口
datas[6][10]=4;
sheeps[6][10]=lab_sheep1;//把这个jlabel组件放入sheeps数组中
JLabel lab_sheep2=new JLabel(i);
lab_sheep2.setBounds(612,486,50,50);//设置羊位置 大小
this.add(lab_sheep2);//添加图像到窗口
datas[9][12]=4;
sheeps[9][12]=lab_sheep2;//把这个jlabel组件放入sheeps数组中
JLabel lab_sheep3=new JLabel(i);
lab_sheep3.setBounds(312,186,50,50);//设置羊位置 大小