Java数字抽奖游戏核心代码及分析

标签: java 数字 游戏 | 发表时间:2012-09-28 17:18 | 作者:邹振文
出处:http://www.blogjava.net

最近,正在看《core java 8th》这本书。自己按照书上作者一段代码的思想,自己动手写了一个小代码,深刻的感觉到作者Horstmann超高的代码思想。《core java 8th》真的确实是一本好书,值得慢慢品读,会给人带来无穷的惊喜。自己写的代码与注释如下,废话不多说,上代码。

[java]  view plain copy
  1. package com.luiszhang.test;  
  2.   
  3. import java.util.Arrays;  
  4.   
  5. /** 
  6.  * NumberLotteryGame 
  7.  * 一个简单的数字彩票游戏类 
  8.  * @author LuisZhang 
  9.  * 参考了core java 8th中的例3-7的设计思想 
  10.  */  
  11. public class NumberLotteryGame {  
  12.     private int gamesNumber;    // 生成游戏的数量,为以后多线程扩展做考虑  
  13.     private int numbersLength;  // 数字序列的总长度  
  14.     private int winningNumbersLength;  // 中奖的数字序列的长度  
  15.       
  16.     /** 
  17.      * Constructor with three parameters 
  18.      * 初始化3个参数的构造方法 
  19.      * @param gamesNumber 
  20.      * @param numbersLength 
  21.      * @param winningNumbersLength 
  22.      */  
  23.     public NumberLotteryGame(int gamesNumber, int numbersLength, int winningNumbersLength) {  
  24.         this.gamesNumber = gamesNumber;  
  25.         this.numbersLength = numbersLength;  
  26.         this.winningNumbersLength = winningNumbersLength;  
  27.     }  
  28.   
  29.     /** 
  30.      * Generate a number Array 
  31.      * 生成一个产生中奖序列所需的数字序列 
  32.      * @param length 数字序列的长度 
  33.      * @return numbers 产生的数字序列 
  34.      */  
  35.     public static int[] generateNumberArray(int length) {  
  36.         int[] numbers = new int[length];  
  37.           
  38.         for (int i = 0; i < numbers.length; i++) {  
  39.             numbers[i] = i + 1;  
  40.         }  
  41.           
  42.         return numbers;  
  43.     }  
  44.       
  45.     /** 
  46.      * Generate a winning number array 
  47.      * 根据生成的数字序列,产生不重复的中奖数字序列 
  48.      * @param length 中奖数字序列的长度 
  49.      * @return result 中奖数字数组 
  50.      */  
  51.     public int[] generateWinningNumberArray(int length) {  
  52.         int[] numbers = NumberLotteryGame.generateNumberArray(numbersLength);  
  53.           
  54.         int[] result = new int[length];  
  55.           
  56.         int n = numbersLength;  
  57.           //www.heatpress123.net
  58.         // 该for循环为产生不重复的中奖序列的核心代码  
  59.         for(int i = 0; i < result.length; i++) {  
  60.             int r = (int) (Math.random() * n);  // 随机产生一个从0——(n-1)的数字,Math.random()  
  61.                                                 // 随机产生一个[0, 1)范围的double型数值,  
  62.             result[i] = numbers[r];             // 将该随机数字作为数组的下标,  
  63.                                                 // 将该下标对应的值赋给result[i]  
  64.             numbers[r] = numbers[n - 1];        // 将numbers数组的numbers[n-1]的值,赋给刚已赋  
  65.                                                 // 值过的numbers[r]。  
  66.             n--;   // 将n-1,从而下一次循环产生的随机的原数组下标的范围从0——(n-1)-1,  
  67.                    // 保证了上一步中,已经赋值给数组中其他数的numbers[n-1],不会在下次循环中给取  
  68.                    // 得,从而保证了产生的中奖数组result为不重复的。  
  69.         }  
  70.           
  71.         return result;  
  72.     }  
  73.       
  74.     /** 
  75.      * Show winning NumberArray 
  76.      * 显示中将数组 
  77.      */  
  78.     public void showWinningNumberArray() {  
  79.         int[] winningNumbers = this.generateWinningNumberArray(winningNumbersLength);  
  80.         Arrays.sort(winningNumbers);  
  81.           
  82.         for(int r : winningNumbers) {  
  83.             System.out.print(r + " ");  
  84.         }  
  85.           
  86.         System.out.println();  
  87.     }  
  88.   
  89.     /** 
  90.      * @return the gamesNumber 
  91.      */  
  92.     public int getGamesNumber() {  
  93.         return gamesNumber;  
  94.     }  
  95.   
  96.     /** 
  97.      * @param gamesNumber the gamesNumber to set 
  98.      */  
  99.     public void setGamesNumber(int gamesNumber) {  
  100.         this.gamesNumber = gamesNumber;  
  101.     }  
  102.   
  103.     /** 
  104.      * @return the numbersLength 
  105.      */  
  106.     public int getNumbersLength() {  
  107.         return numbersLength;  
  108.     }  
  109.   
  110.     /** 
  111.      * @param numbersLength the numbersLength to set 
  112.      */  
  113.     public void setNumbersLength(int numbersLength) {  
  114.         this.numbersLength = numbersLength;  
  115.     }  
  116.   
  117.     /** 
  118.      * @return the winningNumbersLength 
  119.      */  
  120.     public int getWinningNumbersLength() {  
  121.         return winningNumbersLength;  
  122.     }  
  123.   
  124.     /** 
  125.      * @param winningNumbersLength the winningNumbersLength to set 
  126.      */  
  127.     public void setWinningNumbersLength(int winningNumbersLength) {  
  128.         this.winningNumbersLength = winningNumbersLength;  
  129.     }  
  130.       
  131.     /** 
  132.      * Main method 
  133.      * 用于测试该类的main方法 
  134.      * @param args 
  135.      */  
  136.     public static void main(String[] args) {  
  137.         int i = 20;    // int i = Integer.parseInt(args[0]);  
  138.         for(int j = 0; j < i; j++) {  
  139.             NumberLotteryGame game1 = new NumberLotteryGame(1, 15, 7);  
  140.             game1.showWinningNumberArray();  
  141.         }  
  142.     }  
  143. }  


