用java实现推箱子(sokoban)游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
推箱子游戏
一、功能描述:
➢可以通过面板上的按钮或是键盘上的pageup,pagedown键选择上下关
➢可以通过面板上按钮或是键盘上的Backspace键后退,一直后退自己想要的位置,知道游戏开始时的位置。
➢可以通过面板上的按钮或是键盘上的字母r重新开始当前关卡游戏。
➢可以在复选框内选择想要玩的关卡。
二、界面及运行截图
三、源代码(三部分)
1、地图类
package box;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;//读取字符文件类FileReader import java.io.IOException;
public class map {
int[][] map=new int[20][20];
int manX,manY;
public map(int level){
String filepath="mapc/"+level+".txt";
File file = new File(filepath);
FileReader fr = null;//利用FileReader流来读取一个文件中的数据
BufferedReader br = null;//字符读到缓存里
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
for (int i = 0; i < 15; i++){
String line = br.readLine();//以行为单位,一次读一行利用BufferedReader 的readLine,读取分行文本
byte[] point = line.getBytes();//将字符串转换为字节数组
for (int j = 0; j < 15; j++) {
map[i][j] = point[j] - 48;// 根据ASCall码表要减掉30H(十进制的48)
if (map[i][j] == 5 || map[i][j] == 6 || map[i][j] == 7|| map[i][j] == 8){
manX = i;
manY = j;
}
}
}
}
catch (FileNotFoundException e){
e.printStackTrace();//深层次的输出异常调用的流程
}
catch (IOException e){
e.printStackTrace();//深层次的输出异常调用的流程
}
catch(NullPointerException e){
e.printStackTrace();//深层次的输出异常调用的流程
}
finally {
if (br == null){
try{
br.close();
}
catch (IOException e){
e.printStackTrace();
}
br = null;
}
if (fr == null){
try {
fr.close();
} catch (IOException e){
e.printStackTrace();
}
fr = null;
}
}
}
public int[][] getMap() {
return map;
}
public int getManX() {
return manX;
}
public int getManY() {
return manY;
}
}
2、游戏运行类
package box;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.*;
import javax.swing.*;
public class pushbox extends JFrame implements KeyListener,ActionListener{ map map_level=new map(1); //首次获取地图
int[][] map=new int[15][15]; //地图上每个位置所对应的图片
int[][] map_restart=new int[15][15]; //备用图片
static int manX,manY; //人所处的位置
static int level=1; //所处关卡
static int step=0;