精华内容
下载资源
问答
  • 使用IDEA和springboot框架有段时间了,之前一直没怎么注意过新建项目的命名结构啥的,结果后来写的多了,发现堆demo,层级也很乱,这次决定总结一下,也方便以后对项目的管理。 1.第步,跟所有IDE一样,先new...

    使用IDEA和springboot框架有一段时间了,之前一直没怎么注意过新建项目的命名结构啥的,结果后来写的多了,就发现一堆demo,层级也很乱,这次决定总结一下,也方便以后对项目的管理。
    1.第一步,跟所有IDE一样,先new,然后选 project。
    2.这里因为我用的是springboot,所以勾选这个,如果你用的是其他框架,自行修改。注意一下,这里springboot项目创建是要联网的,所以要检查好自己的网络状态。
    在这里插入图片描述
    3.开始给项目添加描述,起名以及包结构。
    这里建议按顺序先填写Group和Artifact,这样后面的Name和Package会自动生成。描述自行添加即可,非必要。
    在这里插入图片描述

    4.勾选必要的依赖,一般勾选这几个就可以了,后续有需要再在pom里面添加。在这里插入图片描述
    5.选择项目存放地址在这里插入图片描述
    6.点击Finish.生成的项目结构如图所示,很清晰。
    在这里插入图片描述

    展开全文
  • 五月份的Google I/O 2013大会上Google发布了开源的网络框架volley。听说反应很好,因此决定花点时间研究一下。

    五月份的Google I/O 2013开发者大会上,Google发布了开源的网络框架volley,听说反应很好,因此决定花点时间研究一下。


    1、Volley是干什么的

    Volley is a library that makes networking for Android apps easier and most importantly, faster.(From:https://developers.google.com/events/io/sessions/325304728)。这个句话还是比较抽象的,更快更容易体现在哪些方面,在什么时候使用?这些都需要我们来慢慢了解~~


    2、从获取开始

    volley获取地址(如果文中所列地址访问不了,请自行想办法,你该懂得):

    git clone https://android.googlesource.com/platform/frameworks/volley

    下载下来之后,你可以把它作为一个library导入你的项目,或者打包之后导入你的项目,这样我们就可以使用了。我下载的源码和生成的jar可以在这里下载


    3、开始一个简单的demo

    volley的使用流程大致是这样的。首先,我们拿到volley的请求队列,接着创建自己的请求对象,然后将其放入请求队列,再然后呢?再然后就是等请求结果吧~~是不是太简单了?其实就是这么简单。所以就直接上代码吧:
    public class MainActivity extends Activity implements OnClickListener {
    
    	private static final String URL = "http://www.baidu.com/";
    	private RequestQueue mQueue; // volley的请求队列
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		// 通过此种方式拿到请求队列,当然实际使用中我们不会这么做,通常会作为一个全局变量来使用
    		mQueue = Volley.newRequestQueue(getApplicationContext()); 
    	}
    
    	@Override
    	public void onClick(View v) {
    		volleyRequest();
    	}
    
    	/**
    	 * 创建一个请求,这里我们做一个最简单的通过GET方式请求网页源码的操作。请求成功后打印结果。
    	 */
    	private void volleyRequest() {
    		StringRequest request = new StringRequest(Method.GET, URL, new Listener<String>() {
    
    			@Override
    			public void onResponse(String arg0) {
    				Toast.makeText(getApplicationContext(), arg0, Toast.LENGTH_LONG).show();
    				Log.d("onResponse", arg0);
    			}
    		}, new ErrorListener() {
    
    			@Override
    			public void onErrorResponse(VolleyError arg0) {
    				Toast.makeText(getApplicationContext(), arg0.toString(), Toast.LENGTH_LONG).show();
    				Log.d("onErrorResponse", arg0.toString());
    			}
    		});
    		mQueue.add(request);
    	}
    }


    4、总结

    相信你已经对这个流程有了大概的认识,的确很简单,想要的结果就这么出来了,而且也没有在主线程中创建一个子线程来跑请求的代码。可能你会有些疑问了,GET请求通过URL来传递参数,我们可以把参数直接加在字符串后面,那POST请求呢?还有就是volley就这些功能吗?还有其他的吗?她的优点在哪些方面体现?哈哈,这篇就说这些,下篇继续~~

    最后在补充一下volley发布会的视频和一个PDF(也就是最上面那个页面中的内容),下载点这里:http://pan.baidu.com/s/1dDyz23v

    展开全文
  • 今天,我们如何步步从0开始实现个简单的战棋类游戏AI,概述一下此类游戏AI的设计思路和算法。(什么?AI是啥?——人工智能,通俗来说就是电脑的自动策略。)战棋类游戏的关卡设计思想经典战棋类游戏一般来说...

    战棋类游戏一直以高策略性著称,其中不乏经典之作如“三国志英杰传”、“三国曹操传”、“炎龙骑士团”、“金庸群侠传”等等。

    今天,我们就如何一步步从0开始实现一个简单的战棋类游戏AI,概述一下此类游戏AI的设计思路和算法。(什么?AI是啥?——人工智能,通俗来说就是电脑的自动策略。)

    三国志英杰传

    战棋类游戏的关卡设计思想

    经典战棋类游戏一般来说AI都比较简单,丰富高可玩性的关卡和极限挑战难度,还是要靠关卡设计来做:比如什么时候敌方出援军、敌方某个据点什么时候出兵之类的驱动整个战局变化的。

    这个由于是关卡设计者(一般是游戏策划)考虑的范畴,我们今天不讨论这个。光讨论一个NPC,每回合在正常情况下应该如何决策。

    模型分解

    我们分析几款经典的战棋类游戏

    1、曹操传
    分敌我回合,每回合自由选择角色先后行动顺序。
    每回合一个角色可以做两件事——(移动+行为)
    其中行为又可以细分为攻击、技能、休息、使用物品(可以给自己或身边的人使用)

    这里写图片描述

    2、炎龙骑士团
    也分敌我回合,每回合玩家自由选择角色先后行动顺序。
    还是一样,决策=移动+行为
    行为细分为攻击、休息、魔法、物品(可以给自己或身边的人使用)
    和曹操传不一样的地方是移动后不可以使用魔法(必须本回合停留原地才可以使用魔法)

    这里写图片描述

    3、金庸群侠传
    无敌我回合,每回合按照角色的身法决定先后行动顺序。
    决策=移动+行为
    行为细分为攻击、用毒、解毒、医疗、物品、等待、休息……
    其中等待可以将行动延后

    这里写图片描述
    ……

    不难发现,大部分战棋类游戏都遵循这个规则:单个回合内角色决策 = 移动 + 行动。

    AI框架设计思路

    我们本文并不想针对某个特定的游戏模式来做设计,而是想教大家一个简单的通用AI如何搭建——
    因为大家构思和想做的游戏系统设定各异,(比如上面几款游戏,就分别有自己的各项特殊规则)

    在此种情况下,我们其实可以搭建一个通用的计算模型,来“海纳百川”,实现一个与具体游戏业务逻辑无关的AI框架。

    我们不妨先把技术的东东放一边,以一个玩家的角度来重现,每一个回合我们人类是如何思考的呢?

    “我走到这里,下回合对方是不是可以走过来打到我?”
    “我这一击刚好可以把对方秒杀,这样对方就不能反击我了!”
    “我移动速度比对方快,我先跑回去补给完,然后再回来打”
    “调整一下阵型!用防御力高的人在这个关卡上卡位,弓箭手在后方射。”

    总之,决策基准就是如何行动对自己是最有利的。

    数学模型

    我们可以给每一个行为决策,算出一个“得分”来,最后负分是有害、正分是有利。最终AI的结果就是选择得分最高的行为。

    初级AI的本质是一个贪心算法

    贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
    贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
    通俗来说,贪心算法就是只看眼前,不看之后的情况。

    所以如果我们只看眼前一步,那么问题就变得很简单:我如何下这一步棋获得当前的最高收益?

    搭建框架

    这样我们只需要将所有的行为结果都有一个评估的分数,然后遍历所有的行为可能,取得分最高的评估结果来决策即可。

    1、分数评估体系搭建

    如何来做这个分数评估体系?——不同的游戏可以有各自的设定:举个例子,比如如果某次行动击中3个敌人,每个人评估扣血100,那么总共算得300分。比如某次给队友加血,预估恢复技能能加150血,就算得150分……

    所以某次行动的得分应该是本次行动所有影响的结果分数之和。(也可以根据具体需要,调整一些加权系数,后文说明)对自己有利则加分,对自己有害则减分(同理,对敌人有利减分,有害加分)

    2、如何遍历?

    很简单,战棋类游戏无非移动+行动,把所有可能走的点全部走一遍,走到了那儿后把所有可能的行动全部做一遍。如果有些行动设计到施展位置,把所有的施展位置全部算一遍即可。

    这里如果效率太低,可以尽情对搜索算法剪枝,此处不赘述。

    3、扩展和调优

    有了以上两步,AI应该就可以跑起来了。我们接下来可以根据具体咱们游戏的设定来调优,让AI更加聪明。

    拿刚才的例子,比如击中的3个敌人里有一个可以导致死亡(HP=0),那么额外再加200分(得分就是500了)。比如加血的队友血越少得分越高(优先给濒死的队友加血),那么当AI可以选择两个队友加血的时候,自然就会选择那个更加濒死的角色。

    这里的设计就跟具体每个游戏相关,甚至更加复杂的话,还可以考虑地形、站位、AOE覆盖范围、加BUFF/DEBUFF、使用道具等各种情况。

    这里还可以赋予不同的角色不同的使命,也只需要在最终的得分上体现即可(比如一个偏输出的攻击者,比一个偏防御的防御者在“减少敌方HP”的得分上有额外加权)

    总之基于这个分数,可以做出一切有想象力的AI来,此处仁者见仁。

    结语

    我们基于这个思路开发了《金庸群侠传X》和《江湖X》以及即将发布的《江湖X:汉家江湖》,基本AI是可用的(虽然由于游戏属性有点复杂,AI也经常被玩家吐槽)。

    这里写图片描述
    很多战斗变成了玩家的拦路虎

    这里写图片描述
    也会有一些由于AI给力被津津乐道的情况

    最后祝大家开发愉快,有问题可以与我交流。

    展开全文
  • 这是篇本应在很后面才会写到的回忆,只不过由于今天接到腾讯的电话,所以决定先写了,大概会持续写数篇吧。... 这天,我忽然决定学学web开发,这个我在前面的《菜鸟从零开始的第个应用上线记》中也写了一些,
      这是一篇本应在很后面才会写到的回忆,只不过由于今天接到腾讯的电话,所以决定先写了,大概会持续写数篇吧。
      其实,一切都是意外。不管是第一个在腾讯的应用、进入金庸爱好者的圈子还是在CSDN这个博客进入前一千名,都是意外,都是我在之前连想都没敢想的。
      2012年3月2日,是一切意外的开始。
      这一天,我忽然决定学学web开发,这个我在前面的《菜鸟从零开始的第一个应用上线记》中也写了一些,从95年开始真正接触编程,到今年也将近17年了,一直对web相关的编程敬而远之。最主要的原因就是本地程序更符合我的需要,因为我主要是给我自己用或者在工作中应用,web开发对我完全没意义。在此之前,我可以说从来没进行过任何web开发,对web开发的各项技术都是只听过,没有真正接触过。
      在这之前的前两天,我不知怎么就忽然对云起了点兴趣,于是就看了一下CSDN上关于云的几篇新闻,于是知道了新浪的SAE,发现这玩意满符合我的想法的,于是才决定开始web开发。当时几乎没什么选择,只能PHP,PHP我只看了半天,大概知道了能干啥,至于具体怎么写代码,用的时候再去查吧。然后就开始琢磨做点啥,当时有好几个想法,因为以前用VB、Delphi都做过好多小游戏,很多都可以改成flash版的,不过思考来思考去,最后发现很早之前做的一个金庸问答之华山论剑的小游戏,觉得这个制作起来难度应该是最低的。毕竟自己目前还啥也不会,选择一个最简单的来做吧,这样可以较为容易的做出应用来,通过这个应用可以先了解一下SAE、PHP以及其它一些web开发相关的技术。
      由于大家都说flash已经属于要被淘汰的技术了,所以最开始我是准备用PHP+JavaScript+HTML5来完成这个应用的。不过我随便让几个好友打开一个HTML5的网页,发现他们的浏览器都不支持HTML5,于是,直接放弃了。不用HTML5直接用JS貌似也可以,不过看了看javascript的各种效果实现代码,感觉有点恐怖,对于连CSS都不会的我来说,有些难度,所以最后只有一个可选了——flash。在上个世纪,听说flash做动画不错,于是也装过一次flash3.0,花了半个小时了解了一番后做了一个特别简单的动画——一个球滚动着到达另一个位置后再变大。由于我美工完全不行,所以了解了一下flash3.0能干什么后我就再也没用过flash,这玩意需要美术天赋,而我,不具备,所以不在这上面浪费时间了。flash对我来说至少在界面布置上更为方便,在设计的时候就所见即所得了。既然已经决定了,那么就开始行动,于是去买光盘——无线网卡上网,下载的话流量伤不起。还得说一句,最开始是想用flash builder的(flex),不过用了几天发现这玩意还不如直接用flash,于是在3月11日,放弃flex转为使用flash,并且用了两天就做了出来。
      具体的过程就不写了,因为在以前的博文中写过。那段时间我每天几乎都18小时在电脑前面,凌晨两点睡,早晨七点起,中午吃午饭从离开房间到食堂吃饭再回来正常需要13分钟,晚饭大约需要17分钟,剩下的时间就是WC了。已经好久没有一下子学这么多新东西了,刚开始的十来天那是很崩溃的,有时候都不知道该从何处下手。与生活中很多事情不同,这是一个坚持到底就可以胜利的事情,最终结果当然是我做出了我的第一个web应用。如果你现在问我我是否会web开发,我说我不会,因为我能做出来这个应用完全是很有针对性的去了解相应的技术,甚至很多时候就是几个函数而已,比如PHP,我只会我这个应用用到的那几个函数,其它的基本一窍不通,flash也类似,而javascript,好像就写了一个函数而已。真正的收获是对PHP、flash和javascript有了一个很直观的了解,把PHP、flash的全部函数功能都看了一遍,知道他们都能干点啥了,虽说可能很快也会忘记,但是当需要的时候至少我知道去哪里找。这有点像跑步中的极点,在极点附近是非常难受的,但是一旦突破后,立刻会感觉轻松很多,我们就是不断地在这种茫然、痛苦、突破、豁然开朗的循环中提高了自己的水平。
      在3月21日,我的应用在腾讯空间上线了。这绝对是一个意外,因为我最开始是准备发布到新浪微博的,只不过新浪微博审核太慢,才花了几天时间研究了一下腾讯的开放平台,抱着试试看的心情发布的,没想到就上线了。
      汇总一下这20天了解到的东西,首先是对新浪的云平台SAE有了较为深入的了解(最开始我就是因为SAE才要做web开发的,对SAE的文档读的最仔细),然后是对腾讯的开放平台也有了一些了解,剩下的就是会用PHP、flash了,至于javascript么,基本上算是没什么进步。
      后来腾讯搞应用开发大赛,工作人员不知为啥就联系我了,然后把我这20天上线的事发到了他们的官方微博上,还评了一个“最跨界的开发者”,实际上我参加比赛的应用不是这个金庸问答,但他们大概为了最求宣传效果,把两件事捏到一起了。最开始他们通过QQ征求我的意见时不是这样写的,后来我看到发出的微博跟当时征求意见时写的不一样,就跟他们联系,他们说微博字数有限制,所以就精简了一下,20天从零开始上线是真的,参加应用大赛是真的,也确实是跨界的开发者,就不要较真了嘛。这条微博发出后很多人表示质疑,其实看完我上面写的,这不是什么难事,实际上即便是在这20天中,很多工作也都是美工的工作。我始终记得当年的一个小故事,鲁班学艺的故事,师傅问他三个月学会和三年学会有什么区别,鲁班说三个月学在眼里,三年学在心里。我基本上就属于临时突击,就专门针对我要做的应用去学有关的内容,类似于从网上搜索到代码与自己写出代码的区别,速是速了,但是缺乏底蕴,算不得成。
      这个应用直接导致了我后面半年多的工作生活内容的变化,待续。
    展开全文
  • 业余时间决定了你的人生

    万次阅读 多人点赞 2017-08-10 12:31:01
    不积跬步,无以至千里;...高效利用时间的第要诀就是:充分利用好你的业余时间。因为它决定了你的人生。把“重要不紧急的事情”摆在前面,因为它决定了你的未来。不要陷入“既不重要也不紧急之事”的陷阱
  • 用了Grunt段时间,确实极大提高了前端开发效率,所以决定翻一下官方文档,方便英文基础不太好的童鞋们(本人英文也不怎么样)。虽然在github上找到了个中文的翻译,但是翻译质量实在不敢恭维(个人感觉像是...
  • 到目前为止,还没有做...首先需要判断出应用存活的数据的大小,存活数据的大小是决定配置应用需要的Java堆大小的重要条件,也能够决定是否需要重新审视一下应用的内存需求或者修改应用程序以满足内存需求。  注
  • 开发个数字华容道的小游戏

    万次阅读 2018-01-11 17:20:59
    一开始我准备下一个玩玩的。结果没搜到。所以决定写了一个。最后效果差不多是这样: 思路以及实现 首先,我们应该考虑如何去实现这个效果。细想一下,其实和之前的2048有点像,但是又不是完全一直。于是,便又...
  • 但是如果问其如何学习Linux内核,不同的人会给出不同的答案,有的人会告诉你先去看看0.11的内核源码,有的人则是推荐先看《Linux内核设计与实现》这样的书,有的人则会说先把内存寻址学懂,然后再开始考虑网络协议栈...
  • 在正式开始之前这里要着啰嗦一下,进来的同学一定要看,在申请应用的时候要填个签名,这个签名是由应用的签名文件keystore决定的,那么你在填这个签名的时候,一定要把你的应用用正式的keyStore生成apk,安装到...
  • Unity 从零开始 的行为树之旅(

    千次阅读 2019-04-25 17:58:20
    行为树执行的成果(成功/失败),由其子节点决定,子节点执行完成后会向父节点传递成功/失败的消息, 最终这些来自各个子枝的消息汇聚到行为树,行为树将结果整合得到行为树的最终执行结果。 其最终结果: 同...
  • 南京所普通二本院校毕业,大学学的是与计算机无关的行业,14年毕业时决定进入计算机行业,并跨专业考计算机的研究生。半年时间,自学计算机考研的高数与计算机相关课程,组成原理,数据结构,网络,操作系统等,...
  • 结果集(ResultSet)用法

    万次阅读 多人点赞 2016-07-28 11:50:24
    结果集(ResultSet)是数据中查询结果返回的种对象,可以说结果集是个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.  结果集读取数据的方法主要是...
  • 认知升级——不做开始爱好者!

    千次阅读 2019-02-09 23:12:05
    开始当成结果,这是大部分人都有的心理习惯,我们他们称为“开始爱好者”。——古典《拆掉思维的墙——原来我还可以这样活》 的确,从某种意义上讲,我们多多少少都是“开始爱好者”。元旦前后、春节前后表现的尤...
  • 记录次壮烈牺牲的阿里巴巴面试

    万次阅读 多人点赞 2018-03-17 00:00:00
    于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行轮的技术面试。我脸黑人问号???现在的面试都流行突袭吗?于是我的第次面试之旅,就此壮烈的展开。自我介绍首先呢...
  • 工作总结9:这个月来犯的错

    千次阅读 多人点赞 2017-03-28 20:15:40
    今天是 2017 年 3 月 28 日星期二,距离我发表上篇博客已经过去了快个月,这个月左右的时间中,我浪费很...做出决定后又总是幻想当初如果选择另种会怎样 没有及时反省这点应该是其他错误的根源。回顾这个月,
  • Unreal Engine 4 初学者教程:开始

    万次阅读 多人点赞 2018-06-14 16:10:44
    Unreal Engine 4 初学者教程:开始 原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是个游戏开发工具集,能够开发从 2D 手机游戏到 3A ...
  • 本文打算用java 实现个socks5代理,写之前在网上搜索发现资料也比较少,决定做个总结 1.首先我们讲解什么是代理 用幅形象的图解释什么事代理,我们的请求过来后 代理将请求转达到真正的网络,再将结果转发...
  • ElasticSearch进阶篇集群+原理(看这懂原理)

    万次阅读 多人点赞 2019-05-22 18:57:45
    (2)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常 (3)Node:节点(简单理解为集群中的...
  • 篇代码贴完了,总是感觉缺少些东西,因为光看代码用时候不是很直观,我们还是需要些文档来辅助理解。好了,所以补充些内容。
  • C语言中怎么判断个数是否是素数(即质数)

    万次阅读 多人点赞 2016-09-26 11:46:51
    所以决定买本书好好看看。在边看书边实践的过程中有个很经典的问题需要解决。 就是怎么判断个读入的整数是否是素数,如果不是并打印其约数。 当然,对我来说还是很简单的。很快的解决了,所以分享一下自己的...
  • 相关系数与决定系数

    千次阅读 2020-03-05 14:11:33
    文章目录相关系数(Correlation coefficient)决定系数(coefficient of determination) 相关系数(Correlation coefficient) 皮尔逊相关系数 也称为简单相关系数,用于研究变量之间 线性相关的程度。相关系数...
  • 一直都想写写这个主题,但是,一直都感觉有点虚,也没有去...在机器视觉领域,相机的标定是个关键的环节,它决定了机器视觉系统能否有效的定位,能否有效的计算目标物。相机的标定基本上可以分为两种,第种是...
  • 如何开始学习web ui...打算写个系列文章,关于如何从零开始到会设计和组装个简单的web ui自动化测试框架。把文章放到这里的目的,方便以后自己记不住,回过来看看,还有就是给一些想学习web自动化测试的朋友们
  • 2019年全国程序员统一考试,现在开始

    万次阅读 多人点赞 2019-06-10 21:19:22
    1、个假期在外游玩不会游泳的程序猿看到河边有如下警告后结果如何? A、默默走开 B、程序猿哪有假期 C、不关心Warning,溺水身亡 2、如果程序猿正在相亲,告诉女方职业后被无情拉黑,请问该程序猿最...
  • 英飞凌(Infineon)TC264单片机初探---点亮个LED

    千次阅读 多人点赞 2020-04-25 15:33:01
    最近段时间,忙着和小伙伴们准备智能车比赛,要用到英飞凌(Infineon)的TC264型号的单片机。虽然以前没用过,但是我靠着...看到Tasking比较多人用,我就决定使用这款IDE。 打开后,发现Tasking和以前学习java用...
  • SPSS聚类分析——个案例演示聚类分析全过程

    万次阅读 多人点赞 2015-03-06 14:46:23
    SPSS聚类分析——个案例演示聚类分析全过程 摘要: 案例数据源: 有20种12盎司啤酒成分和价格的数据,变量包括啤酒名称、热量、钠含量、酒精含量、价格。数据来自《SPSS for Windows 统计分析》 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 796,036
精华内容 318,414
关键字:

一开始就决定了结果