java推箱子_java推箱子

packagepushbox;importjava.awt.Color;importjava.awt.Container;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.util.ArrayList;importjavax.swing.JFrame;importjavax.swing.JOptionPane;public class gameframe extends JFrame implementsActionListener,MouseListener ,KeyListener{//主面板类

final int WALL=1,BOX=2,BOXONEND=3,END=4,MANDOWN=5,MANLEFT=6,MANRIGHT=7,MANUP=8,GRASS=9,MANDOWNONEND=10,MANLEFTONEND=11,MANRIGHTONEND=12,

MANUPONEND=13;privateImage ibuffer;privateGraphics gbuffer;private int grade=0;private int row=7,column=7,leftX=0,leftY=0;//记载人的行号列号 地图左上角的行列号

private int mapRow=0,mapColumn=0;private int width=0,height=0;//记载屏幕的大小!!

private boolean acceptKey=true;//程序用到的图片

private Image pic[]=null;private int[][]mymap=null;private ArrayList list=newArrayList();

Sound sound;//在构造方法中初始化游戏地图,清空悔棋信息列表,同时播放MIDI背景音乐。

publicgameframe() {super("推箱子");

setSize(600,600);

setResizable(false);

setLocation(300,20);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container cont=getContentPane();

cont.setLayout(null);

cont.setBackground(Color.black);//最初的13张图片

getPic();

width=this.getWidth();

height=this.getHeight();

initMap();//初始化grade地图,清空悔棋列表信息

this.addKeyListener( this);this.addMouseListener(this);this.setFocusable(true);

setVisible(true);

sound=newSound();

sound.loadSound();

}public voidinitMap() {

mymap=getMap(grade);

list.clear();

getMapSizeAndPosition();

getManPosition();

}public voidgetManPosition() {for(int i=0;i

row=i;

column=j;break;

}

}

}private void getMapSizeAndPosition() {//获取游戏区域大小及显示游戏的左上角坐标位置

mapRow=mymap.length;

mapColumn=mymap[0].length;

leftX=(width-mymap[0].length*30)/2;

leftY=(height-mymap.length*30)/2;

}public voidgetPic() {

pic=new Image[14];for(int i=0;i<13;i++) {

pic[i]=Toolkit.getDefaultToolkit().getImage("D://test//photo//"+i+".jpg");

}

}public int grassOrEnd(int man) {//判断人所在的位置是目的地还是通道

int result=GRASS;if(man==MANDOWNONEND||man==MANLEFTONEND||man==MANRIGHTONEND||man==MANUPONEND) {

result=END;

}returnresult;

}private void moveUp() {//向上//上一位是墙

if(mymap[row-1][column]==WALL)return;//上一位是box或boxonend,则需考虑上上一位

if(mymap[row-1][column]==BOX||mymap[row-1][column]==BOXONEND) {//上上一位是目的地或通道

if(mymap[row-2][column]==END||mymap[row-2][column]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);int boxTemp=mymap[row-2][column]==END?BOXONEND:BOX;int manTemp=mymap[row-1][column]==BOX?MANUP:MANUPONEND;

mymap[row-2][column]=boxTemp;

mymap[row-1][column]=manTemp;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

row--;

}

}if(mymap[row-1][column]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row-1][column]=MANUP;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

row--;

}if(mymap[row-1][column]==END) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row-1][column]=MANUPONEND;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

row--;}

}private void moveDown() {//向下//下一位是墙

if(mymap[row+1][column]==WALL)return;//下一位是box或boxonend,则需考虑下下一位

if(mymap[row+1][column]==BOX||mymap[row+1][column]==BOXONEND) {//下下一位是目的地或通道

if(mymap[row+2][column]==END||mymap[row+2][column]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);int boxTemp=mymap[row+2][column]==END?BOXONEND:BOX;int manTemp=mymap[row+1][column]==BOX?MANUP:MANUPONEND;

mymap[row+2][column]=boxTemp;

mymap[row+1][column]=manTemp;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

row++;

}

}if(mymap[row+1][column]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row+1][column]=MANUP;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

row++;

}if(mymap[row+1][column]==END) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row+1][column]=MANUPONEND;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

row++;}

}private void moveLeft() {//向左//上一位是墙

if(mymap[row][column-1]==WALL)return;//上一位是box或boxonend,则需考虑上上一位

if(mymap[row][column-1]==BOX||mymap[row][column-1]==BOXONEND) {//上上一位是目的地或通道

if(mymap[row][column-2]==END||mymap[row][column-2]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);int boxTemp=mymap[row][column-2]==END?BOXONEND:BOX;int manTemp=mymap[row][column-1]==BOX?MANUP:MANUPONEND;

mymap[row][column-2]=boxTemp;

mymap[row][column-1]=manTemp;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

column--;

}

}if(mymap[row][column-1]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row][column-1]=MANUP;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

column--;

}if(mymap[row][column-1]==END) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row][column-1]=MANUPONEND;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

