预览效果

双人推箱子

游戏简介:玩家1由 ↑,↓,←,→键来控制方向,玩家2由W(上)、S(下)、A(左)、D(右)来控制方向,点击空格键表示重玩当前关卡,所有箱子归位自动跳入下一关。

游戏灵感来源:自己尝试玩了几关发现这个游戏如果是两个人一起玩可能也会比较有意思,同时也降低了这个游戏的难度,不用一个人绕一大圈去推箱子,直接让你的队友在需要堆箱子的位置提前站好就可以啦(啊哈哈哈,程序还是有一些可见的bug的,比如现在人和箱子可以被推到一起去,这个bug感觉挺好玩的我就没有修复了,如果想要追求完美的小伙伴可以把这个bug修复一下,【修复原理:当一个小人要推箱子先预先判断该方向上下下一步是否有另一个小人,如果有则箱子不能移动,如果没有小人阻挡则箱子可以正常移动】)

*更新提醒*还有这次关卡已经给大家扒到30关来了,太费眼睛了,o(╥﹏╥)o

完整代码部分

package demo01;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;public class Pushbox006 extends JFrame implements KeyListener, ActionListener, MouseListener {//    定义一个内部类用来创建坐标class Point{public int x;public int y;public Point (int x,int y){this.x=x;this.y=y;}}//    行数(高)int height=8;//    列数(宽)int width=8;//    格子的大小int size=50;//    标题栏的高度int title=100;//    记录窗口大小是否发生改变boolean window=false;//    关卡地图信息class Ditu{public int [][] ditu;Ditu(int[][] _ditu){this.ditu=_ditu;}}//    创建一个二维数组用来存放关卡
//    1-10关地图int [][] ditu1={{0,0,1,1,1,0,0,0},{0,0,1,3,1,0,0,0},{0,0,1,2,1,1,1,1},{1,1,1,4,2,4,3,1},{1,3,2,4,5,1,1,1},{1,1,1,1,4,1,0,0},{0,0,0,1,3,1,0,0},{0,0,0,1,1,1,0,0}};int [][] ditu2= {{1,1,1,1,1,0,0,0,0},{1,2,2,5,1,0,0,0,0},{1,2,4,4,1,0,1,1,1},{1,2,4,2,1,0,1,3,1},{1,1,1,2,1,1,1,3,1},{0,1,1,2,2,2,2,3,1},{0,1,2,2,2,1,2,2,1},{0,1,2,2,2,1,1,1,1},{0,1,1,1,1,1,0,0,0}};int [][] ditu3={{0,1,1,1,1,1,1,1,0,0},{0,1,2,2,2,2,2,1,1,1},{1,1,4,1,1,1,2,2,2,1},{1,2,5,2,4,2,2,4,2,1},{1,2,3,3,1,2,4,2,1,1},{1,1,3,3,1,2,2,2,1,0},{0,1,1,1,1,1,1,1,1,0}};int [][] ditu4={{0,1,1,1,1,0},{1,1,2,2,1,0},{1,5,4,2,1,0},{1,1,4,2,1,1},{1,1,2,4,2,1},{1,3,4,2,2,1},{1,3,3,6,3,1},{1,1,1,1,1,1}};int [][] ditu5={{0,1,1,1,1,1,0,0},{0,1,2,2,1,1,1,0},{0,1,5,4,2,2,1,0},{1,1,1,2,1,2,1,1},{1,3,1,2,1,2,2,1},{1,3,4,2,2,1,2,1},{1,3,2,2,2,4,2,1},{1,1,1,1,1,1,1,1}};int [][] ditu6={{0,0,0,1,1,1,1,1,1,1,0,0,0},{1,1,1,1,2,2,2,2,2,1,0,0,0},{1,2,2,2,3,1,1,1,2,1,0,0,0},{1,2,1,2,1,2,2,2,2,1,1,0,0},{1,2,1,2,4,2,4,1,3,2,1,0,0},{1,2,1,2,2,6,2,2,1,2,1,0,0},{1,2,3,1,4,2,4,2,1,2,1,0,0},{1,1,2,2,2,2,1,2,1,2,1,1,1},{0,1,2,1,1,1,3,2,2,2,2,5,1},{0,1,2,2,2,2,2,1,1,2,2,2,1},{0,1,1,1,1,1,1,1,1,1,1,1,1}};int [][] ditu7={{0,0,0,1,1,1,1,1,1,1},{0,0,1,1,2,2,1,2,5,1},{0,0,1,2,2,2,1,2,2,1},{0,0,1,4,2,4,2,4,2,1},{0,0,1,2,4,1,1,2,2,1},{1,1,1,2,4,2,1,2,1,1},{1,3,3,3,3,3,2,2,1,0},{1,1,1,1,1,1,1,1,1,0}};int [][] ditu8={{0,0,0,1,1,1,1,1,1,0},{0,1,1,1,2,2,2,2,1,0},{1,1,3,2,4,1,1,2,1,1},{1,3,3,4,2,4,2,2,5,1},{1,3,3,2,4,2,4,2,1,1},{1,1,1,1,1,1,2,2,1,0},{0,0,0,0,0,1,1,1,1,0}};int [][] ditu9={{0,1,1,1,1,1,1,1,1,1,0},{0,1,2,2,1,1,2,2,2,1,0},{0,1,2,2,2,4,2,2,2,1,0},{0,1,4,2,1,1,1,2,4,1,0},{0,1,2,1,3,3,3,1,2,1,0},{1,1,2,1,3,3,3,1,2,1,1},{1,2,4,2,2,4,2,2,4,2,1},{1,2,2,2,2,2,1,2,5,2,1},{1,1,1,1,1,1,1,1,1,1,1}};int [][] ditu10={{0,0,1,1,1,1,1,1},{0,0,1,2,2,2,2,1},{1,1,1,4,4,4,2,1},{1,5,2,4,3,3,2,1},{1,2,4,3,3,3,1,1},{1,1,1,1,2,2,1,0},{0,0,0,1,1,1,1,0}};int [][] ditu11={{0,1,1,1,1,0,0,1,1,1,1,1},{1,1,2,2,1,0,0,1,2,2,2,1},{1,2,4,2,1,1,1,1,4,2,2,1},{1,2,2,4,3,3,3,3,2,4,2,1},{1,1,2,2,2,2,1,2,5,2,1,1},{0,1,1,1,1,1,1,1,1,1,1,0}};int [][] ditu12={{0,0,1,1,1,1,1,0},{1,1,1,2,2,5,1,0},{1,2,2,4,3,2,1,1},{1,2,2,3,4,3,2,1},{1,1,1,2,6,4,2,1},{0,0,1,2,2,2,1,1},{0,0,1,1,1,1,1,0}};int [][] ditu13={{0,0,1,1,1,1,0,0},{0,0,1,3,3,1,0,0},{0,1,1,2,3,1,1,0},{0,1,2,2,4,3,1,0},{1,1,2,4,2,2,1,1},{1,2,2,1,4,4,2,1},{1,2,2,5,2,2,2,1},{1,1,1,1,1,1,1,1}};int [][] ditu14={{1,1,1,1,1,1,1,1},{1,2,2,1,2,2,2,1},{1,2,4,3,3,4,2,1},{1,5,4,3,6,2,1,1},{1,2,4,3,3,4,2,1},{1,2,2,1,2,2,2,1},{1,1,1,1,1,1,1,1}};int [][] ditu15={{0,1,1,1,1,1,1,0},{1,1,2,2,2,2,1,1},{1,2,4,2,4,4,2,1},{1,3,3,3,3,3,3,1},{1,2,4,4,2,4,2,1},{1,1,1,2,5,1,1,1},{0,0,1,1,1,1,0,0}};int [][] ditu16={{0,0,1,1,1,1,1,1,0,0},{0,0,1,2,2,2,2,1,1,1},{0,0,1,2,4,2,2,2,2,1},{1,1,1,2,4,2,1,1,2,1},{1,3,3,3,2,4,2,2,2,1},{1,3,3,3,4,1,4,2,1,1},{1,1,1,1,2,1,2,4,2,1},{0,0,0,1,2,2,5,2,2,1},{0,0,0,1,1,1,1,1,1,1}};int [][] ditu17={{1,1,1,1,1,1,0,0,0},{1,2,2,2,2,1,0,0,0},{1,2,4,4,4,1,1,0,0},{1,2,2,1,3,3,1,1,1},{1,1,2,2,3,3,4,2,1},{0,1,2,5,2,2,2,2,1},{0,1,1,1,1,1,1,1,1}};int [][] ditu18={{0,0,1,1,1,1,1,1,1,1},{0,0,1,2,2,2,1,3,2,1},{0,1,1,2,2,4,3,3,3,1},{0,1,2,2,4,2,1,6,3,1},{1,1,2,1,1,4,1,2,1,1},{1,2,2,2,4,2,2,4,2,1},{1,2,2,2,1,2,2,2,2,1},{1,1,1,1,1,1,1,5,2,1},{0,0,0,0,0,0,1,1,1,1}};int [][] ditu19={{0,1,1,1,1,1,1,1,0,0},{0,1,3,3,3,3,2,1,0,0},{1,1,1,3,3,3,4,1,1,1},{1,2,2,4,1,4,2,4,2,1},{1,2,4,4,2,2,1,4,2,1},{1,2,2,2,2,1,2,2,2,1},{1,1,1,1,2,5,2,1,1,1},{0,0,0,1,1,1,1,1,0,0}};int [][] ditu20={{1,1,1,1,1,1,1},{1,3,3,4,3,3,1},{1,3,3,1,3,3,1},{1,2,4,4,4,2,1},{1,2,2,4,2,2,1},{1,2,4,4,4,2,1},{1,2,2,1,5,2,1},{1,1,1,1,1,1,1}};int [][] ditu21={{0,0,0,1,1,1,1,1,1,0,0},{0,0,0,1,2,3,3,3,1,0,0},{1,1,1,1,3,3,3,3,1,0,0},{1,2,2,1,1,1,4,2,1,1,1},{1,2,4,2,4,2,2,4,4,2,1},{1,5,2,4,2,4,2,2,2,2,1},{1,2,2,2,1,1,1,2,2,2,1},{1,1,1,1,1,2,1,1,1,1,1}};int [][] ditu22={{1,1,1,1,1,1,1,1,0},{1,2,2,2,2,2,2,1,0},{1,2,1,4,4,2,2,1,0},{1,2,3,3,3,1,2,1,0},{1,1,3,3,3,4,2,1,1},{0,1,2,1,1,2,4,2,1},{0,1,4,2,2,4,2,2,1},{0,1,2,2,1,2,2,5,1},{0,1,1,1,1,1,1,1,1}};int [][] ditu23={{0,0,1,1,1,1,1,1,0,0},{1,1,1,2,2,2,1,1,1,1},{1,2,2,2,4,2,4,2,2,1},{1,2,4,2,2,2,4,2,5,1},{1,1,1,4,4,1,1,1,1,1},{0,0,1,2,2,3,3,1,0,0},{0,0,1,3,3,3,3,1,0,0},{0,0,1,1,1,1,1,1,0,0}};int [][] ditu24={{1,1,1,1,1,1,0,0,0,1,1,1,1,1},{1,2,2,2,2,1,1,1,0,1,2,2,3,1},{1,2,2,4,2,4,2,1,0,1,3,3,3,1},{1,2,1,2,2,4,2,1,1,1,2,2,3,1},{1,2,2,4,4,4,2,2,2,4,2,5,3,1},{1,1,1,2,2,4,2,2,4,1,2,2,3,1},{0,0,1,2,2,4,1,4,2,1,3,3,3,1},{0,0,1,1,2,2,2,2,2,1,2,2,3,1},{0,0,0,1,1,1,1,1,1,1,1,1,1,1}};int [][] ditu25={{0,0,0,0,0,1,1,1,1,1,1},{0,1,1,1,1,1,3,2,2,2,1},{0,1,2,2,1,3,3,1,1,2,1},{0,1,2,2,4,3,3,2,2,2,1},{0,1,2,2,1,2,3,1,2,1,1},{1,1,1,2,1,1,4,1,2,2,1},{1,2,4,2,2,2,2,4,4,2,1},{1,2,1,4,1,2,2,1,2,2,1},{1,5,2,2,1,1,1,1,1,1,1},{1,1,1,1,1,0,0,0,0,0,0}};int [][] ditu26={{0,1,1,1,1,1,1,1,1,1,0,0,0},{0,1,2,2,2,1,1,2,2,1,1,1,1},{0,1,2,4,2,2,2,2,2,2,2,2,1},{0,1,1,4,1,1,1,2,1,1,2,2,1},{0,1,2,2,1,1,2,6,2,1,2,1,1},{0,1,2,4,3,3,3,3,3,3,2,1,0},{1,1,2,1,1,1,2,3,2,1,2,1,0},{1,2,2,2,2,2,4,1,1,1,4,1,0},{1,2,2,2,1,2,2,2,2,4,5,1,0},{1,1,1,1,1,4,1,2,1,1,1,1,0},{0,0,0,0,1,2,2,2,1,0,0,0,0},{0,0,0,0,1,1,1,1,1,0,0,0,0}};int [][] ditu27={{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1},{0,0,0,0,0,0,1,2,2,2,2,2,2,2,1},{0,0,0,0,0,0,1,2,1,2,1,2,1,2,1},{0,0,0,0,0,0,1,2,2,4,2,4,1,2,1},{1,1,1,1,1,1,1,2,2,2,4,2,2,2,1},{1,3,3,1,2,2,1,1,2,4,2,4,1,2,1},{1,3,3,2,2,2,1,1,2,4,2,4,2,2,1},{1,3,3,1,2,2,1,1,2,1,1,1,1,1,1},{1,3,3,1,2,1,2,4,2,4,2,1,0,0,0},{1,3,3,2,2,2,2,2,4,2,2,1,0,0,0},{1,2,2,1,1,1,2,5,2,1,1,1,0,0,0},{1,1,1,1,0,1,1,1,1,1,0,0,0,0,0}};int [][] ditu28={{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},{1,1,1,1,1,2,2,1,0,0,0,0,0,0,0,0},{1,2,2,4,2,4,2,1,0,1,1,1,1,1,1,1},{1,2,2,2,4,2,2,1,0,1,6,3,6,3,6,1},{1,1,2,4,2,4,2,1,1,1,3,6,3,6,3,1},{0,1,4,2,4,2,2,1,2,2,6,3,6,3,6,1},{0,1,5,4,2,4,2,2,2,2,3,6,3,6,1,1},{0,1,4,2,4,2,2,1,2,2,6,3,6,3,6,1},{1,1,2,4,2,4,2,1,1,1,3,6,3,6,3,1},{1,2,2,2,4,2,2,1,0,1,6,3,6,3,6,1},{1,2,2,4,2,4,2,1,0,1,1,1,1,1,1,1},{1,1,1,1,1,2,2,1,0,0,0,0,0,0,0,0},{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}};int [][] ditu29={{1,1,1,1,1,1,1,1,0},{1,3,3,3,3,3,3,1,0},{1,2,2,4,2,1,2,1,1},{1,2,4,2,1,2,4,2,1},{1,1,4,2,4,2,4,2,1},{0,1,2,2,5,2,2,2,1},{0,1,1,1,1,1,1,1,1}};int [][] ditu30={{0,0,1,1,1,1,1,1,1,1,1,1},{1,1,1,2,2,2,3,2,2,2,2,1},{1,2,2,2,1,1,4,1,1,2,2,1},{1,2,5,4,3,2,3,2,3,4,1,1},{1,1,2,4,1,1,4,1,1,2,1,0},{0,1,2,2,2,2,3,2,2,2,1,0},{0,1,1,1,1,1,1,1,1,1,1,0}};//    创建一个总地图Ditu ditu[]={new Ditu(ditu1),new Ditu(ditu2),new Ditu(ditu3),new Ditu(ditu4),new Ditu(ditu5),new Ditu(ditu6),new Ditu(ditu7),new Ditu(ditu8),new Ditu(ditu9),new Ditu(ditu10),new Ditu(ditu11),new Ditu(ditu12),new Ditu(ditu13),new Ditu(ditu14),new Ditu(ditu15),new Ditu(ditu16),new Ditu(ditu17),new Ditu(ditu18),new Ditu(ditu19),new Ditu(ditu20),new Ditu(ditu21),new Ditu(ditu22),new Ditu(ditu23),new Ditu(ditu24),new Ditu(ditu25),new Ditu(ditu26),new Ditu(ditu27),new Ditu(ditu28),new Ditu(ditu29),new Ditu(ditu30)};//    定义一个当前关卡int guan=1;//    定义一个最大关卡int maxguan=30;//   定义一个变量判断是否通关boolean tongguan=false;//    创建一个推箱子的小人Point man=new Point(4,4);
//    创建一个小人的影子Point man2= new Point(4,4);//    创建箱子Point [] box= {new Point(3,3),new Point(3,4),new Point(5,3),new Point(4,5)};//    创建箱子最终要到达的位置Point [] home={new Point(1,4),new Point(3,1),new Point(6,3),new Point(4,6)};//    创建一个墙壁数组Point [] qiangbi= {new Point(2,0),new Point(3,0),new Point(4,0),new Point(2,1),new Point(4,1),new Point(2,2),new Point(4,2),new Point(5,2),new Point(6,2),new Point(7,2),new Point(0,3),new Point(1,3),new Point(2,3),new Point(7,3),new Point(0,4), new Point(5,4), new Point(6,4), new Point(7,4),new Point(0,5),new Point(1,5),new Point(2,5),new Point(3,5),new Point(5,5),new Point(3,6),new Point(5,6),new Point(3,7),new Point(4,7),new Point(5,7)};//    创建一个空地数组Point [] kongdi={new Point(3,1),new Point(3,2),new Point(3,3),new Point(4,3),new Point(5,3),new Point(6,3),new Point(1,4),new Point(2,4),new Point(3,4),new Point(4,4),new Point(4,5),new Point(4,6)};//    设置图片private Image image=null;Graphics gf=null;//    设置计时器Timer timer=new Timer(500,this);public void Tian(){
//      加载地图jiazaiditu(guan);//设置窗口的宽高this.setSize(width*size ,height*size+title);
//        设置标题this.setTitle("推箱子");//设置窗口能看见this.setVisible(true);
//        设置窗口顶点坐标的位置this.setLocation(100,100);//设置键盘监听事件(也就是当键盘有什么反应都会调用此函数)this.addKeyListener(this);}public void paint(Graphics g){// 窗口大小改变后,重新创建缓存图片if(window == true) {window = false;image=this.createImage(width*size,height*size+title);this.gf =image.getGraphics();}//初始化临时图片//解决闪烁问题if(image==null){image=this.createImage(width*size,height*size+title);}if(this.gf ==null){this.gf =image.getGraphics();}//        擦除背景gf.setColor(Color.white);gf.fill3DRect(0,0,width*size,title+height*size,true);//        绘制空地
//        for (int i = 0; i < kongdi.length; i++) {
//            gf.setColor(Color.GRAY);
//            gf.fill3DRect(kongdi[i].x*size,kongdi[i].y*size+title,size,size,true);
//
//        }//        绘制网格gf.setColor(Color.GRAY);
//        画行(画横线)
//        for (int i = 0; i <= height; i++) {
//            gf.drawLine(0,size*i+title,width*size,size*i+title);
//        }画列(画竖线)
//        for (int i = 0; i <= width; i++) {
//            gf.drawLine(i*size,title,i*size,height*size+title);
//        }//       绘制墙for (int i = 0; i <qiangbi.length ; i++) {gf.setColor(Color.pink);gf.fill3DRect(qiangbi[i].x*size,qiangbi[i].y*size+title,size,size,true);}//       绘制箱子最终要到达的位置for (int i = 0; i <home.length ; i++) {gf.setColor(Color.black);gf.drawOval(home[i].x*size,home[i].y*size+title,size,size);gf.drawLine(home[i].x*size,home[i].y*size+title,home[i].x*size+size,home[i].y*size+title+size);}
//        绘制真实的箱子for (int i = 0; i <box.length ; i++) {gf.setColor(Color.ORANGE);gf.fill3DRect(box[i].x*size,box[i].y*size+title,size,size,true);if(isguiwei(i)){gf.setColor(Color.red);gf.fill3DRect(box[i].x*size,box[i].y*size+title,size,size,true);}}//        绘制影子小人gf.setColor(Color.gray);gf.fillOval(man2.x*size,man2.y*size+title,size,size);//        绘制推箱子的小人gf.setColor(Color.green);gf.fillOval(man.x*size,man.y*size+title,size,size);//        当影子和小人重合是话两个半圆if (man.x==man2.x&&man.y==man2.y){gf.setColor(Color.gray);gf.fillArc(man.x*size,man.y*size+title,size,size,0,180);}//        绘制当前关卡信息if(iswin()==true&&tongguan==true){gf.setColor(Color.darkGray);gf.fill3DRect(0,0,width*size,title,true);gf.setFont(new Font("华文新魏", 10, 55)); //设置字体gf.setColor(Color.white);gf.drawString("恭喜通关",width*size/2-110,title/2+40);}else {gf.setColor(Color.darkGray);gf.fill3DRect(0,0,width*size,title,true);gf.setFont(new Font("华文新魏", 10, 55)); //设置字体gf.setColor(Color.white);gf.drawString("第"+guan+"关",width*size/2-82,title/2+40);}g.drawImage(image,0,0,null);}//    按下键盘--控制游戏的开始以及方块的移动方向public void keyPressed(KeyEvent e) {// 获取从键盘输入的键int key = e.getKeyCode();//       上if (key == KeyEvent.VK_UP) {
//            y-1是空地if(iscunzai(kongdi,new Point(man.x,man.y-1))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man.x,man.y-1))==false){man.y--;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man.x,man.y-2))==true)&&(iscunzai(box,new Point(man.x,man.y-2))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man.x&&box[i].y==man.y-1){box[i].y--;break;}}man.y--;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){//不是最后一关guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{//是最后一关tongguan=true;}}}}}//        下}else if (key == KeyEvent.VK_DOWN) {//            y-1是空地if(iscunzai(kongdi,new Point(man.x,man.y+1))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man.x,man.y+1))==false){man.y++;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man.x,man.y+2))==true)&&(iscunzai(box,new Point(man.x,man.y+2))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man.x&&box[i].y==man.y+1){box[i].y++;break;}}man.y++;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{tongguan=true;}}}}}
//            左}else if(key == KeyEvent.VK_LEFT){if(iscunzai(kongdi,new Point(man.x-1,man.y))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man.x-1,man.y))==false){man.x--;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man.x-2,man.y))==true)&&(iscunzai(box,new Point(man.x-2,man.y))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man.x-1&&box[i].y==man.y){box[i].x--;break;}}man.x--;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{tongguan=true;}}}}}//            右}else if (key == KeyEvent.VK_RIGHT) {if(iscunzai(kongdi,new Point(man.x+1,man.y))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man.x+1,man.y))==false){man.x++;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man.x+2,man.y))==true)&&(iscunzai(box,new Point(man.x+2,man.y))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man.x+1&&box[i].y==man.y){box[i].x++;break;}}man.x++;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{tongguan=true;}}}}}}//        处理影子的移动//       上if (key == KeyEvent.VK_W) {
//            y-1是空地if(iscunzai(kongdi,new Point(man2.x,man2.y-1))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man2.x,man2.y-1))==false){man2.y--;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man2.x,man2.y-2))==true)&&(iscunzai(box,new Point(man2.x,man2.y-2))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man2.x&&box[i].y==man2.y-1){box[i].y--;break;}}man2.y--;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){//不是最后一关guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{//是最后一关tongguan=true;}}}}}//        下}else if (key == KeyEvent.VK_S) {//            y-1是空地if(iscunzai(kongdi,new Point(man2.x,man2.y+1))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man2.x,man2.y+1))==false){man2.y++;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man2.x,man2.y+2))==true)&&(iscunzai(box,new Point(man2.x,man2.y+2))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man2.x&&box[i].y==man2.y+1){box[i].y++;break;}}man2.y++;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{tongguan=true;}}}}}
//            左}else if(key == KeyEvent.VK_A){if(iscunzai(kongdi,new Point(man2.x-1,man2.y))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man2.x-1,man2.y))==false){man2.x--;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man2.x-2,man2.y))==true)&&(iscunzai(box,new Point(man2.x-2,man2.y))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man2.x-1&&box[i].y==man2.y){box[i].x--;break;}}man2.x--;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{tongguan=true;}}}}}//            右}else if (key == KeyEvent.VK_D) {if(iscunzai(kongdi,new Point(man2.x+1,man2.y))==true){
//                y-1是空地,且空地上没有箱子if(iscunzai(box,new Point(man2.x+1,man2.y))==false){man2.x++;}else{//y-2是一个空地,且没有箱子
//                    y-2是一个没有箱子的空地(这种就是上边已经有了一个箱子,箱子的上边再没有箱子且是空地)if ((iscunzai(kongdi,new Point(man2.x+2,man2.y))==true)&&(iscunzai(box,new Point(man2.x+2,man2.y))==false)){
//                      这种情况下是人和箱子都向上移动一格for (int i = 0; i < box.length; i++) {if(box[i].x==man2.x+1&&box[i].y==man2.y){box[i].x++;break;}}man2.x++;//判断所有箱子是否归位if(iswin()==true){if(guan<maxguan){guan++;
//                            加载新一关的地图jiazaiditu(guan);}else{tongguan=true;}}}}}}
//        点击空格键重玩当前关卡if(key == KeyEvent.VK_SPACE) {//空格键
//            重置当前关卡jiazaiditu(guan);}repaint();}public void keyReleased(KeyEvent e) {}public void mouseClicked(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}
//   判断某个数组中是否存在某个点
//    判断point这个点是否在points这个数组中public boolean iscunzai(Point [] points,Point point){for (int i = 0; i < points.length; i++) {if(points[i].x==point.x&&points[i].y==point.y){return true;}}return false;}//    加载地图public void jiazaiditu(int index){// 清空当前数据//ArrayList<Point> boxlist = new ArrayList<Point>();ArrayList<Point> homelist = new ArrayList<Point>();ArrayList<Point> qiangbilist = new ArrayList<Point>();ArrayList<Point> kongdilist = new ArrayList<Point>();Ditu d = ditu[index-1];for(int i= 0;i<d.ditu.length;i++){for(int j=0;j<d.ditu[i].length;j++){// 1是墙壁if(d.ditu[i][j] == 1){qiangbilist.add(new Point(j,i));}// 2是空地else if(d.ditu[i][j] == 2){kongdilist.add(new Point(j,i));}// 3是黑店else if(d.ditu[i][j] == 3){homelist.add(new Point(j,i));kongdilist.add(new Point(j,i));}// 4箱子else if(d.ditu[i][j] == 4){boxlist.add(new Point(j,i));kongdilist.add(new Point(j,i));}// 5人else if(d.ditu[i][j] == 5){man.x = j;man.y = i;
//                    影子小人man2.x=j;man2.y=i;kongdilist.add(new Point(j,i));}// 6(箱子在黑点上)else if(d.ditu[i][j] ==6){boxlist.add(new Point(j,i));kongdilist.add(new Point(j,i));homelist.add(new Point(j,i));}// 7(人在黑点上)else if(d.ditu[i][j] == 7){man.x = j;man.y = i;
//                    影子小人man2.x=j;man2.y=i;kongdilist.add(new Point(j,i));homelist.add(new Point(j,i));}}}int i=0;qiangbi = new Point[qiangbilist.size()];for (Point p:qiangbilist){qiangbi[i] = new Point(p.x,p.y);i++;}i=0;kongdi = new Point[kongdilist.size()];for (Point p:kongdilist){kongdi[i]=new Point(p.x,p.y);i++;}i=0;box = new Point[boxlist.size()];for (Point p:boxlist){box[i]=new Point(p.x,p.y);i++;}i=0;home = new Point[homelist.size()];for (Point p:homelist){home[i]=new Point(p.x,p.y);i++;}height=d.ditu.length;width=d.ditu[0].length;this.setSize(width*size,height*size+title);window=true;}//    判断单个方块是否归位//用于改变颜色public boolean isguiwei(int i){for (int i1 = 0; i1 < home.length; i1++) {if(box[i].x==home[i1].x&&box[i].y==home[i1].y){return true;}}return false;}public void actionPerformed(ActionEvent e) {}public void keyTyped(KeyEvent e) {}//    判断游戏是否胜利(判断方块是否全部归位)public boolean iswin(){int j=0;for (int i = 0; i < box.length; i++) {for (int i1 = 0; i1 < home.length; i1++) {if(box[i].x==home[i1].x&&box[i].y==home[i1].y){j++;if(j==home.length){return true;}}}}return false;}public static void main(String[] args) {Pushbox006 pushbox=new Pushbox006();pushbox.Tian();}}

java版本实现双人推箱子小游戏相关推荐

  1. 【Java】推箱子小游戏(带背景音乐)完整代码

    Java实现推箱子小游戏 一.整体框架 二.游戏效果图 三.推箱子四大类 1. GameFrame类 2. Map类 3. MapFactory类 4. Sound类 四.游戏分析 1.游戏操作 2. ...

  2. 基于Java Swing JFream 组件的趣味推箱子小游戏

    一 需求分析 设计一个经典的推箱子小游戏,在窗体里有墙,箱子,胜利的标志,和工人,用户可以通过键盘上的"上"."下"."左"."右 ...

  3. [源码和文档分享]基于Java Swing JFream 组件的趣味推箱子小游戏

    一 需求分析 设计一个经典的推箱子小游戏,在窗体里有墙,箱子,胜利的标志,和工人,用户可以通过键盘上的"上"."下"."左"."右 ...

  4. java实现二维数组推箱子小游戏

    推箱子小游戏 import java.util.Scanner;public class 推箱子 {public static void main(String[] args) {int x =3, ...

  5. 简单的c语言推箱子程序,完整版本的推箱子小游戏,最简单的纯C语言打造

    /*推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 左 ...

  6. 怀念童年,推箱子小游戏(vue版本)

    前言 最近都没有怎么写过文章,都断更很久了吧.学习前端一年多,快两年了,学习的热情相比一开始,自我感觉没有变化多少,但是 学习的动力却好像时有时无.就好像是没了目标一样,不知道自己现在应该学些什么,从 ...

  7. 手把手教你使用Python实现推箱子小游戏(附完整源码)

    文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...

  8. [新手必备]Unity推箱子小游戏C#代码详解(第一篇-代码部分)

    完整项目请参考博客:https://blog.csdn.net/qq_41676090/article/details/96300302 本文为推箱子小游戏C#代码详解第一篇的代码部分,主要讲解 Sy ...

  9. c#推箱子小游戏代码_推箱子小游戏V1.0制作

    小游戏实践 推箱子简易版 大家好,我是努力学习争取成为优秀的Game Producer的路人猿,今天来一起做一个推箱子的简易版本V1.0!下面跟我一起做吧~ 我们用到的软件如下: 编辑类 Visual ...

最新文章

  1. python的多线程threading
  2. u-boot nand flash read/write cmd
  3. Qt 编写应用程序升级的配置文件json 生成工具
  4. QT每日一练day10:设计一个登陆界面
  5. 技术剖析 | Axonius为什么能获得 2019 RSAC创新大奖 1
  6. pytorch 的L1Loss 的计算方式和MAE 的计算方式的差异点
  7. Java 8 新日期时间 API ( 上 ) – 本地日期时间
  8. 不同数据量下主键类型的选择
  9. EXCEL图表之瀑布图
  10. can卡通用测试软件LCANTest详细介绍
  11. 简析通达信股票接口测试过程
  12. 详解 http-server的安装和使用
  13. 爬虫爬取到百度首页html,python爬虫实战之爬取百度首页的方法
  14. android qq侧滑,Android实现QQ的侧滑置顶、删除
  15. 上楼梯(df和dp解法)
  16. 大数据就业前景及职能定位解析!
  17. matlab 浮雕算法,photoshop图像滤镜——浮雕算法(含matlab代码)
  18. pandas中的绘图函数(什么是kde)
  19. error C1083:无法打开文件stddef.h或crtd bg.h
  20. 计算机网络安全漫画图片,安全教育漫画图片

热门文章

  1. Kimball多维模型的四大误解
  2. 恒生电子:数据中台详解+海内外对比(深度)
  3. 时间不一定能证明许多东西,但一定会让你看透许多东西。
  4. 实现reverse函数
  5. JOJ 2171 2488 1868 2237
  6. 【博学谷学习记录】超强总结,用心分享|前端开发图片属性总结
  7. 11C 以太坊 ethereum hardhat : 编写脚本
  8. 大话西游精彩对白(双语版2)
  9. C语言中函数的定义举例说明,C语言函数的定义与使用
  10. MAC地址合法性检测