分类归档:软件技巧

游戏开发中的锁工具

面临问题

最近一直在忙于新游戏的逻辑开发,在开发过程中发现很多地方都需要用到锁,比如操作背包,用户钱币,用户状态修改等,在以往的实现上大部开发人员都是奖这些操作归结到各个独立的模块中,然后在相应的功能上做一个synchronized或者lock,当然这种做法不是不可以,但从全局上考虑,这种做法似乎有些不太合理,这就如同直接将事务加在dao的curd上,而实际开发中这种事务基本上起不到任何作用,毕竟脱离了业务逻辑的事务没有任何意义.所以我们也需要将锁定的操作扩展到对应的业务功能上.我们先梳理下我们目前的需求,即需要支持对特定的一个或者多个对象的锁定与解锁,你会如何设计这种锁呢?

设计实现

首先定义一下需要实现的方法,根据不同的需要锁定的对象返回List,我们暂时用ChainLock来封装List,代码如下

有了ChainLock后,我们自然需要定义相应的lock与unlock方法

阅读全文…

游戏概率算法实现

问题描述

最近一直在着手一个新游戏的开发,其中很多地方都会涉及概率问题,由于当时只是为了完成功能,并没有在这一块考虑过多,现在回过来再看这个问题,感觉有必要深入一下,如果是你,你会如果实现一套概率呢?

解决方案

首先我们要知道什么是概率算法,概率算法就是在算法的过程中引入随机数,使得算法在执行的过程中随机选择下一个计算步骤,而它最后可能导致结果是不确定的.
由比,我们可以假设一个概率问题,例如杀boss过程中有10%的概率出物品A,20%的概率出物品B,30%的概率出物品C,40%的概率出物品D,我们应该如何下手呢?此时我脑子里最先想到的就是划分区间,然后丢色子.

  • 方案一
  • 我们首先划分出4个区间代表A,B,C,D四个物品的概率,即A[1,10],B[11,31],C[31,60],D[61,100],然后取一个[1,100]的随机数,该随即数落到哪个区间就是哪个物品.
    阅读全文…

BTrace详细介绍

最近排查线上OOM的异常时用到一个强大的动态跟踪分析工具BTrace,于是花了点时间研究了下用法,这里的内容基本是对官方说明进行的翻译,顺便加了点心得.

BTrace介绍

BTrace是一个Java的动态跟踪工具,BTrace的工作的基本原理是把跟踪的代码动态替换到被跟踪的Java程序内,其实现机制是Sun Attach API + BTrace脚本解析引擎 + Objectweb ASM + JDK6 Instumentation,项目主页是在这里,用户指南点击这里.

安装BTrace

BTrace的安装非常简单,首先你需要下载BTrace,最新的版本是1.2.2,然后解压至任意目录,设置好BTRACE_HOME后将bin目录加入至环境变量PATH中即可.
阅读全文…

SpringMVC跨域乱码问题

最近的工作重点转移至web开发,使用框架主要还是spring mvc, jackson, jQuery,但在开发中又遭遇了n年前的跨域问题,jsonp乱码问题,其实这些问题产生原因很简单,但实际上解决起来却需要了解各种机制运行内幕.

解决方案

  • 在web.xml中设置CharacterEncodingFilter,相信绝大多数乱码问题均可以解决,这其中的原理不用再讲解,毕竟这个filter的代码非常简单.

  • 阅读全文…

版本管理与版本控制

最近对组成成员进行了一次简单的版本管理与版本控制的分享,其实这些东西都是开发中必不可少的,只是以前的工作重点并没有放在这个方面.废话少说,我们先了解下什么是版本管理与版本控制.

版本管理

版本管理表示对项目整体版本的演变过程管理,最简单的如v1.0变更至v1.1,从snapshot变更至release.
一般情况下版本发布应该具备以下条件:

  1. 配置项没有任何其它版本依赖
  2. 所有的代码已经提交版本控制系统中
  3. 自动化测试全部通过

阅读全文…