@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Sokoban</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=GBK
|
||||
@ -1,2 +1,4 @@
|
||||
# work
|
||||
推箱子游戏
|
||||
-1.png) -1.png) -1.png) -1.png)
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 190 B |
|
After Width: | Height: | Size: 186 B |
|
After Width: | Height: | Size: 168 B |
|
After Width: | Height: | Size: 96 B |
|
After Width: | Height: | Size: 95 B |
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000011100000000000
|
||||
00000014100000000000
|
||||
00000010100000000000
|
||||
00000010100000000000
|
||||
00000010111111000000
|
||||
00011112020041000000
|
||||
00014002311111000000
|
||||
00011111210000000000
|
||||
00000001010000000000
|
||||
00000001010000000000
|
||||
00000001410000000000
|
||||
00000001110000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000011111110000000
|
||||
00000010344410000000
|
||||
00000010001111000000
|
||||
00000111200001000000
|
||||
00000100012101000000
|
||||
00000102010001000000
|
||||
00000100011111000000
|
||||
00000111110000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000011111000000000
|
||||
00000013001000000000
|
||||
00000010221011100000
|
||||
00000010201014100000
|
||||
00000011101114100000
|
||||
00000001000004100000
|
||||
00000001001000100000
|
||||
00000001001111100000
|
||||
00000001111000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000011111000000
|
||||
00000001110001000000
|
||||
00000011000121000000
|
||||
00000010011001000000
|
||||
00000010200001000000
|
||||
00000013011201000000
|
||||
00000011114441000000
|
||||
00000000011111000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000111110000000
|
||||
00000000130410000000
|
||||
00000000121010000000
|
||||
00000000100010000000
|
||||
00000011101010000000
|
||||
00000010020410000000
|
||||
00000010240010000000
|
||||
00000011111110000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000111100000000
|
||||
00000001100110000000
|
||||
00000001020010000000
|
||||
00000001002010000000
|
||||
00000001114010000000
|
||||
00000000014010000000
|
||||
00000000014110000000
|
||||
00000001114010000000
|
||||
00000001020310000000
|
||||
00000001002010000000
|
||||
00000001000110000000
|
||||
00000001111100000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000111100000000
|
||||
00000001144100000000
|
||||
00000011444100000000
|
||||
00000011020100000000
|
||||
00000010202100000000
|
||||
00000010120110000000
|
||||
00000010102010000000
|
||||
00000010000010000000
|
||||
00000011131110000000
|
||||
00000000111000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,7 @@
|
||||
import com.mr.view.MainFrame;
|
||||
|
||||
public class Start {
|
||||
public static void main(String[] args) {
|
||||
new MainFrame().setVisible(true);
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 190 B |
|
After Width: | Height: | Size: 186 B |
|
After Width: | Height: | Size: 168 B |
|
After Width: | Height: | Size: 96 B |
|
After Width: | Height: | Size: 95 B |
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000011100000000000
|
||||
00000014100000000000
|
||||
00000010100000000000
|
||||
00000010100000000000
|
||||
00000010111111000000
|
||||
00011112020041000000
|
||||
00014002311111000000
|
||||
00011111210000000000
|
||||
00000001010000000000
|
||||
00000001010000000000
|
||||
00000001410000000000
|
||||
00000001110000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000011111110000000
|
||||
00000010344410000000
|
||||
00000010001111000000
|
||||
00000111200001000000
|
||||
00000100012101000000
|
||||
00000102010001000000
|
||||
00000100011111000000
|
||||
00000111110000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000011111000000000
|
||||
00000013001000000000
|
||||
00000010221011100000
|
||||
00000010201014100000
|
||||
00000011101114100000
|
||||
00000001000004100000
|
||||
00000001001000100000
|
||||
00000001001111100000
|
||||
00000001111000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000011111000000
|
||||
00000001110001000000
|
||||
00000011000121000000
|
||||
00000010011001000000
|
||||
00000010200001000000
|
||||
00000013011201000000
|
||||
00000011114441000000
|
||||
00000000011111000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000111110000000
|
||||
00000000130410000000
|
||||
00000000121010000000
|
||||
00000000100010000000
|
||||
00000011101010000000
|
||||
00000010020410000000
|
||||
00000010240010000000
|
||||
00000011111110000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000111100000000
|
||||
00000001100110000000
|
||||
00000001020010000000
|
||||
00000001002010000000
|
||||
00000001114010000000
|
||||
00000000014010000000
|
||||
00000000014110000000
|
||||
00000001114010000000
|
||||
00000001020310000000
|
||||
00000001002010000000
|
||||
00000001000110000000
|
||||
00000001111100000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,20 @@
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000111100000000
|
||||
00000001144100000000
|
||||
00000011444100000000
|
||||
00000011020100000000
|
||||
00000010202100000000
|
||||
00000010120110000000
|
||||
00000010102010000000
|
||||
00000010000010000000
|
||||
00000011131110000000
|
||||
00000000111000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
00000000000000000000
|
||||
@ -0,0 +1,36 @@
|
||||
package com.mr.model;
|
||||
|
||||
import com.mr.util.GameImageUtil;
|
||||
/**
|
||||
* 箱子
|
||||
* @author mingrisoft
|
||||
*
|
||||
*/
|
||||
|
||||
public class Box extends RigidBody {
|
||||
private boolean arrived = false;// 是否到达目的地
|
||||
|
||||
public Box() {
|
||||
super(GameImageUtil.boxImage1);
|
||||
}
|
||||
|
||||
public Box(int x, int y) {
|
||||
super(x,y);
|
||||
setImage(GameImageUtil.boxImage1);
|
||||
}
|
||||
|
||||
public void arrive() {// 到达
|
||||
setImage(GameImageUtil.boxImage2);
|
||||
arrived = true;
|
||||
}
|
||||
|
||||
public void leave() {// 离开
|
||||
setImage(GameImageUtil.boxImage1);
|
||||
arrived = false;
|
||||
}
|
||||
|
||||
public boolean isArrived() {
|
||||
return arrived;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.mr.model;
|
||||
|
||||
import com.mr.util.GameImageUtil;
|
||||
/**
|
||||
* 目的地
|
||||
*
|
||||
* @author mingrisoft
|
||||
*
|
||||
*/
|
||||
|
||||
public class Destination extends RigidBody {
|
||||
|
||||
public Destination() {
|
||||
super(GameImageUtil.destinationImage);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.mr.model;
|
||||
|
||||
import com.mr.util.GameImageUtil;
|
||||
/**
|
||||
* Íæ¼Ò
|
||||
* @author mingrisoft
|
||||
*
|
||||
*/
|
||||
public class Player extends RigidBody{
|
||||
|
||||
public Player() {
|
||||
super(GameImageUtil.playerImage);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.mr.model;
|
||||
|
||||
import com.mr.util.GameImageUtil;
|
||||
/**
|
||||
* ǽ¿é
|
||||
*
|
||||
* @author mingrisoft
|
||||
*
|
||||
*/
|
||||
|
||||
public class Wall extends RigidBody {
|
||||
|
||||
public Wall() {
|
||||
super(GameImageUtil.wallImage);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package com.mr.util;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.io.File;
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
/**
|
||||
* 绘图工具类。
|
||||
*
|
||||
* @author mingrisoft
|
||||
*/
|
||||
public class GameImageUtil {
|
||||
|
||||
private static final String IMAGE_PATH = "src/com/mr/image";// 图片存放的路径
|
||||
public static BufferedImage playerImage;// 玩家图片
|
||||
public static BufferedImage boxImage1;// 箱子未到达目的地图片
|
||||
public static BufferedImage boxImage2;// 箱子已到达目的地图片
|
||||
public static BufferedImage wallImage;// 墙图片
|
||||
public static BufferedImage destinationImage;// 目的地图片
|
||||
public static BufferedImage backgroundImage;// 背景图片
|
||||
|
||||
static {// 对图片进行初始化
|
||||
try {
|
||||
playerImage = ImageIO.read(new File(IMAGE_PATH, "player.png"));
|
||||
boxImage1 = ImageIO.read(new File(IMAGE_PATH, "box1.png"));
|
||||
boxImage2 = ImageIO.read(new File(IMAGE_PATH, "box2.png"));
|
||||
wallImage = ImageIO.read(new File(IMAGE_PATH, "wall.png"));
|
||||
destinationImage = ImageIO
|
||||
.read(new File(IMAGE_PATH, "destination.png"));
|
||||
backgroundImage = ImageIO
|
||||
.read(new File(IMAGE_PATH, "background.png"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,97 @@
|
||||
package com.mr.view;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import com.mr.util.GameImageUtil;
|
||||
/**
|
||||
* 开始面板
|
||||
*
|
||||
* @author mingrisoft
|
||||
*
|
||||
*/
|
||||
public class StarPanel extends JPanel implements KeyListener {
|
||||
BufferedImage image;// 面板中显示的图片
|
||||
Graphics2D g2;// 图片绘图对象
|
||||
MainFrame frame;// 主窗体
|
||||
int x = 160;// 图标的横坐标
|
||||
int y;// 图标的纵坐标
|
||||
final int y1 = 320;// 第一个选项的纵坐标
|
||||
final int y2 = 420;// 第二个选项的纵坐标
|
||||
|
||||
public StarPanel(MainFrame frame) {
|
||||
this.frame = frame;
|
||||
this.frame.addKeyListener(this);
|
||||
this.frame.setFocusable(true);
|
||||
// 图片使用600*600的彩图
|
||||
image = new BufferedImage(600, 600, BufferedImage.TYPE_INT_RGB);
|
||||
g2 = image.createGraphics();
|
||||
this.frame.setTitle("推箱子");
|
||||
y = y1;// 默认选择第一个选项
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint(Graphics g) {
|
||||
paintImage();// 绘制图片
|
||||
g.drawImage(image, 0, 0, this);// 将图片绘制面板中
|
||||
}
|
||||
/**
|
||||
* 绘制图片
|
||||
*/
|
||||
private void paintImage() {
|
||||
g2.drawImage(GameImageUtil.backgroundImage, 0, 0, this);
|
||||
g2.setColor(Color.BLACK);// 使用黑色
|
||||
g2.setFont(new Font("黑体", Font.BOLD, 40));// 字体
|
||||
g2.drawString("开始游戏", 230, y1 + 30);// 绘制第一个选项的文字
|
||||
g2.drawString("地图编辑器", 230, y2 + 30);// 绘制第二个选项的文字
|
||||
g2.drawImage(GameImageUtil.playerImage, x, y, this);// 将玩家图片作为选择图标
|
||||
}
|
||||
|
||||
/**
|
||||
* 当键盘按下时
|
||||
*/
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
int key = e.getKeyCode();// 获取按键的编码
|
||||
switch (key) {// 判断按键
|
||||
case KeyEvent.VK_ENTER :// 如果是回车键
|
||||
switch (y) {// 判断图标的坐标
|
||||
case y1 :// 如果选中第一个选项
|
||||
frame.removeKeyListener(this);// 删除当前键盘事件
|
||||
frame.setPanel(new GamePanel(frame, 0));// 进入游戏面板
|
||||
break;
|
||||
case y2 :// 如果选中第二个选项
|
||||
frame.removeKeyListener(this);// 删除当前键盘事件
|
||||
frame.setPanel(new MapEditPanel(frame));// 进入地图编辑器面板
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case KeyEvent.VK_UP :// 如果是上箭头键,采用下箭头一样的逻辑
|
||||
case KeyEvent.VK_DOWN :// 如果是下箭头键
|
||||
if (y == y1) {// 如果图标选中第一个选项
|
||||
y = y2;// 更换选中第二个选项
|
||||
} else {
|
||||
y = y1;// 更换险种第一个选项
|
||||
}
|
||||
break;
|
||||
}
|
||||
repaint();// 重绘面板
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
// 不实现此方法
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e) {
|
||||
// 不实现此方法
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 414 KiB |
|
After Width: | Height: | Size: 414 KiB |
|
After Width: | Height: | Size: 563 KiB |
|
After Width: | Height: | Size: 563 KiB |
|
After Width: | Height: | Size: 562 KiB |
|
After Width: | Height: | Size: 562 KiB |
|
After Width: | Height: | Size: 395 KiB |
|
After Width: | Height: | Size: 395 KiB |