1. [附源碼]H5+js實現的游戲:俄羅斯方塊
如果你是前端開發者,那麼你一定不能錯過這個福利!我今天要向你展示一款利用HTML5和javaScript精心打造的經典游戲——俄羅斯方塊的實現。只需運行index.html文件,你就能體驗到這款由canvas技術構建的流暢游戲運行效果。
直接打開index.html,你會看到一個直觀且功能完備的俄羅斯方塊游戲。部分關鍵的JS代碼已經包含在內,讓你可以深入理解游戲背後的邏輯。對於完整的源碼文件,你可以直接聯系我獲取。
如果你對游戲開發或者HTML5技術感興趣,這款俄羅斯方塊是一個很好的學習和實踐案例。它不僅展示了前端開發的潛力,也提供了實戰經驗。如果你想要深入了解和學習,那麼這個項目絕對值得你探索。
2. js小游戲源碼
js編寫的小游戲有哪些有是有,但並不是很多,而且都是貪吃蛇之類的,非常小的游戲,即便是頁游也一樣。
能運行在瀏覽器端的語言,確實只有JS,但在開發階段,卻並不一定要使用JS寫。而是用其他語言寫,直接使用JS寫游戲,實在太自虐了。
JS本身的缺點非常嚴重,如果只是寫DOM的話,其實並沒什麼感覺,因為代碼量太少。
但如果寫類似游戲這種復雜邏輯,代碼量一變大,瞬間就令人崩潰了。弱類型,回調地獄問題,即便將來版本更新到ES10,也不可能完全解決。
如果你看過一個游戲項目的JS源碼,你會發現一個非常恐怖的現象。在代碼的最底部,有幾百個,甚至幾千個大括弧。。。。所有大型程序的JS源碼,拉到最底部,大概都是長這個樣子的:
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.Listen(127.0.0.1)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
大括弧的數量還必須絕對精準,少一個,或者多一個,都無法正常運行。。。這就是平時所說的回調地獄。由於JS項目總是函數裡面套函數,層層相套,這叫做回調函數。層數一多,就算你是N年的老手,也照樣懵比。。。。
所有的游戲項目,都比網頁特效的代碼量要多的多。。。比如寫一個鬥地主,就需要4,5萬行的JS代碼。。。。。最底部的大括弧數量,輕松上千。。。。
弱類型的缺陷更嚴重,但由於解釋起來篇幅會很長,所以這里就不提了。
所以為了避開JS本身太多的語法缺陷,一般游戲項目,都是使用其他語言編寫,最後再通過一些手段,編譯成JS。。。就如同你用一般編程語言編寫,最終運行的時候,只有1和0的道理一樣。。。在製作頁游的時候,一般都是用強類型語言編寫,最後開發完成之後,把那些強類型語言編寫的代碼,通過一些手段「轉換」成JS代碼。
「轉換」成JS代碼的方法有很多,其中在游戲行業比較主流的,一共有三種:
1,ActionScript語言,簡稱AS語言。也就是當年FLASH使用的那個語言。。。當年也曾輝煌過,後來隨著FLASH的沒落而逐漸沒落。。。但有很多H5游戲引擎,也同樣使用AS語言。比如LayaAir引擎等。
2,TypeScript語言,簡稱TS語言。由微軟出品,微軟和谷歌共同維護的一門完全符合ECMA標準的語言,可以視作JS的超集。超集這個概念怎麼理解呢?就是「所有的JS語言,同時也是TS語言,而TS比今天的JS,更像未來的JS」。就比如目前的JS版本只出到了ES6或ES7。那麼ES10是啥樣?現在並沒人見過,連ECMA組織也不知道。。。但有一點可以確定的是,它和TypeScript長的很像。而TS是包含JS的。換言之,JS本身也可以視作是TS的一部分。只是TS里的內容要遠比JS多的多。這語言主要有兩種用法,一是像AS語言一樣結合游戲引擎,比如cocoscreator,白鷺等引擎都支持。還有一種用法就是。。。結合Three.JS之類的庫,完全按照JS本身的用法去使用。
3,C#語言。雖然JS得名字裡面帶個Java。但和它長的最像的語言,卻並不是JAVA,而是C#。簡單說就是:「JS的名字和JAVA有多像,語法就和C#有多像」。所以C#也比較容易轉換成JS。但這並不是重點,重點是有一個超級牛的游戲引擎,是使用C#作為開發語言的。就是大名鼎鼎的Unity3D。Unity3D可以直接把C#編寫的游戲項目,虛擬現實項目等,編譯發布到WebGL。
求一javascript小游戲代碼。【註:不要叫我去下載,你直接給我復制過來就可以了】。thank!!
代碼比較長沒有注釋
腳本說明:
把如下代碼加入body區域中
style
.bigcell{
background-color:#aa9966;
border:4pxsolid#aa9966;
text-align:center;
}
.cell{
width:40px;
height:40px;
font-family:Verdana,Arial;
font-size:10pt;
font-weight:bold;
background-color:#996633;
color:#ffff33;
border-top:2pxsolid#aa9966;
border-left:2pxsolid#aa9966;
border-right:2pxsolid#663300;
border-bottom:2pxsolid#663300;
text-align:center;
}
.hole{
width:40px;
height:40px;
background-color:#aa9966;
text-align:center;
}
body,h1,h2,h3,.msg,capt1,capt2{font-family:Verdana,ComicSansMS,Arial;}
body{margin:0px;}
h1{font-size:28pt;font-weight:bold;margin-bottom:0px;}
h2{font-size:16pt;margin:0px;font-weight:bold;}
h3{font-size:8pt;margin:0px;font-weight:bold;}
.msg{font-size:8pt;font-weight:bold;}
.tab{cursor:hand;}
.capt1{font-size:10pt;font-weight:bold;}
.capt2{font-size:9pt;font-weight:bold;}
.capt3{font-size:14pt;font-weight:bold;color:yellow;}
.capt4{font-size:10pt;font-weight:bold;color:yellow;}
.but{font-size:9pt;font-weight:bold;height:30px;background-color:#aaaa99;}
/style
BODYonLoad="loadBoard(4)"
script
vargsize,ghrow,ghcol,gtime,gmoves,gintervalid=-1,gshuffling;
functiontoggleHelp()
{
if(butHelp.value=="HideHelp")
{
help.style.display="none";
butHelp.value="ShowHelp";
}
else
{
help.style.display="";
butHelp.value="HideHelp";
}
}
//randomnumberbetweenlowandhi
functionr(low,hi)
{
returnMath.floor((hi-low)*Math.random()+low);
}
//randomnumberbetween1andhi
functionr1(hi)
{
returnMath.floor((hi-1)*Math.random()+1);
}
//randomnumberbetween0andhi
functionr0(hi)
{
returnMath.floor((hi)*Math.random());
}
functionstartGame()
{
shuffle();
gtime=0;
gmoves=0;
tickTime();
gintervalid=setInterval("tickTime()",1000);
}
functionstopGame()
{
if(gintervalid==-1)return;
clearInterval(gintervalid);
fldStatus.innerHTML="";
gintervalid=-1;
}
functiontickTime()
{
showStatus();
gtime++;
}
functioncheckWin()
{
vari,j,s;
if(gintervalid==-1)return;//gamenotstarted!
if(!isHole(gsize-1,gsize-1))return;
for(i=0;igsize;i++)
for(j=0;jgsize;j++)
{
if(!(i==gsize-1j==gsize-1))//ignorelastblock(ideallyahole)
{
if(getValue(i,j)!=(i*gsize+j+1).toString())return;
}
}
stopGame();
s="tablecellpadding=4";
s+="trtdalign=centerclass=capt3!!CONGRATS!!/td/tr";
s+="trclass=capt4tdalign=centerYouhavedoneitin"+gtime+"secs";
s+="with"+gmoves+"moves!/td/tr";
s+="trtdalign=centerclass=capt4Yourspeedis"+Math.round(1000*gmoves/gtime)/1000+"moves/sec/td/tr";
s+="/table";
fldStatus.innerHTML=s;
//shuffle();
}
functionshowStatus()
{
fldStatus.innerHTML="Time:"+gtime+"secsMoves:"+gmoves
}
functionshowTable()
{
vari,j,s;
stopGame();
s="tableborder=3cellpadding=0cellspacing=0bgcolor='#666655'trtdclass=bigcell";
s=s+"tableborder=0cellpadding=0cellspacing=0";
for(i=0;igsize;i++)
{
s=s+"tr";
for(j=0;jgsize;j++)
{
s=s+"tdid=a_"+i+"_"+j+"onclick='move(this)'class=cell"+(i*gsize+j+1)+"/td";
}
s=s+"/tr";
}
s=s+"/table";
s=s+"/td/tr/table";
returns;
}
functiongetCell(row,col)
{
returneval("a_"+row+"_"+col);
}
functionsetValue(row,col,val)
{
varv=getCell(row,col);
v.innerHTML=val;
v.className="cell";
}
functiongetValue(row,col)
{
//alert(row+","+col);
varv=getCell(row,col);
returnv.innerHTML;
}
functionsetHole(row,col)
{
varv=getCell(row,col);
v.innerHTML="";
v.className="hole";
ghrow=row;
ghcol=col;
}
functiongetRow(obj)
{
vara=obj.id.split("_");
returna[1];
}
functiongetCol(obj)
{
vara=obj.id.split("_");
returna[2];
}
functionisHole(row,col)
{
return(row==ghrowcol==ghcol)?true:false;
}
functiongetHoleInRow(row)
{
vari;
return(row==ghrow)?ghcol:-1;
}
functiongetHoleInCol(col)
{
vari;
return(col==ghcol)?ghrow:-1;
}
functionshiftHoleRow(src,dest,row)
{
vari;
//!
src=parseInt(src);
dest=parseInt(dest);
if(srcdest)
{
for(i=src;idest;i++)
{
setValue(row,i,getValue(row,i+1));
setHole(row,i+1);
}
}
if(destsrc)
{
for(i=src;idest;i--)
{
setValue(row,i,getValue(row,i-1));
setHole(row,i-1);
}
}
}
functionshiftHoleCol(src,dest,col)
{
vari;
//!
src=parseInt(src);
dest=parseInt(dest);
if(srcdest)
{//alert("src="+src+"dest="+dest+"col="+col);
for(i=src;idest;i++)
{//alert(parseInt(i)+1);
setValue(i,col,getValue(i+1,col));
setHole(i+1,col);
}
}
if(destsrc)
{
for(i=src;idest;i--)
{
setValue(i,col,getValue(i-1,col));
setHole(i-1,col);
}
}
}
functionmove(obj)
{
varr,c,hr,hc;
if(gintervalid==-1!gshuffling)
{
alert('請點擊"開始游戲"按鈕')
return;
}
r=getRow(obj);
c=getCol(obj);
if(isHole(r,c))return;
hc=getHoleInRow(r);
if(hc!=-1)
{
shiftHoleRow(hc,c,r);
gmoves++;
checkWin();
return;
}
hr=getHoleInCol(c);
if(hr!=-1)
{
shiftHoleCol(hr,r,c);
gmoves++;
checkWin();
return;
}
}
functionshuffle()
{
vart,i,j,s,frac;
gshuffling=true;
frac=100.0/(gsize*(gsize+10));
s="%";
for(i=0;igsize;i++)
{
s+="|";
for(j=0;jgsize+10;j++)
{
window.status="Loading"+Math.round((i*(gsize+10)+j)*frac)+s
if(j%2==0)
{
t=r0(gsize);
while(t==ghrow)t=r0(gsize);//skipholes
getCell(t,ghcol).click();
}
else
{
t=r0(gsize);
while(t==ghcol)t=r0(gsize);//skipholes
getCell(ghrow,t).click();
}
}
}
window.status="";
gshuffling=false;
}
functionloadBoard(size)
{
gsize=size;
board.innerHTML=showTable(gsize);
setHole(gsize-1,gsize-1);
//shuffle();
}
/script
divid=test/div
tablecellpadding=4
trtdalign=center
b請選擇難度:/B
selectid=levelonchange="loadBoard(parseInt(level.value))"
optionvalue=ƉƉ/option
optionvalue=Ɗ'selected4/option
script
for(vari=5;i=10;i++)
{
document.write("optionvalue='"+i+"'"+i+"/option");
}
/script
/select
/td/tr
trtdalign=center
inputtype=buttonclass=butvalue="開始游戲"onclick="startGame();"
trtdalign=centerid=fldStatusclass=capt2
/td/tr
/table
divid=board/div
javascript源碼移植到微信小游戲?微信小程序是運行在自身內置瀏覽器的一種程序語言,它對正常的html、css、js做了以下要求:
1、html在小程序里後綴已經改成了wxml,html中的div、p、a基本上所有的html標簽都去除或者做了改動,如div可以用view,img改成了image,所以前端html標簽你需要替換成wxml內置的標簽
2、其次css也變成了wxss,樣式定義跟原來到倒是完全以後,改下後綴即可
3、js也就是小程序的邏輯層,需要按照小程序的規定去寫,具體的可以參照網頁鏈接給的官方文檔去操作
4、總體來說換了一種格式去寫,移植過去也不是太復雜
3. 植物大戰僵屍的JS源代碼
jsp是web後台編程語言,做不出植物大戰僵屍這種游戲來。
有網友自行用javascript模仿了植物大戰僵屍游戲,網路:js版植物大戰僵屍,自己查看源文件
4. js怎麼編譯成JSC
l5是一個用JS來開發游戲的框架,通過javascript Binding的方式可以將游戲編譯到手機上。這對前端開發人員來說非常方便,開發效率也比使用c++開發要快的多。
jsb模式下是通過打包spidermonkey來運行JS代碼的。由於JS是一個解釋型的語言,所以是把js當作assets直接拷貝進去的。帶來的問題就是將apk包解壓後就可以直接拿到js的源代碼。
幸好官方出了一個cocos2d-console的工具,通過該工具可以將js編譯為位元組碼。該工具在官方發布包的tools目錄下。
那如何在發布的時候自動