JAVA+SQL SERVER 推箱子小游戏

day7 主线游戏设置

package game;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class gamepanel extends JPanel implements KeyListener{
	Map map;
    int mp[][]=new int [25][25];//当前地图
    int temp[][]=new int[25][25];//保存最初的地图样式
    int pre[][]=new int [25][25];//上一步地图样式
    int num,pnum;//num,pnum记录当前到达目的地的箱子数量和上一步到达目的地的箱子数量
    int total;//记录该地图总箱子数目
    int posX,posY,pposX,pposY;//记录人物位置
    int op;//当前的选择
    int tot=0;//记录通过关卡数
    long startTime = System.currentTimeMillis();//获取当前时间
    JFrame j;
	public void create(int op){
		map = new Map(op);
		num=0;
		posX=Checkpoint.getx(op);
		posY=Checkpoint.gety(op);
		total=Checkpoint.getnum(op);
		for(int i=0;i<map.map.length;i++)
			mp[i]=map.map[i].clone();
		for(int i=0;i<mp.length;i++) {
			temp[i]=mp[i].clone();
		map.getMap(mp);
		}
	}
	public gamepanel(int op,JFrame j){
		create(op);
		this.op=op;
		this.j=j;
	}
	public void paint(Graphics g){
		map.draw(g);	
	}
	public int getTot() {
		return tot;
	}
	@Override
	public void keyPressed(KeyEvent e) {//0是空地,1是箱子,2是墙,3是到达地点的箱子,4是目的地,5是人
		// TODO Auto-generated method stub
		if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
			for(int i=0;i<mp.length;i++)
				mp[i]=temp[i].clone();
			//新建一个窗口,用于输入个人id,以便连接数据库记录排行榜,记录了运行的时间
			int time=(int) ((System.currentTimeMillis()-startTime)/1000);
			j.dispose();
			InputId id=new InputId(tot,time);//输入游戏玩家的信息
		}
		char ch=e.getKeyChar();
		//JOptionPane.showMessageDialog(null, "你按了"+ch);
		if(ch=='r'||ch=='R') {
			//返回上一步
			for(int i=0;i<mp.length;i++)mp[i]=pre[i].clone();
			num=pnum;
			posX=pposX;
			posY=pposY;
		}
		else {
			for(int i=0;i<mp.length;i++)pre[i]=mp[i].clone();
			pnum=num;
			pposX=posX;
			pposY=posY;
			if(ch=='w'||ch=='W'){
				//向上走动
				if(mp[posY-1][posX]==0){
					mp[posY-1][posX]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posY--;
				}
				else if(mp[posY-1][posX]==1||mp[posY-1][posX]==3){
					if(mp[posY-2][posX]==0) {
						if(temp[posY-1][posX]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY-2][posX]=1;
						mp[posY-1][posX]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posY--;
					}
					else if(mp[posY-2][posX]==4){
						if(temp[posY-1][posX]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY-2][posX]=3;
						mp[posY-1][posX]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posY--;
						num++;
					}
				}
				else if(mp[posY-1][posX]==4) {
					mp[posY-1][posX]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posY--;
				}
			}
			else if(ch=='s'||ch=='S'){
				//向下走动
				if(mp[posY+1][posX]==0){
					mp[posY+1][posX]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posY++;
				}
				else if(mp[posY+1][posX]==1||mp[posY+1][posX]==3){
					if(mp[posY+2][posX]==0) {
						if(temp[posY+1][posX]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY+2][posX]=1;
						mp[posY+1][posX]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posY++;
					}
					else if(mp[posY+2][posX]==4) {
						if(temp[posY+1][posX]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY+2][posX]=3;
						mp[posY+1][posX]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posY++;
						num++;
					}
				}
				else if(mp[posY+1][posX]==4) {
					mp[posY+1][posX]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posY++;
				}
			}	
			else if(ch=='a'||ch=='A'){
				//向左走
				if(mp[posY][posX-1]==0){//判断下一个位置
					mp[posY][posX-1]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posX--;
				}
				else if(mp[posY][posX-1]==1||mp[posY][posX-1]==3){
					if(mp[posY][posX-2]==0) {
						if(temp[posY][posX-1]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY][posX-2]=1;
						mp[posY][posX-1]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posX--;
					}
					else if(mp[posY][posX-2]==4) {
						if(temp[posY][posX-1]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY][posX-2]=3;
						mp[posY][posX-1]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posX--;
						num++;
					}
				}
				else if(mp[posY][posX-1]==4) {
					mp[posY][posX-1]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posX--;
				}
			}
			else if(ch=='d'||ch=='D'){
				//向右走
				if(mp[posY][posX+1]==0){
					mp[posY][posX+1]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posX++;
				}
				else if(mp[posY][posX+1]==1||mp[posY][posX+1]==3){
					if(mp[posY][posX+2]==0) {
						if(temp[posY][posX+1]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY][posX+2]=1;
						mp[posY][posX+1]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posX++;
					}
					else if(mp[posY][posX+2]==4) {
						if(temp[posY][posX+1]==4)num--;//如果箱子移动前所在的位置是目的地,那么移动后到达的数量要减1
						mp[posY][posX+2]=3;
						mp[posY][posX+1]=5;
						if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
						else mp[posY][posX]=0;
						posX++;
						num++;
					}
				}
				else if(mp[posY][posX+1]==4) {
					mp[posY][posX+1]=5;
					if(temp[posY][posX]==4)mp[posY][posX]=temp[posY][posX];
					else mp[posY][posX]=0;
					posX++;
				}
			}
		}
		map.getMap(mp);
		this.repaint();
		if(num==total) {
			JOptionPane.showMessageDialog(null,"恭喜恭喜    成功啦!!!");
			for(int i=0;i<mp.length;i++)
				mp[i]=temp[i].clone();
			this.tot++;
			//还需要判断是否全部通关,然后存入数据库
			this.removeAll();
			this.repaint();
			create(++op);
			this.revalidate();
		}
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

}

号外

游戏数据存入数据库时一定要做完整循环 即各个地图都要判断一次只记录游戏的最高关卡以及游戏的最长时间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值