新聞中心
JavaScript怎么設(shè)計(jì)一個(gè)數(shù)獨(dú)游戲?
createSdArr:function(){
創(chuàng)新互聯(lián)公司主營(yíng)企業(yè)營(yíng)銷型網(wǎng)站建設(shè),為眾多企業(yè)提供了品牌網(wǎng)站建設(shè)服務(wù),建網(wǎng)站哪家好?擁有多年的全網(wǎng)整合營(yíng)銷推廣流程,能夠?yàn)槠髽I(yè)定制化制作網(wǎng)站服務(wù),在公司網(wǎng)站建設(shè)維護(hù)方面成績(jī)突出。
//生成數(shù)獨(dú)數(shù)組。
var?that?=?this;
try{
this.sdArr?=?[];
this.setThird(2,2);
this.setThird(5,5);
this.setThird(8,8);
var?allNum?=?[1,2,3,4,5,6,7,8,9];
outerfor:
for(var?i=1;i=9;i++){
innerfor:
for(var?j=1;j=9;j++){
if(this.sdArr[parseInt(i+''+j)]){
continue?innerfor;
}
var?XArr?=?this.getXArr(j,this.sdArr);
var?YArr?=?this.getYArr(i,this.sdArr);
var?thArr?=?this.getThArr(i,j,this.sdArr);
var?arr?=?getConnect(getConnect(XArr,YArr),thArr);
var?ableArr?=?arrMinus(allNum,arr);
if(ableArr.length?==?0){
this.createSdArr();
return;
break?outerfor;
}
var?item;
//如果生成的重復(fù)了就重新生成。
do{
item?=?ableArr[getRandom(ableArr.length)-1];
}while(($.inArray(item,?arr)-1));
this.sdArr[parseInt(i+''+j)]?=?item;
}
}
this.backupSdArr?=?this.sdArr.slice();
}catch(e){
//如果因?yàn)槌鰹g覽器的棧限制出錯(cuò),就重新運(yùn)行。
that.createSdArr();
}
},
getXArr:function(j,sdArr){
//獲取所在行的值。
var?arr?=?[];
for(var?a?=1;a=9;a++){
if(this.sdArr[parseInt(a+""+j)]){
arr.push(sdArr[parseInt(a+""+j)])
}
}
return?arr;
},
getYArr:function(i,sdArr){
//獲取所在列的值。
var?arr?=?[];
for(var?a?=1;a=9;a++){
if(sdArr[parseInt(i+''+a)]){
arr.push(sdArr[parseInt(i+''+a)])
}
}
return?arr;
},
getThArr:function(i,j,sdArr){
//獲取所在三宮格的值。
var?arr?=?[];
var?cenNum?=?this.getTh(i,j);
var?thIndexArr?=?[cenNum-11,cenNum-1,cenNum+9,cenNum-10,cenNum,cenNum+10,cenNum-9,cenNum+1,cenNum+11];
for(var?a?=0;a9;a++){
if(sdArr[thIndexArr[a]]){
arr.push(sdArr[thIndexArr[a]]);
}
}
return?arr;
},
getTh:function(i,j){
//獲取所在三宮格的中間位坐標(biāo)。
var?cenArr?=?[22,52,82,25,55,85,28,58,88];
var?index?=?(Math.ceil(j/3)-1)?*?3?+Math.ceil(i/3)?-1;
var?cenNum?=?cenArr[index];
return?cenNum;
},
setThird:function(i,j){
//為對(duì)角線上的三個(gè)三宮格隨機(jī)生成。
var?numArr?=?[1,2,3,4,5,6,7,8,9];
var?sortedNumArr=?numArr.sort(function(){return?Math.random()-0.50?-1:1});
var?cenNum?=?parseInt(i+''+j);
var?thIndexArr?=?[cenNum-11,cenNum-1,cenNum+9,cenNum-10,cenNum,cenNum+10,cenNum-9,cenNum+1,cenNum+11];
for(var?a=0;a9;a++){
this.sdArr[thIndexArr[a]]?=?sortedNumArr[a];
}
}
我想學(xué)習(xí)編程,但是不知道該怎么開始。
我建議最好是從基礎(chǔ)入手,而不是一開始就進(jìn)行可視化編程。雖然如今國(guó)內(nèi)絕大多數(shù)pc都是使用的windows,但是畢竟這知識(shí)這個(gè)世界的冰山一角。扎實(shí)的基礎(chǔ)自然會(huì)更有用處。編程其實(shí)重要的是程序思維,然后是算法和數(shù)據(jù)結(jié)構(gòu)。這些都是超出語(yǔ)言的,就是說不管是學(xué)c學(xué)java學(xué)delphi還是別的什么,這一部分都是一致的。因此培養(yǎng)這部分的知識(shí)可以說是一本萬(wàn)利的事情。初學(xué)肯定是通過語(yǔ)言熟悉思想熟悉算法和數(shù)據(jù)結(jié)構(gòu),到一定的時(shí)候就是純粹的思想和算法數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí),便已經(jīng)脫離程序語(yǔ)言了。經(jīng)歷過這些階段,換一種語(yǔ)言不過是重新了解一下描述的方式,就像你了解了中文思維,山東話和四川話的差別就不會(huì)太大;了解了拉丁語(yǔ)的思維,整個(gè)語(yǔ)系的語(yǔ)言都不過是簡(jiǎn)簡(jiǎn)單單的記憶工作,應(yīng)用就好。入門的語(yǔ)言,理論上是怎么方便學(xué)哪個(gè),看那個(gè)順眼學(xué)哪個(gè)。當(dāng)然這里面還是有不同的推薦的。一般來說我比較推薦pascal、c/c++、java。并不是因?yàn)檫@三個(gè)東西很通用很有前途,而是它們實(shí)在是嚴(yán)整而有規(guī)則(c/c++還顯得稍微的寬松了一點(diǎn)),而嚴(yán)謹(jǐn)?shù)恼Z(yǔ)法要求和明確的概念區(qū)分是有利于編程思維的形成和算法數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)的。同樣的因?yàn)檫@個(gè)理由我不推薦vb,而并不是因?yàn)樗δ懿粡?qiáng)大(事實(shí)上vb在windows環(huán)境中是相當(dāng)牛的語(yǔ)言)另外一個(gè)建議是,如果學(xué)c,不要一開始就用vc。ms提供的很多東西很方便,有很多很簡(jiǎn)單的實(shí)現(xiàn)方法,但是它們不標(biāo)準(zhǔn)。vc與ansi
c標(biāo)準(zhǔn)是有很大的差距的。首先一個(gè)不遵循標(biāo)準(zhǔn)的c/c++程序是不通用的,換個(gè)編譯器說不定就不被承認(rèn)了。所以我非常推崇gcc,理由之一是它完全符合
ansi
c標(biāo)準(zhǔn),無(wú)論它的c還是c++編譯器都很嚴(yán)整,功能上一點(diǎn)也不缺乏(有人說gcc不能做圖形界面的程序,這一點(diǎn)完全錯(cuò)誤,到處都有的qt庫(kù)和gtk庫(kù)都能做出很好的界面),另外一個(gè)理由便是它免費(fèi),畢竟稍微大一點(diǎn)的軟件企業(yè)就不會(huì)屈從與微軟的編譯器和平臺(tái),而一個(gè)免費(fèi)的c編譯器無(wú)疑可以創(chuàng)造更多的利益;就算要轉(zhuǎn)vc,標(biāo)準(zhǔn)的c程序也是幾乎不要作任何改動(dòng)的。當(dāng)然,這一切的前提是,你真的很想很好的學(xué)編程,做一個(gè)這方面的精英。如果只不過是興趣,或者只是想拿一個(gè)ms的工程師認(rèn)證然后在國(guó)內(nèi)企業(yè)找份諸如設(shè)計(jì)vf、vb程序之類的工作,那完全可以忽略我上面的話,去找個(gè)認(rèn)證培訓(xùn)班,認(rèn)認(rèn)真真聽聽課,好好完成練習(xí),從vb或者vc入手,考好認(rèn)證是很不會(huì)太難的。畢竟現(xiàn)在很多很好的大學(xué)里都從來不缺乏計(jì)算機(jī)的課程,不會(huì)缺少算法或者編譯原理的課程,不會(huì)沒有計(jì)算機(jī)科學(xué)的研究院,而那里面出來的人一般都具備了很好的基礎(chǔ)知識(shí),會(huì)更加容易成為前面所說的精英。
關(guān)于編程語(yǔ)言的選擇問題。
編程語(yǔ)言常用的有30種左右,開始做項(xiàng)目時(shí),我們?nèi)绾芜x擇適合的編程語(yǔ)言呢?不同的編程語(yǔ)言有著不同的優(yōu)勢(shì),要根據(jù)實(shí)際項(xiàng)目的特性去選擇編程語(yǔ)言,今天給大家分享30種編程語(yǔ)言的比較選擇問題,希望能對(duì)大家有所參考的價(jià)值。本文涉及到的編程語(yǔ)言:C、C++、Java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、Python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C shell、Objective-C、PHP、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、D涉及到的工具:sed、awk、grep我們現(xiàn)在學(xué)一門語(yǔ)言,大部分是要用到了才學(xué)(基本上是中國(guó)的公司用什么我們學(xué)什么),基于興趣的不多。比如,大頭肯定是C++和java,因?yàn)檫@個(gè)最容易混飯吃。最近多玩用了Erlang,還有不少公司跟風(fēng)上了Erlang,讓這個(gè)沉默了好久的語(yǔ)言忽然被明星了。大公司一般除了C++外,都會(huì)招Java,事實(shí)上,互聯(lián)網(wǎng)公司,Java占了半壁江山(當(dāng)然,沒選java架構(gòu)的除外,有不少.net族的)。所以,生活在貧困線上的廣大中國(guó)程序猿很少有人會(huì)去看看諸如scala之類的玩意。不過作為膠水,python、perl還是有一定的用戶量的。似乎,我們生活中只有這么幾種語(yǔ)言。。。貌似,遇到一個(gè)問題,我們?cè)撨x擇什么語(yǔ)言呢?雖然每個(gè)語(yǔ)言本質(zhì)上都是圖靈完備的,但是能用prolog寫出來的東西,如果用別的語(yǔ)言寫,會(huì)無(wú)比痛苦。這就是不同語(yǔ)言存在的原因:不同的問題,不同思考方式(編程范式)。解決問題case:已知大量事實(shí),和事實(shí)之間的約束,要求挖掘關(guān)系。果斷用prolog族語(yǔ)言。例如,漢諾塔、地圖著色、數(shù)獨(dú)問題、八皇后問題等這種考驗(yàn)智商,并且需要從已知規(guī)則中發(fā)現(xiàn)模式的問題。擁有一大堆已知案例的應(yīng)用(例如大部分的人工智能情況)應(yīng)用程序case:從小到超大型應(yīng)用程序,非完全互聯(lián)網(wǎng)應(yīng)用這也是大部分軟件公司遇到的情況。一般有幾種沒辦法分出高下的解決方案:C++,Java,C#,VB。當(dāng)然,這里面可以有CLR和JVM的不同衍生。例如,理論上,你也可以用scala來代替(不過估計(jì)大型公司不會(huì)冒這個(gè)險(xiǎn))。還是在理論上,你也可以用函數(shù)式編程的Clojure和Haskell來做(估計(jì)沒人會(huì)那么傻)。還是在理論上,也可以用Ada這種強(qiáng)悍的通用語(yǔ)言,但估計(jì)沒人愿意接收比C++還復(fù)雜的編程語(yǔ)言。理論上(基本只能在理論上),不嫌棄的話smalltalk也行。還是在理論上,python、ruby等配合一定的圖形界面庫(kù)也可以勝任(但項(xiàng)目大到一定的程度是,你會(huì)欲哭無(wú)淚)。但是,我另起一行。有個(gè)語(yǔ)言:D語(yǔ)言。我個(gè)人不認(rèn)為不可以列入首選名單。但是貌似知名度不行啊。企業(yè)支持少啊。確實(shí)是門優(yōu)秀的語(yǔ)言。C++太尾大不掉,需要一種語(yǔ)言,讓C++成為純粹的C++。稍小一點(diǎn)規(guī)模的,無(wú)法接受面向?qū)ο蟮某绦騿T,有不少用C的。雖然OOP程序員看他們像是不開化的人,但是他們有他們的哲學(xué)(我從嵌入式開發(fā)過來,相當(dāng)長(zhǎng)時(shí)間內(nèi)也擺脫不了C,總本能的排斥OOP)解決問題case:程序規(guī)模不是很大的偏數(shù)學(xué)問題曾經(jīng)很多人用Pascal(包括擴(kuò)展的Delphi),曾經(jīng)很多人用Fortran,但是都明顯在退步。大型通用語(yǔ)言(C++、Java、C#)表明了他們?cè)诟鞣N環(huán)境的適應(yīng)能力。lisp系列也在一些問題上展現(xiàn)出古老的魅力。(但這個(gè)語(yǔ)言遠(yuǎn)沒有《黑客與畫家》的作者給我們描述的那樣神奇,個(gè)人認(rèn)為。不過我的C++風(fēng)格思想占了主導(dǎo),可能沒辦法公正的評(píng)價(jià)lisp,但是據(jù)我的使用lisp經(jīng)驗(yàn),在大部分情況下,我最后還是放棄了它。因?yàn)榇蟛糠智闆r下我總能找到用C++(或其他OOP語(yǔ)言)更好的原因)另外,讀研的一般都用過matlab。這個(gè)工具,兩個(gè)字:強(qiáng)大!不過僅指科學(xué)計(jì)算方面。脫離了這個(gè)方面,就得考慮合不合適了,畢竟固定的矩陣思維不是啥情況都有效的。我用matlab最多的是神經(jīng)網(wǎng)絡(luò),圖片和信號(hào)處理。毫不夸張的說,matlab活脫脫一個(gè)photoshop啊。。。(當(dāng)然,你得會(huì)用。。。)不過matlab的神經(jīng)網(wǎng)絡(luò)確實(shí)不行,做的太差了,小規(guī)模的網(wǎng)絡(luò)可以,3層不用BP的F網(wǎng),幾十個(gè)就掛掉了。有這個(gè)需求的用ANN吧。(還是C++,偷笑)特殊應(yīng)用case:需要大量處理字符串的應(yīng)用首選利器是Perl,不過如果你習(xí)慣了sed、awk、grep,也能很方便的完成相同的功能,但perl是吸收三家所長(zhǎng)做的。其次是C++,別拍我。諸位用過regex嗎?就是boost里的那個(gè),最近被并入C++11啦。有了正則表達(dá)式的C++,處理字符,無(wú)敵了很多哇。當(dāng)然,Java程序員別拍我,我知道這種庫(kù)一個(gè)大型的通用語(yǔ)言都會(huì)有。我提C++,一般順帶著不否定Java和C#能以相似的代價(jià)完成相同的功能。特殊應(yīng)用case:需要一個(gè)膠水,粘結(jié)不同語(yǔ)言寫出來的程序首選是python。倆字:精簡(jiǎn)(呀,這么說一個(gè)強(qiáng)大的語(yǔ)言有點(diǎn)太輕浮了,但比起ruby,確實(shí)簡(jiǎn)單吶。。。)(另外Boo在.net是可以用來取代python)其次是ruby。倆字:復(fù)雜畢竟,沒有rails,ruby根本火不起來。事實(shí)證明,python的哲學(xué)很對(duì)。當(dāng)然兩種語(yǔ)言有很多細(xì)節(jié)的不同,甚至在編程范式上不同(真想不明白白ruby支持多種范式怎么可能是個(gè)優(yōu)點(diǎn)?市場(chǎng)證明了python的純粹)特殊應(yīng)用case:自動(dòng)化測(cè)試不用問了,肯定是tcl了。由于這個(gè)特殊應(yīng)用,所以個(gè)人用戶基本用不到,大部分是嵌入式公司。華為、數(shù)通、邁普等。。。特殊應(yīng)用case:系統(tǒng)底層這個(gè)肯定是C了。操作系統(tǒng),驅(qū)動(dòng),底層軟件,大部分都是C寫的,調(diào)用API,如果不用微軟的Activex之類的技術(shù),還是得老老實(shí)實(shí)用C API的。特殊應(yīng)用case:系統(tǒng)管理這個(gè)系統(tǒng)管理,一般指linux的。首選肯定是各種shell啦:Bash、C shell特殊情況case:蘋果平臺(tái)我們沒得選。。。。objective-C特殊領(lǐng)域:嵌入式大部分都是C了。不過andriod平臺(tái)和蘋果平臺(tái)就得聽話了。gmszone 網(wǎng)友建議把Ada也放在這里,我不否定Ada在嵌入式領(lǐng)域的廣闊未來和實(shí)實(shí)在在的實(shí)力。但C主導(dǎo)了嵌入式這么久,程序員基本沒辦法接受別的思維了。比如ARM,三年前我用的Xscale,我實(shí)在不愿意想象放棄C。嵌入式的玩意對(duì)錯(cuò)有時(shí)候根本沒辦法說,所以很重要的是經(jīng)驗(yàn),前人的積累,所以就像壟斷一樣,不是革命性的優(yōu)秀根本無(wú)法動(dòng)搖根基的。我用過spartan的FPGA,我記得當(dāng)時(shí)選的core也全部是用C做編程接口。所以,很抱歉這里我無(wú)法接收該網(wǎng)友的意見。特殊應(yīng)用:網(wǎng)頁(yè)嵌入網(wǎng)頁(yè)內(nèi)的,最火的肯定是PHP(后端)和javascript(前端)了。前者代替了古老的cgi。但是,java系的jsp內(nèi)嵌java,asp內(nèi)嵌C#,都是php的強(qiáng)勁對(duì)手。通用語(yǔ)言在各個(gè)方面咄咄逼人。特殊應(yīng)用:數(shù)據(jù)庫(kù)就是比哪個(gè)SQL版本更被人接收。標(biāo)準(zhǔn)sql自然不必說,根據(jù)排名,PL(SQL)/Transact-SQL上榜。特殊應(yīng)用:并行,分布式并行越來越重要了。首選Erlang。但是,基于已有的條件,還是考慮選用通用語(yǔ)言的并行優(yōu)化。C++、Java、C#等都在這方面做了很多優(yōu)秀的工作。特殊應(yīng)用:特定語(yǔ)言的功能增強(qiáng)不用問了,我想說的是Lua。用C++寫實(shí)現(xiàn),用Lua寫邏輯是好多游戲的經(jīng)典開發(fā)策略。(當(dāng)然像Unity用的javascript,Unreal用的自己的。)在通用大型語(yǔ)言的基礎(chǔ)上學(xué)會(huì)用Lua加速,是一種很有趣的實(shí)踐。特殊應(yīng)用:人工智能人工智能上,prolog和lisp是寵兒。R語(yǔ)言有時(shí)也被用于數(shù)據(jù)挖掘(但是太慢了)
怎樣讓計(jì)時(shí)器在數(shù)獨(dú)游戲界面顯示
pre t="code" l="html"!DOCTYPE html;
html;
head;
meta charset=;utf8;;
title;555/title;
style type=;text/css;;
/style;
/head;
body;
div id=;flash;;/div;
/body;
script type=;text/JavaScript;;
function flashText(){
var myDate = new Date();
var myTime = myDate.toLocaleTimeString();
document.getElementById(;flash;).innerText = myDate.toLocaleString();
}
flashText();
window.setInterval(;flashText();,1000);
/script;
/html; 用計(jì)時(shí)器每秒獲取當(dāng)前時(shí)間就OK
java該怎么自學(xué)?
在學(xué)java一定要問問自己喜歡嗎?只要喜歡一切沒問題,這是我的建議:多敲代碼,多敲代碼,多敲代碼,重要的事情說三遍
學(xué)習(xí)Java決不能聽完敲一遍就過,一定要多敲幾遍,第一遍可以跟著老師的思路,后面一定要有自己的思路,慢慢培養(yǎng)自己的編程思想和實(shí)現(xiàn)功能的邏輯。甚至可以自己給自己出題,完全靠自己實(shí)現(xiàn)一些有意思的小功能,對(duì)提升自己的能力和代碼熟練度都有不小的幫助。
多看視頻,多練習(xí),主要是練習(xí)一些算法的運(yùn)用,建議下載一些編程練習(xí)題,一道一道弄通弄懂。經(jīng)常做筆記,用記事本把一些經(jīng)典問題保存下來,以備復(fù)習(xí)。
如果是零基礎(chǔ)的話,就看視頻,b站上高旗老師講得不錯(cuò),每看到視頻出現(xiàn)一段代碼就馬上在電腦上給他跑出來,不要直接拿源碼光盤來復(fù)制,不要把視頻看完半段了才開始敲代碼。這樣幾天后你會(huì)找到一些感覺,然后沒事就想些代碼來寫寫,比如想下怎樣把名字轉(zhuǎn)換成亂碼,然后再用另一個(gè)方法轉(zhuǎn)換回來,模擬步話機(jī)發(fā)送幾條消息什么的。這樣下去不出3月你定牛逼,這時(shí)再把教材拿出來仔細(xì)看每一句話,掌握原理。
希望你早日學(xué)成,有苦惱一起討論一下。
分享標(biāo)題:數(shù)獨(dú)javascript,數(shù)獨(dú)在線
文章鏈接:http://fisionsoft.com.cn/article/dsijdis.html