Java游戏服务器开发3--货币系统

维系一个游戏的交易系统,货币和道具系统是密不可分的。那么我们这一样来学习一个货币系统。

货币存储类型com.server.game.scene.currency.CurrencyStore

/**
 * 货币自定义储存
 */
public interface CurrencyStore {
	/**货币增加操作*/
	ResultCode add(Long roleId, int size);
	/** 货币减少操作 */
	ResultCode reduce(Long roleId, int size);
	/**获取货币的数量*/
	int getCurrency(Long roleId);
	/**是否足够数量*/
	boolean isEnough(Long roleId, int number);
}

继承这个类的是具体的货币
在这里插入图片描述
子类的操作就可以将具体的自定义货币类型放入到自定义的地方去(如自己定义的数据表中的某个地方)

而具体的货币类型则放在com.server.game.scene.currency.Currency。如钻石、绑定钻石、银币、金币等。

/**
 * 货币类
 */
public class Currency {

	// 货币当前数量
	private int num;

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public synchronized boolean add(int addNum) {
		if (addNum < 0)
			addNum = 0;
		if (num > Integer.MAX_VALUE - addNum) {
			num = Integer.MAX_VALUE;
		} else {
			num += addNum;
		}
		return true;
	}

	public synchronized boolean reduce(int reduceNum) {
		if (reduceNum < 0)
			reduceNum = 0;
		if (num < reduceNum) {
			return false;
		}
		num -= reduceNum;
		return true;
	}

	public synchronized boolean clear() {
		if (num < 0) {
			return false;
		}
		num = 0;
		return true;
	}

}

定义货币的类型在一个枚举中,集中管理各种货币。

/**
 * 货币类型
 */
public enum CurrencyType {
	/**
	 * 钻石
	 */
	CURRENCY_1001(1001, "钻石"),
	/**
	 * 绑定钻石
	 */
	CURRENCY_1002(1002, "绑定钻石"),
}

货币重定向处理类

/**
 * <pre>
 * 特殊货币重定向处理
 * 用于自己特殊处理的货币储存/获取方式
 * </pre>
 */
public enum CurrencyRedirectType {

	/** 仙玉 */
	XIANYU(CurrencyType.CURRENCY_1001, "仙玉") ,;

	CurrencyRedirectType(CurrencyType type, String name, CurrencyStore currencyStore, AdditionCal additionCal) {
		this.type = type;
		this.currencyStore = currencyStore;
		this.additionCal = additionCal;
	}

	//货币类型
	protected final CurrencyType type;

	//自定义储存获取方式(每个自定义货币都要继承这个接口)
	protected final CurrencyStore currencyStore;

	//加成计算器(用于对货币的加成计算,如经验)
	protected final AdditionCal additionCal;
}

当然还有一个重要的类就是货币的管理类com.server.game.scene.currency.manager.CurrencyMgr

货币的添加和扣除的流程

第一步:客户端请求,服务端查看配置信息(是一个四段式的方式如2:100002&10&0 主类:道具id&数量&是否绑定)
第二步:调用增加资源接口com.server.game.scene.item.manager.ResourceLogic#addResource
第三步:跳过了背包的操作(原因我后门讲述),并进入调用
ResultCode resultCode = ItemTypeEnum.Currency_Type.addResource(roleId, itemConfigs, reason);
CurrencyMgr.getInstance().addCurrency(roleId, itemConfigs, reason);
第四步:查看是什么类型的货币
CurrencyType type = CurrencyType.getCurrencyType(itemConfig.getItemModelId());
第五步:通过货币类型去找特殊货币重定向处理CurrencyRedirectType,并调用对应的钩子方法
CurrencyRedirectType redirectType = CurrencyRedirectType.getType(type);
第六步:增加货币资源

最重要的增加货币的代码如下

/**
	 * 增加资源
	 */
	public ResultMsgConst.ResultCode addCurrency(CurrencyType type, int size) {
		//是否走自己一套的处理
		CurrencyRedirectType redirectType = CurrencyRedirectType.getType(type);
		if (redirectType != null) {
			CurrencyStore currencyStore = redirectType.getCurrencyStore();
			if (currencyStore != null) {
				//这里才是真正走自定义逻辑的地方
				ResultMsgConst.ResultCode resultCode = currencyStore.add(getId(), size);
				if (resultCode.isSuccess()) {
					PushEventLogic.pushEvent(getId(), MsgModuleType.CurrencyDataMsg.getSource());
				}
				return resultCode;
			}
		}
		//走真实货币逻辑
		Currency currency = getAndCreateCurrency(type);
		if (currency.add(size)) {
			if (redirectType == null || redirectType.getCurrencyStore() == null) {
				PushEventLogic.pushEvent(getId(), MsgModuleType.CurrencyDataMsg.getSource());
			}
			return ResultMsgConst.ResultCode.SUCCESS;
		}
		return ResultMsgConst.ResultCode.DATA_ERROR;
	}

总结

