IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> JAVA+SQL SERVER 推箱子小游戏 -> 正文阅读

[游戏开发]JAVA+SQL SERVER 推箱子小游戏

day5 自制地图功能实现

package diyMap;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import game.drawimage;

public class DiyMap extends JFrame implements KeyListener{
	/*素材宽度*/
    static int SOUREC_WIDTH = 30;
    /*素材高度*/
    static int SOUREC_HEIGHT =30;  
    /*地图宽度*/
    static int MAP_WIDTH =720;  
    /*地图高度*/
    static int MAP_HEIGHT=720;  
    static int[][] map1 = new int[MAP_WIDTH / SOUREC_WIDTH][MAP_HEIGHT / SOUREC_HEIGHT];
    static ImageIcon[][] icons = new ImageIcon[MAP_WIDTH / SOUREC_WIDTH][MAP_HEIGHT / SOUREC_HEIGHT];
	String PATH="F:\\PushBoxGame\\map";
	int mp[][]=new int[105][105];
	int temp[][]=new int[105][105];
	Image[] image;
	JPanel jp=new MySetPanel();
	int num=0;
	int posY;
	int posX;
	int total=0;
	void create() {
		for(int i=0;i<mp.length;i++)
			temp[i]=mp[i].clone();
	}
	public DiyMap() {
		image = new Image[6];
		image[1] = drawimage.getimage("picture/box1.png");
		image[2] = drawimage.getimage("picture/wall.png");
		image[3] = drawimage.getimage("picture/box2.png");
		image[4] = drawimage.getimage("picture/destination.png");
		image[5] = drawimage.getimage("picture/player.png");
        this.add(jp);
        this.setSize(720, 720);
        this.setTitle("KERRY   推箱子");
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setVisible(true);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        this.setBackground(Color.white);
        GetMap();
        create();
        this.addKeyListener(this);
	}
	void GetMap() {
		try {
			DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(PATH + "\\diy"+".map")));
			int i = in.readInt();
			int j = in.readInt();
			//System.out.println(i+" "+j);
			for (int ii = 0; ii < i; ii++) {
				for (int jj = 0; jj < j; jj++) {
					mp[ii][jj] = in.readInt();
					if(mp[ii][jj]==4)this.total++;
					else if(mp[ii][jj]==5) {
						this.posY=ii;
						this.posX=jj;
					}
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	class MySetPanel extends JPanel {
		public void paint(Graphics g) {
			super.paint(g);
			for (int i = 0; i < MAP_HEIGHT / SOUREC_HEIGHT; i++) {
				for (int j = 0; j < MAP_WIDTH / SOUREC_WIDTH; j++) {
						if(mp[i][j]!=0)
							g.drawImage(image[mp[i][j]], getDrawX(j), getDrawY(i), SOUREC_WIDTH, SOUREC_HEIGHT,
								null);
						else g.clearRect( getDrawX(j), getDrawY(i), SOUREC_WIDTH, SOUREC_HEIGHT);
				}
			}
		}
	}
	// 将数组下标转化成对应的图片左上角坐标
	public int getDrawX(int j) {
		int x = j * 30;
		return x;
	} 
	// 将数组下标转化成对应的图片左上角坐标
	public int getDrawY(int i) {
		int y = i * 30;
		return y;
	}
	public void keyPressed(KeyEvent e) {//0是空地,1是箱子,2是墙,3是到达地点的箱子,4是目的地,5是人
		// TODO Auto-generated method stub
		char ch=e.getKeyChar();
		//JOptionPane.showMessageDialog(null, "你按了"+ch);
		/*posX,posY代表人物的位置*/
//		for(int i=0;i<mp.length;i++)
//			for(int j=0;j<mp[i].length;j++) {
//				System.out.print(temp[i][j]);
//				if(j==mp[i].length-1)System.out.println();
//			}
		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++;
			}
		}
		jp.repaint();
		if(num==total) {
			JOptionPane.showMessageDialog(null,"通关成功");
			this.dispose();
		}
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}


本游戏采用了上下左右用字母W、S、A、D来表示,用二元数组来存储信息,根据数组信息的变化来确定是否到达终点。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:59:42  更:2021-07-29 12:00:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 20:03:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码