column--;}

}private void moveRight() {//向右//上一位是墙

if(mymap[row][column+1]==WALL)return;//上一位是box或boxonend,则需考虑上上一位

if(mymap[row][column+1]==BOX||mymap[row][column+1]==BOXONEND) {//上上一位是目的地或通道

if(mymap[row][column+2]==END||mymap[row][column+2]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);int boxTemp=mymap[row][column+2]==END?BOXONEND:BOX;int manTemp=mymap[row][column+1]==BOX?MANUP:MANUPONEND;

mymap[row][column+2]=boxTemp;

mymap[row][column+1]=manTemp;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

column++;

}

}if(mymap[row][column+1]==GRASS) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row][column+1]=MANUP;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

column++;

}if(mymap[row][column+1]==END) {

map1 currMap=new map1(row,column,mymap);//保存当前全部游戏的地图信息到ArrayList的list中,方便撤销!!

list.add(currMap);

mymap[row][column+1]=MANUPONEND;

mymap[row][column]=grassOrEnd(mymap[row][column]);//修改人离开后人的坐标

column++;}

}public booleanisFinished() {for(int i=0;i

}return true;

}public void paint(Graphics g) {//绘制地图

for(int i=0;i

g.drawImage(pic[mymap[i][j]],leftX+j*30,leftY+i*30,this);

g.setColor(Color.RED);

g.setFont(new Font("楷体_2312",Font.BOLD,30));

g.drawString("现在是第", 150, 140);

g.drawString(String.valueOf(grade+1), 310, 140);

g.drawString("关", 360, 140);

}}/*public void paint1(Graphics g) {

if(ibuffer==null) {

ibuffer=createImage(this.getSize().width,this.getSize().height);

gbuffer=ibuffer.getGraphics();

}gbuffer.setColor(getBackground());

gbuffer.fillRect(0, 0, this.getSize().width, this.getSize().height);

for(int i=0;i

for(int j=0;j

if(mymap[i][j]!=0)

gbuffer.drawImage(pic[mymap[i][j]],leftX+j*30,leftY+i*30,this);

gbuffer.setColor(Color.RED);

gbuffer.setFont(new Font("楷体_2312",Font.BOLD,30));

gbuffer.drawString("现在是第", 150, 140);

gbuffer.drawString(String.valueOf(grade+1), 310, 140);

gbuffer.drawString("关", 360, 140);

g.drawImage(ibuffer, 0, 0, this);

}}*/

public voidupdate(Graphics g) {

paint(g);

}public intgetManX() {returnrow;

}public intgetManY() {returncolumn;

}public intgetGrade() {returngrade;

}public int[][] getMap(intgrade){returnmap.getMap(grade)

; }//显示提示信息对话框!!

public voidDisplayToast(String str ) {

JOptionPane.showMessageDialog(null, str,"提示",JOptionPane.ERROR_MESSAGE);

}//撤销移动操作

public voidundo() {if(list.size()>0) {

map1 priorMap=(map1)list.get(list.size()-1);

mymap=priorMap.getMap();

row=priorMap.getManX();

column=priorMap.getManY();

repaint();

list.remove(list.size()-1);

}else{

DisplayToast("无法在撤退了!");

}

}//实现下一关的初始化,

public voidnextGrade() {if(grade>=map.getCount()-1) {

DisplayToast("恭喜你完成了所有关卡!!!!");

sound.mystop();

acceptKey=false;

}else{

grade++;

initMap();

repaint();

acceptKey=true;

}

}//实现上一关初始化

public voidpriorGrade() {

grade--;

acceptKey=true;if(grade<0)

grade=0;

initMap();

repaint();

}//键盘相关事件

@Overridepublic voidkeyReleased(KeyEvent arg0) {//TODO Auto-generated method stub

}

@Overridepublic voidkeyTyped(KeyEvent arg0) {//TODO Auto-generated method stub

}public voidmouseClicked(MouseEvent e) {if(e.getButton()==MouseEvent.BUTTON3)

undo();

}

@Overridepublic voidmouseEntered(MouseEvent arg0) {//TODO Auto-generated method stub

}

@Overridepublic voidmouseExited(MouseEvent arg0) {//TODO Auto-generated method stub

}

@Overridepublic voidmousePressed(MouseEvent arg0) {//TODO Auto-generated method stub

}

@Overridepublic voidmouseReleased(MouseEvent arg0) {//TODO Auto-generated method stub

}

@Overridepublic voidkeyPressed(KeyEvent e) {//TODO Auto-generated method stub

if(e.getKeyCode()==KeyEvent.VK_UP) {

moveUp();

}if(e.getKeyCode()==KeyEvent.VK_DOWN) {

moveDown();

}if(e.getKeyCode()==KeyEvent.VK_LEFT) {

moveLeft();

}if(e.getKeyCode()==KeyEvent.VK_RIGHT) {

moveRight();

}

repaint();this.setFocusable(true);if(isFinished()) {//禁用按键

acceptKey=false;if(grade==map.getCount())

JOptionPane.showMessageDialog(this,"恭喜通过最后一关");else{

String msg="恭喜您通过第"+grade+"关!!!\n是否要进入下一关?";int type=JOptionPane.YES_NO_OPTION;

String title="pass";int choice=0;

choice=JOptionPane.showConfirmDialog(null, msg,title,type);if(choice==1)

System.exit(0);else if(choice==0) {//进入下一关

acceptKey=true;

nextGrade();

}

}

}

}

@Overridepublic voidactionPerformed(ActionEvent e) {//TODO Auto-generated method stub

}public static voidmain(String args[]) {newgameframe();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值