当前位置:  编程技术>移动开发
本页文章导读:
    ▪一个棋牌游戏的服务端开发二        一个棋牌游戏的服务端开发2 四、扑克牌的生成  游戏中需要为用户生成随机的扑克牌,首先我们需要初始化一副牌,放到一个Hashmap中,每张牌以一个字节表示,高为代表花色,的为代表.........
    ▪ xcode模拟器运作僵死在 attaching to 的解决法子        xcode模拟器运行僵死在 attaching to 的解决法子 修改Scheme为GDB可以运行时。检查你的网络127.0.0.1是否指向localhost,具体:vi /etc/hosts,查看是否有127.0.0.1       localhost如果有,检查网络是否把12.........
    ▪ PhoneGap 网页也会拨打电话       PhoneGap 网页也能拨打电话 在PhoneGap下结合Jquery moblie 使用HTML整合电话和发短信的功能。  1.拨打电话:       tel:<电话号码>       例子:<a href="tel:10086" >移动客服</a>  2.发.........

[1]一个棋牌游戏的服务端开发二
    来源: 互联网  发布时间: 2014-02-18
一个棋牌游戏的服务端开发2

四、扑克牌的生成

  游戏中需要为用户生成随机的扑克牌,首先我们需要初始化一副牌,放到一个Hashmap中,每张牌以一个字节表示,高为代表花色,的为代表数字,生成整副牌:

    private static HashMap cards = new HashMap();

    int tmp=0;
    for (int i = 0; i <4; i++) {
        for (int m = 0; m < 13; m++) {
            tmp=((byte)(i)<<4)|((byte)m); //使用位操作构造一张牌
            cards.put(new Integer(i * 13 + m),new Byte((byte)tmp));
        }
    }

    cards.put(new Integer(53), new Byte((byte)0x4d)); //大王
    cards.put(new Integer(54), new Byte((byte)0x4e)); //小王

  如何随机地得到其中的N张牌呢?我们的做法是生成一个0-55的随机数,用这个随机数作主键从Hashmap中获得对象,取得之后,把该对象从队列中删除,以免重复取得。由于java中的随机数是根据时间生成的,所以有可能导致用户得到的牌不够散,每个用户都摸到一条龙岂不是笑话?所以在生成随机数的时候我们加入了一个大素数来作运算:

    long cardId=new Long((Math.round(Math.random() * 87) % 55)).intvalue();

通过修改这个大素数,可以控制某个用户的牌比较好。


五、线程

  实际上本系统并没有复杂的线程管理,但是我想提供一个控制台让管理员可以管理游戏主线程,可以让它停止、中段、恢复、重启动,本来的设计是管理员通过与线程A打交道,通过A去管理主线程B,但是熟悉java线程的朋友都知道,线程互相管理基本上就是不实际的,举个最简单的例子,A如何销毁B?也许你会说调用B的destroy()方法就好了,网上很多讲解java线程的资料也确实是这么说的,但是他们都是鬼扯的,自己去看看java源代码吧,Thread.destroy()方法的实际代码如下:

public void destroy() 
{
    throw new NoSuchMethodError();
}

  事实真相是,Thread.destroy()方法自始至终就没有被实现过。所有写文章,教别人用这个方法销毁线程的人,都去撞墙吧,丢人丢大了。

  最好的办法是A负责生成一个B并且启动它,然后B自己管理生存周期,A和B通过使用可共享的方法来通信,这是sun推荐的做法。


六、异步消息

  用户玩牌的过程中,有很多东西需要记录下来,比如记录用户的积分、等级变化,记录玩牌日志供数据统计等,当用户数量很多的时候,在数据库中记录这些信息会很耗费资源,用户玩了一局之后会可能会等待很长时间。解决这个问题的方法是利用J2EE的消息bean来提供异步通信的机制,需要记录数据的时候,系统会封装一个值对象,发送给J2EE容器,这个操作是很快的,完成之后就返回,用户可以继续操作,不用关心消息何时被处理。

  J2EE的消息框架具备如下特征:

◇ 消息一定会被阅读,而且只阅读一次。JMS框架有自己的算法,把消息缓冲到硬盘,就算J2EE服务器死掉,消息也不会丢失。

◇ 系统采用点对点的Queue消息队列,可以保证同等优先级的消息先进先出。

  在Jboss 4.0中,部署消息Bean和Queue队列,都比weblogic 8.1来的容易,只需要在jboss.xml中声明消息目的地,如果jboss发现该目的地不存在的话,会自动建立一个,实在很简单。关于消息bean的开发与部署,我有专门的文章描述(参见我的blog:http://blog.csdn.net/bromon )。


七、启动与退出

  为了让系统具备让人满意的性能,应该尽量多的重用对象,减少创建新对象。比如上面提到的消息发送,我们的操作是提供一个静态类,在系统启动的时候就初始化,保持与JMS服务器的连接,系统发送消息的时候,不用再去查询JNDI和生成QueueConnectionFactory,这样可以提高系统响应速度。

  在数据库连接池的问题上,我们也采用同样的操作,启动的时候初始化N个连接。但是如果在关闭进程的时候不做任何操作,会导致JMS抛出socket异常,虽然没什么大的影响,但总显得不专业,而且池中的连接不被释放的话,也可能导致问题。最好能够让系统像jboss等控制台程序一样,ctrl+c之后能够执行操作,释放资源再退出。我们可以通过给进程/线程加上一个Hook来实现,windows程序员应该对这个非常熟悉。

Hook应该是一个线程方法,如下:

public class Hook extends Thread
{
    public void run()
    {
        //释放数据库连接,销毁连接池
        //关闭与JMS的连接
    }
}

在主线程中加入:

    Runtime.getRuntime().addShutdownHook(new Hook()) ;

那么进程/线程会在退出的时候执行Hook的run方法,清理资源


    
[2] xcode模拟器运作僵死在 attaching to 的解决法子
    来源: 互联网  发布时间: 2014-02-18
xcode模拟器运行僵死在 attaching to 的解决法子
修改Scheme为GDB可以运行时。

检查你的网络127.0.0.1是否指向localhost,

具体:vi /etc/hosts,查看是否有
127.0.0.1       localhost

如果有,检查网络是否把127.0.0.1指向其他地址了。

没有则加入。

    
[3] PhoneGap 网页也会拨打电话
    来源: 互联网  发布时间: 2014-02-18
PhoneGap 网页也能拨打电话

在PhoneGap下结合Jquery moblie 使用HTML整合电话和发短信的功能。

 1.拨打电话:
      tel:<电话号码>
      例子:<a href="tel:10086" >移动客服</a>
 2.发送短信:
       sms:<电话号码>?<参数>
        例子:<a href="sms:10086">短信</a>
                   <a href="sms:10086?body=CXYE">带内容短信</a>
转自:http://blog.sina.com.cn/s/blog_6fe60daa01017rx0.html

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3