玩玩webgame开发(4):游戏数据结构设计[通俗易懂]

玩玩webgame开发(4):游戏数据结构设计[通俗易懂]很久没做更新了。最近比较忙碌,手头的webgame也都放下。最近很想念我的小webgame了,回来继续写。上篇玩玩webgame开发(3):自动战斗实现以及一些游戏细节(下)http://playfish.iteye.com/blog/267275在高峰期时候发表的,结果被火速沉底了。。。汗好了,不小心有说了好多废话,言归正传。=============数据结构设计是门…

大家好,又见面了,我是你们的朋友全栈君。

很久没做更新了。最近比较忙碌,手头的webgame也都放下。最近很想念我的小webgame了,回来继续写。

上篇玩玩webgame开发(3):自动战斗实现以及一些游戏细节(下)http://playfish.iteye.com/blog/267275 在高峰期时候发表的,结果被火速沉底了。。。汗

好了,不小心有说了好多废话,言归正传。
=============
数据结构设计是门高深的学问,而游戏的数据结构设计,那显然,也是一门很高深的学问(–||好废话。。),数据结构应该是整个游戏的骨架所在,而游戏数据平衡,(另一门高深的学问。。)跟这游戏的数据结构息息相关。本文只是从自己做的一个小游戏出发,简要的介绍一下我的一个简单的游戏的数据结构设计思路。

一个游戏几个基本的要素:

  • 地图
  • 游戏角色
  • 怪物
  • 物品
  • 建筑

先从地图说起

游戏都在地图上进行的。地图的基本要素包括:地图元素(即每一个地图坐标格子上的元素),不可进入的位置等。其他的还包括一些基本信息。我的地图数据结构设计如下:

	var defaultMap = {


		mapName	:	'迷雾森林',


		mapLevel:	1,


		mapData	: [


					['f','t','t','t','t','t','w','f','r','f','w','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','w','f','r','f','w','f','r','f','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','f','f','w','f','r','f','w','f','r','f','r','f','r','t','t','r','f','r','t','t'],


					['g','g','g','g','f','f','w','f','f','w','f','r','f','r','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','f','r','r','f','w','f','f','w','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','f','w','f','r','f','w','f','r','f','r','f','r','t','t','r','f','r','t','t'],


					['g','g','g','g','f','f','w','f','f','w','f','r','f','r','f','r','f','f','f','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','f','f','f','f','f','f','f','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','f','f','r','f','t','t','f','f','r','t','t'],


					['g','f','f','f','r','r','f','w','f','f','w','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','f','w','f','r','f','w','f','r','f','r','f','r','t','t','r','f','r','t','t'],


					['g','g','g','g','f','f','w','f','f','w','f','r','f','r','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','f','r','r','f','w','f','f','w','f','r','f','r','f','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','r','f','w','f','r','f','f','r','t','t','r','f','r','t','t'],


					['g','f','f','f','r','f','w','f','f','w','f','r','f','r','f','r','t','t','r','f','r','t','t']


				],


		immovable:	['t','r']


	};

 

这是个很简单的地图结构,包括的几个信息:地图名称,地图等级,地图元素,不可移动的位置。最后生成的展示效果如下(实际界面大很多,这里只是部分):

玩玩webgame开发(4):游戏数据结构设计[通俗易懂]
 关于地图生成以及战争迷雾的部分,可以参看这个系列文章的前2篇。至于在地图上出现的物品,角色,怪物,建筑,并没有放在地图的数据里面,因为我觉得这是属于不同角色的数据,是应该分开的。这样的数据结构可以满足这样的需求:地图按照数据显示,对于指定的地图元素,角色不能进入。

 

接下来是游戏角色

	var bobo = {
		pos		:	{X:1,	Y:1},
		name	:	'拉拉',
		money	:	0,		//新增加金钱
		hp		:	100,	//full hp
		curHp	:	100,	//current hp
		level	:	0,			
		exp		:	19,
		ap		:	15,		//attack power
		def		:	1,		//defence
		speed	:	3,		
		luck	:	15,
		eyeshot	:	2,		//视野
		type	:	'bobo',
		file	:	'baozi',
		img		:	$('<img class="bobo" title="拉拉" src="images/bobo/baozi/lv0/common.gif" />')
	};

 

pos指角色在地图上的坐标,其它的就是一些常见的数据了,包括名称,金钱,满血hp,当前的hp,等级,经验,攻击,防御,速度,幸运,视野,其它的类型,文件,img属于我自己定义的一些结构,用于获得特定状态下的包子的图片。

玩玩webgame开发(4):游戏数据结构设计[通俗易懂]

 