本文链接

相关 [java 数字 游戏] 推荐:

Java数字抽奖游戏核心代码及分析

- - BlogJava_首页
最近,正在看《core java 8th》这本书. 自己按照书上作者一段代码的思想,自己动手写了一个小代码,深刻的感觉到作者Horstmann超高的代码思想. 《core java 8th》真的确实是一本好书,值得慢慢品读,会给人带来无穷的惊喜. 自己写的代码与注释如下,废话不多说,上代码.  * 一个简单的数字彩票游戏类 .

java游戏服务端实现

- - 企业架构 - ITeye博客
一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码. 关于这个项目,有很多地方值得聊一聊. 本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意的地方.   这个项目的一个特别之处是,客户端是手机,用户通过移动网络与服务器通信.

java游戏开发入门2_基于netty+protobuf的游戏框架

- - 行业应用 - ITeye博客
/** 刚开始学习游戏开发时想找一个基于netty的游戏demo十分困难,工作一段时间后了解框架后将其分享出来; 该框架是从别人框架移植修改完善而来,不是我一个人写,算是借花献佛; 实际业务开发比此框架要复杂得多,去繁从简主在体现核心思想; 这是游戏开发入门的第2篇,如果有不完善的地方请多多指导.  框架示意图如下,源代码参看: github:.

拒绝营收数字游戏

- - 《商业价值》杂志
投资者现在对于完全符合或略微高于分析预测值零到一个百分点的营收惊喜持更质疑的心态. 这是过去10年相当新的一个发展,我们认为这是由于越来越多的企业玩弄数字游戏所致. 随着越来越多的公司操纵财务数据,越来越多的投资者变得多疑. 人们往往通过监测企业的营收来判断一家企业是否能够长远获利和成功,因为这些数字代表了企业的盈利能力.

一个基于RSA算法的Java数字签名例子

- - 行业应用 - ITeye博客
  网络数据安全包括数据的本身的安全性、数据的完整性(防止篡改)、数据来源的不可否认性等要素. 对数据采用加密算法加密可以保证数据本身的安全性,利用消息摘要可以保证数据的完整性,但是还有一点就是数据来源的不可否认性(也就是数据来自哪里接收者是清楚的,而且发送数据者不可抵赖).         有些方案曾经使用消息认证码(MAC)来保证数据来源于合法的发送着,但是利用消息认证码会带来一个问题,就是通讯双方必须事先约定两者之间的通讯用共享密码.

GameFly将推出数字游戏租赁服务

- 异国 - Solidot
GameFly是一家游戏租赁服务公司,其服务类似于早年的DVD租赁公司Netflix. 它的服务是按月收费,例如每月16美元,玩家可以一次租一款游戏;每月23美元,一次可租两款游戏. 现在GameFly也学习Netflix进入在线市场,提供数字游戏租赁服务. 订户可以在订阅时间内玩任何一款游戏. GameFly不久前收购了数字发行平台Direct2Drive,它将从9月8日起进行在线租赁的封闭式测试.

数字货币正在上演疯狂的资本游戏

- -
▲比特币、以太币等数字货币短时间内数十倍的收益率,吸引了无数炒家. 全文共5892字,阅读大约需要13分钟. 第二大数字货币以太币,近三个月涨了20倍,半年内涨了50倍,三年内涨了上千倍. 网络虚拟空间里的数字货币ICO众筹,相比股市中的IPO更自由,也更疯狂. 有人认为这是泡沫,有人认为这是未来.

e的近似表达:一个令人惊讶的数字游戏

- hhx - Matrix67: My Blog
    刚才看到这个很漂亮的无理数 e 的近似表达,它恰好用到了 1 到 9 这 9 个数字.     猜猜看它能精确到 e 的小数点后多少位.     远比想象中的牛 B —— 它能精确到小数点后 18, 457, 734, 525, 360, 901, 453, 873, 570 位. 它的秘密就在于, e 事实上等于 lim(n→∞) (1 + 1/n)^n ,而 9^(4^(7·6)) 恰好就等于 3^(2^85).

腾讯孙驰天:游戏科技让数字孪生创造更大生产力

- - 极客公园
毕业后做了几年赛车游戏,公司被苹果收购后转做自动驾驶. 几年后离开苹果,成为了腾讯数字孪生仿真技术总监,孙驰天有着奇妙的转行经历. 几份工作看起来南辕北辙,但其实背后有着技术上的共通点,就是游戏科技. 正如他所说,游戏人不只是玩游戏的达人,做游戏的开发者,更是用游戏科技进行前沿技术研发的人. 从小就热爱游戏的孙驰天在明白「游戏不能当饭吃」的道理后,爱上了数学物理,但在清华学习数学物理专业的时候,他发现自己缺少了一点做科学家的天赋,并且还是爱游戏.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).