java adt开发一个我的世界饥饿游戏地图图,要求人物能在上面移动

java游戏开发 地图图块属性 - CSDN博客
java游戏开发 地图图块属性
继续挖坑,java游戏开发,继续在图块属性上困扰,参考df《矮人要塞》的开发一款模拟经营类游戏,地图大小将达到 256*256*256 大小(这只是世界地图的一小小小块)。。因为这是个平面 三维游戏 = = 而每个点上面,有可能会有很多基础的物品,如土壤、岩石、草、树木、各种物品等。 而且,通过挖掘、除草、铺路等指令,可以对地图图块表面进行深加工。。
如果每个图块上,存储大量信息,那么内存会崩溃的。。。如何设计图块属性,是一个比较关键的问题。。思考良久,目前还没有很好的办法。。目前想到的是
1、一个二维int矩阵 mountain[][],存储高度信息
2、一个二维boolean矩阵 isOpenspace[][],存储是否可以通过信息,即,是否是空地,可以穿越。= =
3、一个二维boolean矩阵 isLight,存储是否有光亮,即能否显示
4、一个二维boolean矩阵 isAboveGround ,存储是否在地表
5、一个Map ,存储覆盖在在地表的物品,如各种液体,特点是有流动性,会改变地表颜色。
6、一个Map ,存储较大的物品。如树干、岩石等,特点是物品大,不能搬运,视线无法穿透,有支撑性
7、一个Map ,存储较小的物品。如树干砍伐后剩下的木块、岩石挖掘随机得到的岩石块、挖沙得到的沙子、挖泥土得到土块等,特点是,可以搬用,同类别,可以堆叠。
8、一个二维int矩阵 cover[][],存储地图表面纹理,如各种草坪、沙漠、泥土等。
一个int[][] 矩阵占用空间 256*256 地图大小 * int 4个字节 = 256 KB
一个boolean[][]矩阵占用空间 256*256 地图大小 * boolean 1个字节 = 64 KB
这是目前想到较好的办法。。以前256*256*256 * 6 int矩阵,直接内存就不够了。。= =。。
ps:据说二维矩阵,占用内存,是一维矩阵的10倍,因为要存储索引信息。= = 那么,上面的算法,都要乘以10 。
ps:这只是一层的数据信息。而再次说明,该游戏是个三维游戏,至少有256层,所以还得乘以256。。。
暂时先这样,试着做做看了。。数据不可能全放到内存,存储到硬盘,而且要做一定的压缩处理。
ps:存档功能初步,已经做好,细致化调整,将后续进行
ps:周末和朋友聊天,发觉,并不一定要严格的3D化,3d的存在,主要是为了挖洞,但却不是必须,而洞窟都是一些特殊地形,可以通过其他的方式方法单独存储。
本文已收录于以下专栏:
相关文章推荐
public class GoogleDemo extends GisDemoPane {
public GoogleDemo() {
void init() {
  本次教程将向大家讲解如何用html5将小地图块拼成大地图,以及如何用现有的高级html5游戏开发库件lufylegend.js开发游戏。
  首先让我们来了解了解如何用html5实现...
本次教程将向大家讲解如何用html5将小地图块拼成大地图,以及如何用现有的高级html5游戏开发库件lufylegend.js开发游戏。
首先让我们来了解了解如何用html5实现动画,毕竟“...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)JAVA开发的一个推箱子游戏原型 - CSDN博客
JAVA开发的一个推箱子游戏原型
& & & 自从打通了JAVA的任督二脉之后,想法不断出现,想停下来都不行,逼的只能编程实现。下面是开发一个简单的推箱子游戏。
& & & 推箱子游戏很简单,用C大一的学生都做出来,关键要解决的问题有:地图, 元素, 移动。我这里构造一个10*10的地图,元素就人和箱子,移动就是人在地图上的位置。
& & & 好了开始编程了,用JAVA编游戏肯定不能是控制台,太不方便了,要用图形编程。我用button做地图最基本元素,button的不同颜色代表不同事物,黑色是墙,白色是空地,人是绿色,箱子是红色。
& & & 设计了三个类,一个是元素类(人,箱子),一个地图类,最主要的游戏类(包含地图类,和人,箱子)。
& & & 具体如下:元素类
class Elem {
int loc_x;
int loc_y;
//1是人,2是箱子
}& & 地图类
class Map{
JButton[][] mapBt;
mapBt = new JButton[10][10];
frame = new JFrame(&Boxman&);
panel = new JPanel();
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加面板
frame.add(panel);
for(i=0; i&10; i++)
for(j=0; j&10; j++)
mapBt[i][j] = new JButton();
for(i=0; i&10; i++)
for(j=0; j&10; j++)
panel.add(mapBt[i][j]);
initmap();
frame.setVisible(true);
//初始化地图就是把外转一圈置黑为墙,内部设置为白
void initmap()
for(i=0; i&10; i++)
for(j=0; j&10; j++)
mapBt[i][j].setBackground(Color.BLACK);
mapBt[i][j].setBounds(20*j, 20*i,20, 20);
for(i=1; i&9; i++)
for(j=1; j&9; j++)
mapBt[i][j].setBackground(Color.WHITE);
mapBt[i][j].setBounds(20*j, 20*i,20, 20);
class Boxgame{
//初始化人和箱子及地图
gameMap = new Map();
man = new Elem();
box = new Elem();
man.loc_x = 4;
man.loc_y = 2;
man.role = 1;
box.loc_x = 6;
box.loc_y = 3;
box.role = 2;
void run() {
gameKeyEvent(gameMap);
void setElem(Elem ele)
if(ele.role == 1)
gameMap.mapBt[ele.loc_y][ele.loc_x].setBackground(Color.BLUE); //人是蓝色
else if(ele.role == 2)
gameMap.mapBt[ele.loc_y][ele.loc_x].setBackground(Color.RED);
//箱子是红色
void move()//人物的移动就是不同颜色到地图上
setElem(man);
setElem(box);
void gameKeyEvent(final Map map)
map.frame.requestFocus();
//响应键盘按键事件
map.frame.addKeyListener(new KeyAdapter()
public void keyPressed(KeyEvent e)
int key = e.getKeyCode();
if(key == KeyEvent.VK_A)
man.loc_x = man.loc_x -1;
map.initmap();
if(key == KeyEvent.VK_D)
man.loc_x = man.loc_x + 1;
map.initmap();
if(key == KeyEvent.VK_W)
man.loc_y = man.loc_y -1;
map.initmap();
if(key == KeyEvent.VK_S)
man.loc_y = man.loc_y + 1;
map.initmap();
& 这个类里最难的是事件的窗口事件的监听,不过既然任督二脉打通了就没什么不好理解,只要去找用法就行了。
& 包和运行代码如下:
import java.awt.C
import java.awt.KeyboardFocusM
import java.awt.W
import java.io.IOE
import java.awt.event.*;
import javax.swing.*;
public class Example {
public static void main(String[] args) {
// 创建 game实例
Boxgame game = new Boxgame();
game.run();
}& & & 将上面的代码结合起来就能运行了
& & & 效果如下图先,通过键盘a,d,s,w移动后如下图所示
& & & &哈哈成功移动,当然了其它的具体逻辑(如通关、不能撞墙等)就不用写了。
& & &不过还有一个问题就是程序启动的时候,地图并没有按我设置的排序,必须按一下才可以恢复。不知道什么原因,不是我暂时学习的重点,先不考虑了,后面再说。
本文已收录于以下专栏:
相关文章推荐
package Test1;
//用于调用Test2包
import Test2.*;
import java.awt.*;
import javax.swing.*;
public class ...
实现上面的箱子游戏其实并不难,唯一难的地方就是推箱子过程中各种状态的检测。
首先将地图想象成一个二维数组,0代表空地,1代表障碍,4代表箱子,8代表笼子,12代表箱子在笼子中。
程序入口类:
初学java,使用的是eclipse,在一个3X3的数组中,规定1是人物,2是箱子,3是目的地。只有一个箱子。
使用数字小键盘2468进行4个方向的控制,在箱子没有到达目的地的时候会一直运行,直到箱...
推箱子 数据结构 算法 java
package com.lanou.
import java.util.S
public class Homework_TuiXiangZi1 {
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 游戏地图编辑器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信