设计一个这样的数据结构并不难,自己爱怎么设定就怎么设定,呵呵。不过关键的问题在于数据平衡,设置得很bt的数据可以开始玩的时候很爽,但是一结束玩家马上就会失去兴趣,所以,合适的数值以及成长曲线才会保证耐玩度。我个人是喜欢很小的数据,这样玩家自己计算的时候简单,而且数据平衡比较好做。我平时很经常玩一些war3的rpg,只要进去里面的人物或者是物品设定数字都是按百的,alt+q。顺便废话一下我喜欢的元素魔法之战这个。

 

怪物的数据设计

	var monsters = [
			{	
				id		:	0,
				name	:	'青蛙',
				hp		:	30,
				curHp	:	30,			//记录怪物当前血量,战斗结束后自动回复为hp
			 	level	:	0,
				exp		:	5,	
				ap		:	10,	
				def		:	0,	
				speed	:	5,
				luck	:	15,	
				type	:	'monster',	
				file	:	'qingwa',
				items	:	[					//掉落物品
					{id:0,drop:0.4}
				],
				img		:	$('<img class="monster" title="青蛙" src="images/monster/qingwa/lv0/common.gif" />')
			}
	];

 和游戏角色的数据结构不同,它有额外添加1个id以及一个items数组,id表示怪物类型,因为怪物会在地图上出现很多不同种类的怪物,通过id来区分不同的怪物。items数组,表示这个怪物身上有多大的概率会掉那种类型物品。items数组内的id表示物品的id。

 

一个怪物需要分布在地图上的各个位置,我目前觉得最简单的方式就是:

	var mapMonsters = [
		{	
			pos		:	{	X:1,	Y:8	},
			id		:	0
		},
		{	
			pos		:	{	X:5,	Y:5	},
			id		:	0
		},
		{	
			pos		:	{	X:4,	Y:5	},
			id		:	0
		}
	];

 哪个位置上哪个怪物,简单明了。

 

====未完待续,明晚继续

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136873.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RS485接口定义

    RS485接口定义

    1.英式标识为 TDA(-) 、TDB(+) 、RDA(-) 、RDB(+) 、GND 
    2.美式标识为 Y 、Z 、 A 、 B 、 GND  
    3.中式标识为 TXD(+)/A 、TXD(-)/B 、RXD(-) 、RXD(+)、GND  
       rs485两线一般定义为:  
                 “A, B”或”Date+,Date-”  
       即常说的:”485+,485-”  
       rs485四线一般定

    2022年5月27日
    67
  • linux kworker进程占用cpu,为什么kworker cpu使用率如此之高?

    linux kworker进程占用cpu,为什么kworker cpu使用率如此之高?问题描述我最近在我的三星笔记本电脑和Windows7上安装了Ubuntu12.04。每当我使用Ubuntu(即使它闲置)时,kworker几乎占用了8核之一的90%。虽然它并没有真正影响我的使用,但它让我感到烦恼,我担心它可能会损害我的处理器。我甚至尝试安装另一个Linux发行版(LinuxMint),而kworker也引发了同样的问题。所以我不知道该怎么办。我将衷心感谢您的帮助。最佳解决方…

    2022年9月24日
    0
  • java Calendar日期相减问题

    java Calendar日期相减问题两个日期相减,必须是Date型变量使用其getTime()后相减,所以如果是从Calendar获得时间,则需:Calendardate1=Calendar.getInstance();Calendardate2=Calendar.getInstance();date1.getTime().getTime()-date2.getTime().getTime();结果为

    2022年6月3日
    63
  • Java练习—-》求字符串中的最长回文子串

    Java练习—-》求字符串中的最长回文子串手贱,做了一道对于我来说挺难的题目嘿嘿!挺有意思的,分享一下文章目录前言一,题目二,思路图形解析代码前言第一次把自己的解题思维写出来,可能写的不太好,请给位原谅,哈哈哈哈额,如果有错的,请各位大佬帮我指出来哈,谢谢!!(^U^)ノ~YO一,题目求一串字符串的最长回文子串,这里以cabacabae为例二,思路图形解析第一步:观察这串字符串—》第二步:找出最长回文子串,并设数—》说明:在这里,假设知道最长回文子串,那这里的resCenter和maxRigth,reslengthgs

    2022年10月16日
    0
  • landsat 8 卫星 波段介绍 及组合

    landsat 8 卫星 波段介绍 及组合    Landsat8卫星包含OLI(OperationalLandImager陆地成像仪)和TIRS(ThermalInfraredSensor热红外传感器)两种传感器。OLI包括了

    2022年7月23日
    44
  • JPA环境下使用Hibernate二级缓存

    JPA环境下使用Hibernate二级缓存http://tuhaitao.iteye.com/blog/568653hibernate二级缓存本质上分为两类:1.对象缓存2.查询缓存在JPA环境下,例如Jboss,底层还是通过Hibernate来实现JPA的Query。下边简单说一下配置的步骤:1.配置entity在实体上方加入@CacheJava代码 import j

    2022年5月10日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号