仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1390|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网站制作之Java游戏直棋(二)

[复制链接]
透明 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:46:50 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),本部分为电脑的野生智能。

为了加速AI的盘算速率,必需对后面的计划举行大批的修正,并终极向VC平台转移。在用VC完成的游戏中,棋盘将接纳BitBoard手艺,棋子的显现将完全和逻辑分隔。今朝JAVA版本仍旧接纳数组暗示棋盘,次要是便于逻辑剖析和计划。

先对第一个AI举行总结。FirstAI:

packagenicholas.game.chess;

classFirstAIextendsChessPlayer{

privateChessModelmodel[][][];
privateStepStackstack;
privateStepstep;
privateintlayer;
privateintturn;
protectedGameRulegameRule;

publicFirstAI(intt){
super(false);
stack=newStepStack();
layer=7;
//layer=3;
turn=t;
}

publicStringgetName(){
return"ColinRobot";
}

publicStepgetNextStep(ChessModelm[][][]){
//algo
model=m;
System.out.println("max="+getLayerValue(0));
stack.removeAll();
returnstep;
}

//getlargestvalue
privateintgetLayerValue(intlay){
if(lay>layer){
//norecursion
return-1*getModelValue();
}
intvalue=0;
intmax=-2000;
intdecision;
for(intz=0;z<3;z++){
for(inty=0;y<3;y++){
for(intx=0;x<3;x++){
if((x==1&&y==1)||model[z][y][x].isOccupied())continue;
//assumelaychessmanhere
model[z][y][x].acceptChessman(Chessman.CHESS[(turn+lay)%2]);
decision=gameRule.checkStep(model[z][y][x],model);
switch(decision){
case0://win
stack.add(newStep(model[z][y][x],decision));
value=1000;
break;
case3://tiaodan|gan
gameRule.checkDecision(model[z][y][x],1,model);
stack.add(newStep(model[z][y][x],1));
value=660;
/*value=-1*getLayerValue(lay+1);
//rollback
gameRule.undoStep(stack.remove(),model);
model[z][y][x].acceptChessman(Chessman.CHESS[(turn+lay)%2]);
//another
gameRule.checkDecision(model[z][y][x],2,model);
stack.add(newStep(model[z][y][x],2));
intb=-1*getLayerValue(lay+1);
//choosebetter
if(value<b){
value=b;
}else{
//rollback
gameRule.undoStep(stack.remove(),model);
model[z][y][x].acceptChessman(Chessman.CHESS[(turn+lay)%2]);
//redofirst
gameRule.checkDecision(model[z][y][x],1,model);
stack.add(newStep(model[z][y][x],1));
}
*/break;
case1://tiaodan
stack.add(newStep(model[z][y][x],decision));
value=660;
break;
case2://gan
stack.add(newStep(model[z][y][x],decision));
value=320;
break;
default://tiaodan,gan,none
stack.add(newStep(model[z][y][x],decision));
value=-1*getLayerValue(lay+1);
}
if(value>max){
max=value;
if(lay==0){
//firstlayer,savestep
System.out.println("max="+max);
step=stack.getTop();
}
}
//removechessman
gameRule.undoStep(stack.remove(),model);
if(max==1000)returnmax;
}
}
}
returnmax;
}

privateintgetModelValue(){
return3;
}

publicvoidsetGameRule(GameRulerule){
gameRule=rule;
}
}

FirstAI间接承继ChessPlayer,今后将转为直接承继。接纳最年夜最小深度优先搜刮,停止对某分支(仅以后条理)的搜刮的两个前提为:A.该条理玩家赢。B.最深搜刮条理。最深搜刮条理时将前往对场合排场的评价值(未计划,一概前往3,暗示落子得3分。)。

前面的计划,除BitBoard完成棋盘外必要思索几个成绩:
1)搜刮的条理。针对第一步着法,强迫往除部分有关分支(x+y>2),再将搜刮条理设置为7,便可失掉准确的着法。因而估量最年夜的搜刮条理设置为7便可。
2)算法的改善。即便搜刮条理仅为7,盘算一步也要思索46亿种大概性,假定每种大概性必要60次运算,以我的本本的设置必要三分钟。是不是计划残局库(盘算标明部分落子唯一独一应手);别的将思索接纳别的的搜刮技能;破直将有分外的嘉奖(场合排场值>3);思索可杠可单时,单是不是必定比杠有益。
3)场合排场的估值。对照庞大,思索中。



不得不提一下的是:.net是看到java红,而开发出来的工具。
爱飞 该用户已被删除
19#
发表于 2015-5-11 22:31:40 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
山那边是海 该用户已被删除
18#
发表于 2015-5-10 21:53:45 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
老尸 该用户已被删除
17#
发表于 2015-5-10 01:25:50 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
小妖女 该用户已被删除
16#
发表于 2015-4-28 01:56:33 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
柔情似水 该用户已被删除
15#
发表于 2015-4-22 08:06:38 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
精灵巫婆 该用户已被删除
14#
发表于 2015-4-12 22:09:11 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
海妖 该用户已被删除
13#
发表于 2015-3-31 10:04:42 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
12#
发表于 2015-3-30 15:27:12 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
再见西城 该用户已被删除
11#
发表于 2015-3-30 14:45:19 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
小魔女 该用户已被删除
10#
发表于 2015-3-20 20:07:15 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
变相怪杰 该用户已被删除
9#
发表于 2015-3-16 04:00:30 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
透明 该用户已被删除
8#
 楼主| 发表于 2015-3-8 16:12:05 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-2 16:11:48 | 只看该作者
是一种突破用户端机器环境和CPU
只想知道 该用户已被删除
6#
发表于 2015-2-11 17:37:23 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
飘灵儿 该用户已被删除
5#
发表于 2015-2-6 20:54:31 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
莫相离 该用户已被删除
地板
发表于 2015-1-31 18:36:00 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
若相依 该用户已被删除
板凳
发表于 2015-1-25 12:59:51 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
谁可相欹 该用户已被删除
沙发
发表于 2015-1-24 16:48:37 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
活着的死人 该用户已被删除
楼主
发表于 2015-1-19 20:58:54 来自手机 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 11:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表