-130-127.0.0.1 1.htmll

28777人阅读
【Lufylegend.js】(34)
【游戏开发】(21)
【Html5&JavaScript】(53)
【算法研究】(5)
一,什么是TicTacToe(井字棋)本游戏为在下用lufylegend开发的第二款小游戏。此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎。可能我说了半天,对它名字不熟悉的朋友也不懂我在说神马。那没关系,我就引用Wiki(维基百科)的介绍作为大家对它名字的认识,顺便也勾起我们儿时的回忆:井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。如果双方都下得正确无误,将得和局。这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一位玩家在角位行第一子的话赢面最大(见图一),第二位玩家若是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇”。图一二,游戏在哪里玩?相信大家看了介绍就对井字棋有了了解。现在我用html5配合开源游戏引擎lufylegend开发出了这一款游戏,并实现了人工智能(AI)确保游戏中玩家能棋缝对手。接下来是游戏在线试玩和下载源码的地址:下载地址(含源代码):在线试玩地址:三,游戏截图四,游戏引擎本游戏运用国产的lufylegend引擎,版本为1.6.1,如果大家感兴趣可以去官网看看lufylegend官方网站:lufylegend&API文档:上面有此引擎的下载和API介绍。关于用lufylegend开发游戏的其他文章:五,算法&代码讲解先来个游戏初始化:init(30,&mylegend&,390,420,main);为了方便操作游戏中的一些数据,我们设定许多变量:var backLayer,chessLayer,overL
var statusText = new LTextField();
var statusContent=&您先请吧……&;
var matrix = [
var usersTurn =
var step = 0;
var title = &井字棋&;
var introduction = &&
var infoArr = [title,introduction];第一行是层变量;第二行是实例化的文本框对象,用来显示文字;第三行是当前显示信息的文字,比如该哪方走,哪方赢了等,会根据不同情况改变。matrix是用来保存当前棋盘数据的数组,如果下一步棋,就会更改其中数据,顺便也说一下,为了区分【空白格子】,【我方下的位置】,【电脑下的位置】,我们用-1来代表【我方下的位置】,用0来代表【空白格子】,1来代表【电脑下的位置】;看官且记,这-1,0,1在棋盘数组中便各有了代表意义。userTurn是用来判断玩家是否可以下棋;step是用来表示走的步数,用来判断棋盘是否下满;title,introduction还有infoArr原本是用来制作关于界面的,结果做到最后就算了,大家直接忽视掉吧。接下来就是main函数,由于没有图片,所以就没有加载部分了:function main(){
gameInit();
addText();
addLattice();
}main调用的几个函数如下:function gameInit(){
initLayer();
addEvent();
}function addText(){
statusText.size = 15;
statusText.weight = &bold&;
statusText.color = &white&;
statusText.text = statusC
statusText.x = (LGlobal.width-statusText.getWidth())*0.5;
statusText.y = 393;
overLayer.addChild(statusText);
}function addLattice(){
backLayer.graphics.drawRect(10,&dimgray&,[0,0,390,420],true,&dimgray&);
backLayer.graphics.drawRect(10,&dimgray&,[0,0,390,390],true,&lavender&);
for(var i=0;i&3;i++){
backLayer.graphics.drawLine(3,&dimgray&,[130*i,0,130*i,390]);
for(var i=0;i&3;i++){
backLayer.graphics.drawLine(3,&dimgray&,[0,130*i,390,130*i]);
}解释一下他们的功能。首先,gameInit是用来初始化游戏的,包括初始化层一类的东西。addText是用来加下面文字的。addLattice使用来画棋盘的。代码很简单,参照lufylegend API文档看一下就能看懂。接下来我们来看gameInit里调用的函数:function initLayer(){
backLayer = new LSprite();
addChild(backLayer);
chessLayer = new LSprite();
backLayer.addChild(chessLayer);
overLayer = new LSprite();
backLayer.addChild(overLayer);
function addEvent(){
backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,onDown);
}initLayer是用来实例化层的,说明了一点就是实例化LSprite。addEvent用来加点击事件。然后接下来就来看看事件触发的onDown:function onDown(){
var mouseX,mouseY;
mouseX = event.offsetX;
mouseY = event.offsetY;
var partX = Math.floor(mouseX/130);
var partY = Math.floor(mouseY/130);
if(matrix[partX][partY]==0){
usersTurn=
matrix[partX][partY]=-1;
update(partX,partY);
if(win(partX,partY)){
statusContent = &帅呆了,你赢啦!点击屏幕重开游戏。&;
gameover();
addText();
}else if(isEnd()){
statusContent = &平局啦~~点击屏幕重开游戏。&;
gameover();
addText();
statusContent = &电脑正在思考中……&;
addText();
computerThink();
}这个函数要做的就是先取出点击位置,然后根据点的位置下一颗棋,然后将在棋盘数组中相应的位置设为-1,表示是我方走的,然后判断:下了这一步棋后的胜负或者平局情况,并且调用相应的函数和显示相应的文字。判断赢,我们用win函数,代码如下:function win(x,y){
if(Math.abs(matrix[x][0]+matrix[x][1]+matrix[x][2])==3){
if(Math.abs(matrix[0][y]+matrix[1][y]+matrix[2][y])==3){
if(Math.abs(matrix[0][0]+matrix[1][1]+matrix[2][2])==3){
if(Math.abs(matrix[2][0]+matrix[1][1]+matrix[0][2])==3){
}首先我们判断第x行,第0,1,2列的数字相加的绝对值是否为3(由于这个函数在下面还要用到,所以我们要做得通用性,所以就用了绝对值)。为什么等于3呢?因为看官是否记得我们上面说的:-1代表【我方下的位置】,0代表【空白格子】,1代表【电脑下的位置】。但凡是下了棋的地方,值总是1或者-1,所以假如有三个同一方棋子连在一起,那这几个值加起来的绝对值一定是3。因此就返回true代表赢了。如果一直判断到最后都没有,就返回false,代表还没有赢。我们用isEnd判断平局,代码如下:function isEnd(){
return step&=9;
}代码很简单,就是判断棋盘占满没有。其中用到updata负责更新棋盘。代码如下:function update(x,y){
var v = matrix[x][y];
chessLayer.graphics.drawArc(10,&green&,[x*130+65,y*130+65,40,0,2*Math.PI]);
}else if(v&0){
chessLayer.graphics.drawLine(20,&#CC0000&,[130*x+30,130*y+30,130*(x+1)-30,130*(y+1)-30]);
chessLayer.graphics.drawLine(20,&#CC0000&,[130*(x+1)-30,130*y+30,130*x+30,130*(y+1)-30]);
}以上的代码也很好理解,就是先取出画的那一点是什么,如果是我方画的(在棋盘数组就是-1),在判断时,取出的值如果小于0,就画个叉叉。如果大于0也就是代表电脑画的(在棋盘数组中代表1),就画个圆。onDown中还用到了gameOver函数,代码如下:function gameover(){
backLayer.removeEventListener(LMouseEvent.MOUSE_DOWN,onDown);
backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,function(){
chessLayer.removeAllChild();
backLayer.removeChild(chessLayer);
backLayer.removeChild(overLayer);
removeChild(backLayer);
matrix = [
statusContent = &您先请吧……&;
addText();
}看似代码有点长,其实很简单,就是简单的移除界面上的一切对象,并且把一些值恢复为默认值。还有onDown中的computerThink函数,代码如下:function computerThink(){
var b = best();
var x = b.x;
var y = b.y;
matrix[x][y]=1;
update(x,y);
if(win(x,y)){
statusContent = &哈哈你输了!点击屏幕重开游戏。&;
gameover();
addText();
}else if(isEnd()){
statusContent = &平局啦~~点击屏幕重开游戏。&;
gameover();
addText();
statusContent = &该你了!!!&;
addText();
}首先这个函数用了best函数,这个函数会返回一个要下的位置,然后我们把在棋盘数组中相应的位置设置为1,并且把走的步数+1。然后在相应位置画上。然后判断是否赢了或者平局,或者没赢没输没平局。best是电脑AI算法部分,代码如下:function best(){
var bestv=0;
for(var x=0;x&3;x++){
for(var y=0;y&3;y++){
if(matrix[x][y]==0){
matrix[x][y] = 1;
if(win(x,y)){
matrix[x][y] = 0;
return {'x':x,'y':y,'v':1000};
}else if(isEnd()){
matrix[x][y]=0;
return {'x':x,'y':y,'v':0};
var v=worst().v;
matrix[x][y]=0;
if(bestx==null || v&=bestv){
return {'x':bestx,'y':besty,'v':bestv};
}算法的思路如下:首先我们遍历棋盘数组,然后判断遍历到的那格如果是空的(也就值是0)就先假设画上,并且将在棋盘数组中相应的位置设为1,表示电脑是下的,然后将走的步数+1。普通的操作就完了,接下来就是给下的这一步评分阶段,代码如下:if(win(x,y)){
matrix[x][y] = 0;
return {'x':x,'y':y,'v':1000};
}else if(isEnd()){
matrix[x][y]=0;
return {'x':x,'y':y,'v':0};
var v=worst().v;
matrix[x][y]=0;
if(bestx==null || v&=bestv){
}首先我们判断一下如果下了这一步,是否就赢了,如果是,就先把步数改回去,并且把棋盘数组改为下这一步之前的棋盘数组(因为我们在computerThink里要改一道,所以先改回去,避免改重了),然后返回这一步的位置,并且评分为1000。最后这个过程用return来实现,return是神马,我想就不用说了吧。判断是否赢了,我们用了win函数,上面已经说过了。但是万一下了这一步没赢怎么办,就接着判断是否下了成平局,怎么才能成平局呢?就是把整个棋盘占满且对方没有赢,自己也没有赢就是平局。由于如果别人赢了,就不会进行电脑AI,也就不会调用best函数,换句话说就是不可能进行到这一步;如果是电脑赢了,在上级判断中已经做了相应操作而且用return已经推出函数了,也不会运行到此步,因此直接判断占满没有就可以了。因此用到isEnd函数,上面也用到过,并且讲到过,这里不罗嗦。万一上面的两种情况都不对怎么办?那就随便下个吧。但是随便下也不能乱下。因此用到了worst来选择“随便下”最好的位置。代码如下:function worst(){
var bestv = 0;
for(var x=0;x&3;x++){
for(var y=0;y&3;y++){
if(matrix[x][y] == 0){
matrix[x][y] = -1;
if(win(x,y)){
matrix[x][y] = 0;
return {'x':x,'y':y,'v':-1000};
}else if(isEnd()){
matrix[x][y]=0;
return {'x':x,'y':y,'v':0};;
var v=best().v;
matrix[x][y]=0;
if(bestx==null || v&=bestv){
return {'x':bestx,'y':besty,'v':bestv};
}这个函数和best是反着来的,它是假设下了某一步后,别人会赢或者平局。如果别人走那步会赢,就返回这个位置,把这个位置先占住。平局和对方赢是一样的原理,就是见哪里不对就填哪里。最后的判读是在对方不可能赢的情况下采取的,就是通过best函数取最好的。这个best函数在上面讲过了。不作解释了~~通过worst这个函数会返回几个值,第一个和第二个是随便下的位置,最后一个是评分。在best中我们把这几个返回值接收到,并且通过评分判断这个选择是否比平局的结果还要差,再返回给computerThink这个函数来绘画布局。因此这个过程很绕。大家要搞清楚关系,搞清楚了就不难了。本次讲解就讲到这里。多谢大家捧场!若游戏异常,请及时联系我。谢谢大家的支持!----------------------------------------------------------------欢迎大家转载我的文章。转载请注明:转自欢迎继续关注我的博客
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:674990次
积分:7958
积分:7958
排名:第2007名
原创:66篇
评论:822条
基于HTML5和lufylegend.js开源引擎的一款类似于贪吃蛇的游戏。相信这款游戏能给你带来欲速则不达、近在咫尺却无法接触地虐心体验!
本游戏基于开源HTML5引擎lufylegend.js开发,是一款跨平台休闲类翻牌游戏。本游戏一共有五个关卡,随着关卡难度的增加会有更多卡牌出现。快来考验一下自己的记忆力吧~
阅读:64341
文章:20篇
阅读:275648
(1)(2)(3)(3)(1)(2)(1)(2)(1)(1)(1)(1)(3)(1)(1)(1)(1)(1)(1)(1)(2)(1)(3)(3)(6)(3)(4)(3)(2)(1)(1)(4)(4)HTML特殊字符大全 - HTML教程 - SJY之家
十进制编码
十进制编码
十进制编码
十进制编码
如以上列表中不包含,可运行下面代码查看全部字符(运行较慢,请耐心等待)
另外,不同浏览器显示的可能会有所不同。
&!DOCTYPE HTML&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8&&
&title&HTML特殊字符大全_萤火开发网&/title&
var html = [];
html.push(&&table border='1' cellpadding='5' cellspacing='0' bordercolor='#77a594' style='border-collapse:collapse'&&);
html.push(&&tr&&td width='40'&符号&/td&&td width='80'&编码&/td&&td width='40'&符号&/td&&td width='80'&编码&/td&&td width='40'&符号&/td&&td width='80'&编码&/td&&td width='40'&符号&/td&&td width='80'&编码&/td&&/tr&&);
for(var i = 1; i &= 65536; i++){
if(i % 4 == 1){
html.push(&&tr&&);
html.push(&&td&&#& + i + &;&/td&&td&&#& + i + &;&/td&&);
if(i % 4 == 0){
html.push(&&/tr&&);
document.write(html.join(&&));
&/html&欢迎转载,但请保留原文地址
最多浏览的文档1.查看公共账号:&&洛杉矶华人资讯网2.搜索账号:&&chineseinla_com
地址: 1351 S Grove Ave, Unit 109,
Ontario, CA 91761
电话: 626-657--21:00(西部时间)
(周一到周五, 周六周日休息)
请问如何填写130 和485的表格?
首先先感谢一下论坛里的一些热心人,亨特,LUCY,和MRS.LA等等,之前一直是潜水从来都没发过任何帖子,从6年前办理BH到上个周入籍面谈都是看着华人网上的帖子一点一点的进行到完成,再次感谢。下一步是申请我学生身份过期1年多的老婆所需要的一系列东西,请问如何填写130 和485的表格?有没有些参照,例如曾经亨特写过的正面填N400的中文表,PS:我 的N400就是照着那个填的有些问题还需要大虾们的慷慨帮助,谢谢谢谢!GOD BLESS YOU~!顺便问一下现在公民申请配偶进度如何,因为到12月份我们的婚姻就满2年了,所以想问问什么时候递表格最好。
可以看看这两个帖子申请进度可以上移民局网站查询,现在差不多半年左右
怎样填写I-130表手把手帮着填 I-485 和 G-325A 支票可以用回形针(曲别针固定)夹住,所有文件都不能用订书钉装订。 你们可以在递交I-130与I-485申请时,在该材料前加上一份G-1145(免费) 收件之电子确认 2010年2月,移民局又调整了绿卡的申请地址。涉及的表格有 I-485丶I-131丶I-765,包括原来的 I-130,现在都寄往三大收件中心:Chicago (IL), Phoenix (AZ), and Lewisville (TX). 凡是寄往上述 lockbox 的申请,不论是用的邮局的信箱地址,还是街道地址,申请人都可以通过附加 G-1145 表格,来第一时间获悉申请的收件确认。 表格的版本号是 Form G-1145, E-Notification of Application/Petition Acceptance (Rev. 09/14/09)Y Expires 03/31/10. 表格和填表说明下载
表格简单,填上你的姓名,以及 email。 当你的申请在移民局被输入进系统的同时,移民局同时电子通知申请人其申请的收据号,通过提供的 email 或手机号。一般三丶五天之后,申请人(或其代理律师)就收到邮寄的收件通知了。 由上可见,G-1145 的好处只是省下了收件通知的邮寄时间。如果申请在移民局有录入的延误,G-1145 也无法帮你。 G-1145 表格上没有指明你要求电子确认的申请表格号。当你有多份表格同时递交,需要电子确认时,只需附一份 G-1145 表,即使这些表格是由不同的申请人而填写的。 G-1145 表放置在申请的最上面。 $420元支票一张,支票上注明 Payable to;: U.S. Department of Homeland Security for form I-130。 $1070元支票一张,支票上注明 Payable to : U.S. Department of Homeland Security for form I-485 I-130清单(附中文翻译,仅供参考) I-130 Cover Letter [DATE] Nature of the submission: I-130 ORIGINAL SUBMISSION To Whom It May Concern: Enclosed please find my Form I-130 Petition for Alien Relative Visa for [BENEFICIARY NAME], and supporting documents. Contents include: I-130 Checklist : Payment in the amount of $420 G-1145 e-notification for petitioner with form I-130: Petition for Alien Relative Immigrant Visa Application Photos (Petitioner) Immigrant Visa Application Photos (Beneficiary) G-325A (Petitioner) G-325A (Beneficiary) Copy of birth certificate/US passport (Petitioner) Copy of birth notarization/chinese passport (Beneficiary) Copy of divorce certificate (Beneficiary ) Copy of mother-daughter relationship certificate FC-029 (Petitioner) Copies of documents submitted are exact photocopies of unaltered documents and I understand that I may be required to submit original documents to an Immigration or Consular officer at a later date. Signature: Typed or Printed Name: I-130清单 [日期] I-130最初提交:提交性质 敬启者: 随信附上我的I-130表格|亲属移民签证[收款人姓名] ,及证明文件。 内容包括: I-130的清单: 付款为$ 420 对于申诉人G- 1145电子通知书与I-130表格:亲属移民 移民签证申请照片(呈请人) 移民签证申请照片(受益人) G- 325A (呈请人) G- 325A (受益人) 出生证明(入籍纸)/美国护照(呈请人)复制 出生公证/中国护照复印件(受益人)复制 离婚证公证——如适用(受益人)复制 FC- 029 (呈请人)下载
签名: FC-029 大致内容: 提交完全相同的原始文件的副本,我明白,在稍后的日期我可能会被要求提交文件正本,给移民局或领事馆。 Form I-485 Checklist A check of $1070 for filing Fee including $85 biometrics fee. Form I-485. Copy of birth notarization (Beneficiary) Copy of mother-daughter relationship certificate Two 2" x 2" photos (name on back in pencil). I-693, Medical Exam. G-325A, Biographical Information. Copy of Form I-94 Copy of passport biographical page and visa stamps. I-864 certificate. I-864A,Affidavit of Support fr W-2 of latest 3 year ( ,2013). Paycheck stab for Employer letter I-485表格清单 支票为$1070的申请费,包括85美元生物测定费。 I-485表格。 出生公证复印件(受益人) 结婚证公证两张2“×2”(受益人)的照片(背面用铅笔名)。 I-693,体检 输入邮编找体检医生
G-325A,履历资料。 I-94表格的副本—— 电子I-94下载 !护照照片页和签证印章的副本。 I-864证书(主担保人) 附护照及入籍纸复印件 最新3年(2010年,2011年,2012)W-2。 最近3个月薪水条 雇主信 (样本):
移民局收表的地址,通常都提供两个。一个是信箱地址,这个 PO Box 是邮局的,只有 USPS 才能用。象别的 Carriers,象 FedEx丶UPS 等,是用不了邮局的信箱的。使用它们的服务,你需要用移民局的街道地址。 对于邮局信箱地址的信件,FedEx/UPS 通常都不接受。如果收了,这样的信件也只是送到目的地附近的 station,然后通过邮局寄份领取通知去邮局的信箱。所以,PO Box 是会耽误时间的。 另外,USCIS 说过每天只取一次信箱,如果你寄往 PO Box 地址的申请,刚好是在 USCIS 取件之后到的,那就会迟一天的。 如果你是特别赶时间,就用移民局的街道地址,不管是用邮局的服务,还是别的。 使用 USPS 的 service,不一定要 Express,除非是特别赶时间。(Priority mail 优先邮件) 就挺好了,2-3 天,经济实惠,窗口服务时一定要加上 (Delivery Confirmation 交货确认) Track and Confirm () 有邮件编号吗?到这里查询就知道你的邮件现在在哪里啰! 不管邮局/快递都用以下地址邮寄: USCIS Attn: FBAS 131 South Dearborn - 3rd Floor Chicago, IL
22. Complete the information below if your relative is in the United States and will apply for adjustment of status. 受益人不在境内,或准备在广州申请移民签证者,略过此问 Your relative is in the United States and will apply for adjustment of status to that of a lawful permanent resident at the USCIS office in: 受益人是在境内申请状态调整,请指明移民局地点(请选择一个将来面试方便的移民局办公室所在的城市) (City) 城市 xxxx (State) 州 California 输入你们家的邮编,看看附近的移民局办公室在何方。
I-485 Part 2. Application type. [a] An immigrant petition giving me an immediately available immigrant visa number that has been approved I-130的受益人,--即所谓主申请人 (I-130已经批了,还没有批,与 I-485 同时提交,均同*)
My spouse or parent applied for adjustment of status or was granted lawful permanent residence in an immigrant visa category that allows derivative status for spouses and children I-130的受益人的配偶或子女,--副申请人 I-130填表样板下载
I-864表格下载(带中文填表注释)
I-325A表中文样板网址:
I-485表样本链接:
邮寄前再仔细检查各表格和资料,该填写要填写丶该签名的要签名丶该提供的证明材料要齐全,并附上递交材料清单一份,按清单顺序排列整齐,把支票放在第一页上,为移民局审理提供方便。 在表格邮寄之前,请把所有的文件都复印一份。如果同时提交多份表格,请每份表格各付一张个人支票。这样,就不会因为某一份申请出现问题,而招致全部退件的悲惨局面。 按照移民局的要求,支票抬头写 "U.S. Department of Homeland Security", 不要用缩写 "USDHS" or "DHS". 相片背面用铅笔写上名字,放在塑料袋内,并贴上写有“某某人相片”的标签, 将该塑料袋别在一张纸上,放在对应的G-325A表上。 最后一点就是在填表时一定要小心认真,寄出表格前至少要重新审查几遍.尽量避免表格填写错误然后着急找补救方法的情况发生。移民局没要求补件,自己不要主动补材料。
_________________做个好人心正身安魂梦稳,
行些善事天知地鉴鬼神钦。
网罗天下事,世界被网罗。
免责声明:
所有相关信息,仅供参考。
...... 到12月份我们的婚姻就满2年了,所以想问问什么时候递表格最好。
By&summer82
只要面谈时已经满两年的婚姻,拿到的就是十年正式绿卡。
_________________Disclaimer: - The information provided is of a general nature and is not intended to be construed as legal advice.
所有相关信息,仅供参考。
...... 到12月份我们的婚姻就满2年了,所以想问问什么时候递表格最好。
只要面谈时已经满两年的婚姻,拿到的就是十年正式绿卡。
首先先谢谢您的回复,然后想问问我们最好什么时候递材料,因为我们在外州,也希望面谈的时候到两年也不想拖太久
想问问我们最好什么时候递材料,因为我们在外州,也希望面谈的时候到两年也不想拖太久
By summer82
人算不如天算,想直接取得永绿,该时间点真的很难拿捏。公民申请配偶移民取得绿卡快则半年,慢则一年。快则1-2个月面谈,。慢则......抓紧做好入籍宣誓及申请材料的准备工作。
_________________做个好人心正身安魂梦稳,
行些善事天知地鉴鬼神钦。
网罗天下事,世界被网罗。
免责声明:
所有相关信息,仅供参考。
请问1:I-130丶I-485丶I-765丶I-131分别要几张照片啊?2:FC-029现在还需要吗?3:I-130要附夫妻两人的G-325A表格,I-485也要附受益人的G-325A吗?看到有的没有附这个表。
点评这篇文章
点评这篇文章
0个人参与评分
ChineseInLA总共有35809条点评, 28867次评分

我要回帖

更多关于 1.html 的文章

 

随机推荐