用java实现推箱子(sokoban)游戏

更新时间:2023-07-06 06:48:03 阅读: 评论:0

推箱子游戏
一、功能描述:
可以通过面板上的按钮或是键盘上的pageup,pagedown键选择上下关
可以通过面板上按钮或是键盘上的Backspace键后退,一直后退自己想要的位置,知道游戏开始时的位置。
可以通过面板上的按钮或是键盘上的字母r重新开始当前关卡游戏。
可以在复选框内选择想要玩的关卡。
二、界面及运行截图
三、源代码(三部分)
1、地图类
package box;libor
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 = Bytes();//将字符串转换为字节数组
                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.clo();
                }
coaster                catch (IOException e){
                    e.printStackTrace();
                }
                br = null;
            }
            if (fr == null){
                try {
                    fr.clo();
                } catch (IOException e){
                    e.printStackTrace();
                }
                fr = null;
            }
        }
    }
    public int[][] getMap() {
        return map;
    }
    public int getManX() {
        return manX;
    }
    public int getManY() {perfumes
        return manY;
legacy是什么意思    }
}
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;
    Image[] picture;                      //地图上的所有图片
    ImageIcon[] image=new ImageIcon[10];       
    Stack<Integer> back_stack = new Stack<Integer>();                      //存储所前行的路径
    JButton next,previous,back,restart,exit;    //按钮:下一关,上一关,重新开始,退出 
    String current_level="第"+level+"关";    //当前所处关卡(右上角显示文本)
    String[] level_button=new String[13];  //复选框的内容
韦伯英语    JComboBox lectBox;                    //选关复选框
   
    final int Up = 0;
    final int Down = 1;
    final int Left = 2;
    final int Right = 3;
   
    int[] dir_x = {-1, 1, 0, 0};
    int[] dir_y = {0, 0, -1, 1};
   
record是什么意思
    public pushbox(){
        super("推箱子");
       
        getmap(map);
ironing
       
        previous=new JButton("上一关");
        next=new JButton("下一关");
        restart=new JButton("重新开始");
        back=new JButton("后退");
        exit=new JButton("退出游戏");
        for(int i=0;i<13;i++)
            level_button[i]="第"+String(i+1)+"关";
典雅是什么意思
       
        lectBox=new JComboBox(level_button);
       
       
        FlowLayout layout=new FlowLayout();  //布局模式
        Container c=getContentPane();
        c.tLayout(layout);
        layout.tAlignment(FlowLayout.CENTER);  //控件在布局中的位置
        c.tBackground(Color.CYAN);        //背景色
        c.add(previous);
        c.add(next);
        c.add(back);
        c.add(restart);
        c.add(lectBox);
        c.add(exit);
       
        previous.addActionListener((ActionListener) this);
        previous.addKeyListener(this);
        next.addActionListener((ActionListener) this);

本文发布于:2023-07-06 06:48:03,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/168625.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:位置   游戏   读取
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图