All posts by 龙生
随机物品权重算法设计
1、前言 在游戏开发中很多功能按权重随机给东西,比如:掉落、奖励、抽奖等等….. 2、功能 *)支持多个权重进行随机 *)能屏蔽指定权重,防止再次随机到 3、实现 [java] view plaincopy public int weightRandom(BitSet exclude, int… weights) { if (weights == null) { //安全性验证 } int length = weights.length; if (length == 0) { return –1; } if (len == 1) { int w = weights[0]; if (w < 0) { //安全性验证 } else if (w == 0) { return –1; } else { return 0; } } int total = 0; for (int i = 0; i < len; i++) { if (exclude != null && exclude.get(i)) { continue; } int w = weights[i]; total += w; } if (total <= 0) { return –1; } int randomNum = random(1, total), hitIndex = –1, partNum = 0; for (int i = 0; i < len; i++) { if (exclude != null && exclude.get(i)) { continue; } int w = weights[i]; partNum += w; if (partNum >= randomNum) { hitIndex = i; break; } } return hitIndex; } from:http://blog.csdn.net/zeus_9i/article/details/11900015
View DetailsJava实现按权重随机数
一、问题定义: 问下有一个数组,这些数组中的值都有自己的权重,怎样设计才能高效的优先取出权重高的数?? 例如: 复制代码代码如下: 权重: 8 2 11 79 权重返回的值: 0 1 2 3 二、分析问题: 思路一:创建一个数组数组大小为权重和的大小,如值0的权重是8,则放入8个0值,值1的权重是2,则放入2个1值,依次类推。 然后用用一个权重和大小的随机数,产生随机数,即可。缺点要占用过多的内存。 思路二: 权重和数组 w[i]存储的是[0,i]元素的所有元素的权重和 时间复杂度O(n) 空间复杂度O(n) 随机[0,W[399]] 看随机数 落在哪个Wi 内就选哪个 时间复杂度 O(longn) 所以总的时间复杂度时间复杂度O(n) 空间复杂度O(n) 伪代码: 轮盘赌 并不是一种特别好的选择算子,但它容易实现。 首先要明白一点,由于交叉、变异等算子,并不能控制进化方向,所以进化的重任落在选择算子上。 如果明白了这一点,就好办了。 轮盘赌,就是积累概率来实现的,通常适应度大的被选择的几率较高。 假如:fit为适应度数组,共m个 复制代码代码如下: for i=1 to m '先求和 sum=sum+fit(i) next i For i = 1 To n ‘n-是要生成多少个个体 temp = temp + fit(i) If rnd <= temp / sum Then 输出 i 就是结果 Exit Function End If Next i 三、解决问题: 复制代码代码如下: package datastruct; import java.util.HashMap; import java.util.Map; /** 权重随机数: 如 权重:8 2 11 […]
View Detailscurl实现站外采集的方法和技巧
curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 选择curl的理由 关于curl与file_get_contents,摘抄一段通俗易懂的对比: file_get_contents其实是一堆内置的文件操作函数的合并版本,比如file_exists,fopen,fread,fclose,专门提供给懒人用的,而且它主要是用来对付本地文件的,但又是因为懒人的原因,同时加入了对网络文件的支持; curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 使用方法 1、开启curl支持 由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可; 2、使用curl进行数据抓取 复制代码代码如下: // 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn'); // 设置header curl_setopt($curl, CURLOPT_HEADER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 运行cURL,请求网页 $data = curl_exec($curl); // 关闭URL请求 curl_close($curl); 3、通过正则匹配找到关键数据 复制代码代码如下: //$data是curl_exec返回的的值,即采集的目标内容 preg_match_all("/<li class=\"item\">(.*?)<\/li>/",$data, $out, PREG_SET_ORDER); foreach($out as $key => $value){ //此处$value是数组,同时记录找到带匹配字符的整句和单独匹配的字符 echo '匹配到的整句:'.$value[0].' '; echo '单独匹配到的:'.$value[1].' '; } 技巧 1、超时的相关设置 通过curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括: CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。 CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。 ) CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。 CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。 在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。 CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。 复制代码代码如下: curl_setopt($ch, CURLOPT_TIMEOUT, 60); //只需要设置一个秒的数量就可以 […]
View Detailsphpstorm配置Xdebug进行调试PHP教程
运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdebug版本一定要相对应,且要看清64位和32位哦~ 1. PHP安装xdebug扩展 php.ini的配置,下面的配置仅供参考,路径要换成自己的! [xdebug] zend_extension=”D:\wamp\php-5.6.2-x64\ext\php_xdebug-2.2.5-5.6-vc11-x86_64.dll” xdebug.remote_enable = On xdebug.remote_handler = dbgp xdebug.remote_host= localhost xdebug.remote_port = 9000 xdebug.idekey = PHPSTORM ps : remote_handler 、 remote_host、 remote_port 这些都有默认值,但还是建议设置下,至少知道要设置这些参数~ 查看phpinfo~ 2.PHPSTORM设置 楼主以前一直用zendstudio,刚开始用phpstorm非常蛋疼,用了一段时间后发现还挺好用的~ 1.首先检查phpstorm的xdebug配置 这里的debug port要和php.ini里面的 xdebug.remote_port相一致!默认是9000,如果9000端口被占用的话,可以改成其他端口。 2. 设置debug. 添加本地的 web server~ www.51open.pcom 是我本地的 web server~ ~ 3.开始调试 打好第一个断点,shift + F9就可以了 打好 第一个断点 ,选中配置的debug, 按旁边的臭虫 按钮 总结: 根据断点配置,或在打开 Debug URL 的过程中,或在 POST 之后,如果 PhpStorm 监听到了 Debug 连接,就会立即切换到编辑器界面,并跳转到设置的断点处,浏览器端会等待 PhpStorm 的操作。 你可以随时中断 PhpStorm 的调试,或方便的进行 Step Into / Step Over / Run to cursor(这个刁爆了): […]
View Detailsphpstorm 502 bad gateway 最简单解决办法
问题: 解决办法: 1.电脑左下角开始--搜索”php.exe“,记录下路径,如我的是C:\xampp\php\ 2.点击phpstorm里的configured PHP Interpreter(见下图) 3.点击下图里的红框 4.在下图红框输入步骤1里的php的文件夹路径确认即可。 PS:本人是新手在自学PHP,有什么说得不对的,麻烦各位指出。谢谢。 from:http://www.bubuko.com/infodetail-649755.html
View DetailsPhpStorm 默认快捷键
<?php /** * Created by JetBrains PhpStorm. * User: Administrator * Date: 12-9-18 * Time: 上午11:03 * To change this template use File | Settings | File Templates. */ // ctrl+j 插入活动代码提示 // ctrl+alt+t 当前位置插入环绕代码 // alt+insert 生成代码菜单 // ctrl+q 查看代码注释 // ctrl+d 复制当前行 // ctrl+y 删除当前行 // shift+F6 重命名 // ctrl+shift+u 字母大小写转换 // ctrl+f 查找 // ctrl+r 替换 // F4 查看源码 // ctrl+shift+i 查看变量或方法定义源 // ctrl+g 跳转行 // ctrl+alt+F12 跳转至当前文件在磁盘上的位置 // alt+down 查看下一个方法 // alt+up 查看上一个方法 // ctrl+alt+l 重新格式化代码 // ctrl+shift+down statement向下移动 // ctrl+shift+up statement向上移动 // alt+shift+down line向下移动 // alt+shift+up line向上移动 // ctrl+/ 行注释 // ctrl+shift+/ 块注释 // ctrl+shift+n 打开工程中的文件 // ctrl+b 跳到变量申明处 // ctrl+[] 匹配 {}[] // ctrl+shift+]/[ 选中块代码<table>….</table> // ctrl+x 剪切行 // ctrl+shift+v 复制多个文本 // alt+left/right 标签切换 // ctrl+p 显示默认参数
View Detailsphpstorm 设置多项目并存
phpstorm 设置多项目并存 phpstorm 或 webstorm设置多个项目可以并存: File -> settings -> Directories -> Add Content Root 中添加你当前的工程目录。 from:http://www.bestphper.cn/article-46.html
View Detailsc#中枚举类型的定义与使用
介绍 枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型。 如果没有显式声明基础类型,则使用 Int32。 编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。 定义 默认基数从O开始,也可指定数值。 enum Days { Saturday=1, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday }; enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; 使用 Colors myColors = Colors.Red; string strColor=myColors.tostring(); int IntColor=(int)myColors ; 位或 Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow; 位与 Colors myColors = Colors.Red & Colors.Blue & Colors.Yellow; 遍历 foreach (string s in Enum.GetNames(typeof(Days))) Response.Write(s + "--" + Enum.Parse(typeof(Days), s).ToString()); 转换 Colors mc=Colors Enum.Parse(typeof(Colors ), "red"); if (System.Enum.IsDefined(typeof(Days), "Monday")) Days ds= (Days)Enum.Parse(typeof(Days), "Monday"); 实例二: public enum NoticeType { Notice = 'A', LabRule = 'H', HotInformation = 'N', Column = 'C', All = '1', Null = '0' } //新建枚举类型 NoticeType noticeType1 = NoticeType.Column; //把枚举类型转换为string d="Column" string d = noticeType1.ToString(); //取得枚举类型的基数 dd=’C' char dd = (char)noticeType1; //通过基数取得对应的枚举类型 noticeType2 = NoticeType.Notice //(NoticeType)’A'; 两种方式都可以 NoticeType noticeType2 = (NoticeType)Char.Parse("A"); //通过名称取得枚举类型 noticeType3 = NoticeType.Notice NoticeType noticeType3 = (NoticeType)Enum.Parse(typeof(NoticeType), "Notice"); from:http://www.cnblogs.com/an-wl/archive/2011/04/14/2015815.html
View DetailsFlash 死局已定,有人很伤心
当 HTML5 问世之后,距离实现 Flash 被淘汰的预言又迈近了一大步,尽管 Adobe 在尽可能地通过更新和维护来提升 Flash 的实用性和兼容 性,不过江河日下的处境依旧不改,然而从今年7月开始,Mozilla 已经禁止 Firefox 全平台运行包含 18.0.0.203 及以下的所有 Adobe Flash 版本,不用猜都知道,又是因为安全漏洞这个老问题。 近段时间以来,不少用户都开始抱怨浏览器在加载 Flash 插件时出现崩溃现象,而这也就促使 Firefox 与 Chrome 开始考虑是否应该继续支持 Flash 运行,Chrome 更是已经暂时关闭 Flash。 大型视频网站 YouTube 和直播站点 Twitch 也已经或即将完成从 Flash 到 HTML5 的过渡,这也就是为什么最近打开 Youtube 总显示 Flash 崩溃无法观看的原因。 从各大网站纷纷拥抱 HTML5 这个大趋势来看,浏览器不再支持 Flash 可能会真的来临。,对于浏览器厂商和网站来说,这并不会带来多大的损失,相反他们认为去 Flash 化就是在剔除糟粕,在这样的环境下,最受伤的当然是 Abobe,其次就是 Flash 游戏开发者。 老实说,Flash 游戏在PC刚刚普及之初确实让不少人感受到了无限乐趣,尽管现在看起来大多数Flash游戏就像是用各种补丁随意拼凑的“三流作 品”,但Flash对游戏界的影响是极其深远的,Flash游戏以制作简单,操作方便,无需安装,文件体积小等优点渐渐传播开来,只可惜直到目前为止 Flash游戏都难登大雅之堂。 纯益智Flash游戏的巅峰之作:Nekogames的《星探》系列从2007年开始,几乎是一年一部,可见它的受欢迎程度;而《王国保卫战》、 《舰队Collection》的推出也让人对Flash游戏多少表示认同,不过当手游和Unity引擎普及之后,Flash上的优秀游戏几乎都选择了移 植,移植之后的体验度甚至超过了原版。 这只是从市场宏观视角来进行陈述,那么从Flash游戏制作者个人的立场来看又是怎样的呢?Gamestop旗下网页游戏站点Kongregate 最近也在转战HTML5,不过该网站的制作人John Cooney表示还是不愿意相信这个事实。他记得在2010年的时候就已经有人告知他Flash将会走向衰亡,不过那时候他认为这只是一个笑话,因为根据 Kongregate的监测显示,当年的Flash游戏还是很火爆。 由Newgrounds.com站长Tom Fulp和synj.net站长Dan Paladin共同设计的Flash游戏《外星原人》曾经在网络上造成了相当大的轰动,2002年Dan Paladin专门成立了Behemoth工作室将其进行重制之后推出了家用机版,2008年推出第2款游戏《城堡毁灭者》,创下全球近80万次下载的佳 绩。 在Tom Fulp看来,Flash是他涉足游戏领域最佳的工具,从1998年开始就一直是Flash的死忠粉丝,Tom Fulp认为Flash能够让不少游戏制作新手快速融入到这个行业中来,只可惜当前Flash的表现太令人失望。 而《超级食肉男孩》的开发者Edmund McMillen在2001年也使用Flash开发过游戏,但目前他只用来制作动画和执行一些简单的程序,Edmund McMillen认为Flash在上手使用方便之余,同时也带来了专业性不强,无法实现深度娱乐等缺点,在这个无时无刻不讲究创意和元素多样性的游戏行业里,Flash变得越来越力不从心了。 让Flash彻底倒下的最后一步恐怕就是浏览器不再提供支持,而在此之前,Flash游戏开发者和厂商就必须对今后如何生存的问题进行考虑,而在游戏开发技术上也要不断补充新的知识,在转移阵地的过程中,可能会淘汰一部分开发者。 其实《王国保卫战》已经做出了一个不错的表率,当然还有诸如《被诅咒的宝藏》等优秀的作品,凭借移动平台的人气和便捷性,游戏传播的速度会更快。从 当前形势来看,移动平台将会成为距离Flash游戏开发者们最近的生存乐土,至于Flash或将沦为游戏初期创作概念的呈现以及动画制作的一个“小工具”。 from:http://www.oschina.net/news/66695/flash-will-gone
View DetailsMVC中的@Html.DisplayFor等方法如何控制日期的显示格式
在Sql Server2005中,如果将某字段定义成日期 时间 类型DateTime,那么在视图中会默认显示成年月日时分秒的方式(如 2013/8/6 13:37:33) 如果只想显示成年月日形式,不要时分秒,那么该怎么办呢? 第一种方法:先设置一个时间显示的模板,然后在需要显示时间的地方调用这个模板就行了。 1、在Share文件夹下,创建一个文件夹DisplayTemplates 2、在DisplayTemplates文件夹下,创建一个视图LongDateTime.cshtml 3、在视图LongDateTime.cshtml中输入代码
1 2 3 |
<span class="variable">@model</span> <span class="constant">System</span>.<span class="constant">DateTime</span> <span class="variable">@Model</span>.<span class="constant">ToLongDateString</span>() |
当然,后面那句也可以换成@Model.ToShortDateString()或其它日期格式。 4、在需要显示日期的地方,由原来的
1 |
<span class="at_rule">@Html.<span class="function">DisplayFor(modelItem => item.PostTime)</span></span> |
替换成
1 |
<span class="at_rule">@Html.<span class="function">DisplayFor(modelItem => item.PostTime,<span class="string">"</span><span class="string">LongDateTime"</span>)</span></span> |
这样就完成了时间格式的显示转换。由原来的显示方式(2013/8/6 13:37:33)显示成了(2013年8月6日) 第二种方法:model类上面添加DisplayFormat的attribute. 如:
1 2 3 4 5 6 7 |
[Display(Name = <span class="string">"</span><span class="string">发布时间:"</span>)] [DisplayFormat(DataFormatString = <span class="string">"</span><span class="string">{0:yyyy年MM月dd日}"</span>)] <span class="keyword">public</span> <span class="keyword">virtual</span> System.DateTime PostTime { <span class="keyword">get</span>; <span class="keyword">set</span>; } |
显示出来后,照样是2013年8月6日这种格式。 from:http://www.cnblogs.com/Rising/p/3722299.html
View Details