以上就是真实货币和自定义货币的一些设计方式。大家有更好的设计方式可以沟通一下。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Java-web停车场管理系统的设计与实现 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第1页。基于Java-web停车场管理系统的设计与实现全文共22页,当前为第1页。 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第1页。 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第1页。 基于Java web停车场管理系统的设计与实现 摘 要 随着全面小康时代的到来,人民的生活发生了翻天覆地的变化,很多人为了提高生活的质量和出行效率都会考虑去买一部车来办公,出家旅行,这也导致了车辆的迅速增长。在我们的日常出行难免会遇到堵车难,找车位更难的问题,因此就出现了怎样解决停车难的问题。本停车场管理系统由此诞生。 本课题以Myeclipse作为运行载体,通过Myeclipse Tomcat7服务器和MVC的开发模式,以Mysql-5.5.27作为数据库在J2EE标准的前提下实现了一种B\S架构的系统。本系统将网络和现实相结合,突破了传统停车场的限制更加适应当代社会对停车场的管理需求。 关键词:J2EE;B/S结构;Mysql;MVC; 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第2页。基于Java-web停车场管理系统的设计与实现全文共22页,当前为第2页。1绪论 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第2页。 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第2页。 系统研究背景 从上世纪八十年代开始,停车还只是少数人的需求,停车场的出现成为了一个新的行业,那时停车场的主要职能是保护车辆,一人一凳一壶茶成为了那个时代的一大特色,那时的车辆是财富和权利的象征,停车场还不发达,人们停车一般停在道路两旁,有的人会给小费让人看着,通常情况只有富贵人家院子才有停车场。 上世纪九十年代初,随着外国企业的涌入,一些先进公司带来了一些发展思路和停车理念,为了更好的服务车主,提高物业水平,以停车行业为目标所带来的相关技术和理念出现了分水岭,推陈出新成为了时代发展理念。此时的停车场还停留在收费管理阶段,进出口控制系统的出现也是模仿外国的收费管理系统。要想解决这种问题就要进行创新。 1.2研究意义 传统老套的停车场收费管理系统已不再满足人们的需求,放眼现在,很多汽车行业的人们开始着手于改造停车场的进程,这是机遇也是一种挑战,谁能领先于对方抓住当今信息化的大潮流,谁就能在停车场市场抢占先机。 我们经常会遇到这样一个问题就是去到很多老旧小区,包括一些商场去停车发现转了一圈竟然没有停靠的位置,这不仅浪费时间,还会影响到自己的心情。上下班高峰期经常是堵在停车杆下一车一杆,付着零钱,这种等待经常让车主焦头烂额。 这些停车场,都在存在这样一个问题,工具老旧,网络环境差,所以迫切需要一个停车场的管理系统来处理这系列的问题。 想要对车辆进行管理就是对车辆信息进行管理,想要管理好这一连串的信息,就要了解停车场位的数量信息、进出车辆信息、车主的身份信息等,处理好这些信息,才有利于车辆管理,提高停车场的市场竞争力。针对停车场有关方面的信息,将其系统、停车位、固定车主、临时车主、IC卡进行了信息化,方便使用者管理车辆。 针对这样的问题该停车场管理系统就要做到不断地更新。本系统采用的是IC卡消费和货币支付相结合的方式,系统计时计费。采用Java web的相关技术,实现线上管理。改进后的系统使用灵活、办事高效、收费透明。有效提高车辆进出效率,节省用户时间。 2相关技术与方法 2.1 J2EE 2.1.1 J2EE介绍 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第3页。基于Java-web停车场管理系统的设计与实现全文共22页,当前为第3页。J2EE本身是一个标准,1999年,由Sun公司正式领导开发了J2EE的第一个版本,到后来的J2EE1.4版本最初的作用是用来制作动态网页Applet,但是由于企业系统API之间不能相互兼容,为了规范企业应用系统开发,构成了J2EE标准。它能够开发和部署异构环境的可移植程序,J2EE为搭建具有伸缩性、灵活性、易维护性的企业系统提供了良好的机制,使软件开发商能够以更快的速度向市场推出适应用户的解决方案。 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第3页。 基于Java-web停车场管理系统的设计与实现全文共22页,当前为第3页。 2.1.2构建本系统J2EE开发工具 Java虚拟机:JDK 1.7.0_79 java开发工具:Myeclipse web服务器:Tomcat 7.0 2.2 MVC介绍 MVC是一种软件设计典范,它最早存在于桌面程序,它可以处理模型数
对于Java开发游戏服务器端,你可以使用一些流行的框架和库来简化开发过程。下面是一些常用的工具和技术: 1. Java NIO(New I/O):Java NIO是Java提供的一种高性能的I/O处理方式,适用于构建高并发的游戏服务器。它提供了非阻塞的I/O操作,可以处理大量的并发连接。 2. Netty:Netty是一个基于Java NIO的网络应用框架,专注于提供高性能、可扩展和可靠的网络通信。它可以帮助你构建高效的游戏服务器,处理网络通信和数据传输。 3. Spring Boot:Spring Boot是一个快速开发框架,可以简化Java应用程序的配置和部署。通过使用Spring Boot,你可以快速搭建游戏服务器的基础结构,并集成其他必要的组件。 4. 数据库:游戏服务器通常需要与数据库进行交互,存储和读取游戏数据。你可以选择使用关系型数据库(如MySQL)或非关系型数据库(如MongoDB)来存储游戏数据。 5. 缓存:为了提高游戏服务器的性能,你可以使用缓存来存储频繁访问的数据。常见的缓存解决方案有Redis和Memcached。 6. 安全性:游戏服务器需要考虑安全性,包括用户身份验证、数据加密等。你可以使用Spring Security等安全框架来处理这些问题。 7. 性能优化:游戏服务器需要具备高性能和低延迟的特点。你可以通过优化代码、使用异步处理、使用线程池等方式来提高服务器的性能。 这些只是一些常用的技术和工具,具体的选择还需要根据你的需求和项目要求来决定。希望对你的游戏服务器开发有所帮助!如果有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值