锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欎袱緇勬蹇靛父甯歌浜鴻糠鎯?鍥犱負(fù)瀹冧滑閮芥槸娑夊強(qiáng)鍒癐O澶勭悊,鍚屾椂鍙堟湁鐫涓浜涚浉綾諱技鐨勫湴鏂?
棣栧厛鏉ヨВ閲婂悓姝ュ拰寮傛鐨勬蹇?榪欎袱涓蹇典笌娑堟伅鐨勯氱煡鏈哄埗鏈夊叧.
涓句釜渚嬪瓙,姣斿鎴戝幓閾惰鍔炵悊涓氬姟,鍙兘閫夋嫨鎺掗槦絳夊?涔熷彲鑳藉彇涓涓皬綰告潯涓婇潰鏈夋垜鐨勫彿鐮?絳夊埌鎺掑埌鎴戣繖涓鍙鋒椂鐢辨煖鍙扮殑浜洪氱煡鎴戣疆鍒版垜鍘誨姙鐞嗕笟鍔′簡(jiǎn).
鍓嶈?鎺掗槦絳夊?灝辨槸鍚屾絳夊緟娑堟伅,鑰屽悗鑰?絳夊緟鍒漢閫氱煡)灝辨槸寮傛絳夊緟娑堟伅.鍦ㄥ紓姝ユ秷鎭鐞嗕腑,絳夊緟娑堟伅鑰?鍦ㄨ繖涓緥瀛愪腑灝辨槸絳夊緟鍔炵悊涓氬姟鐨勪漢)寰寰娉ㄥ唽涓涓洖璋冩満鍒?鍦ㄦ墍絳夊緟鐨勪簨浠惰瑙﹀彂鏃剁敱瑙﹀彂鏈哄埗(鍦ㄨ繖閲屾槸鏌滃彴鐨勪漢)閫氳繃鏌愮鏈哄埗(鍦ㄨ繖閲屾槸鍐欏湪灝忕焊鏉′笂鐨勫彿鐮?鎵懼埌絳夊緟璇ヤ簨浠剁殑浜?
鑰屽湪瀹為檯鐨勭▼搴忎腑,鍚屾娑堟伅澶勭悊灝卞ソ姣旂畝鍗曠殑read/write鎿嶄綔,瀹冧滑闇瑕佺瓑寰呰繖涓や釜鎿嶄綔鎴愬姛鎵嶈兘榪斿洖;鑰屽紓姝ュ鐞嗘満鍒跺氨鏄被浼間簬select/poll涔嬬被鐨勫璺鐢↖O鎿嶄綔,褰撴墍鍏蟲敞鐨勬秷鎭瑙﹀彂鏃?鐢辨秷鎭Е鍙戞満鍒墮氱煡瑙﹀彂瀵規(guī)秷鎭殑澶勭悊.
鍏舵鍐嶆潵瑙i噴涓涓嬮樆濉炲拰闈為樆濉?榪欎袱涓蹇典笌紼嬪簭絳夊緟娑堟伅(鏃犳墍璋撳悓姝ユ垨鑰呭紓姝?鏃剁殑鐘舵?/span>鏈夊叧.
緇х畫涓婇潰鐨勯偅涓緥瀛?涓嶈鏄帓闃熻繕鏄嬌鐢ㄥ彿鐮佺瓑寰呴氱煡,濡傛灉鍦ㄨ繖涓瓑寰呯殑榪囩▼涓?絳夊緟鑰呴櫎浜?jiǎn)绛夊緟娑堟伅涔嬪涓嶈兘鍋氬叾瀹冪殑浜嬫?閭d箞璇ユ満鍒跺氨鏄樆濉炵殑,琛ㄧ幇鍦ㄧ▼搴忎腑,涔熷氨鏄紼嬪簭涓鐩撮樆濉炲湪璇ュ嚱鏁拌皟鐢ㄥ涓嶈兘緇х畫寰涓嬫墽琛?鐩稿弽,鏈夌殑浜哄枩嬈㈠湪閾惰鍔炵悊榪欎簺涓氬姟鐨勬椂鍊欎竴杈規(guī)墦鎵撶數(shù)璇濆彂鍙戠煭淇′竴杈圭瓑寰?榪欐牱鐨勭姸鎬佸氨鏄潪闃誨鐨?鍥犱負(fù)浠?絳夊緟鑰?娌℃湁闃誨鍦ㄨ繖涓秷鎭氱煡涓?鑰屾槸涓杈瑰仛鑷繁鐨勪簨鎯呬竴杈圭瓑寰?浣嗘槸闇瑕佹敞鎰忎簡(jiǎn),絎竴縐嶅悓姝ラ潪闃誨褰㈠紡瀹為檯涓婃槸鏁堢巼浣庝笅鐨?鎯寵薄涓涓嬩綘涓杈規(guī)墦鐫鐢?shù)璇濅竴杈硅繕闇瑕佹姮澶寸湅鍒板簳闃熶紞鎺掑埌浣犱簡(jiǎn)娌℃湁,濡傛灉鎶婃墦鐢?shù)璇濆拰瑙傚療鎺掗槦鐨勪綅缃湅鎴愭槸绋嬪簭鐨勪袱涓搷浣滅殑璇?榪欎釜紼嬪簭闇瑕佸湪榪欎袱縐嶄笉鍚岀殑琛屼負(fù)涔嬮棿鏉ュ洖鐨勫垏鎹?鏁堢巼鍙兂鑰岀煡鏄綆涓嬬殑;鑰屽悗鑰?寮傛闈為樆濉炲艦寮忓嵈娌℃湁榪欐牱鐨勯棶棰?鍥犱負(fù)鎵撶數(shù)璇濇槸浣?絳夊緟鑰?鐨勪簨鎯?鑰岄氱煡浣犲垯鏄煖鍙?娑堟伅瑙﹀彂鏈哄埗)鐨勪簨鎯?紼嬪簭娌℃湁鍦ㄤ袱縐嶄笉鍚岀殑鎿嶄綔涓潵鍥炲垏鎹?
寰堝浜轟細(xì)鎶婂悓姝ュ拰闃誨娣鋒穯,鎴戞兂鏄洜涓哄緢澶氭椂鍊欏悓姝ユ搷浣滀細(xì)浠ラ樆濉炵殑褰㈠紡琛ㄧ幇鍑烘潵,姣斿寰堝浜轟細(xì)鍐欓樆濉炵殑read/write鎿嶄綔,浣嗘槸鍒繕浜?jiǎn)鍙互瀵筬d璁劇疆O_NONBLOCK鏍囧織浣?榪欐牱灝卞彲浠ュ皢鍚屾鎿嶄綔鍙樻垚闈為樆濉炵殑浜?鍚屾牱鐨?寰堝浜轟篃浼?xì)鎶婂紓姝ュ拰闈為樥d娣鋒穯,鍥犱負(fù)寮傛鎿嶄綔涓鑸兘涓嶄細(xì)鍦ㄧ湡姝g殑IO鎿嶄綔澶勮闃誨,姣斿濡傛灉鐢╯elect鍑芥暟,褰搒elect榪斿洖鍙鏃跺啀鍘籸ead涓鑸兘涓嶄細(xì)琚樆濉?灝卞ソ姣斿綋浣犵殑鍙風(fēng)爜鎺掑埌鏃朵竴鑸兘鏄湪浣犱箣鍓嶅凡緇忔病鏈変漢浜?鎵浠ヤ綘鍐嶅幓鏌滃彴鍔炵悊涓氬姟灝變笉浼?xì)琚樥d.
鍙,鍚屾/寮傛涓庨樆濉?闈為樆濉炴槸涓ょ粍涓嶅悓鐨勬蹇?瀹冧滑鍙互鍏卞瓨緇勫悎,涔熷彲浠ュ弬瑙佽繖閲?
http://www.ibm.com/developerworks/cn/linux/l-async/
]]>
]]>
鎯寵搗鍐欒繖綃囨枃绔犳槸鍦ㄧ湅
涓銆佷功綾嶏細(xì)
綆楁硶涓庢暟鎹粨鏋勶細(xì)
銆婃暟鎹粨鏋勶紙C璇█鐗堬級(jí)銆嬧斺斾弗钄氭晱銆佸惔浼熸皯 娓呭崕鍑虹増紺?/span>
鎴戣寰楀叾閰嶅涔?fàn)棰橀泦鐢氳囅x瘮鍘熶功鏇存湁浠峰鹼紝姣忎釜杈冮毦鐨勯閮藉煎緱鍋氫竴涓嬨?/span>
銆?span>Introduction to Algorithms銆嬬浜岀増 涓枃鍚嶃婄畻娉曞璁恒?/span>
鍏充簬綆楁硶鐨勬爣鍑嗗涔?fàn)鏁欐潗涓庡伐绋嬪弬鑰冩墜鍐岋紝鍦ㄥ幓騫?span>CSDN緗戠珯涓婂叾緲昏瘧鐗堢珶鐒惰瘎涓哄勾搴︿簩鍗佸ぇ鎶鏈晠閿涔︼紝鍚屾椂銆婄▼搴忓憳銆嬫潅蹇椾笂寮璁句簡(jiǎn)“綆楁硶鎿傚彴”鏍忕洰錛岃繖浜涙函婧愬浐鏈殑涓懼姩錛屼笉鐢卞緱浣夸漢瀵逛腑鍥界幇浠婃誕韜佷笉鍫殑鎵璋?#8220;IT”涓氬張浜х敓浜?jiǎn)涓綰垮笇鏈涖傝繖鏈帤鍘氱殑涔︼紝騫鎬簭鎵撴姌鎴戞墠涔板緱璧楓傝櫧鐒跺帤杈懼崈欏碉紝浣嗗叾鑻辨枃閫氫織鏅撶晠錛屽唴瀹規(guī)繁鍏ユ祬鍑猴紝鍙緇忓吀涔嬩綔寰寰姣斾竴鑸按鍑嗙殑涔﹁繕鑰愯銆傝繕鑳芥壘鍒?span>MIT鐨勮棰戞暀紼嬶紝絎竴鑺傝
MFC:
銆婃繁鍏ユ祬鍑?span>MFC銆?/span>
鎴戝疄鍦ㄤ互涓烘病鏈夌湅榪?st1:personname w:st="on" productid="渚嵎">渚嵎鍏堢敓鐨勩婃繁鍏ユ祬鍑?span>MFC銆嬬殑浜哄鍗婁笉浼?xì)鎳傚?span>MFC緙栫▼銆傚叾瀹炴垜鏄墦綆楃敤涓騫村鐨勬椂闂村啓涓涓粰娓告垙緹庡伐鐢ㄧ殑涓夌淮緙栬緫鍣紝欏轟究浣滀負(fù)姣曚笟璁捐銆傚浘褰㈠簱灝辯敤MFC鍚э紝鍙嶆涔熸病寰楅夋嫨銆傚鏋滆鐢?span>wxWidgets鏃犻潪鏄寧濂囪屽凡錛岃繕涓嶆槸MFC鐨勭炕鐗堬紝褰撶劧瀹冭法騫沖彴浜?jiǎn)銆傚氨璞¢樆鍑?yán)L墜瀵硅嚜宸辨灙姊扮殑闆朵歡浜?jiǎn)濡傛寚鎺屼竴鏍鳳紝瑕佹兂鐢?span>MFC鍐欏嚭闈炵帺鍏風(fēng)▼搴忕殑浜轟竴瀹氳浜?jiǎn)瑙e叾鍐呴儴鏋勯犮傝繕鏈変竴鏈功鍙?span>MFC娣卞叆嫻呭嚭銆嬶紝騫朵笉鏄悓涓鏈?/span>
IDE:
銆?span>Microsoft Visual Studio 2005 Unleashed銆?/span>
宸ユ鍠勫叾浜嬶紝蹇呭厛鍒╁叾鍣ㄣ傚綋鐒舵垜璁や負(fù)涓庡叾鐢ㄥ艦濡?span>Source Insight銆?span>Slick Edit銆?span>Code Visualizer涔嬬被鐨勪唬鐮侀槄璇誨櫒銆佸浘褰㈠寲宸ュ叿錛岃繕涓嶅鐢ㄨ嚜宸辯殑澶ц剳銆備絾濡傛灉浣犲珜鎵撴簮浠g爜鎱㈢殑璇濓紝鍙互鐢?span>Visual AssistX銆傚鏋滃珜鑰佹槸鍐欓噸澶嶇浉浼肩殑浠g爜鐨勮瘽錛屽彲浠ョ敤Code Smith銆傚崟鍏冩祴璇曞彲浠ョ敤CppUnit錛?span>Boost搴撲腑鐨勬祴璇曟鏋朵篃涓嶉敊銆傛湁蹇?jī)鎯呭彲浠ュ?span>Visual Studio澶栨帴Intel鐨?span>Compiler錛屽唴宓?span>STLport錛屼絾涓嶆槸澶у伐紼嬶紝鎬ц兘鍒嗘瀽娌″繀瑕佸姩涓嶅姩灝辯敤涓?span>VTune鍚с?/span>
紼嬪簭鍛樹箣璺細(xì)
銆婃父鎴忎箣鏃呪斺旀垜鐨勭紪紼嬫劅鎮(zhèn)熴?/span>
浜戦澶у摜銆傚湪鎴戝績(jī)鐩腑娓告垙紼嬪簭鍛樺浗澶栭鎺ㄥ崱椹厠錛屽浗鍐呴鎺ㄤ簯椋庛備篃璁歌繃涓ゅ勾鎴戜細(xì)鍒扮綉鏄撳綋浜戦澶у摜鐨勫姪鐞嗙▼搴忓憳鍚с?span>It’s my dream.錛?span>^-^錛変粬鍐欒繖鏈功鐨勬椂鍊欐湰鐫鍙湁閫忓交鐞嗚В鐨勪笢瑗挎墠鍐欏嚭鏉ワ紝鍥犳鍐呭涓嶄細(xì)寰堥叿鏂幫紝浣嗘槸鐩鎬俊鎴戯紝姣忚涓閬嶉兘鏈夋柊鐨勬敹鑾鳳紝涓昏榪樹笉鏄煡璇嗕笂鐨勶紝鍥犱負(fù)鐭ヨ瘑鏄鏃犳澧冪殑錛屾巿浜轟互楸間笉濡傛巿浜轟互娓旓紝綺劇涓婄殑鍚開鎵嶆槸闀夸箙鐨勩傝瘹濡傜粡鍏告父鎴忋婁粰鍓戝渚犱紶銆嬬殑涓誨姏紼嬪簭鍛樺吋緹庢湳鎸囧濮氬.瀹紙浜虹О濮氫粰錛夊湪搴忚█涓墍璇寸殑“浜戦寰楀埌鐨勫彧鏄竴浜涚ǹ璐癸紝鑰屾暣涓腑鍥芥皯鏃忔父鎴忎駭涓氬緱鍒扮殑灝嗘槸涓嬈$煡璇嗙殑鎺ㄥ姩”錛屾璦涓嶈櫄鐭c?/span>
銆婄紪紼嬮珮鎵嬬璦銆?/span>
姊佽倗鏂版槸璞澃瓚呯駭瑙i湼鐨勪綔鑰咃紝鏈潵姣忎釜鍚堟牸鐨勭▼搴忓憳錛?span>Programmer , 鑰岄潪Coder錛夐兘搴旇鎺屾彙鐨勪笢瑗匡紝鐜板湪鍙樻垚浜?jiǎn)缂柦E嬮珮鎵嬬殑鐙綆磋█銆備笉鐭ユ槸浣滆呯殑騫歌繍榪樻槸涓浗IT涓氱殑鎮(zhèn)插搥銆傜煡璇嗙偣榪樻槸璁插緱铔鐨勶紝涓嶈繃瀵?span>MFC鐨勫湴浣嶉鏈夊井璇嶃傛垜瀹炲湪璁や負(fù)MFC鐨勫悕澹板氨鏄偅浜涗笉鎳傚緱鐢ㄥ畠鐨勪漢鎼炶嚟鐨勩備笉榪囦綔鑰呯殑鐗㈤獨(dú)涔熸儏鏈夊彲鍘燂紝姣忎釜鍏鋒湁鍒涢犲姏鐨勭▼搴忓憳閮藉簲璇ヤ笉澶枩嬈?span>framework銆?/span>
銆?span>Masters of DOOM: How Two Guys Created an Empire and Transformed Pop Culture銆嬩腑鏂囧悕銆?span>DOOM鍚笘褰曘?/span>
鍗¢┈鍏嬶紝緗楁礇鏂紝榪欎簺娓告垙鍙蹭笂濡傞浄璐崇殑鍚嶅瓧銆傦紙鐜板湪鍗¢┈鍏嬪凡涓撴敞浜庣伀綆埗閫犱笂錛岀綏媧涙柉鍒欐惡濡誨洖涔¢殣灞咃級(jí)瑕佷笉鏄病涓婅繃澶у鐨勫崱椹厠鍜屽浘褰㈠澶у笀浜氫集鎷夌綍鐨勫姛鍕嬶紝鍙兘鍒扮幇鍦ㄦ父鎴忎腑榪樹笉鐭ヤ笁緇翠負(fù)浣曠墿銆傚嬁搴哥疆鐤戯紝鍦ㄨ綆楁満鐣屽巻鍙叉槸鑻遍泟浠墍鎺ㄥ姩鐨勩傝繖鏈功鐪熷疄鐨勮褰曚簡(jiǎn)榪欎簺灝樹笘鑻遍泟鐨勬墍涓烘墍鎬濄?/span>
浣滀負(fù)紼嬪簭鍛樼殑鎴戝榪欏嚑鏈瓥鍒掍笌緹庡伐鐨勪功涔熶駭鐢熶簡(jiǎn)嫻撳帤鍏磋叮錛屼互鍓嶆悶榪囦竴涓ゅ勾鐨?span>3DS MAX鎻掍歡緙栫▼錛岃寰楃敤maxscript榪樻槸濂借繃MaxSDK錛屾瘯绔熸父鎴忓紑鍙戜腑鎵澶氱殑鏄ā鍨嬪満鏅暟鎹殑瀵煎叆瀵煎嚭錛屽ぇ鍙笉蹇呭ぇ鍔ㄥ共鎴堛?/span>
絳栧垝錛?/span>
銆?span>Creating Emotion in Games : The Craft and Art of Emotioneering銆?/span>
鍦ㄥ.涓界厞鐩殑瀹忎紵涓夌淮涓栫晫鑳屽悗錛屽湪孌嬮叿鐨勬潃鎴紝鍔ㄤ漢蹇?jī)榄勭殑鎯呰妭鑳屽悗锛屾垜浠瑯q橀渶瑕佷粈涔堟潵鎶撲綇鐜╁鐨勫績(jī)錛熺瓟瀵逛簡(jiǎn)錛屽氨鏄?span>emotion.鐪熸鎵撳姩浜哄績(jī)鐨勶紝鎵嶆槸娣卞叆楠ㄩ珦鐨勩?/span>
銆?span>Ultimate Game Design : Building Game Worlds銆?/span>
浠庡悕瀛楀彲浠ョ湅鍑猴紝鍐欑粰鍏沖崱璁捐甯堢殑錛岀壒鍒槸璁插澶栬嚜鐒跺満鏅殑鏋勫緩棰囨湁鍙彇涔嬪銆?/span>
銆?span>Developing Online Games : An Insider’s Guide銆?/span>
灝辮薄鍚嶄負(fù)鍙嶆ā寮忕殑涔﹁杞歡鍥㈤槦榪愯惀涓鏍鳳紝榪欐湰涔﹁鍟嗕笟榪愪綔澶氳繃鎶鏈備竴涓巻緇忚壈闅撅紝鐜板湪鐩涘ぇ鐨勬父鎴忕▼搴忓憳錛岀炕璇戜簡(jiǎn)榪欐湰涔︺?/span>
緹庡伐錛?/span>
銆?span>Digital Cinematography & Directing銆?/span>
鏁板瓧鎽勫獎(jiǎng)瀵兼紨鏈紝姣忓綋浣犲湪3DS MAX鎴栬?span>Maya絳変笁緇村垱浣滆蔣浠朵腑鎽嗘斁鎽勫獎(jiǎng)鏈猴紝璁捐鍏惰繍鍔ㄨ建榪規(guī)椂錛屼綘鍙浘鎯寵繃浣犱篃绔欏湪瀵兼紨鐨勪綅緗笂浜?jiǎn)锛?/span>
銆?span>The Animator’s Survival Kit銆?/span>
鐪嬬潃榪欐湰璁插崱閫氳鑹茶繍鍔ㄨ寰嬬殑涔︼紝涓杈逛駭鐢熸俯涔?fàn)銆婄尗鍜岃侀紶銆嬬殑蹇靛ご錛屼竴杈圭戶緇鍓嶄笉涔呮柊闂昏仈鎾腑鍏充簬涓浗浜х敓浜?jiǎn)鏌愯绠楁滧檱姩鍗¢氬姩鐢葷敓鎴愯蔣浠舵姤閬撶殑钄戣錛岃繖鏉℃姤閬撶О姝や婦鍙ぇ澶у姞蹇腑鍥藉崱閫氬姩鐢葷殑浜ч噺銆傛垜涓斾笉浠庢妧鏈笂鎺㈣鍏舵槸鍚︽槸鍦ㄦ斁鍗槦錛堝叾瀹炴垜鐭ラ亾寰楀緢娓呮錛屽墠鏂囧凡琛紝鏈漢鎼炶繃涓涓ゅ勾鐨勫崱閫氬姩鐢昏緟鍔╄蔣浠剁紪紼嬶級(jí)錛屼絾璁$畻鏈烘満姊扮敓鎴愮殑鍔ㄧ敾鎬庡彲浠f浛浜虹被鍏呮弧鐏墊х殑鍒涗綔錛?/span>
銆?span>The Dark Side of Game Texturing銆?/span>
鐢?span>Photoshop鍒朵綔鏉愯川璐村浘錛岃繕鐪熸湁浜涘闂?/span>
涓夌淮鍥懼艦瀛︼細(xì)
鎼炰笁緇村浘褰㈠棣栧厛榪樻槸瑕佹墡鎵庡疄瀹炵殑鍏堢湅瑙f瀽鍑犱綍銆佺嚎鎬т唬鏁般佽綆楀嚑浣曠殑鏁欐潗錛屽悗闈㈢殑涔?fàn)棰樹竴涓兘涓嶈兘灝戙傚浗鍐呮暟瀛︿功榪樻槸铔ソ鐨勩傝嫃姝ラ潚澶у笀鐨勩婅綆楀嚑浣曘嬬О寰椾笂鍏鋒湁涓栫晫綰ф按鍑嗭紝鍙儨涓浗CAD鐨勫畯鍥捐鐩楃増緇欏嚮鍨簡(jiǎn)銆傜幇鍦ㄦ槸鎴戜滑鎺ヨ繃鎺ュ姏媯掔殑鏃跺欎簡(jiǎn)銆?span>It’s time!
銆?span>Computer Graphics Geometrical Tools銆?span>
銆婅綆楁満鍥懼艦瀛﹀嚑浣曞伐鍏風(fēng)畻娉曡瑙c嬬畻娉曞緢澶氾紝綰版紡澶勪篃涓嶅皯銆?/span>
銆?span>3D Math Primer for Graphics and Game Development銆?/span>
嫻呮槗錛屽彲浣滀負(fù)涓夌淮鏁板鐨?#8220;閫熼“銆?/span>
銆?span>Mathematics for 3D Game Programming & Computer Graphics銆嬬浜岀増
姣斾笂闈㈤偅鏈繁鍏ヤ竴浜涳紝璇佹槑鎺ㄧ悊鐨勬暟瀛︽皵涔熸祿涓浜涳紝鍙綔涓轟笓涓氱殑鏁板涔︿笌緙栫▼瀹炶返涓涓繃娓$殑妗ユ鍚с傚唴瀹規(guī)秹鐚庝篃騫匡紝灝勭嚎榪借釜錛屽厜鐓ц綆楋紝鍙瑁佸壀錛岀鎾炴嫻嬶紝澶氳竟褰㈡妧鏈紝闃村獎(jiǎng)綆楁硶錛屽垰浣撶墿鐞嗭紝嫻佷綋姘存嘗錛屾暟鍊兼柟娉曪紝鏇茬嚎鏇查潰錛岃繕鐪熷涓板瘜銆?/span>
銆?span>Vector Game Math Processors銆?/span>
鎯沖MMX,SSE鍚楋紝閭e氨鐪嬪畠鍚э紝涓嶈繃浠庡熀紜璁茶搗鐨勶紝瑕佽愬績(jī)鍝︺?/span>
DirectX:
銆?span>Introduction to 3D Game Programming with DirectX 9.0銆?/span>
DirectX鍏ラ棬鐨勯緳涔︼紝浣滆呰嚜宸卞啓鐨勭畝鍗曠ず渚嬫鏋訛紝鍚庨潰鎴戝共鑴嗙敤State妯″紡錛屾妸鎵鏈変緥瀛愮粦鍒頒竴鍧楀効鍘諱簡(jiǎn)銆?/span>
銆?span>Beginning Direct3D Game Programming銆?/span>
浣滆呭彇寰楀緥甯堝浣嶅悗鍙樻垚浜?jiǎn)娓告垙绋嬪簭鍛樺Q岀湡鏄篃鍝夈傛湰涔﹁櫧瀹氫綅涓哄叆闂ㄧ駭涔︼紝鍐呭棰囨湁鐙壒鍙彇涔嬪銆傚畠鐢ㄥ埌鐨勭ず渚嬫鏋舵槸DXSDK Sample Framework錛岃屼笉鏄幇鍦ㄩ氳鐨?span>DXUT銆傝鎯崇紪璇戞湁涓ょ鍔炴硶鍚э紝涓鏄嚜宸辨敼鍐欐垚鐢?span>DXUT鐨勩備簩鏄壘鏃х殑Sample Framework銆傛垜鍙堟噿寰椾負(fù)浜?jiǎn)涓涓ず渚嬫鏋朵笅杞芥暣涓棭鏈熺増鏈殑DirectX錛屽悗闈㈠湪Nvidia SDK 9.5涓彂鐜頒簡(jiǎn)銆?/span>
銆?span>Advanced Animation with DirectX銆?/span>
DirectX楂樼駭鍔ㄧ敾鎶鏈傞楠肩郴緇燂紝娓愬彉鍏抽敭甯у姩鐢伙紝鍋朵漢鎶鏈紝琛ㄦ儏鍙樺艦錛岀矑瀛愮郴緇燂紝甯冩枡鏌斾綋錛屽姩鎬佹潗璐紝涓嶄竴鑰岃凍銆傛垜甯稿父鍦ㄦ兂錛屼粠涓夌淮鍒涗綔杞歡瀵煎嚭鐨勭縐嶆晥鏋滐紝鍙樻垚涓鍫?span>text鎴?span>binary錛屽厛鍔犲瘑鍘嬬緝鎵撳寘鍐嶈В鍖呰В鍘嬭В瀵嗭紝鍐嶇敤娓告垙紼嬪簭閲嶅緩涓涓?span>Lite鍔ㄧ敾緋葷粺錛屾父鎴忕▼搴忓憳涔熺湡鏄緵鑻︺?/span>
OpenGL:
銆?span>NeHe OpenGL Tutorials銆?/span>
铏芥槸緗戠粶鏁欑▼錛屼笉姣旀寮忕殑涔﹂婏紝鏈潵瀛?span>OpenGL灝變笉榪囨槸鐪嬬櫨鏉ユ潯C鍑芥暟鏂囨。鐨勫伐澶惂,濡傛灉鍥懼艦瀛﹀熀紜鐭ヨ瘑鎵庡疄鐨勮瘽銆?/span>
銆?span>OpenGL Shading Language銆?/span>
OpenGL鏀寔鏈鏂版樉鍗℃妧鏈闈犱慨淇ˉ琛ョ殑鎻掍歡鎵╁睍錛屾墍浠ヨ繕瑕侀厤鍚?/span>
銆?span>Nvidia OpenGL Extension Specifications銆?/span>
鏉ョ湅涓轟笂銆?/span>
銆?span>Focus on 3D Models銆?/span>
銆?span>Focus on 3D Terrain Programming銆?/span>
銆?span>Focus on Curves and Surfaces銆?span>
欏懼悕鎬濅箟錛屼笁鏈笓璁猴紝铏界劧閮藉緢涓嶆繁錛屼絾瑕佸鏈煡涓夌淮妯″瀷鏍煎紡浣滃弽鍚戝伐紼嬪墠錛岀爺璇?span>Geomipmapping鍦板艦綆楁硶璁烘枃鍓嶏紝CAD鍓嶏紝榪樻槸瑕佺湅鐪嬪畠浠負(fù)涓婏紝濡傛灉娌′粠鍒寰楄繃鍒板熀紜鐨勮瘽銆?/span>
鑴氭湰錛?/span>
鍏堢湅
銆?span>Game Scripting Mastery銆?span>
絳夎嚜宸變簡(jiǎn)瑙d簡(jiǎn)铏氭嫙鏈虹殑鏋勯狅紝鍙互璁捐鍑虹畝鍗曠殑鑴氭湰瑙i噴鎵ц緋葷粺浜?jiǎn)銆?/span>
鍐嶅幓鏌?span>Python , Lua 錛?span>Ruby鐨勬墜鍐屽惂錛屼細(xì)浜嬪崐鍗婂姛鍊嶅嶇殑銆?/span>
銆?span>Programming Role Playing Games with DirectX 8.0銆?/span>
涓杈規(guī)暀瀛︿竴杈圭敤DirectX鍐欏嚭浜?jiǎn)涓涓?span>GameCore搴擄紝鍒濆叿寮曟搸紼氬艦銆?/span>
銆?span>Isometric Game Programming with DirectX 7.0銆?/span>
涓夌淮涔熸槸寤虹珛鍦ㄤ簩緇寸殑鍩虹涓婏紝榪欏氨鏄繖鏈功鐜板湪榪樺煎緱鐪嬬殑鍘熷洜銆?/span>
銆?span>Visual C++緗戠粶娓告垙寤烘ā涓庡疄鐜般?/span>
鑱斾紬鐨勭▼搴忓憳鍐欑殑錛屽姛鍔涘緢鎵庡疄錛岃媯嬬墝綾繪父鎴忕紪紼嬶紝鐗瑰埆璁蹭簡(jiǎn)UML寤烘ā鍜?span>Rotional Rose銆?/span>
銆?span>Object-Oriented Game Development銆?/span>
濂楃敤鏌愪漢鐨勮瘽錛?#8220;I like this book.”
Shader:
瑕佸叆闂ㄥ彲鍏堢湅
銆?span>Shaders for Game Programmers and Artists銆?/span>
璁插湪RenderMonkey涓敤HLSL楂樼駭鐫鑹茶璦鍐?span>Shader.
鍐嶇湅
銆?span>Direct3D ShaderX : Vertex and Pixel Shander Tips and Tricks銆?/span>
鐢ㄦ眹緙栫潃鑹茶璦錛岀函閾惰丹閲戙?/span>
涓夊ぇ瀹濆簱錛?/span>
銆?span>Game Programming Gems銆?/span>
鎴戝彧瑙佸埌1-6鏈紝鎹絎?span>7銆?span>8鏈篃鍑烘潵浜?jiǎn)锛熼檮甯︾殑婧愪唬鐮佸父鏈?span>bug錛屼笉榪囩憰涓嶆帺鐟滐紝榪欏涓栫晫欏剁駭娓告垙紼嬪簭鍛樻瘡騫翠竴搴︾殑鎶鏈枃闆嗭紝娑夊強(qiáng)娓告垙寮鍙戠殑鍚勪釜鏂歸潰錛屾垜瑙夊緱瀵屾湁寮鍙戠粡楠岀殑浜烘洿鑳藉湪鍏朵腑鎵懼埌鍏遍福銆?/span>
銆?span>Graphics Gems銆嬪叏浜旀湰
鍥懼艦瀛︾紪紼?span>Bible錛岀湅浜?jiǎn)杩欏涔︿綘浼?xì)鏄庣櫧璁$畻鏈洪鍩熺殑縐戝瀹跺拰宸ョ▼甯堝尯鍒箣鎵鍦ㄣ傜瀛﹀鎬繪槸璇達(dá)紝榪欎釜涓滆タ鍦ㄧ悊璁轟笂鍙銆傚伐紼嬪笀浼?xì)璇村Q岃浣塊棶棰樺湪logN鐨勬椂闄愬唴瑙e喅鎴戝彧鑳藉繊鐥涘壊鐖憋紝鑸嶇箒瓚嬬畝銆?/span>
銆?span>GPU Gems銆嬪嚭浜?jiǎn)浜屾?/span>
Nvidia鍏徃鍙泦鍥懼艦瀛?span>Gurus鍐欑殑錛岀瓑鍒扮湅鎳傜殑閭d竴澶╋紝鎴戜篃鏈夊績(jī)鎯呰窇鍘?span>Siggraph鍥介檯鍥懼艦瀛﹀ぇ浼?xì)涓婃姇鏂囩珷纰皹q愭皵銆?/span>
娓告垙寮曟搸緙栫▼錛?/span>
銆?span>3D Game Engine Programming銆?/span>
鏄?span>ZFXEngine寮曟搸鐨勮璁℃濊礬闃愰噴錛屽緢騫沖疄錛屽唶澶鎯婂枩銆?/span>
銆?span>3D Game Engine Design銆?/span>
鏁板鐗╃悊鐨勭悊璁虹煡璇嗚瑙h緝澶氾紝鏈潵榪欐牱灝卞浜?jiǎn)锛寴q樿兘鏈熷緟鏇村鍚楋紵
浜哄伐鏅鴻兘錛?/span>
銆?span>AI Techniques for Game Programming銆?/span>
璁查仐浼犵畻娉曪紝浜哄伐紲炵粡緗戠粶錛屼富瑕佺敤鍒頒綅鏁扮粍錛屽浘綆楁硶銆備功鐨勫師鍨嬫槸鏍規(guī)嵁浣滆呭彂琛ㄥ埌GameDev.net璁哄潧涓婄殑鍐呭鏁寸悊鍑烘潵鐨勶紝榪樻瘮杈冨垏涓疄闄呫?/span>
銆?span>AI Game Programming Wisdom銆?/span>
鐩稿綋浜?span>AI緙栫▼鐨?span>Gems銆?/span>
銆?span>PC娓告垙緙栫▼(浜烘満鍗氬紙)銆?/span>
浠ヨ薄媯嬬▼搴忎負(fù)钃濇湰錛屼粙緇嶄簡(jiǎn)寰堝縐嶆悳绱㈢畻娉曪紝闄や簡(jiǎn)甯歌鐨勬瀬澶ф瀬灝忓肩畻娉曞強(qiáng)鍏舵敼榪?span>--璐熸瀬澶у肩畻娉曪紝榪樻湁娣卞害浼樺厛鎼滅儲(chǔ)浠ュ銆傛洿鎻愪緵浜?jiǎn)澶毧U嶆敼榪涚畻娉曪紝濡傦細(xì)Alpha-Beta,Fail-soft alpha-beta,Aspiration Search, Minimal Window Search,Zobrist Hash,Iterative Deepening,History Heuristic,Killer Heuristic,SSS*,DUAL*,MFD and more.鐞崇悈婊$洰錛屽疄灞為毦寰椼?/span>
鍙嶅鎸傦細(xì)
銆婂姞瀵嗕笌瑙e瘑(絎簩鐗?span>)銆?鐪嬮洩璁哄潧绔欓暱 孌甸挗
鐮磋В搴忓垪鍙蜂笌鍙嶅鎸傛湁鍏崇郴涔堬紵涓嶈繃錛屼笘涓婂摢涓や歡浜嬫儏涔嬮棿鍙堟病鏈夊叧緋誨憿錛?/span>
銆?span>UML Distilled銆?Martin Fowler
寰堝浜虹洿鍒扮湅浜?jiǎn)杩欐湰涔︽墠鐪熸瀛︽?span>UML銆?/span>
Martin Fowler鏄湡姝g殑澶у笀,浠庢棭鏈熺殑鍒嗘瀽妯″紡,鍒拌繖鏈?span>UML綺劇補(bǔ),闈╁懡鎬х殑閲嶆瀯閮芥槸浠栨彁鍑虹殑,鍚庢潵鍙堝啓浜?jiǎn)浼佷笟妯″紡涓涔︺傜幇鍦ㄩ瀵間竴涓蔣浠跺紑鍙戝挩璇㈠叕鍙革紝鍘誨勾JavaOne涓浗澶т細(xì)浠栦綔涓轟笓瀹舵潵鍗庝簡(jiǎn)鍚с備釜浜虹綉绔欙細(xì)MartinFowler.com
璁捐妯″紡涓夊墤瀹細(xì)
銆?span>Design Patterns Elements of Reusable Object-Oriented Software銆?/span>
銆?span>Design Patterns Explained銆?/span>
銆?span>Head First Design Patterns銆?span>
閲嶆瀯涓夋澘鏂э細(xì)
銆?span>Refactoring : Improving the Design of Existing Code銆?/span>
銆?span>Refactoring to Patterns銆?/span>
銆?span>Refactoring Workbook銆?/span>
杞歡宸ョ▼:
銆?span>Extreme Programming Explained : Embrace Change銆嬬浜岀増
鍏朵腑Simplicity鐨?span>Value鐪熸槸鎸亱鍙戣仼錛岃繖灝辨槸鎴戜粈涔堥兘鍠滄杞婚噺綰х殑鍘熷洜銆?/span>
銆?span>Agile Software Development Principles,Patterns,and Practices銆?/span>
鏁忔嵎鐪熸槸鐐掑緱澶熺伀鐨勶紝榪炰紒涓氶兘鏈夋晱鎹蜂竴璇達(dá)紝涓嶈繃澶у笀鏄笉浼?xì)杩欎?span>advertising鐨勩?/span>
銆?span>Code Complete銆嬬浜岀増
鍚嶈憲銆?/span>
鏁板錛?/span>
銆婃暟瀛︼紝紜畾鎬х殑涓уけ銆?span>M.鍏嬭幈鍥?/span>
鍘熸潵鏁板涔熷彧涓嶈繃鏄漢綾葷殑鍙戞槑涓庤噯閫狅紝鐢ㄤ笉鐫渚涘叆紲炴錛屾兂璧峰巻鍙蹭笂閭d箞澶氫笉椋熶漢闂寸儫鐏殑縐戝瀹訛紙澶氬崐鏄暟瀛﹀錛夛紝鑷互涓哄彂鐜頒簡(jiǎn)瀹囧畽榪愪綔鐨勫ゥ縐橈紝鏄椂鍊欒蛋涓嬬鍧涗簡(jiǎn)銆?/span>
鐗╃悊錛?/span>
銆婃櫘閫氱墿鐞嗗銆嬬涓鍐?span> += 銆?span>Physics for Game Developers銆?/span>
鐗╃悊鎴戞兂灝卞埌姝や負(fù)姝ゅ惂錛屽啀澶嶆潅鎴戝彲瑕佺敤Newton Engine,ODE浜?jiǎn)锛尳{夊緟鐗╃悊鍗?span>PPU鏅強(qiáng)鐨勯偅澶╋紝灝卞彲鍏呭垎鍙戞尌PhysX鐨勫姛鏁堜簡(jiǎn)錛岀湅榪囨渶鏂扮殑銆婄粏鑳?yōu)鍒嗚銆嬫父鎴?span>Demo婕旂ず錛屾垚鍗冧笂涓囦釜Box鐤媯Collide錛岄鐏扮駭鐜╁璇ヤ竴杈規(guī)懜閽卞寘涓杈規(guī)祦鍙f按浜?jiǎn)銆?/span>
浜屻佸紑婧愪唬鐮侊細(xì)
Irrlicht
钁楀悕鐨勯鐏紩鎿庯紝浠庝袱騫村墠絎竴鐪肩湅鍒板畠錛岃繖涓交閲忕駭鐨勪笁緇村浘褰㈠紩鎿庯紝灝卞枩嬈笂浜?jiǎn)瀹冦傛簮浠g爜浼橀泤錛岄珮鏁堬紝涓斾笉鏁呭紕鐜勮櫄銆傚煎緱姣忎釜C++紼嬪簭鍛樹竴璇伙紝騫朵笉闄愪簬鍥懼艦緙栫▼鑰呫傚畠鐨勫懆杈逛腑涔熸湁涓嶅皯杞婚噺綰х殑涓滆タ銆傚Lightfeather鎵╁睍寮曟搸錛?span>ICE銆?span>IrrlichtRPG銆?span>IrrWizard.榪樻湁IrrEdit銆?span>IrrKlang銆?span>IrrXML鍙敤銆傦紙鍙兘鏄負(fù)浜?jiǎn)鏁堢巼鍘熷洜锛屽緢澶氬紑婧愪綔鑰呭線寰鍠滄鑷繁鍐?span>XML瑙f瀽搴擄紝濡備互涓婄殑IrrXML搴?span>,鍗充嬌鏈夌幇鎴愮殑tinyXML搴撳彲鐢ㄣ傝繖鐪熶細(xì)璁?span>tomcat閲岄潰濉?span>Axis錛?span>Axis閲岄潰濉?span>JUDDI錛屽紕寰楀儚淇勭綏鏂濞冪帺鍏風(fēng)殑Java Web Service Coder浠睏棰溿傦級(jí)
OGRE
鎺掑悕絎竴鐨勫紑婧愬浘褰㈠紩鎿庯紝褰撶劧瑙勬ā鏄緢澶х殑錛屽懆杈逛篃寰堝銆傞櫎浜?jiǎn)浠?span>C#鍐欏氨鐨?span>OgreStudio 錛?span>ofusion宓屽叆3DS MAX浣滀負(fù)WYSWYG寮忕殑涓夌淮緙栬緫鍣ㄤ篃鏄媯掔殑錛岀壒鍒槸鍏跺嚑涓満鏅佸湴褰㈡彃浠跺煎緱鐮旂┒銆備互鑷充簬銆?span>Pro OGRE 3D Programming銆嬩竴涔︿笓璁哄叾鐢ㄦ硶銆傛悳鐙愮殑銆婂ぉ榫欏叓閮ㄣ嬫父鎴忓氨鏄互鍏朵綔涓哄浘褰㈠紩鎿庯紝褰撶劧榪樺彟澶栧紑鍙戜簡(jiǎn)寮曟搸鎻掑潡鍟︺傛垜鏃╃煡閬?span>OGRE寮鍙戠粍涓湁涓涓腑鍥戒漢璋㈢▼搴忓憳錛屼粬浠ュ墠鍋氫簡(jiǎn)寰堝騫寸殑浼犵粺杞歡緙栫▼銆傛湁涓嬈″ぉ榫欏叓閮ㄦ父鎴忕殑鍥懼艦妯″潡鐨勫嚭閿欎俊鎭腑鍖呭惈浜?jiǎn)涓涓叉煇紼嬪簭鍛樼殑宸ヤ綔鐩綍錛屾湁涓涓枃浠跺す鍚嶅嵆鏄阿紼嬪簭鍛樼殑鑻辨枃鍚嶏紝鎴戞嵁姝ゆ帹鏂阿紼嬪簭鍛樺嵆鏄悳鐙愬寳浜殑涓葷▼銆傜湅鏉ヤ腑鍥藉寮婧愪簨涓氳繕鏄湁鎵璐$尞鐨勫槢錛岀帇寮婧愬摜鍝ョ殑鍔姏鐪嬫潵涓嶄細(xì)鐧借垂錛侊紙^-^錛変笉榪囨垜渚︽祴鐨勬墜娉曚篃鏈変簺鍍忕綉绔欐暟鎹簱鐖嗗簱浜?jiǎn)锛岄潪鍚涘瓙涔嬫墍涓轟綔銆?/span>
RakNet
鍩轟簬UDI鐨勭綉緇滃簱錛岀珶榪樻敮鎸佸0闊充紶杈擄紝浠ュ悗鍜?span>OpenVision緇撳悎璧鋒潵鍋氫釜瑙嗚亰紼嬪簭璇曡瘯銆?/span>
Blender
澹拌獕鏈鐩涚殑寮婧愪笁緇村姩鐢昏蔣浠訛紝绔熻繕甯︿竴涓父鎴忓紩鎿庛傝櫧鐒舵搷浣滀互蹇嵎閿┍鍔紝涔熷氨鏄瑕佽儗涓婄櫨鏉ヤ釜蹇嵎閿墠鑳界啛緇冧嬌鐢ㄣ備絾鏄綔涓轟粠鍟嗕笟浠g爜鍙樹負(fù)寮婧愪箣浣滐紝濞佽儊涓夌淮鍟嗕笟宸ㄥご鐨勮交楠戝叺錛屽巻緇忓崄騫撮敜鐐鹼紝浠g爜杈劇櫨涓囪錛屾浠g爜鍙簲澶╀笂鏈夛紝浜洪棿鍝緱鍑犲洖鐪嬶紝鎬庡彲涓嶄綔涓洪暱鏈熺殑婧愮爜鍙傝冿紵
椋庨瓊
浜岀淮鍥懼艦搴撱備簯椋庡ぇ鍝ョ殑鎴愬悕涔嬩綔銆傝櫧鐒朵笉浠h〃鍏舵渶楂樻按騫籌紙鏈楂樻按騫充綔涓哄晢涓氫唬鐮佷繚瀛樺湪騫垮窞緗戞槗浜掑姩鐨?span>SVN閲屽憿錛夛紝浣嗘槸涔熷彲浠ヤ竴浠伴閲囦簡(jiǎn)銆?/span>
鍦e墤鑻遍泟浼?/span>
浜岀淮RPG銆傚嚑涓綔鑰呭凡鎴愪負(fù)鎴愰兘閿﹀ぉ鐨勪富鍔涚▼搴忓憳銆傞敠澶╃殑鑰佹諱粠涓鐧句竾鍙戝錛屼笁騫存椂闂磋韓浠瘋繃浜匡紝涔熸槸涓浠f灜闆勪簡(jiǎn)銆傝繖浠戒唬鐮佷綔涓哄嚑騫村墠鐨勫鐢熶綔鍝佷篃綆楀彲浠ヤ簡(jiǎn)錛屽洜涓轟竴涓伐紼嬭絀剁殑鏄洓騫沖叓紼籌紝騫朵笉涓瀹氳鍝釜妯″潡澶氫箞鍑哄僵銆傚弽姝f垜鏄病鏈夋椂闂村啓榪欎箞涓涓笢涓滐紝榪炰釜緹庡伐閮芥壘涓嶅埌錛屽彧鑳芥暣澶╂兂鐫鐮磋В鍒漢鐨勮祫婧愶紙^-^錛夈?/span>
Boost
C++鍑嗘爣鍑嗗簱錛屾垜鎯蟲洿澶氱殑鏃跺欏彲浠ュ弬鑰冨涔?fàn)鍏舵簮浠g爜銆?/span>
Yake
鎴戦亣鍒扮殑鏈濂界殑杞婚噺綰ф父鎴忔鏋朵簡(jiǎn)銆傚湪浠ュ墠鎶婁竴涓伐紼嬩腑鐨勫浘褰㈠紩鎿庝粠Irrlicht鎹㈡垚OGRE鐨勫皾璇曚腑錛岄亣鍒頒簡(jiǎn)瀹冦?span>OGRE鐨勫懆杈瑰伐紼嬪湪鎴戠湅鏉ラ兘寰堝焊鑲匡紝娌℃湁瀹屽杽鏂囨。鐨勬儏鍐典笅鐪嬭搗鏉ュ拰Linux鍐呮牳宸笉澶氥備笉榪囪繖涓?span>Yake寮曟搸鍊掓槸寰堝枩嬈€傚畠浠ヤ竴涓?span>FSM鏈夐檺鐘舵佹満浣滀負(fù)瀹炴椂紼嬪簭鐨勮皟搴︽牳蹇?jī)锛岀劧鍚庢瘡涓ā鍧楀Q氱墿鐞嗐佸浘褰€佺綉緇溿佽剼鏈?span>GUI銆佽緭鍏ョ瓑絳夐兘鎻愪緵涓涓帴鍙o紝鎺ュ彛涔嬩笅鍐嶆彁渚涘埌姣忕鍏蜂綋寮婧愬紩鎿庣殑鎺ュ彛錛岀劧鍚庡啀鎺ュ叿浣撳紩鎿庛傞氳繃榪欐牱灞傚眰鎶借薄錛屾鏃朵綘鏄帴Newton Engine,ODE榪樻槸PysX閮藉彲浠ワ紱鏄帴OGRE,Crystal Space榪樻槸Irrlicht閮藉彲浠ワ紱鏄帴RakNet榪樻槸LibCurl閮藉彲浠ワ紱鏄帴Python錛?span>Lua榪樻槸Ruby閮藉彲浠ワ紝鏄帴CEGUI榪樻槸others錛屾槸鎺?span>OIS榪樻槸others錛堝懙鍛?span>,璁頒笉璧鋒潵others錛夐兘鍙互銆傛墍浠?span>Yake鏈川涓婁笉鏄?span>OGRE鐨勫懆杈廣傝櫧鐒剁敤Neoengine鐨勪漢閮藉掑悜浜?jiǎn)瀹冨Q屼絾鏄幇鍦ㄧ増鏈繕寰堟棭銆傜壒鍒槸鎴戣涓猴紝瀛︿範(fàn)鐮旂┒鏃朵竴瀹氳鏈夎繖縐嶆娊璞′箣鎶借薄錛屾帴鍙d箣鎺ュ彛鐨勪笢瑗挎妸鎬濈淮浠庡叿浣撶殑緇戝畾鎵撳紑錛岃屽紑鍙戞椂鎶借薄瑕佹湁闄愬害鐨勶紝灝卞儚钄″闀涘湪銆?span>Java澶滄湭鐪犮嬩腑璁茬殑錛岄潰鍚戝璞$敤寰楄繃婊ヤ篃浼?xì)寰?span>OOOO鐥?span>(闈㈠悜瀵硅薄榪囨晱寮鴻揩鐥?span>)銆?/span>
Quake Doom緋誨垪
鎹寰堢粡鍏革紝鍗¢┈鍏嬭繖縐嶅紑婧愮殑榛戝綺劇灝卞煎緱璧炶銆傛妸鍟嗕笟婧愪唬鐮佹斁鍑烘潵錛岃蛋鑷繁鐨勫垱鏂頒箣璺紝璁╁埆浜鴻拷鍘誨惂銆備笉榪?span>Quake涓?span>Unreal寮曟搸鐨勪笁緇寸紪杈戝櫒鏄幇鍦ㄦ墍鏈夌紪杈戝櫒鐨勯薊紲栵紝鐪嬫潵瑕佸ソ濂界湅鐪嬩簡(jiǎn)銆?/span>
Nvidia SDK 9.X
涓夌淮鍥懼艦緙栫▼鐨勫ぇ瀹濆簱錛岃繖浜?span>Diret3D涓?span>OpenGL鐨勭ず渚嬬▼搴忛兘鏄敤鏉ュ睍紺哄叾鏈鏂扮殑鏄懼崱鎶鏈殑銆傜‖浠跺巶鍟嗗線寰瀵硅蔣浠朵駭鍝佷笉鐢氬湪鎰忥紝婧愪唬鐮佺粰浣犵湅,涓滆タ緇欎綘鐢ㄥ幓鍚э紝瀛﹀畬浜?jiǎn)杩樺緱涔版垜鐨劶嫭錃g銆?span>Intel鐨勭紪璇戝櫒錛?span>PhysX鐗╃悊寮曟搸澶ф涔熼兘鏄繖鏍楓?span>Havok浼?xì)鎶婂畠鐨?span>Havok鐗╃悊寮曟搸鍏嶈垂緇欏埆浜虹敤鍚楋紵鍒璇曠敤鐗堬紝榪炰釜Demo閮界湅涓嶅埌銆傛墍浠ヨ繖濂?span>SDK鐨勫唴瀹瑰彲姣?span>MS DirectX SDK閲岄潰閭d簺鍏ラ棬綰х殑紺轟緥閰峰浜?jiǎn)锛屽弽姝f垜鏄鑾疯嚊_疂錛屼笁鏈堜笉鐭ユ剚婊嬪懗銆備笉榪囨樉鍗¤so-so鍝︺傛垜鐨?span>GeForce 6600鏈変袱涓変釜璺戜笉榪囧幓,宸己浜烘剰銆?/span>
涓夈佺綉绔欙細(xì)
www.CSDN.net
紼嬪簭鍛樺ぇ鏈惀鍚э紝杞枃涓?#8220;鏂版妧鏈”璁ㄥ帉浜?jiǎn)鐐瑰Q?span>blog鍜岀ぞ鍖烘槸綺懼崕涔嬫墍鍦ㄣ?/span>
www.GameRes.com
娓告垙紼嬪簭鍛樺熀鍦幫紝鏂囨。搴撲腑榪樻湁鐐逛笢瑗褲傛姇紼跨殑鎺ユ敹鑰?span>Seabug涓庡湥鍓戣嫳闆勪紶鐨勪富紼?span>Seabug浼?xì)鏄悓涓涓漢鍚楋紵涓涓湪鎴愰兘閿﹀ぉ鎷呭綋鎶鏈噸鎷呯殑楂樻墜榪樻湁鏃墮棿緇存姢緗戠珯鍚楋紵鎴戜笉寰楄岀煡銆?/span>
“浣曡嫤鍋氭父鎴?#8221;緗戠珯
鍚嶅瓧寰堜釜鎬э紝绔欓暱涔熸槸鍘嗗敖鍑犲勾鍓嶄駭涓氬彂灞曞垵鏈熺殑鑹伴毦鎵嶅嚭姝ゅ悕瀛椼?/span>
www.66rpg.com
浜岀淮娓告垙鍥劇墖璧勬簮寰堝錛岀珯闀挎煶鏌充富鎺ㄧ殑RPGMaker 杞歡涔熷彲浠ョ帺涓鐜╁惂錛屼絾瀵逛簬涓撲笟寮鍙戣呮潵璇翠笉鍙綋鐪熴?/span>
www.GameDev.net
璁哄潧涓湁涓嶅皯鐑績(jī)鐨勫浗澶栭珮鎵嬪湪媧誨姩銆?/span>
www.SourceForge.net
涓嶇敤璇翠簡(jiǎn)錛屼笘鐣屾渶澶х殑寮婧愪唬鐮佸簱錛屽叆閲戝北鎬庡彲絀烘墜鑰岃繑錛熺湅鍒板浗澶栭偅浜涘鐢熼」鐩姩涓嶅姩灝卞儚妯″儚鏍風(fēng)殑銆傦紙DirectX鐨勭褰㈠氨鏄嫳鍥界殑瀛︾敓欏圭洰錛屽湪瀛︽牎榪樿鍒や負(fù)涓嶅悎鏍箋傦級(jí)
www.koders.com
婧愪唬鐮佹悳绱㈠紩鎿?span>,鏀寔姝e垯琛ㄨ揪寮?span>,google Lab涓篃鏈夈傚綋浣犳煇縐嶅姛鑳藉啓涓嶅嚭鏉ユ椂,鍙互鐪嬩竴涓嬪紑婧愪唬鐮佹庝箞鍐欑殑,褰撶劧涓嶈繃鏄粎渚涘弬鑰?span>,寮婧愪唬鐮佹湭蹇呴兘鏈変駭鍝佺駭鐨勫己搴︺傝鍒?span>google,鍙湅銆?span>Google Power Tools Bible銆嬩竴涔︼紝浣犱細(xì)鍙戠幇錛?span>google鐨勪紬澶氫駭鍝佸師鏉ヤ篃鏈夎繖涔堝浣跨敤闂ㄩ亾銆?/span>
榪欑瘒灝忔枃瓚寵凍鍐欎簡(jiǎn)涓澶╁崐鐨勬椂闂達(dá)紝涓嶇敱寰椾嬌鎴戝渚嵎涓鏍風(fēng)殑鎶鏈綔瀹墮暱鏈熶紡妗堣緵鍕ゅ姵浣滄繁娣辨暚浣╀簡(jiǎn)銆傜湅鏉ュ浜庝功綾嶆垨鑰呰蔣浠訛紝閮藉簲璇ュ皧閲嶄綔鑰呮垨鑰?span>programmer鐨勬墠鏅哄姵鍔?/span>
鏈枃浠庝粙緇嶅熀紜姒傚康鍏ユ墜錛屾帰璁ㄤ簡(jiǎn)鍦–/C++涓鏃ユ湡鍜屾椂闂存搷浣滄墍鐢ㄥ埌鐨勬暟鎹粨鏋勫拰鍑芥暟錛屽茍瀵硅鏃躲佹椂闂寸殑鑾峰彇銆佹椂闂寸殑璁$畻鍜屾樉紺烘牸寮忕瓑鏂歸潰榪涜浜?jiǎn)闃悩q般傛湰鏂囪繕閫氳繃澶ч噺鐨勫疄渚嬪悜浣犲睍紺轟簡(jiǎn)time.h澶存枃浠朵腑澹版槑鐨勫悇縐嶅嚱鏁板拰鏁版嵁緇撴瀯鐨勮緇嗕嬌鐢ㄦ柟娉曘?nbsp;
鍏抽敭瀛楋細(xì)UTC錛堜笘鐣屾爣鍑嗘椂闂達(dá)級(jí)錛孋alendar Time錛堟棩鍘嗘椂闂達(dá)級(jí)錛宔poch錛堟椂闂寸偣錛夛紝clock tick錛堟椂閽熻鏃跺崟鍏冿級(jí)
1錛庢蹇?nbsp;
鍦–/C++涓紝瀵瑰瓧絎︿覆鐨勬搷浣滄湁寰堝鍊煎緱娉ㄦ剰鐨勯棶棰橈紝鍚屾牱錛孋/C++瀵規(guī)椂闂寸殑鎿嶄綔涔熸湁璁稿鍊煎緱澶у娉ㄦ剰鐨勫湴鏂廣傛渶榪戯紝鍦ㄦ妧鏈兢涓湁寰堝緗戝弸涔熷嬈¢棶鍒?榪嘋++璇█涓鏃墮棿鐨勬搷浣溿佽幏鍙栧拰鏄劇ず絳夌瓑鐨勯棶棰樸備笅闈紝鍦ㄨ繖綃囨枃绔犱腑錛岀瑪鑰呭皢涓昏浠嬬粛鍦–/C++涓椂闂村拰鏃ユ湡鐨勪嬌鐢ㄦ柟娉?
閫氳繃瀛︿範(fàn)璁稿C/C++搴擄紝浣犲彲浠ユ湁寰堝鎿嶄綔銆佷嬌鐢ㄦ椂闂寸殑鏂規(guī)硶銆備絾鍦ㄨ繖涔嬪墠浣犻渶瑕佷簡(jiǎn)瑙d竴浜?#8220;鏃墮棿”鍜?#8220;鏃ユ湡”鐨勬蹇碉紝涓昏鏈変互涓嬪嚑涓細(xì)
Coordinated Universal Time錛圲TC錛夛細(xì)鍗忚皟涓栫晫鏃訛紝鍙堢О涓轟笘鐣屾爣鍑嗘椂闂達(dá)紝涔熷氨鏄ぇ瀹舵墍鐔熺煡鐨勬牸鏋楀▉娌繪爣鍑嗘椂闂達(dá)紙Greenwich Mean Time錛孏MT錛夈傛瘮濡傦紝涓浗鍐呭湴鐨勬椂闂翠笌UTC鐨勬椂宸負(fù)+8錛屼篃灝辨槸UTC+8銆傜編鍥芥槸UTC-5銆?nbsp;
Calendar Time錛氭棩鍘嗘椂闂達(dá)紝鏄敤“浠庝竴涓爣鍑嗘椂闂寸偣鍒版鏃剁殑鏃墮棿緇忚繃鐨勭鏁?#8221;鏉ヨ〃紺虹殑鏃墮棿銆傝繖涓爣鍑嗘椂闂寸偣瀵逛笉鍚岀殑緙栬瘧鍣ㄦ潵璇翠細(xì)鏈夋墍涓嶅悓錛屼絾瀵逛竴涓紪璇戠郴緇熸潵 璇達(dá)紝榪欎釜鏍囧噯鏃墮棿鐐規(guī)槸涓嶅彉鐨勶紝璇ョ紪璇戠郴緇熶腑鐨勬椂闂村搴旂殑鏃ュ巻鏃墮棿閮介氳繃璇ユ爣鍑嗘椂闂寸偣鏉ヨ 閲忥紝鎵浠ュ彲浠ヨ鏃ュ巻鏃墮棿鏄?#8220;鐩稿鏃墮棿”錛屼絾鏄棤璁轟綘鍦ㄥ摢涓涓椂鍖猴紝 鍦ㄥ悓涓鏃跺埢瀵瑰悓涓涓爣鍑嗘椂闂寸偣鏉ヨ錛屾棩鍘嗘椂闂撮兘鏄竴鏍風(fēng)殑銆?nbsp;
epoch錛?nbsp; 鏃墮棿鐐廣傛椂闂寸偣鍦ㄦ爣鍑咰/C++涓槸涓涓暣鏁幫紝瀹冪敤姝ゆ椂鐨勬椂闂村拰鏍囧噯鏃墮棿鐐圭浉宸殑縐掓暟錛堝嵆鏃ュ巻鏃墮棿錛夋潵琛ㄧず銆?nbsp;
clock tick錛氭椂閽熻鏃跺崟鍏冿紙鑰屼笉鎶婂畠鍙仛鏃墮挓婊寸瓟嬈℃暟錛夛紝涓涓椂閽熻鏃跺崟鍏冪殑鏃墮棿闀跨煭鏄敱CPU鎺у埗鐨勩備竴涓猚lock tick涓嶆槸CPU鐨勪竴涓椂閽熷懆鏈燂紝鑰屾槸C/C++鐨勪竴涓熀鏈鏃跺崟浣嶃?nbsp;
鎴戜滑鍙互浣跨敤ANSI鏍囧噯搴撲腑鐨則ime.h澶存枃浠躲傝繖涓ご鏂囦歡涓畾涔夌殑鏃墮棿鍜屾棩鏈熸墍浣跨敤鐨勬柟娉曪紝鏃犺鏄湪緇撴瀯瀹氫箟錛岃繕鏄懡鍚嶏紝閮藉叿鏈夋槑鏄劇殑C璇█椋庢牸銆備笅闈紝鎴戝皢璇存槑鍦–/C++涓庢牱浣跨敤鏃ユ湡鐨勬椂闂村姛鑳姐?nbsp;
2錛?璁℃椂
C/C++涓殑璁℃椂鍑芥暟鏄痗lock()錛岃屼笌鍏剁浉鍏崇殑鏁版嵁綾誨瀷鏄痗lock_t銆傚湪MSDN涓紝鏌ュ緱瀵筩lock鍑芥暟瀹氫箟濡備笅錛?nbsp;
clock_t clock( void );
榪?涓嚱鏁拌繑鍥炰粠“寮鍚繖涓▼搴忚繘紼?#8221;鍒?#8220;紼嬪簭涓皟鐢╟lock()鍑芥暟”鏃朵箣闂寸殑CPU鏃墮挓璁℃椂鍗曞厓錛坈lock tick錛夋暟錛屽湪MSDN涓О涔嬩負(fù)鎸傞挓鏃墮棿錛坵al-clock錛夈傚叾涓璫lock_t鏄敤鏉ヤ繚瀛樻椂闂寸殑鏁版嵁綾誨瀷錛屽湪time.h鏂囦歡涓紝鎴戜滑鍙互鎵懼埌瀵?瀹冪殑瀹氫箟錛?nbsp;
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
寰堟槑鏄撅紝clock_t鏄竴涓暱鏁村艦鏁般傚湪time.h鏂囦歡涓紝榪樺畾涔変簡(jiǎn)涓涓父閲廋LOCKS_PER_SEC錛屽畠鐢ㄦ潵琛ㄧず涓縐掗挓浼?xì)鏈夊灏戜釜鏃堕挓璁℃椂鍗曞厓锛屽叾瀹氫箟濡備笅锛?xì)
#define CLOCKS_PER_SEC ((clock_t)1000)
鍙互鐪嬪埌姣忚繃鍗冨垎涔嬩竴縐掞紙1姣錛夛紝璋冪敤clock錛堬級(jí)鍑芥暟榪斿洖鐨勫煎氨鍔?銆備笅闈婦涓緥瀛愶紝浣犲彲浠ヤ嬌鐢ㄥ叕寮廲lock()/CLOCKS_PER_SEC鏉ヨ綆椾竴涓繘紼嬭嚜韜殑榪愯鏃墮棿錛?nbsp;
void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}
褰撶劧錛屼綘涔熷彲浠ョ敤clock鍑芥暟鏉ヨ綆椾綘鐨勬満鍣ㄨ繍琛屼竴涓驚鐜垨鑰呭鐞嗗叾瀹冧簨浠跺埌搴曡姳浜?jiǎn)澶殲畱鏃堕椷_(dá)細(xì)
#include “stdio.h”
#include “stdlib.h”
#include “time.h”
int main( void )
{
long i = 10000000L;
clock_t start, finish;
double duration;
/* 嫻嬮噺涓涓簨浠舵寔緇殑鏃墮棿*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i-- ) ;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
system("pause");
}
鍦ㄧ瑪鑰呯殑鏈哄櫒涓婏紝榪愯緇撴灉濡備笅錛?nbsp;
Time to do 10000000 empty loops is 0.03000 seconds
涓婇潰鎴戜滑鐪嬪埌鏃墮挓璁℃椂鍗曞厓鐨勯暱搴︿負(fù)1姣錛岄偅涔堣鏃剁殑綺懼害涔熶負(fù)1姣錛岄偅涔堟垜浠彲涓嶅彲浠ラ氳繃鏀瑰彉CLOCKS_PER_SEC鐨勫畾涔夛紝閫氳繃鎶婂畠瀹氫箟鐨勫ぇ涓浜涳紝浠庤屼嬌璁℃椂綺懼害鏇撮珮鍛紵閫氳繃灝濊瘯錛屼綘浼?xì)鍙戠幇杩欐犱h槸涓嶈鐨勩傚湪鏍囧噯C/C++涓紝鏈灝忕殑璁℃椂鍗曚綅鏄竴姣銆?nbsp;
3錛庝笌鏃ユ湡鍜屾椂闂寸浉鍏崇殑鏁版嵁緇撴瀯
鍦ㄦ爣鍑咰/C++涓紝鎴戜滑鍙氳繃tm緇撴瀯鏉ヨ幏寰楁棩鏈熷拰鏃墮棿錛宼m緇撴瀯鍦╰ime.h涓殑瀹氫箟濡備笅錛?nbsp;
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 縐?– 鍙栧煎尯闂翠負(fù)[0,59] */
int tm_min; /* 鍒?- 鍙栧煎尯闂翠負(fù)[0,59] */
int tm_hour; /* 鏃?- 鍙栧煎尯闂翠負(fù)[0,23] */
int tm_mday; /* 涓涓湀涓殑鏃ユ湡 - 鍙栧煎尯闂翠負(fù)[1,31] */
int tm_mon; /* 鏈堜喚錛堜粠涓鏈堝紑濮嬶紝0浠h〃涓鏈堬級(jí) - 鍙栧煎尯闂翠負(fù)[0,11] */
int tm_year; /* 騫翠喚錛屽叾鍊肩瓑浜庡疄闄呭勾浠藉噺鍘?900 */
int tm_wday; /* 鏄熸湡 – 鍙栧煎尯闂翠負(fù)[0,6]錛屽叾涓?浠h〃鏄熸湡澶╋紝1浠h〃鏄熸湡涓錛屼互姝ょ被鎺?*/
int tm_yday; /* 浠庢瘡騫寸殑1鏈?鏃ュ紑濮嬬殑澶╂暟 – 鍙栧煎尯闂翠負(fù)[0,365]錛屽叾涓?浠h〃1鏈?鏃ワ紝1浠h〃1鏈?鏃ワ紝浠ユ綾繪帹 */
int tm_isdst; /* 澶忎護(hù)鏃舵爣璇嗙錛屽疄琛屽浠ゆ椂鐨勬椂鍊欙紝tm_isdst涓烘銆備笉瀹炶澶忎護(hù)鏃剁殑榪涘欙紝tm_isdst涓?錛涗笉浜?jiǎn)瑙f儏鍐垫椨灱宼m_isdst()涓鴻礋銆?/
};
#define _TM_DEFINED
#endif
ANSI C鏍囧噯縐頒嬌鐢╰m緇撴瀯鐨勮繖縐嶆椂闂磋〃紺轟負(fù)鍒嗚В鏃墮棿(broken-down time)銆?nbsp;
鑰屾棩鍘嗘椂闂達(dá)紙Calendar Time錛夋槸閫氳繃time_t鏁版嵁綾誨瀷鏉ヨ〃紺虹殑錛岀敤time_t琛ㄧず鐨勬椂闂達(dá)紙鏃ュ巻鏃墮棿錛夋槸浠庝竴涓椂闂寸偣錛堜緥濡傦細(xì)1970騫?鏈?鏃?鏃?鍒?縐掞級(jí)鍒版鏃剁殑縐掓暟銆傚湪time.h涓紝鎴戜滑涔熷彲浠ョ湅鍒皌ime_t鏄竴涓暱鏁村瀷鏁幫細(xì)
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 鏃墮棿鍊?*/
#define _TIME_T_DEFINED /* 閬垮厤閲嶅瀹氫箟 time_t */
#endif
澶?瀹跺彲鑳戒細(xì)浜х敓鐤戦棶錛氭棦鐒秚ime_t瀹為檯涓婃槸闀挎暣鍨嬶紝鍒版湭鏉ョ殑鏌愪竴澶╋紝浠庝竴涓椂闂寸偣錛堜竴鑸槸1970騫?鏈?鏃?鏃?鍒?縐掞級(jí)鍒伴偅鏃剁殑縐掓暟錛堝嵆鏃ュ巻鏃墮棿錛?瓚呭嚭浜?jiǎn)闀挎暣迮炴墍鑳借〃紺虹殑鏁扮殑鑼冨洿鎬庝箞鍔烇紵瀵箃ime_t鏁版嵁綾誨瀷鐨勫兼潵璇達(dá)紝瀹冩墍琛ㄧず鐨勬椂闂翠笉鑳芥櫄浜?038騫?鏈?8鏃?9鏃?4鍒?7縐掋備負(fù)浜?jiǎn)鑳藉琛ńC?鏇翠箙榪滅殑鏃墮棿錛屼竴浜涚紪璇戝櫒鍘傚晢寮曞叆浜?4浣嶇敋鑷蟲洿闀跨殑鏁村艦鏁版潵淇濆瓨鏃ュ巻鏃墮棿銆傛瘮濡傚井杞湪Visual C++涓噰鐢ㄤ簡(jiǎn)__time64_t鏁版嵁綾誨瀷鏉ヤ繚瀛樻棩鍘嗘椂闂達(dá)紝騫墮氳繃_time64()鍑芥暟鏉ヨ幏寰楁棩鍘嗘椂闂達(dá)紙鑰屼笉鏄氳繃浣跨敤32浣嶅瓧鐨則ime()鍑?鏁幫級(jí)錛岃繖鏍峰氨鍙互閫氳繃璇ユ暟鎹被鍨嬩繚瀛?001騫?鏈?鏃?鏃?鍒?縐掞紙涓嶅寘鎷鏃墮棿鐐癸級(jí)涔嬪墠鐨勬椂闂淬?nbsp;
鍦╰ime.h澶存枃浠朵腑錛屾垜浠繕鍙互鐪嬪埌涓浜涘嚱鏁幫紝瀹冧滑閮芥槸浠ime_t涓哄弬鏁扮被鍨嬫垨榪斿洖鍊肩被鍨嬬殑鍑芥暟錛?nbsp;
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
姝ゅ錛宼ime.h榪樻彁渚涗簡(jiǎn)涓ょ涓嶅悓鐨勫嚱鏁板皢鏃ュ巻鏃墮棿錛堜竴涓敤time_t琛ㄧず鐨勬暣鏁幫級(jí)杞崲涓烘垜浠鉤鏃剁湅鍒扮殑鎶婂勾鏈堟棩鏃跺垎縐掑垎寮鏄劇ず鐨勬椂闂存牸寮弔m錛?nbsp;
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
閫?榪囨煡闃匨SDN錛屾垜浠彲浠ョ煡閬揗icrosoft C/C++ 7.0涓椂闂寸偣鐨勫鹼紙time_t瀵硅薄鐨勫鹼級(jí)鏄粠1899騫?2鏈?1鏃?鏃?鍒?縐掑埌璇ユ椂闂寸偣鎵緇忚繃鐨勭鏁幫紝鑰屽叾瀹冨悇縐嶇増鏈殑Microsoft C/C++鍜屾墍鏈変笉鍚岀増鏈殑Visual C++閮芥槸璁$畻鐨勪粠1970騫?鏈?鏃?鏃?鍒?縐掑埌璇ユ椂闂寸偣鎵緇忚繃鐨勭鏁般?nbsp;
4錛庝笌鏃ユ湡鍜屾椂闂寸浉鍏崇殑鍑芥暟鍙?qiáng)搴旂?nbsp;
鍦ㄦ湰鑺傦紝鎴戝皢鍚戝ぇ瀹跺睍紺烘庢牱鍒╃敤time.h涓0鏄庣殑鍑芥暟瀵規(guī)椂闂磋繘琛屾搷浣溿傝繖浜涙搷浣滃寘鎷彇褰撳墠鏃墮棿銆佽綆楁椂闂撮棿闅斻佷互涓嶅悓鐨勫艦寮忔樉紺烘椂闂寸瓑鍐呭銆?nbsp;
4.1 鑾峰緱鏃ュ巻鏃墮棿
鎴戜滑鍙互閫氳繃time()鍑芥暟鏉ヨ幏寰楁棩鍘嗘椂闂達(dá)紙Calendar Time錛夛紝鍏跺師鍨嬩負(fù)錛?br>time_t time(time_t * timer);
濡?鏋滀綘宸茬粡澹版槑浜?jiǎn)鍙傛暟timer錛屼綘鍙互浠庡弬鏁皌imer榪斿洖鐜板湪鐨勬棩鍘嗘椂闂達(dá)紝鍚屾椂涔熷彲浠ラ氳繃榪斿洖鍊艱繑鍥炵幇鍦ㄧ殑鏃ュ巻鏃墮棿錛屽嵆浠庝竴涓椂闂寸偣錛堜緥濡傦細(xì)1970騫?1鏈?鏃?鏃?鍒?縐掞級(jí)鍒扮幇鍦ㄦ鏃剁殑縐掓暟銆傚鏋滃弬鏁頒負(fù)絀猴紙NUL錛夛紝鍑芥暟灝嗗彧閫氳繃榪斿洖鍊艱繑鍥炵幇鍦ㄧ殑鏃ュ巻鏃墮棿錛屾瘮濡備笅闈㈣繖涓緥瀛愮敤鏉ユ樉紺哄綋鍓嶇殑鏃ュ巻鏃墮棿錛?
#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NUL);
printf("The Calendar Time now is %d\n",lt);
return 0;
}
榪愯鐨勭粨鏋滀笌褰撴椂鐨勬椂闂存湁鍏籌紝鎴戝綋鏃惰繍琛岀殑緇撴灉鏄細(xì)
The Calendar Time now is 1122707619
鍏朵腑1122707619灝辨槸鎴戣繍琛岀▼搴忔椂鐨勬棩鍘嗘椂闂淬傚嵆浠?970騫?鏈?鏃?鏃?鍒?縐掑埌姝ゆ椂鐨勭鏁般?nbsp;
4.2 鑾峰緱鏃ユ湡鍜屾椂闂?nbsp;
榪欓噷璇寸殑鏃ユ湡鍜屾椂闂村氨鏄垜浠鉤鏃舵墍璇寸殑騫淬佹湀銆佹棩銆佹椂銆佸垎銆佺絳変俊鎭備粠絎?鑺傛垜浠凡緇忕煡閬撹繖浜涗俊鎭兘淇濆瓨鍦ㄤ竴涓悕涓簍m鐨勭粨鏋勪綋涓紝閭d箞濡備綍灝嗕竴涓棩鍘嗘椂闂翠繚瀛樹負(fù)涓涓猼m緇撴瀯鐨勫璞″憿錛?nbsp;
鍏朵腑鍙互浣跨敤鐨勫嚱鏁版槸gmtime()鍜宭ocaltime()錛岃繖涓や釜鍑芥暟鐨勫師鍨嬩負(fù)錛?nbsp;
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
鍏?涓璯mtime()鍑芥暟鏄皢鏃ュ巻鏃墮棿杞寲涓轟笘鐣屾爣鍑嗘椂闂達(dá)紙鍗蟲牸鏋楀凹娌繪椂闂達(dá)級(jí)錛屽茍榪斿洖涓涓猼m緇撴瀯浣撴潵淇濆瓨榪欎釜鏃墮棿錛岃宭ocaltime()鍑芥暟鏄皢鏃ュ巻 鏃墮棿杞寲涓烘湰鍦版椂闂淬傛瘮濡傜幇鍦ㄧ敤gmtime()鍑芥暟鑾峰緱鐨勪笘鐣屾爣鍑嗘椂闂存槸2005騫?鏈?0鏃?鐐?8鍒?0縐掞紝閭d箞鎴戠敤localtime()鍑芥暟鍦?涓浗鍦板尯鑾峰緱鐨勬湰鍦版椂闂翠細(xì)姣斾笘鐣屾爣鍑嗘椂闂存櫄8涓皬鏃訛紝鍗?005騫?鏈?0鏃?5鐐?8鍒?0縐掋備笅闈㈡槸涓緥瀛愶細(xì)
#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *local;
time_t t;
t=time(NUL);
local=localtime(&t);
printf("Local hour is: %d\n",local->tm_hour);
local=gmtime(&t);
printf("UTC hour is: %d\n",local->tm_hour);
return 0;
}
榪愯緇撴灉鏄細(xì)
Local hour is: 15
UTC hour is: 7
4.3 鍥哄畾鐨勬椂闂存牸寮?nbsp;
鎴戜滑鍙互閫氳繃asctime()鍑芥暟鍜宑time()鍑芥暟灝嗘椂闂翠互鍥哄畾鐨勬牸寮忔樉紺哄嚭鏉ワ紝涓よ呯殑榪斿洖鍊奸兘鏄痗har*鍨嬬殑瀛楃涓層傝繑鍥炵殑鏃墮棿鏍煎紡涓猴細(xì)
鏄熸湡鍑?鏈堜喚 鏃ユ湡 鏃?鍒?縐?騫碶n\0
渚嬪錛歐ed Jan 02 02:03:55 1980\n\0
鍏朵腑\n鏄竴涓崲琛岀錛孿0鏄竴涓┖瀛楃錛岃〃紺哄瓧絎︿覆緇撴潫銆備笅闈㈡槸涓や釜鍑芥暟鐨勫師鍨嬶細(xì)
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
鍏?涓璦sctime()鍑芥暟鏄氳繃tm緇撴瀯鏉ョ敓鎴愬叿鏈夊浐瀹氭牸寮忕殑淇濆瓨鏃墮棿淇℃伅鐨勫瓧絎︿覆錛岃宑time()鏄氳繃鏃ュ巻鏃墮棿鏉ョ敓鎴愭椂闂村瓧絎︿覆銆傝繖鏍風(fēng)殑璇濓紝 asctime錛堬級(jí)鍑芥暟鍙槸鎶妕m緇撴瀯瀵硅薄涓殑鍚勪釜鍩熷~鍒版椂闂村瓧絎︿覆鐨勭浉搴斾綅緗氨琛屼簡(jiǎn)錛岃宑time錛堬級(jí)鍑芥暟闇瑕佸厛鍙傜収鏈湴鐨勬椂闂磋緗紝鎶婃棩鍘嗘椂闂磋漿鍖栦負(fù) 鏈湴鏃墮棿錛岀劧鍚庡啀鐢熸垚鏍煎紡鍖栧悗鐨勫瓧絎︿覆銆傚湪涓嬮潰錛屽鏋渢鏄竴涓潪絀虹殑time_t鍙橀噺鐨勮瘽錛岄偅涔堬細(xì)
printf(ctime(&t));
絳変環(huán)浜庯細(xì)
struct tm *ptr;
ptr=localtime(&t);
printf(asctime(ptr));
閭d箞錛屼笅闈㈣繖涓▼搴忕殑涓ゆ潯printf璇彞杈撳嚭鐨勭粨鏋滃氨鏄笉鍚岀殑浜?jiǎn)锛堥櫎闈炰綘灏嗘湰鍦版椂鍖鸿湄?fù)涓栫晫鏍囧噯鏃墮棿鎵鍦ㄧ殑鏃跺尯錛夛細(xì)
#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NUL);
ptr=gmtime(<);
printf(asctime(ptr));
printf(ctime(<));
return 0;
}
榪愯緇撴灉錛?nbsp;
Sat Jul 30 08:43:03 2005
Sat Jul 30 16:43:03 2005
4.4 鑷畾涔夋椂闂存牸寮?nbsp;
鎴戜滑鍙互浣跨敤strftime錛堬級(jí)鍑芥暟灝嗘椂闂存牸寮忓寲涓烘垜浠兂瑕佺殑鏍煎紡銆傚畠鐨勫師鍨嬪涓嬶細(xì)
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
鎴戜滑鍙互鏍規(guī)嵁format鎸囧悜瀛楃涓蹭腑鏍煎紡鍛戒護(hù)鎶妕imeptr涓繚瀛樼殑鏃墮棿淇℃伅鏀懼湪strDest鎸囧悜鐨勫瓧絎︿覆涓紝鏈澶氬悜strDest涓瓨鏀緈axsize涓瓧絎︺傝鍑芥暟榪斿洖鍚憇trDest鎸囧悜鐨勫瓧絎︿覆涓斁緗殑瀛楃鏁般?nbsp;
鍑?鏁皊trftime()鐨勬搷浣滄湁浜涚被浼間簬sprintf()錛氳瘑鍒互鐧懼垎鍙?%)寮濮嬬殑鏍煎紡鍛戒護(hù)闆嗗悎錛屾牸寮忓寲杈撳嚭緇撴灉鏀懼湪涓涓瓧絎︿覆涓傛牸寮忓寲鍛戒護(hù)璇存槑涓?strDest涓悇縐嶆棩鏈熷拰鏃墮棿淇℃伅鐨勭‘鍒囪〃紺烘柟娉曘傛牸寮忎覆涓殑鍏朵粬瀛楃鍘熸牱鏀捐繘涓蹭腑銆傛牸寮忓懡浠ゅ垪鍦ㄤ笅闈紝瀹冧滑鏄尯鍒嗗ぇ灝忓啓鐨勩?nbsp;
%a 鏄熸湡鍑犵殑綆鍐?nbsp;
%A 鏄熸湡鍑犵殑鍏ㄧО
%b 鏈堝垎鐨勭畝鍐?nbsp;
%B 鏈堜喚鐨勫叏縐?nbsp;
%c 鏍囧噯鐨勬棩鏈熺殑鏃墮棿涓?nbsp;
%C 騫翠喚鐨勫悗涓や綅鏁板瓧
%d 鍗佽繘鍒惰〃紺虹殑姣忔湀鐨勭鍑犲ぉ
%D 鏈?澶?騫?nbsp;
%e 鍦ㄤ袱瀛楃鍩熶腑錛屽崄榪涘埗琛ㄧず鐨勬瘡鏈堢殑絎嚑澶?nbsp;
%F 騫?鏈?鏃?nbsp;
%g 騫翠喚鐨勫悗涓や綅鏁板瓧錛屼嬌鐢ㄥ熀浜庡懆鐨勫勾
%G 騫村垎錛屼嬌鐢ㄥ熀浜庡懆鐨勫勾
%h 綆鍐欑殑鏈堜喚鍚?nbsp;
%H 24灝忔椂鍒剁殑灝忔椂
%I 12灝忔椂鍒剁殑灝忔椂
%j 鍗佽繘鍒惰〃紺虹殑姣忓勾鐨勭鍑犲ぉ
%m 鍗佽繘鍒惰〃紺虹殑鏈堜喚
%M 鍗佹椂鍒惰〃紺虹殑鍒嗛挓鏁?nbsp;
%n 鏂拌絎?nbsp;
%p 鏈湴鐨凙M鎴朠M鐨勭瓑浠鋒樉紺?nbsp;
%r 12灝忔椂鐨勬椂闂?nbsp;
%R 鏄劇ず灝忔椂鍜屽垎閽燂細(xì)hh:mm
%S 鍗佽繘鍒剁殑縐掓暟
%t 姘村鉤鍒惰〃絎?nbsp;
%T 鏄劇ず鏃跺垎縐掞細(xì)hh:mm:ss
%u 姣忓懆鐨勭鍑犲ぉ錛屾槦鏈熶竴涓虹涓澶?錛堝間粠0鍒?錛屾槦鏈熶竴涓?錛?nbsp;
%U 絎勾鐨勭鍑犲懆錛屾妸鏄熸湡鏃ュ仛涓虹涓澶╋紙鍊間粠0鍒?3錛?nbsp;
%V 姣忓勾鐨勭鍑犲懆錛屼嬌鐢ㄥ熀浜庡懆鐨勫勾
%w 鍗佽繘鍒惰〃紺虹殑鏄熸湡鍑狅紙鍊間粠0鍒?錛屾槦鏈熷ぉ涓?錛?nbsp;
%W 姣忓勾鐨勭鍑犲懆錛屾妸鏄熸湡涓鍋氫負(fù)絎竴澶╋紙鍊間粠0鍒?3錛?nbsp;
%x 鏍囧噯鐨勬棩鏈熶覆
%X 鏍囧噯鐨勬椂闂翠覆
%y 涓嶅甫涓栫邯鐨勫崄榪涘埗騫翠喚錛堝間粠0鍒?9錛?nbsp;
%Y 甯︿笘綰儴鍒嗙殑鍗佽繘鍒跺勾浠?nbsp;
%z錛?Z 鏃跺尯鍚嶇О錛屽鏋滀笉鑳藉緱鍒版椂鍖哄悕縐板垯榪斿洖絀哄瓧絎︺?nbsp;
%% 鐧懼垎鍙?nbsp;
濡傛灉鎯蟲樉紺虹幇鍦ㄦ槸鍑犵偣浜?jiǎn)锛岒q朵互12灝忔椂鍒舵樉紺猴紝灝辮薄涓嬮潰榪欐紼嬪簭錛?nbsp;
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
char str[80];
lt=time(NUL);
ptr=localtime(<);
strftime(str,100,"It is now %I %p",ptr);
printf(str);
return 0;
}
鍏惰繍琛岀粨鏋滀負(fù)錛?nbsp;
It is now 4PM
鑰屼笅闈㈢殑紼嬪簭鍒欐樉紺哄綋鍓嶇殑瀹屾暣鏃ユ湡錛?nbsp;
#include <stdio.h>
#include <time.h>
void main( void )
{
struct tm *newtime;
char tmpbuf[128];
time_t lt1;
time( <1 );
newtime=localtime(<1);
strftime( tmpbuf, 128, "Today is %A, day %d of %B in the year %Y.\n", newtime);
printf(tmpbuf);
}
榪愯緇撴灉錛?nbsp;
Today is Saturday, day 30 of July in the year 2005.
4.5 璁$畻鎸佺畫鏃墮棿鐨勯暱搴?nbsp;
鏈夋椂鍊欏湪瀹為檯搴旂敤涓璁$畻涓涓簨浠舵寔緇殑鏃墮棿闀垮害錛屾瘮濡傝綆楁墦瀛楅熷害銆傚湪絎?鑺傝鏃墮儴鍒嗕腑錛屾垜宸茬粡鐢╟lock鍑芥暟涓句簡(jiǎn)涓涓緥瀛愩侰lock()鍑芥暟鍙互綺劇‘鍒版縐掔駭銆傚悓鏃訛紝鎴戜滑涔熷彲浠ヤ嬌鐢╠ifftime()鍑芥暟錛屼絾瀹冨彧鑳界簿紜埌縐掋傝鍑芥暟鐨勫畾涔夊涓嬶細(xì)
double difftime(time_t time1, time_t time0);
铏界劧璇ュ嚱鏁拌繑鍥炵殑浠ョ璁$畻鐨勬椂闂撮棿闅旀槸double綾誨瀷鐨勶紝浣嗚繖騫朵笉璇存槑璇ユ椂闂村叿鏈夊悓double涓鏍風(fēng)殑綺劇‘搴︼紝榪欐槸鐢卞畠鐨勫弬鏁拌寰楃殑錛坱ime_t鏄互縐掍負(fù)鍗曚綅璁$畻鐨勶級(jí)銆傛瘮濡備笅闈竴孌電▼搴忥細(xì)
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
time_t start,end;
start = time(NUL);
system("pause");
end = time(NUL);
printf("The pause used %f seconds.\n",difftime(end,start));//<-
system("pause");
return 0;
}
榪愯緇撴灉涓猴細(xì)
璇鋒寜浠繪剰閿戶緇? . .
The pause used 2.000000 seconds.
璇鋒寜浠繪剰閿戶緇? . .
鍙互鎯沖儚錛屾殏鍋滅殑鏃墮棿騫朵笉閭d箞宸ф槸鏁存暣2縐掗挓銆傚叾瀹烇紝浣犲皢涓婇潰紼嬪簭鐨勫甫鏈?#8220;//<-”娉ㄩ噴鐨勪竴琛岀敤涓嬮潰鐨勪竴琛屼唬鐮佹浛鎹細(xì)
printf("The pause used %f seconds.\n",end-start);
鍏惰繍琛岀粨鏋滄槸涓鏍風(fēng)殑銆?nbsp;
4.6 鍒嗚В鏃墮棿杞寲涓烘棩鍘嗘椂闂?nbsp;
榪欓噷璇寸殑鍒嗚В鏃墮棿灝辨槸浠ュ勾銆佹湀銆佹棩銆佹椂銆佸垎銆佺絳夊垎閲忎繚瀛樼殑鏃墮棿緇撴瀯錛屽湪C/C++涓槸tm緇撴瀯銆傛垜浠彲浠ヤ嬌鐢╩ktime錛堬級(jí)鍑芥暟灝嗙敤tm緇撴瀯琛ㄧず鐨勬椂闂磋漿鍖栦負(fù)鏃ュ巻鏃墮棿銆傚叾鍑芥暟鍘熷瀷濡備笅錛?nbsp;
time_t mktime(struct tm * timeptr);
鍏惰繑鍥炲煎氨鏄漿鍖栧悗鐨勬棩鍘嗘椂闂淬傝繖鏍鋒垜浠氨鍙互鍏堝埗瀹氫竴涓垎瑙f椂闂達(dá)紝鐒跺悗瀵硅繖涓椂闂磋繘琛屾搷浣滀簡(jiǎn)錛屼笅闈㈢殑渚嬪瓙鍙互璁$畻鍑?997騫?鏈?鏃ユ槸鏄熸湡鍑狅細(xì)
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));
return 0;
}
榪愯緇撴灉錛?nbsp;
Tue Jul 01 00:00:01 1997
鐜板湪娉ㄦ剰浜?jiǎn)锛屾湁浜?jiǎn)mktime()鍑芥暟錛屾槸涓嶆槸鎴戜滑鍙互鎿嶄綔鐜板湪涔嬪墠鐨勪換浣曟椂闂村憿錛熶綘鍙互閫氳繃榪欑鍔炴硶綆楀嚭1945騫?鏈?5鍙鋒槸鏄熸湡鍑犲悧錛熺瓟妗堟槸鍚﹀畾鐨勩傚洜涓鴻繖涓椂闂村湪1970騫?鏈?鏃ヤ箣鍓嶏紝鎵浠ュ湪澶у鏁扮紪璇戝櫒涓紝榪欐牱鐨勭▼搴忚櫧鐒跺彲浠ョ紪璇戦氳繃錛屼絾榪愯鏃朵細(xì)寮傚父緇堟銆?
5錛庢葷粨
鏈枃浠嬬粛浜?jiǎn)鏍囧噯C/C++涓殑鏈夊叧鏃ユ湡鍜屾椂闂寸殑姒傚康錛屽茍閫氳繃鍚勭瀹炰緥璁茶堪浜?jiǎn)杩欎簺鍑芥暟鍜屾暟鎹l撴瀯鐨勪嬌鐢ㄦ柟娉曘傜瑪鑰呰涓猴紝鍜屾椂闂寸浉鍏崇殑涓浜涙蹇墊槸鐩稿綋閲嶈鐨勶紝鐞嗚В榪欎簺姒傚康鏄悊瑙e悇縐嶆椂闂存牸寮忕殑杞崲鐨勫熀紜錛屾洿鏄簲鐢ㄨ繖浜涘嚱鏁板拰鏁版嵁緇撴瀯鐨勫熀紜銆?/p>
蹇熸帓搴忓涔? 蹇熸帓搴忓涔?錛堥殢鏈哄寲鐗堟湰錛?/a>
蹇熸帓搴忓涔?錛堟渶鍒濈増錛?/a> 蹇熸帓搴忓涔?錛堟渶鍒濈増鍔犻殢鏈虹増錛?/a>
甯屽皵鎺掑簭 鍚堝茍鎺掑簭 鍫嗘帓搴?/a> 鐢ㄥ爢瀹炵幇浼樺厛闃熷垪
鍩烘暟鎺掑簭 璁℃暟鎺掑簭posted on 2009-04-25 19:30 shongbee2 闃呰(313) 璇勮(5) 緙栬緫 鏀惰棌 寮曠敤 鎵灞炲垎綾? 鏁版嵁緇撴瀯鍜岀畻娉?/font>
Feathers鐨勬枃绔犳樉鐒舵垚浜?jiǎn)杩欏嚑澶┚|戜笂鐨勭儹闂ㄨ瘽棰橈紝鎴戜滑鍙﹀涓鏈凡緇忚幏寰楃増鏉冪殑涔︺奡OA Patterns銆嬶紙Manning錛?009錛夌殑浣滆匒rnon Rotem-Gal-Oz鍙椾粬鍚彂錛屽啓浜?a >“鎵鏈夋灦鏋勫笀閮藉簲璇ヨ嚦灝戣涓婁袱閬嶇殑鍗佺瘒璁烘枃”錛?/p>
1. The Byzantine Generals Problem (1982) by Leslie Lamport, Robert Shostak and Marshall Pease
2. Go To statements considered harmfull (1968) - by Edsger W. Dijkstra
3. A Note on Distributed Computing (1994) - by Samuel C. Kendall, Jim Waldo, Ann Wollrath and Geoff Wyant
4. Big Ball of Mud (1999) - Brian Foote and Joseph Yoder
5. No Silver Bullet Essence and Accidents of Software Engineering (1987) - Frederick P. Brooks
6. The Open Closed Principle (1996) - Robert C. Martin (Uncle Bob)
7. IEEE1471-2000 A recommended practice for architectural description of software intensive systems (2000)
8. Harvest, Yield, and Scalable Tolerant Systems (1999) Armando Fox, Eric A. Brewer
9. An Introduction to Software Architecture (1993) - David Garlan and Mary Shaw
10. Who Needs an Architect? (2003) Martin Fowler
鍚彂寮忔悳绱?/span>錛氬惎鍙戝紡鎼滅儲(chǔ)灝辨槸鍦ㄧ姸鎬佺┖闂翠腑鐨勬悳绱㈠姣忎竴涓悳绱㈢殑浣嶇疆榪涜璇勪及錛屽緱鍒版渶濂界殑浣嶇疆錛屽啀浠庤繖涓綅緗繘琛屾悳绱㈢洿鍒扮洰鏍囥傝繖鏍峰彲浠ョ渷鐣ュぇ閲忔棤鐣忕殑鎼滅儲(chǔ)璺緞錛屾彁鍒頒簡(jiǎn)鏁堢巼銆傚湪鍚彂寮忔悳绱腑錛屽浣嶇疆鐨勪及浠鋒槸鍗佸垎閲嶈鐨勩傞噰鐢ㄤ簡(jiǎn)涓嶅悓鐨勪及浠峰彲浠ユ湁涓嶅悓鐨勬晥鏋溿?/span>
浼頒環(huán)鍑芥暟錛氫粠褰撳墠鑺傜偣縐誨姩鍒扮洰鏍囪妭鐐圭殑棰勪及璐圭敤錛涜繖涓及璁″氨鏄惎鍙戝紡鐨勩傚湪瀵昏礬闂鍜岃糠瀹棶棰樹腑錛屾垜浠氬父鐢ㄦ浖鍝堥】錛?span>manhattan錛変及浠峰嚱鏁幫紙涓嬫枃鏈変粙緇嶏級(jí)棰勪及璐圭敤銆?/span>
A*綆楁硶涓?span>BFS
錛氬彲浠ヨ繖鏍瘋錛?span>BFS鏄?span>A*綆楁硶鐨勪竴涓壒渚嬨傚浜庝竴涓?span>BFS綆楁硶錛屼粠褰撳墠鑺傜偣鎵╁睍鍑烘潵鐨勬瘡涓涓妭鐐癸紙濡傛灉娌℃湁琚闂繃鐨勮瘽錛夐兘瑕佹斁榪涢槦鍒楄繘琛岃繘涓姝ユ墿灞曘備篃灝辨槸璇?span>BFS鐨勪及璁″嚱鏁?span>h姘歌繙絳変簬0錛屾病鏈変竴鐐瑰惎鍙戝紡鐨勪俊鎭紝鍙互璁や負(fù)BFS鏄?#8220;鏈鐑傜殑”A*綆楁硶銆?/span>閫夊彇鏈灝忎及浠鳳細(xì)濡傛灉瀛﹁繃鏁版嵁緇撴瀯鐨勮瘽錛屽簲璇ュ彲浠ョ煡閬擄紝瀵逛簬姣忔閮借閫夊彇鏈灝忎及浠風(fēng)殑鑺傜偣錛屽簲璇ョ敤鍒版渶灝忎紭鍏堢駭闃熷垪錛堜篃鍙渶灝忎簩鍙夊爢錛夈傚湪C++鐨?span>STL閲屾湁鐜版垚鐨勬暟鎹粨鏋?span>priority_queue錛屽彲浠ョ洿鎺ヤ嬌鐢ㄣ傚綋鐒朵笉瑕佸繕浜?jiǎn)閲嶈浇鑷畾涔夎妭鐐圭殑姣旇緝鎿嶄綔绗︺?/span>
A*綆楁硶鐨勭壒鐐癸細(xì)A*綆楁硶鍦ㄧ悊璁轟笂鏄椂闂存渶浼樼殑錛屼絾鏄篃鏈夌己鐐癸細(xì)瀹冪殑絀洪棿澧為暱鏄寚鏁扮駭鍒殑銆?/span>
IDA*綆楁硶錛?/span>榪欑綆楁硶琚О涓鴻凱浠e姞娣?span>A*綆楁硶錛屽彲浠ユ湁鏁堢殑瑙e喅A*絀洪棿澧為暱甯︽潵鐨勯棶棰橈紝鐢氳嚦鍙互涓嶇敤鍒頒紭鍏堢駭闃熷垪銆傚鏋滆鐭ラ亾璇︾粏錛?span>google涓涓嬨?/span>
A*瀵昏礬鍒濇帰錛堣漿杞斤級(jí)
浣滆咃細(xì)Patrick Lester
璇戣咃細(xì)Panic2005騫?/span>
璇戣呭簭錛氬緢涔呬互鍓嶅氨鐭ラ亾浜?span>A*綆楁硶錛屼絾鏄粠鏈鐪熻榪囩浉鍏崇殑鏂囩珷錛屼篃娌℃湁鐪嬭繃浠g爜錛屽彧鏄剳瀛愰噷鏈変釜妯$硦鐨勬蹇點(diǎn)傝繖嬈″喅瀹氫粠澶村紑濮嬶紝鐮旂┒涓涓嬭繖涓浜烘帹宕囧鑷崇殑綆鍗曟柟娉曪紝浣滀負(fù)瀛︿範(fàn)浜哄伐鏅鴻兘鐨勫紑濮嬨?/span>
榪欑瘒鏂囩珷闈炲父鐭ュ悕錛屽浗鍐呭簲璇ユ湁涓嶅皯浜虹炕璇戣繃瀹冿紝鎴戞病鏈夋煡鎵撅紝瑙夊緱緲昏瘧鏈韓涔熸槸瀵硅嚜韜嫳鏂囨按騫崇殑閿葷偧銆傜粡榪囧姫鍔涳紝緇堜簬瀹屾垚浜?jiǎn)鏂囨。锛屼篃鏄庣櫧鐨?span>A*綆楁硶鐨勫師鐞嗐傛鏃犵枒闂紝浣滆呯敤褰㈣薄鐨勬弿榪幫紝綆媧佽瘷璋愮殑璇█鐢辨祬鍏ユ繁鐨勮榪頒簡(jiǎn)榪欎竴紲炲鐨勭畻娉曪紝鐩鎬俊姣忎釜璇昏繃鐨勪漢閮戒細(xì)瀵規(guī)鏈夋墍璁よ瘑錛堝鏋滄病鏈夛紝閭e氨鏄伓鐨勭炕璇戝お宸簡(jiǎn)--b錛夈?/span>
鐜板湪鏄勾鏈堟棩鐨勭増鏈紝搴斿師浣滆呰姹傦紝瀵規(guī)枃涓殑鏌愪簺綆楁硶緇嗚妭鍋氫簡(jiǎn)淇敼銆?/span>
鍘熸枃閾炬帴錛?span>http://www.gamedev.net/reference/articles/article2003.asp
鍘熶綔鑰呮枃绔犻摼鎺ワ細(xì)http://www.policyalmanac.org/games/aStarTutorial.htm
浠ヤ笅鏄炕璇戠殑姝f枃
浼?xì)鑰呬笉闅撅紝A*(蹇典綔A鏄?span>)綆楁硶瀵瑰垵瀛﹁呮潵璇寸殑紜湁浜涢毦搴︺傝繖綃囨枃绔犲茍涓嶈瘯鍥懼榪欎釜璇濋浣滄潈濞佺殑闄堣堪銆傚彇鑰屼唬涔嬬殑鏄紝瀹冨彧鏄弿榪扮畻娉曠殑鍘熺悊錛屼嬌浣犲彲浠ュ湪榪涗竴姝ョ殑闃呰涓悊瑙e叾浠栫浉鍏崇殑璧勬枡銆傛渶鍚庯紝榪欑瘒鏂囩珷娌℃湁紼嬪簭緇嗚妭銆備綘灝藉彲浠ョ敤浠繪剰鐨勮綆楁満紼嬪簭璇█瀹炵幇瀹冦傚浣犳墍鎰匡紝鎴戝湪鏂囩珷鐨勬湯灝懼寘鍚簡(jiǎn)涓涓寚鍚戜緥瀛愮▼搴忕殑閾炬帴銆傚帇緙╁寘鍖呮嫭C++鍜?span>Blitz Basic涓や釜璇█鐨勭増鏈紝濡傛灉浣犲彧鏄兂鐪嬬湅瀹冪殑榪愯鏁堟灉錛岄噷闈㈣繕鍖呭惈浜?jiǎn)鍙墽琛屾枃錃g銆傛垜浠鍦ㄦ彁楂樿嚜宸便傝鎴戜滑浠庡ご寮濮嬨傘傘?/span>
搴忥細(xì)鎼滅儲(chǔ)鍖哄煙
鍋囪鏈変漢鎯充粠A鐐圭Щ鍔ㄥ埌涓澧欎箣闅旂殑B鐐癸紝濡備笅鍥撅紝緇胯壊鐨勬槸璧風(fēng)偣A錛岀孩鑹叉槸緇堢偣B錛岃摑鑹叉柟鍧楁槸涓棿鐨勫銆?/span>

[鍥?span>-1]
浣犻鍏堟敞鎰忓埌錛屾悳绱㈠尯鍩熻鎴戜滑鍒掑垎鎴愪簡(jiǎn)鏂瑰艦緗戞牸銆傚儚榪欐牱錛岀畝鍖栨悳绱㈠尯鍩燂紝鏄璺殑絎竴姝ャ傝繖涓鏂規(guī)硶鎶婃悳绱㈠尯鍩熺畝鍖栨垚浜?jiǎn)涓涓簩緇存暟緇勩傛暟緇勭殑姣忎竴涓厓绱犳槸緗戞牸鐨勪竴涓柟鍧楋紝鏂瑰潡琚爣璁頒負(fù)鍙氳繃鐨勫拰涓嶅彲閫氳繃鐨勩傝礬寰勮鎻忚堪涓轟粠A鍒?span>B鎴戜滑緇忚繃鐨勬柟鍧楃殑闆嗗悎銆備竴鏃﹁礬寰勮鎵懼埌錛屾垜浠殑浜哄氨浠庝竴涓柟鏍肩殑涓績(jī)璧板悜鍙︿竴涓紝鐩村埌鍒拌揪鐩殑鍦般?/span>
榪欎簺涓偣琚О涓?/span>“鑺傜偣”銆傚綋浣犻槄璇誨叾浠栫殑瀵昏礬璧勬枡鏃訛紝浣犲皢緇忓父浼?xì)鐪嬪堫C漢浠璁鴻妭鐐廣備負(fù)浠涔堜笉鎶婁粬浠弿榪頒負(fù)鏂規(guī)牸鍛紵鍥犱負(fù)鏈夊彲鑳戒綘鐨勮礬寰勮鍒嗗壊鎴愬叾浠栦笉鏄柟鏍肩殑緇撴瀯銆備粬浠畬鍏ㄥ彲浠ユ槸鐭╁艦錛屽叚瑙掑艦錛屾垨鑰呭叾浠栦換鎰忓艦鐘躲傝妭鐐硅兘澶熻鏀劇疆鍦ㄥ艦鐘剁殑浠繪剰浣嶇疆錛嶅彲浠ュ湪涓績(jī)錛屾垨鑰呮部鐫杈圭晫錛屾垨鍏朵粬浠涔堝湴鏂廣傛垜浠嬌鐢ㄨ繖縐嶇郴緇燂紝鏃犺濡備綍錛屽洜涓哄畠鏄渶綆鍗曠殑銆?/span>
寮濮嬫悳绱?/span>
姝e鎴戜滑澶勭悊涓婂浘緗戞牸鐨勬柟娉曪紝涓鏃︽悳绱㈠尯鍩熻杞寲涓哄鏄撳鐞嗙殑鑺傜偣錛屼笅涓姝ュ氨鏄幓寮曞涓嬈℃壘鍒版渶鐭礬寰勭殑鎼滅儲(chǔ)銆傚湪A*瀵昏礬綆楁硶涓紝鎴戜滑閫氳繃浠庣偣A寮濮嬶紝媯(gè)鏌ョ浉閭繪柟鏍肩殑鏂瑰紡錛屽悜澶栨墿灞曠洿鍒版壘鍒扮洰鏍囥?/span>
鎴戜滑鍋氬涓嬫搷浣滃紑濮嬫悳绱細(xì)
1錛屼粠鐐?span>A寮濮嬶紝騫朵笖鎶婂畠浣滀負(fù)寰呭鐞嗙偣瀛樺叆涓涓?/span>“寮鍚垪琛?/span>”銆傚紑鍚垪琛ㄥ氨鍍忎竴寮犺喘鐗╂竻鍗曘傚敖綆$幇鍦ㄥ垪琛ㄩ噷鍙湁涓涓厓绱狅紝浣嗕互鍚庡氨浼?xì)澶氳典h潵銆備綘鐨勮礬寰勫彲鑳戒細(xì)閫氳繃瀹冨寘鍚殑鏂規(guī)牸錛屼篃鍙兘涓嶄細(xì)銆傚熀鏈笂錛岃繖鏄竴涓緟媯(gè)鏌ユ柟鏍肩殑鍒楄〃銆?/span>
2錛屽鎵捐搗鐐瑰懆鍥存墍鏈夊彲鍒拌揪鎴栬呭彲閫氳繃鐨勬柟鏍鹼紝璺寵繃鏈夊錛屾按錛屾垨鍏朵粬鏃犳硶閫氳繃鍦板艦鐨勬柟鏍箋備篃鎶婁粬浠姞鍏ュ紑鍚垪琛ㄣ備負(fù)鎵鏈夎繖浜涙柟鏍間繚瀛樼偣A浣滀負(fù)“鐖舵柟鏍?/span>”銆傚綋鎴戜滑鎯蟲弿榪拌礬寰勭殑鏃跺欙紝鐖舵柟鏍肩殑璧勬枡鏄崄鍒嗛噸瑕佺殑銆傚悗闈細(xì)瑙i噴瀹冪殑鍏蜂綋鐢ㄩ斻?/span>
3錛屼粠寮鍚垪琛ㄤ腑鍒犻櫎鐐?span>A錛屾妸瀹冨姞鍏ュ埌涓涓?/span>“鍏抽棴鍒楄〃”錛屽垪琛ㄤ腑淇濆瓨鎵鏈変笉闇瑕佸啀嬈℃鏌ョ殑鏂規(guī)牸銆傚湪榪欎竴鐐癸紝浣犲簲璇ュ艦鎴愬鍥劇殑緇撴瀯銆傚湪鍥句腑錛屾殫緇胯壊鏂規(guī)牸鏄綘璧峰鏂規(guī)牸鐨勪腑蹇?jī)銆傚畠琚敤嫻呰摑鑹叉弿杈癸紝浠ヨ〃紺哄畠琚姞鍏ュ埌鍏抽棴鍒楄〃涓簡(jiǎn)銆傛墍鏈夌殑鐩擱偦鏍肩幇鍦ㄩ兘鍦ㄥ紑鍚垪琛ㄤ腑錛屽畠浠鐢ㄦ祬緇胯壊鎻忚竟銆傛瘡涓柟鏍奸兘鏈変竴涓伆鑹叉寚閽堝弽鎸囦粬浠殑鐖舵柟鏍鹼紝涔熷氨鏄紑濮嬬殑鏂規(guī)牸銆?/span>

[鍥?span>-2]
鎺ョ潃錛屾垜浠夋嫨寮鍚垪琛ㄤ腑鐨勪復(fù)榪戞柟鏍鹼紝澶ц嚧閲嶅鍓嶉潰鐨勮繃紼嬶紝濡備笅銆備絾鏄紝鍝釜鏂規(guī)牸鏄垜浠閫夋嫨鐨勫憿錛熸槸閭d釜F鍊兼渶浣庣殑銆?/span>
璺緞璇勫垎
閫夋嫨璺緞涓粡榪囧摢涓柟鏍肩殑鍏抽敭鏄笅闈㈣繖涓瓑寮忥細(xì)F = G + H
榪欓噷錛?/span>
* G = 浠庤搗鐐?span>A錛屾部鐫浜х敓鐨勮礬寰勶紝縐誨姩鍒扮綉鏍間笂鎸囧畾鏂規(guī)牸鐨勭Щ鍔ㄨ楄垂銆?/span>
* H = 浠庣綉鏍間笂閭d釜鏂規(guī)牸縐誨姩鍒扮粓鐐?span>B鐨勯浼扮Щ鍔ㄨ楄垂銆傝繖緇忓父琚О涓哄惎鍙戝紡鐨勶紝鍙兘浼?xì)璁╀綘鏈夌偣杩锋儜銆傝繖鏍峰彨鐨勫師鍥犳槸鍥犱負(fù)瀹冨彧鏄釜鐚滄祴銆傛垜浠病鍔炴硶浜嬪厛鐭ラ亾璺緞鐨勯暱搴︼紝鍥犱負(fù)璺笂鍙兘瀛樺湪鍚勭闅滅(澧欙紝姘達(dá)紝絳夌瓑)銆傝櫧鐒舵湰鏂囧彧鎻愪緵浜?jiǎn)涓縐嶈綆?span>H鐨勬柟娉曪紝浣嗘槸浣犲彲浠ュ湪緗戜笂鎵懼埌寰堝鍏朵粬鐨勬柟娉曘?/span>
鎴戜滑鐨勮礬寰勬槸閫氳繃鍙嶅閬嶅巻寮鍚垪琛ㄥ茍涓旈夋嫨鍏鋒湁鏈浣?span>F鍊肩殑鏂規(guī)牸鏉ョ敓鎴愮殑銆傛枃绔犲皢瀵硅繖涓繃紼嬪仛鏇磋緇嗙殑鎻忚堪銆傞鍏堬紝鎴戜滑鏇存繁鍏ョ殑鐪嬬湅濡備綍璁$畻榪欎釜鏂圭▼銆?/span>
姝e涓婇潰鎵璇達(dá)紝G琛ㄧず娌胯礬寰勪粠璧風(fēng)偣鍒板綋鍓嶇偣鐨勭Щ鍔ㄨ楄垂銆傚湪榪欎釜渚嬪瓙閲岋紝鎴戜滑浠ゆ按騫蟲垨鑰呭瀭鐩寸Щ鍔ㄧ殑鑰楄垂涓猴紝瀵硅綰挎柟鍚戣楄垂涓恒傛垜浠彇榪欎簺鍊兼槸鍥犱負(fù)娌垮瑙掔嚎鐨勮窛紱繪槸娌挎按騫蟲垨鍨傜洿縐誨姩鑰楄垂鐨勭殑鏍瑰彿錛堝埆鎬曪級(jí)錛屾垨鑰呯害.414鍊嶃備負(fù)浜?jiǎn)绠鍖栵紝鎴戜滑鐢ㄥ拰榪戜技銆傛瘮渚嬪熀鏈紜紝鍚屾椂鎴戜滑閬垮厤浜?jiǎn)姹傛牴杩惤帡鍜尀畯鏁般傝繖涓嶆槸鍙洜涓烘垜浠曢夯鐑?chǔ)鎴栬呬笉鍠滄鏁板銆備嬌鐢ㄨ繖鏍風(fēng)殑鏁存暟瀵硅綆楁満鏉ヨ涔熸洿蹇嵎銆備綘涓嶅氨灝變細(xì)鍙戠幇錛屽鏋滀綘涓嶄嬌鐢ㄨ繖浜涚畝鍖栨柟娉曪紝瀵昏礬浼?xì)鍙樺緱寰堟參銆?/span>
鏃㈢劧鎴戜滑鍦ㄨ綆楁部鐗瑰畾璺緞閫氬線鏌愪釜鏂規(guī)牸鐨?span>G鍊鹼紝姹傚肩殑鏂規(guī)硶灝辨槸鍙栧畠鐖惰妭鐐圭殑G鍊鹼紝鐒跺悗渚濈収瀹冪浉瀵圭埗鑺傜偣鏄瑙掔嚎鏂瑰悜鎴栬呯洿瑙掓柟鍚?span>(闈炲瑙掔嚎)錛屽垎鍒鍔犲拰銆備緥瀛愪腑榪欎釜鏂規(guī)硶鐨勯渶姹備細(xì)鍙樺緱鏇村錛屽洜涓烘垜浠粠璧風(fēng)偣鏂規(guī)牸浠ュ鑾峰彇浜?jiǎn)涓嶆涓涓柟鏍箋?/span>
H鍊煎彲浠ョ敤涓嶅悓鐨勬柟娉曚及綆椼傛垜浠繖閲屼嬌鐢ㄧ殑鏂規(guī)硶琚О涓烘浖鍝堥】鏂規(guī)硶錛屽畠璁$畻浠庡綋鍓嶆牸鍒扮洰鐨勬牸涔嬮棿姘村鉤鍜屽瀭鐩寸殑鏂規(guī)牸鐨勬暟閲忔誨拰錛屽拷鐣ュ瑙掔嚎鏂瑰悜錛岀劧鍚庢妸緇撴灉涔樹互10銆傝繖琚О涓烘浖鍝堥】鏂規(guī)硶鏄洜涓哄畠鐪嬭搗鏉ュ儚璁$畻鍩庡競(jìng)涓粠涓涓湴鏂瑰埌鍙﹀涓涓湴鏂圭殑琛楀尯鏁幫紝鍦ㄩ偅閲屼綘涓嶈兘娌垮瑙掔嚎鏂瑰悜絀胯繃琛楀尯銆傚緢閲嶈鐨勪竴鐐癸紝鎴戜滑蹇界暐浜?jiǎn)涓鍒囬殰紕嶇墿銆傝繖鏄鍓╀綑璺濈鐨勪竴涓及綆楋紝鑰岄潪瀹為檯鍊鹼紝榪欎篃鏄繖涓鏂規(guī)硶琚О涓哄惎鍙戝紡鐨勫師鍥犮傛兂鐭ラ亾鏇村錛熶綘鍙互鍦ㄨ繖閲屾壘鍒版柟紼嬪拰棰濆鐨勬敞瑙c?/span>
F鐨勫兼槸G鍜?span>H鐨勫拰銆傜涓姝ユ悳绱㈢殑緇撴灉鍙互鍦ㄤ笅闈㈢殑鍥捐〃涓湅鍒般?span>F,G鍜?span>H鐨勮瘎鍒嗚鍐欏湪姣忎釜鏂規(guī)牸閲屻傛濡傚湪绱ф尐璧峰鏍煎彸渚х殑鏂規(guī)牸鎵琛ㄧず鐨勶紝F琚墦鍗板湪宸︿笂瑙掞紝G鍦ㄥ乏涓嬭錛?span>H鍒欏湪鍙充笅瑙掋?/span>

[鍥?span>-3]
鐜板湪鎴戜滑鏉ョ湅鐪嬭繖浜涙柟鏍箋傚啓瀛楁瘝鐨勬柟鏍奸噷錛?span>G = 10銆傝繖鏄洜涓哄畠鍙湪姘村鉤鏂瑰悜鍋忕璧峰鏍間竴涓牸璺濄傜揣閭昏搗濮嬫牸鐨勪笂鏂癸紝涓嬫柟鍜屽乏杈圭殑鏂規(guī)牸鐨?span>G鍊奸兘絳変簬銆傚瑙掔嚎鏂瑰悜鐨?span>G鍊兼槸銆?/span>
H鍊奸氳繃姹傝В鍒扮孩鑹茬洰鏍囨牸鐨勬浖鍝堥】璺濈寰楀埌錛屽叾涓彧鍦ㄦ按騫沖拰鍨傜洿鏂瑰悜縐誨姩錛屽茍涓斿拷鐣ヤ腑闂寸殑澧欍傜敤榪欑鏂規(guī)硶錛岃搗鐐瑰彸渚х揣閭?cè)潥勬栆?guī)牸紱葷孩鑹叉柟鏍兼湁鏍艱窛紱伙紝H鍊煎氨鏄傝繖鍧楁柟鏍間笂鏂圭殑鏂規(guī)牸鏈夋牸璺濈(璁頒綇錛屽彧鑳藉湪姘村鉤鍜屽瀭鐩存柟鍚戠Щ鍔?span>)錛?span>H鍊兼槸銆備綘澶ц嚧搴旇鐭ラ亾濡備綍璁$畻鍏朵粬鏂規(guī)牸鐨?span>H鍊間簡(jiǎn)锝炪傛瘡涓牸瀛愮殑F鍊鹼紝榪樻槸綆鍗曠殑鐢?span>G鍜?span>H鐩稿姞寰楀埌
緇х畫鎼滅儲(chǔ)
涓轟簡(jiǎn)緇х畫鎼滅儲(chǔ)錛屾垜浠畝鍗曠殑浠庡紑鍚垪琛ㄤ腑閫夋嫨F鍊兼渶浣庣殑鏂規(guī)牸銆傜劧鍚庯紝瀵歸変腑鐨勬柟鏍煎仛濡備笅澶勭悊錛?/span>
4錛屾妸瀹冧粠寮鍚垪琛ㄤ腑鍒犻櫎錛岀劧鍚庢坊鍔犲埌鍏抽棴鍒楄〃涓?/span>
5錛屾鏌ユ墍鏈夌浉閭繪牸瀛愩傝煩榪囬偅浜涘凡緇忓湪鍏抽棴鍒楄〃涓殑鎴栬呬笉鍙氳繃鐨?span>(鏈夊錛屾按鐨勫湴褰紝鎴栬呭叾浠栨棤娉曢氳繃鐨勫湴褰?span>)錛屾妸浠栦滑娣誨姞榪涘紑鍚垪琛紝濡傛灉浠栦滑榪樹笉鍦ㄩ噷闈㈢殑璇濄傛妸閫変腑鐨勬柟鏍間綔涓烘柊鐨勬柟鏍肩殑鐖惰妭鐐廣?/span>
6錛屽鏋滄煇涓浉閭繪牸宸茬粡鍦ㄥ紑鍚垪琛ㄩ噷浜?jiǎn)锛寢個(gè)鏌ョ幇鍦ㄧ殑榪欐潯璺緞鏄惁鏇村ソ銆傛崲鍙ヨ瘽璇達(dá)紝媯(gè)鏌ュ鏋滄垜浠敤鏂扮殑璺緞鍒拌揪瀹冪殑璇濓紝G鍊兼槸鍚︿細(xì)鏇翠綆涓浜涖傚鏋滀笉鏄紝閭e氨浠涔堥兘涓嶅仛銆?/span>
鍙︿竴鏂歸潰錛屽鏋滄柊鐨?span>G鍊兼洿浣庯紝閭e氨鎶婄浉閭繪柟鏍肩殑鐖惰妭鐐規(guī)敼涓虹洰鍓嶉変腑鐨勬柟鏍鹼紙鍦ㄤ笂闈㈢殑鍥捐〃涓紝鎶婄澶寸殑鏂瑰悜鏀逛負(fù)鎸囧悜榪欎釜鏂規(guī)牸錛夈傛渶鍚庯紝閲嶆柊璁$畻F鍜?span>G鐨勫箋傚鏋滆繖鐪嬭搗鏉ヤ笉澶熸竻鏅幫紝浣犲彲浠ョ湅涓嬮潰鐨勫浘紺恒?/span>
濂戒簡(jiǎn)錛岃鎴戜滑鐪嬬湅瀹冩槸鎬庝箞榪愪綔鐨勩傛垜浠渶鍒濈殑鏍兼柟鏍間腑錛屽湪璧風(fēng)偣琚垏鎹㈠埌鍏抽棴鍒楄〃涓悗錛岃繕鍓╂牸鐣欏湪寮鍚垪琛ㄤ腑銆傝繖閲岄潰錛?span>F鍊兼渶浣庣殑閭d釜鏄搗濮嬫牸鍙充晶绱ч偦鐨勬牸瀛愶紝瀹冪殑F鍊兼槸銆傚洜姝ゆ垜浠夋嫨榪欎竴鏍間綔涓轟笅涓涓澶勭悊鐨勬柟鏍箋傚湪绱ч殢鐨勫浘涓紝瀹冭鐢ㄨ摑鑹茬獊鍑烘樉紺恒?/span>

[鍥?span>-4]
棣栧厛錛屾垜浠妸瀹冧粠寮鍚垪琛ㄤ腑鍙栧嚭錛屾斁鍏ュ叧闂垪琛?span>(榪欏氨鏄粬琚摑鑹茬獊鍑烘樉紺虹殑鍘熷洜)銆傜劧鍚庢垜浠鏌ョ浉閭?cè)潥勬牸瀛愩傚摝錛屽彸渚х殑鏍煎瓙鏄錛屾墍浠ユ垜浠暐榪囥傚乏渚х殑鏍煎瓙鏄搗濮嬫牸銆傚畠鍦ㄥ叧闂垪琛ㄩ噷錛屾墍浠ユ垜浠篃璺寵繃瀹冦?/span>
鍏朵粬鏍煎凡緇忓湪寮鍚垪琛ㄩ噷浜?jiǎn)锛屼簬鏄垜浠瑡個(gè)鏌?span>G鍊兼潵鍒ゅ畾錛屽鏋滈氳繃榪欎竴鏍煎埌杈鵑偅閲岋紝璺緞鏄惁鏇村ソ銆傛垜浠潵鐪嬮変腑鏍煎瓙涓嬮潰鐨勬柟鏍箋傚畠鐨?span>G鍊兼槸銆傚鏋滄垜浠粠褰撳墠鏍肩Щ鍔ㄥ埌閭i噷錛?span>G鍊煎氨浼?xì)绛変?span>(鍒拌揪褰撳墠鏍肩殑G鍊兼槸錛岀Щ鍔ㄥ埌涓婇潰鐨勬牸瀛愬皢浣垮緱G鍊煎鍔?span>)銆傚洜涓?span>G鍊煎ぇ浜庯紝鎵浠ヨ繖涓嶆槸鏇村ソ鐨勮礬寰勩傚鏋滀綘鐪嬪浘錛屽氨鑳界悊瑙c備笌鍏墮氳繃鍏堟按騫崇Щ鍔ㄤ竴鏍鹼紝鍐嶅瀭鐩寸Щ鍔ㄤ竴鏍鹼紝榪樹笉濡傜洿鎺ユ部瀵硅綰挎柟鍚戠Щ鍔ㄤ竴鏍兼潵寰楃畝鍗曘?/span>
褰撴垜浠宸茬粡瀛樺湪浜庡紑鍚垪琛ㄤ腑鐨勪釜涓磋繎鏍奸噸澶嶈繖涓榪囩▼鐨勬椂鍊欙紝鎴戜滑鍙戠幇娌℃湁涓鏉¤礬寰勫彲浠ラ氳繃浣跨敤褰撳墠鏍煎瓙寰楀埌鏀瑰杽錛屾墍浠ユ垜浠笉鍋氫換浣曟敼鍙樸傛棦鐒舵垜浠凡緇忔鏌ヨ繃浜?jiǎn)鎵鏈夐偦榪戞牸錛岄偅涔堝氨鍙互縐誨姩鍒頒笅涓鏍間簡(jiǎn)銆?/span>
浜庢槸鎴戜滑媯(gè)绱㈠紑鍚垪琛紝鐜板湪閲岄潰鍙湁7鏍間簡(jiǎn)錛屾垜浠粛鐒墮夋嫨鍏朵腑F鍊兼渶浣庣殑銆傛湁瓚g殑鏄紝榪欐錛屾湁涓や釜鏍煎瓙鐨勬暟鍊奸兘鏄傛垜浠浣曢夋嫨錛熻繖騫朵笉楹葷儲(chǔ)銆備粠閫熷害涓婅冭檻錛岄夋嫨鏈鍚庢坊鍔犺繘鍒楄〃鐨勬牸瀛愪細(xì)鏇村揩鎹楓傝繖縐嶅鑷翠簡(jiǎn)瀵昏礬榪囩▼涓紝鍦ㄩ潬榪戠洰鏍囩殑鏃跺欙紝浼樺厛浣跨敤鏂版壘鍒扮殑鏍煎瓙鐨勫亸濂姐備絾榪欐棤鍏崇揣瑕併傦紙瀵圭浉鍚屾暟鍊肩殑涓嶅悓瀵瑰緟錛屽鑷翠笉鍚岀増鏈殑A*綆楁硶鎵懼埌絳夐暱鐨勪笉鍚岃礬寰勶級(jí)閭f垜浠氨閫夋嫨璧峰鏍煎彸涓嬫柟鐨勬牸瀛愶紝濡傚浘錛?/span>

[鍥?span>-5]
榪欐錛屽綋鎴戜滑媯(gè)鏌ョ浉閭繪牸鐨勬椂鍊欙紝鍙戠幇鍙充晶鏄錛屼簬鏄暐榪囥備笂闈竴鏍間篃琚暐榪囥傛垜浠篃鐣ヨ繃浜?jiǎn)澧欎笅闈㈢殑鏍煎瓙銆備負(fù)浠涔堝憿錛熷洜涓轟綘涓嶈兘鍦ㄤ笉絀胯秺澧欒鐨勬儏鍐典笅鐩存帴鍒拌揪閭d釜鏍煎瓙銆備綘鐨勭‘闇瑕佸厛寰涓嬭蛋鐒跺悗鍒拌揪閭d竴鏍鹼紝鎸夐儴灝辯彮鐨勮蛋榪囬偅涓嫄瑙掋?span>(娉ㄨВ錛氱┛瓚婃嫄瑙掔殑瑙勫垯鏄彲閫夌殑銆傚畠鍙栧喅浜庝綘鐨勮妭鐐規(guī)槸濡備綍鏀劇疆鐨勩?span>)
榪欐牱涓鏉ワ紝灝卞墿涓嬩簡(jiǎn)鍏朵粬鏍箋傚綋鍓嶆牸涓嬮潰鐨勫彟澶栦袱涓牸瀛愮洰鍓嶄笉鍦ㄥ紑鍚垪琛ㄤ腑錛屼簬鏄垜浠坊鍔犱粬浠紝騫朵笖鎶婂綋鍓嶆牸鎸囧畾涓轟粬浠殑鐖惰妭鐐廣傚叾浣欐牸錛屼袱涓凡緇忓湪鍏抽棴鍒楄〃涓紙璧峰鏍鹼紝鍜屽綋鍓嶆牸涓婃柟鐨勬牸瀛愶紝鍦ㄨ〃鏍間腑钃濊壊楂樹寒鏄劇ず),浜庢槸鎴戜滑鐣ヨ繃瀹冧滑銆傛渶鍚庝竴鏍鹼紝鍦ㄥ綋鍓嶆牸鐨勫乏渚э紝灝嗚媯(gè)鏌ラ氳繃榪欐潯璺緞錛?span>G鍊兼槸鍚︽洿浣庛備笉蹇呮媴蹇?jī)锛屾垜浠凡缁忓噯澶囧ソ妫鏌ュ紑鍚垪琛ㄤ腑鐨勪笅涓鏍間簡(jiǎn)銆?/span>
鎴戜滑閲嶅榪欎釜榪囩▼錛岀洿鍒扮洰鏍囨牸琚坊鍔犺繘鍏抽棴鍒楄〃(娉ㄨВ)錛屽氨濡傚湪涓嬮潰鐨勫浘涓墍鐪嬪埌鐨勩?/span>

[鍥?span>-6]
娉ㄦ剰錛岃搗濮嬫牸涓嬫柟鏍煎瓙鐨勭埗鑺傜偣宸茬粡鍜屽墠闈笉鍚岀殑銆備箣鍓嶅畠鐨?span>G鍊兼槸錛屽茍涓旀寚鍚戝彸涓婃柟鐨勬牸瀛愩傜幇鍦ㄥ畠鐨?span>G鍊兼槸錛屾寚鍚戝畠涓婃柟鐨勬牸瀛愩傝繖鍦ㄥ璺繃紼嬩腑鐨勬煇澶勫彂鐢燂紝褰撳簲鐢ㄦ柊璺緞鏃訛紝G鍊肩粡榪囨鏌ュ彉寰椾綆浜?jiǎn)锛嶄簬鏄埗鑺傜偣琚噸鏂版寚瀹氬Q?span>G鍜?span>F鍊艱閲嶆柊璁$畻銆傚敖綆¤繖涓鍙樺寲鍦ㄨ繖涓緥瀛愪腑騫朵笉閲嶈錛屽湪寰堝鍦哄悎錛岃繖縐嶅彉鍖栦細(xì)瀵艱嚧瀵昏礬緇撴灉鐨勫法澶у彉鍖栥?/span>
閭d箞錛屾垜浠庝箞紜畾榪欐潯璺緞鍛紵寰堢畝鍗曪紝浠庣孩鑹茬殑鐩爣鏍煎紑濮嬶紝鎸夌澶寸殑鏂瑰悜鏈濈埗鑺傜偣縐誨姩銆傝繖鏈緇堜細(xì)寮曞浣犲洖鍒拌搗濮嬫牸錛岃繖灝辨槸浣犵殑璺緞錛佺湅璧鋒潵搴旇鍍忓浘涓偅鏍楓備粠璧峰鏍?span>A縐誨姩鍒扮洰鏍囨牸B鍙槸綆鍗曠殑浠庢瘡涓牸瀛愶紙鑺傜偣錛夌殑涓偣娌胯礬寰勭Щ鍔ㄥ埌涓嬩竴涓紝鐩村埌浣犲埌杈劇洰鏍囩偣銆傚氨榪欎箞綆鍗曘?/span>

[鍥?span>-7]
A*鏂規(guī)硶鎬葷粨
濂斤紝鐜板湪浣犲凡緇忕湅瀹屼簡(jiǎn)鏁翠釜璇存槑錛岃鎴戜滑鎶婃瘡涓姝ョ殑鎿嶄綔鍐欏湪涓璧鳳細(xì)
1錛屾妸璧峰鏍兼坊鍔犲埌寮鍚垪琛ㄣ?/span>
2錛岄噸澶嶅涓嬬殑宸ヤ綔錛?/span>
a) 瀵繪壘寮鍚垪琛ㄤ腑F鍊兼渶浣庣殑鏍煎瓙銆傛垜浠О瀹冧負(fù)褰撳墠鏍箋?/span>
b) 鎶婂畠鍒囨崲鍒板叧闂垪琛ㄣ?/span>
c) 瀵圭浉閭?cè)潥勬犻g腑鐨勬瘡涓涓紵
* 濡傛灉瀹冧笉鍙氳繃鎴栬呭凡緇忓湪鍏抽棴鍒楄〃涓紝鐣ヨ繃瀹冦傚弽涔嬪涓嬨?/span>
* 濡傛灉瀹冧笉鍦ㄥ紑鍚垪琛ㄤ腑錛屾妸瀹冩坊鍔犺繘鍘匯傛妸褰撳墠鏍間綔涓鴻繖涓鏍肩殑鐖惰妭鐐廣傝褰曡繖涓鏍肩殑F,G,鍜?span>H鍊箋?/span>
* 濡傛灉瀹冨凡緇忓湪寮鍚垪琛ㄤ腑錛岀敤G鍊間負(fù)鍙傝冩鏌ユ柊鐨勮礬寰勬槸鍚︽洿濂姐傛洿浣庣殑G鍊兼剰鍛崇潃鏇村ソ鐨勮礬寰勩傚鏋滄槸榪欐牱錛屽氨鎶婅繖涓鏍肩殑鐖惰妭鐐規(guī)敼鎴愬綋鍓嶆牸錛屽茍涓旈噸鏂拌綆楄繖涓鏍肩殑G鍜?span>F鍊箋傚鏋滀綘淇濇寔浣犵殑寮鍚垪琛ㄦ寜F鍊兼帓搴忥紝鏀瑰彉涔嬪悗浣犲彲鑳介渶瑕侀噸鏂板寮鍚垪琛ㄦ帓搴忋?/span>
d) 鍋滄錛屽綋浣?/span>
* 鎶婄洰鏍囨牸娣誨姞榪涗簡(jiǎn)鍏抽棴鍒楄〃(娉ㄨВ)錛岃繖鏃跺欒礬寰勮鎵懼埌錛屾垨鑰?/span>
* 娌℃湁鎵懼埌鐩爣鏍鹼紝寮鍚垪琛ㄥ凡緇忕┖浜?jiǎn)銆傝繖鏃跺欙紝璺緞涓嶅瓨鍦ㄣ?/span>
3.淇濆瓨璺緞銆備粠鐩爣鏍煎紑濮嬶紝娌跨潃姣忎竴鏍肩殑鐖惰妭鐐圭Щ鍔ㄧ洿鍒板洖鍒拌搗濮嬫牸銆傝繖灝辨槸浣犵殑璺緞銆?/span>
(娉ㄨВ:鍦ㄨ繖綃囨枃绔犵殑杈冩棭鐗堟湰涓紝寤鴻鐨勫仛娉曟槸褰撶洰鏍囨牸錛堟垨鑺傜偣錛夎鍔犲叆鍒板紑鍚垪琛紝鑰屼笉鏄叧闂垪琛ㄧ殑鏃跺欏仠姝㈠璺傝繖涔堝仛浼?xì)鏇礃q呴燂紝鑰屼笖鍑犱箮鎬繪槸鑳芥壘鍒版渶鐭殑璺緞錛屼絾涓嶆槸緇濆鐨勩傚綋浠庡掓暟絎簩涓妭鐐瑰埌鏈鍚庝竴涓紙鐩爣鑺傜偣錛変箣闂寸殑縐誨姩鑰楄垂鎮(zhèn)畩寰堝ぇ鏃訛紞渚嬪鍒氬ソ鏈変竴鏉℃渤絀胯秺涓や釜鑺傜偣涓棿錛岃繖鏃跺欐棫鐨勫仛娉曞拰鏂扮殑鍋氭硶灝變細(xì)鏈夋樉钁椾笉鍚屻?span>)
棰樺璇?/span>
紱婚涓涓嬶紝瑙佽皡錛屽煎緱涓鎻愮殑鏄紝褰撲綘鍦ㄧ綉涓婃垨鑰呯浉鍏寵鍧涚湅鍒板叧浜?span>A*鐨勪笉鍚岀殑鎺㈣錛屼綘鏈夋椂浼?xì)鐪嬪堫C竴浜涜褰撲綔A*綆楁硶鐨勪唬鐮佽屽疄闄呬笂浠栦滑涓嶆槸銆傝浣跨敤A*錛屼綘蹇呴』鍖呭惈涓婇潰璁ㄨ鐨勬墍鏈夊厓绱狅紞錛嶇壒瀹氱殑寮鍚拰鍏抽棴鍒楄〃錛岀敤F,G鍜?span>H浣滆礬寰勮瘎浠楓傛湁寰堝鍏朵粬鐨勫璺畻娉曪紝浣嗕粬浠茍涓嶆槸A*錛?span>A*琚涓烘槸浠栦滑褰撲腑鏈濂界殑銆?span>Bryan Stout鍦ㄨ繖綃囨枃绔犲悗闈㈢殑鍙傝冩枃妗d腑璁鴻堪浜?jiǎn)涓閮ㄥ垎錛屽寘鎷粬浠殑涓浜涗紭鐐瑰拰緙虹偣銆傛湁鏃跺欑壒瀹氱殑鍦哄悎鍏朵粬綆楁硶浼?xì)鏇村ソ锛屼絾浣犲繀椤诲緢鏄幖嫯浣犲湪浣滀粈涔堛傚ソ浜?jiǎn)锛屽澶氱殑浜?jiǎn)銆傚洖鍒版枃绔犮?/span>
瀹炵幇鐨勬敞瑙?/span>
鐜板湪浣犲凡緇忔槑鐧戒簡(jiǎn)鍩烘湰鍘熺悊錛屽啓浣犵殑紼嬪簭鐨勬椂鍊欒繕寰楄冭檻涓浜涢澶栫殑涓滆タ銆備笅闈㈣繖浜涙潗鏂欎腑鐨勪竴浜涘紩鐢ㄤ簡(jiǎn)鎴戠敤C++鍜?span>Blitz Basic鍐欑殑紼嬪簭錛屼絾瀵瑰叾浠栬璦鍐欑殑浠g爜鍚屾牱鏈夋晥銆?/span>
1.鍏朵粬鍗曚綅(閬垮厤紕版挒)錛氬鏋滀綘鎭板ソ鐪嬩簡(jiǎn)鎴戠殑渚嬪瓙浠g爜錛屼綘浼?xì)鍙戠幇瀹冨畬鍏ㄥ拷鐣ヤ簡(jiǎn)鍏朵粬鍗曚綅銆傛垜鐨勫璺呬簨瀹炰笂鍙互鐩鎬簰絀胯秺銆傚彇鍐充簬鍏蜂綋鐨勬父鎴忥紝榪欎篃璁稿彲浠ワ紝涔熻涓嶈銆傚鏋滀綘鎵撶畻鑰冭檻鍏朵粬鍗曚綅錛屽笇鏈涗粬浠兘浜掔浉緇曡繃錛屾垜寤鴻浣犲彧鑰冭檻闈?rùn)姝㈡垨閭d簺鍦ㄨ绠楄矾寰勬椂鋸?fù)榪戝綋鍓嶅崟浣嶇殑鍗曚綅錛屾妸瀹冧滑褰撳墠鐨勪綅緗爣蹇椾負(fù)鍙氳繃鐨勩傚浜庝復(fù)榪戠殑榪愬姩鐫鐨勫崟浣嶏紝浣犲彲浠ラ氳繃鎯╃綒瀹冧滑鍚勮嚜璺緞涓婄殑鑺傜偣錛屾潵榧撳姳榪欎簺瀵昏礬鑰呮壘鍒頒笉鍚岀殑璺緞(鏇村鐨勬弿榪拌#2).
濡傛灉浣犻夋嫨浜?jiǎn)鎶婂叾浠栨鍦ǹU誨姩騫朵笖榪滅褰撳墠瀵昏礬鍗曚綅鐨勯偅浜涘崟浣嶈冭檻鍦ㄥ唴錛屼綘灝嗛渶瑕佸疄鐜頒竴縐嶆柟娉曞強(qiáng)鏃墮嫻嬪湪浣曟椂浣曞湴紕版挒鍙兘浼?xì)鍙戠敓锛屼互渚挎伆褰撶殑閬垮厤銆傚惁鍒欎綘鏋佹湁鍙兘寰楀埌涓鏉℃紓鐨勮礬寰勶紝鍗曚綅紿佺劧杞集璇曞浘閬垮厤鍜屼竴涓凡緇忎笉瀛樺湪鐨勫崟浣嶅彂鐢熺鎾炪?/span>
褰撶劧錛屼綘涔熼渶瑕佸啓涓浜涚鎾炴嫻嬬殑浠g爜錛屽洜涓烘棤璁鴻綆楃殑鏃跺欒礬寰勬湁澶氬畬緹庯紝瀹冧篃浼?xì)鍥犳棄櫁磋屾敼鍙樸傚綋紕版挒鍙戠敓鏃訛紝涓涓崟浣嶅繀欏誨鎵句竴鏉℃柊璺緞錛屾垨鑰咃紝濡傛灉鍙︿竴涓崟浣嶆鍦ㄧЩ鍔ㄥ茍涓斾笉鏄闈㈢鎾烇紝鍦ㄧ戶緇部褰撳墠璺緞縐誨姩涔嬪墠錛岀瓑寰呴偅涓崟浣嶇寮銆?/span>
榪欎簺鎻愮ず澶ф鍙互璁╀綘寮濮嬩簡(jiǎn)銆傚鏋滀綘鎯充簡(jiǎn)瑙f洿澶氾紝榪欓噷鏈変簺浣犲彲鑳戒細(xì)瑙夊緱鏈夌敤鐨勯摼鎺ワ細(xì)
*鑷不瑙掕壊鐨勬寚瀵艱涓猴細(xì)Craig Reynold鍦ㄦ寚瀵艱兘鍔涗笂鐨勫伐浣滃拰瀵昏礬鏈変簺涓嶅悓錛屼絾鏄畠鍙互鍜屽璺暣鍚堜粠鑰屽艦鎴愭洿瀹屾暣鐨勭Щ鍔ㄥ拰紕版挒媯(gè)嫻嬬郴緇熴?/span>
*鐢?shù)鑴戞父鎴忎腑鐨勯暱鐭窛鎸囧|細(xì)鎸囧鍜屽璺柟闈㈣憲浣滅殑涓涓湁瓚g殑鑰冨療銆傝繖鏄竴涓?span>pdf鏂囦歡銆?/span>
*鍗忓悓鍗曚綅縐誨姩錛氫竴涓袱閮ㄥ垎緋誨垪鏂囩珷鐨勭涓綃囷紝鍐呭鏄叧浜庣紪闃熷拰鍩轟簬鍒嗙粍鐨勭Щ鍔紝浣滆呮槸甯濆浗鏃朵唬(Age of Empires)鐨勮璁¤?span>Dave Pottinger.
*瀹炵幇鍗忓悓縐誨姩錛?span>Dave Pottinger鏂囩珷緋誨垪鐨勭浜岀瘒銆?/span>
2. 涓嶅悓鐨勫湴褰㈡崯鑰楋細(xì)鍦ㄨ繖涓暀紼嬪拰鎴戦檮甯︾殑紼嬪簭涓紝鍦板艦鍙兘鏄簩鑰呬箣錛嶅彲閫氳繃鐨勫拰涓嶅彲閫氳繃鐨勩備絾鏄綘鍙兘浼?xì)闇瑕佷竴浜涘彲閫氳繃鐨勫湴褰紝浣嗘槸縐誨姩鑰楄垂鏇撮珮錛嶆布娉斤紝灝忓北錛屽湴鐗㈢殑妤兼錛岀瓑絳夈傝繖浜涢兘鏄彲閫氳繃浣嗘槸姣斿鉤鍧︾殑寮闃斿湴縐誨姩鑰楄垂鏇撮珮鐨勫湴褰€傜被浼肩殑錛岄亾璺簲璇ユ瘮鑷劧鍦板艦縐誨姩鑰楄垂鏇翠綆銆?/span>
榪欎釜闂寰堝鏄撹В鍐籌紝鍙鍦ㄨ綆椾換浣曞湴褰㈢殑G鍊肩殑鏃跺欏鍔犲湴褰㈡崯鑰楀氨鍙互浜?jiǎn)銆傜畝鍗曠殑緇欏畠澧炲姞涓浜涢澶栫殑鎹熻楀氨鍙互浜?jiǎn)銆傜敱浜?span>A*綆楁硶宸茬粡鎸夌収瀵繪壘鏈浣庤楄垂鐨勮礬寰勬潵璁捐錛屾墍浠ュ緢瀹規(guī)槗澶勭悊榪欑鎯呭喌銆傚湪鎴戞彁渚涚殑榪欎釜綆鍗曠殑渚嬪瓙閲岋紝鍦板艦鍙湁鍙氳繃鍜屼笉鍙氳繃涓ょ錛?span>A*浼?xì)鎵惧埌鏈鐭紝鏈鐩存帴鐨勮礬寰勩備絾鏄湪鍦板艦鑰楄垂涓嶅悓鐨勫満鍚堬紝鑰楄垂鏈浣庣殑璺緞涔熻浼?xì)鍖呭惈寰堥暱鐨効U誨姩璺濈錛嶅氨鍍忔部鐫璺粫榪囨布娉借屼笉鏄洿鎺ョ┛榪囧畠銆?/span>
涓縐嶉渶棰濆鑰冭檻鐨勬儏鍐墊槸琚笓瀹剁О涔嬩負(fù)“influence mapping”鐨勪笢瑗匡紙鏆傝瘧涓哄獎(jiǎng)鍝嶆槧灝勫浘錛夈傚氨鍍忎笂闈㈡弿榪扮殑涓嶅悓鍦板艦鑰楄垂涓鏍鳳紝浣犲彲浠ュ垱寤轟竴鏍奸澶栫殑鍒嗘暟緋葷粺錛屽茍鎶婂畠搴旂敤鍒板璺殑AI涓傚亣璁句綘鏈変竴寮犳湁澶ф壒瀵昏礬鑰呯殑鍦板浘錛屼粬浠兘瑕侀氳繃鏌愪釜灞卞尯銆傛瘡嬈$數(shù)鑴戠敓鎴愪竴鏉¢氳繃閭d釜鍏沖彛鐨勮礬寰勶紝瀹冨氨浼?xì)鍙樺緱鏇存嫢鎸ゃ傚鏋滀綘鎰挎剰錛屼綘鍙互鍒涘緩涓涓獎(jiǎng)鍝嶆槧灝勫浘瀵規(guī)湁澶ч噺灞犳潃浜嬩歡鐨勬牸瀛愭柦浠ヤ笉鍒╁獎(jiǎng)鍝嶃傝繖浼?xì)璁╄绠楁満鏇村懼悜瀹夊叏浜涚殑璺緞錛屽茍涓斿府鍔╁畠閬垮厤鎬繪槸浠呬粎鍥犱負(fù)璺緞鐭?span>(浣嗗彲鑳芥洿鍗遍櫓)鑰屾寔緇妸闃熶紞鍜屽璺呴佸埌鏌愪竴鐗瑰畾璺緞銆?/span>
鍙︿竴涓彲鑳藉緱搴旂敤鏄儵緗氬懆鍥寸Щ鍔ㄥ崟浣嶈礬寰勪笂寰楄妭鐐廣?span>A*鐨勪竴涓簳闄愭槸錛屽綋涓緹ゅ崟浣嶅悓鏃惰瘯鍥懼璺埌鎺ヨ繎鐨勫湴鐐癸紝榪欓氬父浼?xì)瀵艰嚧璧\寰勪氦鍙犮備互涓轟竴涓垨鑰呭涓崟浣嶉兘璇曞浘璧扮浉鍚屾垨鑰呰繎浼肩殑璺緞鍒拌揪鐩殑鍦般傚鍏朵粬鍗曚綅宸茬粡“璁ら”浜?jiǎn)鐨勮妭鐐瑰鍔犱竴浜涙儵緗氫細(xì)鏈夊姪浜庝綘鍦ㄤ竴瀹氱▼搴︿笂鍒嗙璺緞錛岄檷浣庣鎾炵殑鍙兘鎬с傜劧鑰岋紝濡傛灉鏈夊繀瑕侊紝涓嶈鎶婇偅浜涜妭鐐圭湅鎴愪笉鍙氳繃鐨勶紝鍥犱負(fù)浣犱粛鐒跺笇鏈涘涓崟浣嶈兘澶熶竴瀛楃旱闃熼氳繃鎷ユ尋鐨勫嚭鍙c傚悓鏃訛紝浣犲彧鑳芥儵緗氶偅浜涗復(fù)榪戝崟浣嶇殑璺緞錛岃屼笉鏄墍鏈夎礬寰勶紝鍚﹀垯浣犲氨浼?xì)寰楀埌濂囨殑韜查伩琛屼負(fù)渚嬪鍗曚綅韜查伩璺緞涓婂叾浠栧凡緇忎笉鍦ㄩ偅閲岀殑鍗曚綅銆傝繕鏈夛紝浣犲簲璇ュ彧鎯╃綒璺緞褰撳墠鑺傜偣鍜岄殢鍚庣殑鑺傜偣錛岃屼笉搴斿鐞嗗凡緇忚蛋榪囧茍鐢╁湪韜悗鐨勮妭鐐廣?/span>
3. 澶勭悊鏈煡鍖哄煙錛氫綘鏄惁鐜╄繃榪欐牱鐨?span>PC娓告垙錛岀數(shù)鑴戞繪槸鐭ラ亾鍝潯璺槸姝g‘鐨勶紝鍗充嬌瀹冭繕娌℃湁渚﹀療榪囧湴鍥撅紵瀵逛簬娓告垙錛屽璺お濂戒細(xì)鏄懼緱涓嶇湡瀹炪傚垢榪愮殑鏄紝榪欐槸涓鏍煎彲浠ヨ交鏄撹В鍐崇殑闂銆?/span>
絳旀灝辨槸涓烘瘡涓笉鍚岀殑鐜╁鍜岀數(shù)鑴戯紙姣忎釜鐜╁錛岃屼笉鏄瘡涓崟浣嶏紞錛嶉偅鏍風(fēng)殑璇濅細(xì)鑰楄垂澶ч噺鐨勫唴瀛橈級(jí)鍒涘緩涓涓嫭绔嬬殑“knownWalkability”鏁扮粍錛屾瘡涓暟緇勫寘鍚帺瀹跺凡緇忔帰绱㈣繃鐨勫尯鍩燂紝浠ュ強(qiáng)琚綋浣滃彲閫氳繃鍖哄煙鐨勫叾浠栧尯鍩燂紝鐩村埌琚瘉瀹炪傜敤榪欑鏂規(guī)硶錛屽崟浣嶄細(xì)鍦ㄨ礬鐨勬绔緲寰婂茍涓斿鑷撮敊璇殑閫夋嫨鐩村埌浠栦滑鍦ㄥ懆鍥存壘鍒拌礬銆備竴鏃﹀湴鍥捐鎺㈢儲(chǔ)浜?jiǎn)锛屽璧\灝卞儚寰甯擱偅鏍瘋繘琛屻?/span>
4. 騫蟲粦璺緞錛氬敖綆?span>A*鎻愪緵浜?jiǎn)鏈鐭紝鏈浣庝唬浠風(fēng)殑璺緞錛屽畠鏃犳硶鑷姩鎻愪緵鐪嬭搗鏉ュ鉤婊戠殑璺緞銆傜湅涓涓嬫垜浠殑渚嬪瓙鏈緇堝艦鎴愮殑璺緞錛堝湪鍥撅級(jí)銆傛渶鍒濈殑涓姝ユ槸璧峰鏍肩殑鍙充笅鏂癸紝濡傛灉榪欎竴姝ユ槸鐩存帴寰涓嬬殑璇濓紝璺緞涓嶆槸浼?xì)鏇打q蟲粦涓浜涘悧錛熸湁鍑犵鏂規(guī)硶鏉ヨВ鍐寵繖涓棶棰樸傚綋璁$畻璺緞鐨勬椂鍊欏彲浠ュ鏀瑰彉鏂瑰悜鐨勬牸瀛愭柦鍔犱笉鍒╁獎(jiǎng)鍝嶏紝瀵?span>G鍊煎鍔犻澶栫殑鏁板箋備篃鍙互鎹㈢鏂規(guī)硶錛屼綘鍙互鍦ㄨ礬寰勮綆楀畬涔嬪悗娌跨潃瀹冭窇涓閬嶏紝鎵鵑偅浜涚敤鐩擱偦鏍兼浛鎹細(xì)璁╄礬寰勭湅璧鋒潵鏇村鉤婊戠殑鍦版柟銆傛兂鐭ラ亾瀹屾暣鐨勭粨鏋滐紝鏌ョ湅Toward More Realistic Pathfinding錛屼竴綃?span>(鍏嶈垂錛屼絾鏄渶瑕佹敞鍐?span>)Marco Pinter鍙戣〃鍦?span>Gamasutra.com鐨勬枃绔?/span>
5. 闈炴柟褰㈡悳绱㈠尯鍩燂細(xì)鍦ㄦ垜浠殑渚嬪瓙閲岋紝鎴戜滑浣跨敤綆鍗曠殑D鏂瑰艦鍥俱備綘鍙互涓嶄嬌鐢ㄨ繖縐嶆柟寮忋備綘鍙互浣跨敤涓嶈鍒欏艦鐘剁殑鍖哄煙銆傛兂鎯沖啋闄╂鐨勬父鎴忥紝鍜屾父鎴忎腑閭d簺鍥藉銆備綘鍙互璁捐涓涓儚閭f牱鐨勫璺叧鍗°備負(fù)姝わ紝浣犲彲鑳介渶瑕佸緩绔嬩竴涓浗瀹剁浉閭誨叧緋葷殑琛ㄦ牸錛屽拰浠庝竴涓浗瀹剁Щ鍔ㄥ埌鍙︿竴涓殑G鍊箋備綘涔熼渶瑕佷及綆?span>H鍊肩殑鏂規(guī)硶銆傚叾浠栫殑浜嬫儏灝卞拰渚嬪瓙涓畬鍏ㄤ竴鏍蜂簡(jiǎn)銆傚綋浣犻渶瑕佸悜寮鍚垪琛ㄤ腑娣誨姞鏂板厓绱犵殑鏃跺欙紝涓嶉渶浣跨敤鐩擱偦鐨勬牸瀛愶紝鍙栬屼唬涔嬬殑鏄粠琛ㄦ牸涓鎵劇浉閭?cè)潥勫浗瀹躲?/span>
綾諱技鐨勶紝浣犲彲浠ヤ負(fù)涓寮犵‘瀹氱殑鍦板艦鍥懼垱寤鴻礬寰勭偣緋葷粺錛岃礬寰勭偣涓鑸槸璺笂錛屾垨鑰呭湴鐗㈤氶亾鐨勮漿鎶樼偣銆備綔涓烘父鎴忚璁¤咃紝浣犲彲浠ラ璁捐繖浜涜礬寰勭偣銆備袱涓礬寰勭偣琚涓烘槸鐩擱偦鐨勫鏋滀粬浠箣闂寸殑鐩寸嚎涓婃病鏈夐殰紕嶇殑璇濄傚湪鍐掗櫓媯嬬殑渚嬪瓙閲岋紝浣犲彲浠ヤ繚瀛樿繖浜涚浉閭諱俊鎭湪鏌愪釜琛ㄦ牸閲岋紝褰撻渶瑕佸湪寮鍚垪琛ㄤ腑娣誨姞鍏冪礌鐨勬椂鍊欎嬌鐢ㄥ畠銆傜劧鍚庝綘灝卞彲浠ヨ褰曞叧鑱旂殑G鍊鹼紙鍙兘浣跨敤涓ょ偣闂寸殑鐩寸嚎璺濈錛夛紝H鍊鹼紙鍙互浣跨敤鍒扮洰鏍囩偣鐨勭洿綰胯窛紱伙級(jí)錛屽叾浠栭兘鎸夊師鍏堢殑鍋氬氨鍙互浜?jiǎn)銆?span>Amit Patel 鍐欎簡(jiǎn)鍏朵粬鏂規(guī)硶鐨勬憳瑕併傚彟涓涓湪闈炴柟褰㈠尯鍩熸悳绱?span>RPG鍦板浘鐨勪緥瀛愶紝鏌ョ湅鎴戠殑鏂囩珷Two-Tiered A* Pathfinding銆?span>(璇戣呮敞錛氳瘧鏂囷細(xì) A*鍒嗗眰瀵昏礬)
6. 涓浜涢熷害鏂歸潰鐨勬彁紺猴細(xì)褰撲綘寮鍙戜綘鑷繁鐨?span>A*紼嬪簭錛屾垨鑰呮敼鍐欐垜鐨勶紝浣犱細(xì)鍙戠幇瀵昏礬鍗犳嵁浜?jiǎn)澶ч噺鐨?span>CPU鏃墮棿錛屽挨鍏舵槸鍦ㄥぇ鍦板浘涓婃湁澶ч噺瀵硅薄鍦ㄥ璺殑鏃跺欍傚鏋滀綘闃呰榪囩綉涓婄殑鍏朵粬鏉愭枡錛屼綘浼?xì)鏄庣櫧锛屽嵆鋴涉槸寮鍙戜簡(jiǎn)鏄熼檯浜夐湼鎴栧笣鍥芥椂浠g殑涓撳錛岃繖涔熸棤鍙浣曘傚鏋滀綘瑙夊緱瀵昏礬澶繃緙撴參錛岃繖閲屾湁涓浜涘緩璁篃璁告湁鏁堬細(xì)
* 浣跨敤鏇村皬鐨勫湴鍥炬垨鑰呮洿灝戠殑瀵昏礬鑰呫?/span>
* 涓嶈鍚屾椂緇欏涓璞″璺傚彇鑰屼唬涔嬬殑鏄妸浠栦滑鍔犲叆涓涓槦鍒楋紝鎶婂璺繃紼嬪垎鏁e湪鍑犱釜娓告垙鍛ㄦ湡涓傚鏋滀綘鐨勬父鎴忎互鍛ㄦ湡姣忕鐨勯熷害榪愯錛屾病浜鴻兘瀵熻銆備絾鏄綋澶ч噺瀵昏礬鑰呰綆楄嚜宸辮礬寰勭殑鏃跺?span>,浠栦滑浼?xì)鍙戣娓告垙閫熷害紿佺劧鍙樻參銆?/span>
* 灝介噺浣跨敤鏇村ぇ鐨勫湴鍥劇綉鏍箋傝繖闄嶄綆浜?jiǎn)瀵昏矾涓悳鐑?chǔ)鐨勬葷綉鏍兼暟銆傚鏋滀綘鏈夊織姘旓紝浣犲彲浠ヨ璁′袱涓垨鑰呮洿澶氬璺郴緇熶互渚夸嬌鐢ㄥ湪涓嶅悓鍦哄悎錛屽彇鍐充簬璺緞鐨勯暱搴︺傝繖涔熸鏄笓涓氫漢澹殑鍋氭硶錛岀敤澶х殑鍖哄煙璁$畻闀跨殑璺緞錛岀劧鍚庡湪鎺ヨ繎鐩爣鐨勬椂鍊欏垏鎹㈠埌浣跨敤灝忔牸瀛?span>/鍖哄煙鐨勭簿緇嗗璺傚鏋滀綘瀵硅繖涓鐐規(guī)劅鍏磋叮錛屾煡闃呮垜鐨勬枃绔?span>Two-Tiered A* Pathfinding銆?span>(璇戣呮敞錛氳瘧鏂?span>:A*鍒嗗眰瀵昏礬)
* 浣跨敤璺緞鐐圭郴緇熻綆楅暱璺緞錛屾垨鑰呴鍏堣綆楀ソ璺緞騫跺姞鍏ュ埌娓告垙涓?/span>
* 棰勫鐞嗕綘鐨勫湴鍥撅紝琛ㄦ槑鍦板浘涓摢浜涘尯鍩熸槸涓嶅彲鍒拌揪鐨勩傛垜鎶婅繖浜涘尯鍩熺О浣?/span>“瀛ゅ矝”銆備簨瀹炰笂錛屼粬浠彲浠ユ槸宀涘笨鎴栧叾浠栬澧欏鍖呭洿絳夋棤娉曞埌杈劇殑浠繪剰鍖哄煙銆?span>A*鐨勪笅闄愭槸錛屽綋浣犲憡璇夊畠瑕佸鎵鵑氬線閭d簺鍖哄煙鐨勮礬寰勬椂錛屽畠浼?xì)鎼滅储鏁翠釜鍦板浘锛岀洿鍒版墍鏈夊彲鍒拌揪鐨勬柟鏍?span>/鑺傜偣閮借閫氳繃寮鍚垪琛ㄥ拰鍏抽棴鍒楄〃鐨勮綆椼傝繖浼?xì)娴垂澶ч噺鐨?span>CPU鏃墮棿銆傚彲浠ラ氳繃棰勫厛紜畾榪欎簺鍖哄煙錛堟瘮濡傞氳繃flood-fill鎴栫被浼肩殑鏂規(guī)硶)鏉ラ伩鍏嶈繖縐嶆儏鍐電殑鍙戠敓,鐢ㄦ煇浜涚綾葷殑鏁扮粍璁板綍榪欎簺淇℃伅錛屽湪寮濮嬪璺墠媯(gè)鏌ュ畠銆?/span>
* 鍦ㄤ竴涓嫢鎸ょ殑綾諱技榪峰鐨勫満鍚堬紝鎶婁笉鑳借繛閫氱殑鑺傜偣鐪嬩綔姝葷銆傝繖浜涘尯鍩熷彲浠ュ湪鍦板浘緙栬緫鍣ㄤ腑棰勫厛鎵嬪姩鎸囧畾錛屾垨鑰呭鏋滀綘鏈夐泟蹇?jī)澹織锛屽紑鍙戜竴涓嚜鍔ㄨ瘑鍒繖浜涘尯鍩熺殑綆楁硶銆傜粰瀹氭绔殑鎵鏈夎妭鐐瑰彲浠ヨ璧嬩簣涓涓敮涓鐨勬爣蹇楁暟瀛椼傜劧鍚庝綘灝卞彲浠ュ湪瀵昏礬榪囩▼涓畨鍏ㄧ殑蹇界暐鎵鏈夋绔紝鍙湁褰撹搗鐐規(guī)垨鑰呯粓鐐規(guī)伆濂藉湪姝葷鐨勬煇涓妭鐐圭殑鏃跺欐墠闇瑕佽冭檻瀹冧滑銆?/span>
7. 緇存姢寮鍚垪琛細(xì)榪欐槸A*瀵昏礬綆楁硶鏈閲嶈鐨勭粍鎴愰儴鍒嗐傛瘡嬈′綘璁塊棶寮鍚垪琛紝浣犻兘闇瑕佸鎵?span>F鍊兼渶浣庣殑鏂規(guī)牸銆傛湁鍑犵涓嶅悓鐨勬柟娉曞疄鐜拌繖涓鐐廣備綘鍙互鎶婅礬寰勫厓绱犻殢鎰忎繚瀛橈紝褰撻渶瑕佸鎵?span>F鍊兼渶浣庣殑鍏冪礌鐨勬椂鍊欙紝閬嶅巻寮鍚垪琛ㄣ傝繖寰堢畝鍗曪紝浣嗘槸澶參浜?jiǎn)锛尀鍏舵槸瀵归暱璧\寰勬潵璇淬傝繖鍙互閫氳繃緇存姢涓鏍兼帓濂藉簭鐨勫垪琛ㄦ潵鏀瑰杽錛屾瘡嬈″鎵?span>F鍊兼渶浣庣殑鏂規(guī)牸鍙渶瑕侀夊彇鍒楄〃鐨勯鍏冪礌銆傚綋鎴戣嚜宸卞疄鐜扮殑鏃跺欙紝榪欑鏂規(guī)硶鏄垜鐨勯閫夈?/span>
鍦ㄥ皬鍦板浘銆傝繖縐嶆柟娉曞伐浣滅殑寰堝ソ錛屼絾瀹冨茍涓嶆槸鏈蹇殑瑙e喅鏂規(guī)銆傛洿鑻涙眰閫熷害鐨?span>A*紼嬪簭鍛樹嬌鐢ㄥ彨鍋氫簩鍙夊爢鐨勬柟娉曪紝榪欎篃鏄垜鍦ㄤ唬鐮佷腑浣跨敤鐨勬柟娉曘傚嚟鎴戠殑緇忛獙錛岃繖縐嶆柟娉曞湪澶у鏁板満鍚堜細(xì)蹇綖鍊嶏紝騫朵笖鍦ㄩ暱璺粡涓婇熷害鍛堝嚑浣曠駭鏁版彁鍗?span>(10鍊嶄互涓婇熷害)銆傚鏋滀綘鎯充簡(jiǎn)瑙f洿澶氬叧浜庝簩鍙夊爢鐨勫唴瀹癸紝鏌ラ槄鎴戠殑鏂囩珷錛?span>Using Binary Heaps in A* Pathfinding銆?span>(璇戣呮敞錛氳瘧鏂囷細(xì)鍦?span>A*瀵昏礬涓嬌鐢ㄤ簩鍙夊爢)
鍙︿竴涓彲鑳界殑鐡墮鏄綘鍦ㄥ嬈″璺箣闂存竻闄ゅ拰淇濆瓨浣犵殑鏁版嵁緇撴瀯鐨勬柟娉曘傛垜涓漢鏇村懼悜鎶婃墍鏈変笢瑗塊兘瀛樺偍鍦ㄦ暟緇勯噷闈€傝櫧鐒惰妭鐐瑰彲浠ヤ互闈㈠悜瀵硅薄鐨勯鏍艱鍔ㄦ佺殑浜х敓錛岃褰曞拰淇濆瓨錛屾垜鍙戠幇鍒涘緩鍜屽垹闄ゅ璞℃墍澧炲姞鐨勫ぇ閲忔椂闂達(dá)紝浠ュ強(qiáng)澶氫綑鐨勭鐞嗗眰嬈″噺鎱㈢殑鏁翠釜榪囩▼鐨勯熷害銆備絾鏄紝濡傛灉浣犱嬌鐢ㄦ暟緇勶紝浣犻渶瑕佸湪璋冪敤涔嬮棿娓呯悊鏁版嵁銆傝繖涓儏褰綘鎯沖仛鐨勬渶鍚庝竴浠朵簨灝辨槸鍦ㄥ璺皟鐢ㄤ箣鍚庤姳鐐規(guī)椂闂存妸涓鍒囧綊闆訛紝灝ゅ叾鏄綘鐨勫湴鍥懼緢澶х殑鏃跺欍?/span>
鎴戦氳繃浣跨敤涓涓彨鍋?span>whichList(x,y)鐨勪簩緇存暟緇勯伩鍏嶈繖縐嶅紑閿錛屾暟緇勭殑姣忎釜鍏冪礌琛ㄦ槑浜?jiǎn)鑺傜偣鍦ㄥ紑鍚垪琛ㄨ繕鏄湪鍏抽棴鍒楄〃涓傚皾璇曞璺箣鍚庯紝鎴戞病鏈夋竻闆惰繖涓暟緇勩傚彇鑰屼唬涔嬬殑鏄紝鎴戝湪鏂扮殑瀵昏礬涓噸緗?span>onClosedList鍜?span>onOpenList鐨勬暟鍊鹼紝姣忔瀵昏礬涓や釜閮?span>+5鎴栬呯被浼煎叾浠栨暟鍊箋傝繖縐嶆柟娉曪紝綆楁硶鍙互瀹夊叏鐨勮煩榪囧墠闈㈠璺暀涓嬬殑鑴忔暟鎹傛垜榪樺湪鏁扮粍涓偍瀛樹簡(jiǎn)璇稿F,G鍜?span>H鐨勫箋傝繖鏍蜂竴鏉ワ紝鎴戝彧闇綆鍗曠殑閲嶅啓浠諱綍宸茬粡瀛樺湪鐨勫艱屾棤闇琚竻闄ゆ暟緇勭殑鎿嶄綔騫叉壈銆傚皢鏁版嵁瀛樺偍鍦ㄥ緇存暟緇勪腑闇瑕佹洿澶氬唴瀛橈紝鎵浠ヨ繖閲岄渶瑕佹潈琛″埄寮娿傛渶鍚庯紝浣犲簲璇ヤ嬌鐢ㄤ綘鏈寰楀績(jī)搴旀墜鐨勬柟娉曘?/span>
8. Dijkstra鐨勭畻娉曪細(xì)灝界A*琚涓烘槸閫氬父鏈濂界殑瀵昏礬綆楁硶(鐪嬪墠闈㈢殑“棰樺璇?/span>”),榪樻槸鏈変竴縐嶅彟澶栫殑綆楁硶鏈夊畠鐨勫彲鍙栦箣澶?span>-Dijkstra綆楁硶銆?span>Dijkstra綆楁硶鍜?span>A*鏈川鏄浉鍚岀殑錛屽彧鏈変竴鐐逛笉鍚岋紝灝辨槸Dijkstra綆楁硶娌℃湁鍚彂寮?span>(H鍊兼繪槸)銆傜敱浜庢病鏈夊惎鍙戝紡錛屽畠鍦ㄥ悇涓柟鍚戜笂騫沖潎鎼滅儲(chǔ)銆傛濡備綘鎵棰勬枡錛岀敱浜?span>Dijkstra綆楁硶鍦ㄦ壘鍒扮洰鏍囧墠閫氬父浼?xì)鎺㈢储鏇村ぇ鐨勫尯鍩熷Q屾墍浠ヤ竴鑸細(xì)姣?span>A*鏇存參涓浜涖?/span>
閭d箞涓轟粈涔堣浣跨敤榪欑綆楁硶鍛紵鍥犱負(fù)鏈夋椂鍊欐垜浠茍涓嶇煡閬撶洰鏍囩殑浣嶇疆銆傛瘮濡傝浣犳湁涓涓祫婧愰噰闆嗗崟浣嶏紝闇瑕佽幏鍙栨煇縐嶇被鍨嬬殑璧勬簮鑻ュ共銆傚畠鍙兘鐭ラ亾鍑犱釜璧勬簮鍖哄煙錛屼絾鏄畠鎯沖幓鏈榪戠殑閭d釜銆傝繖縐嶆儏鍐碉紝Dijkstra綆楁硶灝辨瘮A*鏇撮傚悎錛屽洜涓烘垜浠笉鐭ラ亾鍝釜鏇磋繎銆傜敤A*錛屾垜浠敮涓鐨勯夋嫨鏄緷嬈″姣忎釜鐩爣璁歌礬騫惰綆楄窛紱伙紝鐒跺悗閫夋嫨鏈榪戠殑璺緞銆傛垜浠鎵劇殑鐩爣鍙兘浼?xì)鏈変笉璁″叾鏁扮殑浣嵕|紝鎴戜滑鍙兂鎵懼叾涓渶榪戠殑錛岃屾垜浠茍涓嶇煡閬撳畠鍦ㄥ摢閲岋紝鎴栬呬笉鐭ラ亾鍝釜鏄渶榪戠殑銆?/span>
鐪嬪畬涓婇潰鐨勪粙緇嶏紝鍐嶆潵鐪嬩竴涓瘮杈冪粡鍏哥殑棰樼洰:knight moves銆傝矊浼間篃鍙眽瀵嗗皵欏胯礬寰勶紝鍏蜂綋鐨勬垜涔熶笉璁板緱浜?jiǎn)銆傚榪欎釜闂鎴戠敤A*綆楁硶鏉ユ眰瑙o紝姝f墍璋撳厜璇翠笉緇冩槸娌℃湁鐢ㄧ殑
http://acm.pku.edu.cn/JudgeOnline/problem?id=2243
problem statement
A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboard exactly once. He thinks that the most difficult part of the problem is determining the smallest number of knight moves between two given squares and that, once you have accomplished this, finding the tour would be easy.
Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part.
Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.
Input Specification
The input file will contain one or more test cases. Each test case consists of one line containing two squares separated by one space. A square is a string consisting of a letter (a-h) representing the column and a digit (1-8) representing the row on the chessboard.
Output Specification
For each test case, print one line saying "To get from xx to yy takes n knight moves.".
Sample Input
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6
Sample Output
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from a1 to h8 takes 6 knight moves.
To get from a1 to h7 takes 5 knight moves.
To get from h8 to a1 takes 6 knight moves.
To get from b1 to c3 takes 1 knight moves.
To get from f6 to f6 takes 0 knight moves.
棰樼洰鐨勬剰鎬濆ぇ姒傛槸璇達(dá)細(xì)鍦ㄥ浗闄呰薄媯嬬殑媯嬬洏涓婏紝涓鍖歸┈鍏辨湁8涓彲鑳界殑璺寵穬鏂瑰悜錛屾眰浠庤搗鐐瑰埌鐩爣鐐逛箣闂寸殑鏈灝戣煩璺冩鏁般?br>A* code:
涓轟簡(jiǎn)鏄劇ず鑷繁鐨勬妧宸э紝涔熷湪鑷繁鐨勭▼搴忎腑鐢ㄨ繃鍑犳銆傛笎娓愬彂鐜拌繖鏍風(fēng)殑鎶宸у甫鏉ョ殑濂藉鏄湁浠d環(huán)鐨勶紝鐮村潖浜?jiǎn)绋嬪簭鐨劸l撴瀯鍖栬璁★紝紼嬪簭鍙樺緱寰堥毦璇伙紝灝ゅ叾瀵規(guī)柊鎵嬫潵璇淬傜粓浜庢槑鐧借繖縐嶆妧宸т笉榪囨槸涓縐嶈皟鍛蟲枡錛屽湪灝戞暟鎯呭喌浣跨敤鍑犳錛屽彲浠ョ畝鍖栧闂鐨勫鐞嗐傚鏋滄妸璋冨懗鎷挎潵褰撻キ鍚冿紝涓瀹氫細(xì)鏈湯鍊掔疆錛屽啓鍑虹殑紼嬪簭浼?xì)鍛堢幇钀ュ呏M笉鑹箣鐘躲?/p>
浜嬪疄涓婏紝longjmp鍜宻etjmp鐜╁緱鐔熶笉鐔熶笌鏄笉鏄疌璇█楂樻墜錛屼笉鏄洜鏋滃叧緋匯備絾鏄紝濡傛灉鍙互濂楃敤閭d綅楂樻墜鐨勮瘽錛屾垜鍊掓兂璇村鏋滃嚱鏁版寚閽堢帺寰椾笉鐔燂紝灝變笉瑕佽嚜縐頒負(fù)C璇█楂樻墜銆備負(fù)浠涔堣繖涔堣鍛紝鍑芥暟鎸囬拡鏈夐偅涔堝鏉傚悧錛熷綋鐒朵笉鏄紝浠諱綍涓涓◢鏈夌紪紼嬪父璇嗙殑浜猴紝涓嶇浠栨噦涓嶆噦C璇█錛屽湪10鍒嗛挓鍐咃紝鎴戞兂浠栦竴瀹氬彲浠ユ槑鐧紺璇█涓殑鍑芥暟鎸囬拡鏄庝箞鍥炰簨銆?/p>
鍘熷洜鍦ㄤ簬錛岄毦鐨勪笉鏄嚱鏁版寚閽堢殑姒傚康鍜岃娉曟湰韜紝鑰屾槸鍦ㄤ粈涔堟椂鍊欙紝浠涔堝湴鏂硅浣跨敤瀹冦傚嚱鏁版寚閽堜笉浠呮槸璇硶涓婄殑闂錛屾洿閲嶈鐨勬槸瀹冩槸涓涓璁¤寖鐣淬傜湡姝g殑楂樻墜褰撶劧涓嶅崟搴旇鎳傚緱璇硶灞傞潰涓婄殑鎶宸э紝鏇村簲璇ユ噦寰楄璁′笂鐨勬柟娉曘備笉鎳傝璁★紝鑳界畻楂樻墜鍚楋紵鎬鐤戞垜鍦ㄥじ澶у叾杈炲悧錛熼偅鎴戜滑鍏堢湅鐪嬪嚱鏁版寚閽堜笌鍝簺璁捐鏂規(guī)硶鏈夊叧錛?/p>
涓庡垎灞傝璁℃湁鍏熾?/strong>鍒嗗眰璁捐鏃╁氨涓嶆槸浠涔堟柊鐨勬蹇碉紝鍒嗗眰鐨勫ソ澶勬槸浼楁墍鍛ㄧ煡鐨勶紝姣旇緝鏄庢樉濂藉灝辨槸綆鍖栧鏉傚害銆侀殧紱誨彉鍖栥傞噰鐢ㄥ垎灞傝璁★紝姣忓眰閮藉彧闇鍏沖績(jī)鑷繁鐨勪笢瑗匡紝榪欏噺灝忎簡(jiǎn)緋葷粺鐨勫鏉傚害錛屽眰涓庡眰涔嬮棿鐨勪氦浜掍粎闄愪簬涓涓緢紿勭殑鎺ュ彛錛屽彧瑕佹帴鍙d笉鍙橈紝鏌愪竴灞傜殑鍙樺寲涓嶄細(xì)褰卞搷鍏跺畠灞傦紝榪欓殧紱諱簡(jiǎn)鍙樺寲銆?/p>
鍒嗗眰鐨勪竴鑸師鍒欐槸錛屼笂灞傚彲浠ョ洿鎺ヨ皟鐢ㄤ笅灞傜殑鍑芥暟錛屼笅灞傚垯涓嶈兘鐩存帴璋冪敤涓婂眰鐨勫嚱鏁般傝繖鍙ヨ瘽璇存潵綆鍗曪紝鍦ㄧ幇瀹炰腑錛屼笅灞傚父甯歌鍙嶈繃鏉ヨ皟鐢ㄤ笂灞傜殑鍑芥暟銆傛瘮濡備綘鍦ㄦ嫹璐濇枃浠舵椂錛屽湪鐣岄潰灞傝皟鐢ㄤ竴涓嫹璐濇枃浠跺嚱鏁般傜晫闈㈠眰鏄笂灞傦紝鎷瘋礉鏂囦歡鍑芥暟鏄笅灞傦紝涓婂眰璋冪敤涓嬪眰錛岀悊鎵褰撶劧銆備絾鏄鏋滀綘鎯沖湪鎷瘋礉鏂囦歡鏃惰繕瑕佹洿鏂拌繘搴︽潯錛岄棶棰樺氨鏉ヤ簡(jiǎn)銆備竴鏂歸潰錛屽彧鏈夋嫹璐濇枃浠跺嚱鏁版墠鐭ラ亾鎷瘋礉鐨勮繘搴︼紝浣嗗畠涓嶈兘鍘繪洿鏂扮晫闈㈢殑榪涘害鏉°傚彟澶栦竴鏂歸潰錛岀晫闈㈢煡閬撳浣曞幓鏇存柊榪涘害鏉★紝浣嗗畠鍙堜笉鐭ラ亾鎷瘋礉鐨勮繘搴︺傛庝箞鍔烇紵甯歌鐨勫仛娉曪紝灝辨槸鐣岄潰璁劇疆涓涓洖璋冨嚱鏁扮粰鎷瘋礉鏂囦歡鍑芥暟錛屾嫹璐濇枃浠跺嚱鏁板湪閫傚綋鐨勬椂鍊欒皟鐢ㄨ繖涓洖璋冨嚱鏁版潵閫氱煡鐣岄潰鏇存柊鐘舵併?/p>
涓庢娊璞℃湁鍏熾?/strong>鎶借薄鏄潰鍚戝璞′腑鏈閲嶈鐨勬蹇典箣涓錛屼篃鏄潰鍚戝璞″▉鍔涘己澶т箣澶勩傞潰鍚戝璞″彧鏄竴縐嶆濇兂錛屽ぇ瀹墮兘鐭ラ亾錛岀敤C璇█涓鏍峰彲浠ュ疄鐜伴潰鍚戝璞$殑緙栫▼銆傝繖鍙笉鏄負(fù)浜?jiǎn)璧舵棄櫕﹀Q岃屾槸涓縐嶅疄鐢ㄧ殑鏂規(guī)硶銆傚鏋滀綘瀵規(guī)琛ㄧず鎬鐤戯紝鍙互鍘葷湅鐪婫TK+銆乴inux kernel絳夊紑婧愪唬鐮併?/p>
鎺ュ彛鏄渶楂樼駭鐨勬娊璞°傚湪linux kernel閲岄潰錛屾帴鍙g殑姒傚康鏃犲涓嶅湪錛屽儚铏氭嫙鏂囦歡緋葷粺(VFS)錛屽畠瀹氫箟涓涓枃浠剁郴緇熺殑鎺ュ彛錛屽彧瑕佹寜鐓ц繖縐嶆帴鍙g殑瑙勮寖錛屼綘鍙互鑷繁寮鍙戜竴涓枃浠剁郴緇熸寕涓婂幓銆傝澶囬┍鍔ㄧ▼搴忔洿鏄姝わ紝涓嶅悓鐨勮澶囬┍鍔ㄧ▼搴忔湁鑷繁涓濂椾笉鍚岀殑鎺ュ彛瑙勮寖銆傚湪鑷繁寮鍙戣澶囧紑鍙戦┍鍔ㄧ▼搴忔椂錛屽彧瑕侀伒寰浉搴旂殑鎺ュ彛瑙勮寖?yōu)p浜?jiǎn)銆傛帴鍙e湪C璇█涓浣曡〃紺猴紵寰堢畝鍗曪紝灝辨槸涓緇勫嚱鏁版寚閽堛?/p>
涓庢帴鍙d笌瀹炵幇鍒嗗紑鏈夊叧銆傞拡瀵規(guī)帴鍙g紪紼嬶紝鑰屼笉鏄拡瀵瑰疄鐜扮紪紼嬶紝姝や負(fù)銆婅璁℃ā寮忋嬬殑絎竴鏉¤璁″噯鍒欍傚垎寮鎺ュ彛涓庡疄鐜扮殑鐩爣鏄闅旂鍙樺寲銆傝蔣浠舵槸鍙樺寲鐨勶紝濡傛灉涓嶈兘鎶婂彉鍖栫殑涓滆タ闅旂寮鏉ワ紝瀵艱嚧鐗典竴鍙戣屽姩鍏ㄨ韓錛屼唬浠鋒槸宸ㄥぇ鐨勩傝繖鏄ぇ瀹舵墍涓嶆効鐪嬪埌鐨勩?/p>
C璇█鏃㈢劧鍙互瀹炵幇闈㈠悜瀵硅薄鐨勭紪紼嬶紝鑷劧鍙互鍒╃敤璁捐妯″紡鏉ュ垎紱繪帴鍙d笌瀹炵幇銆傚儚妗ユ帴妯″紡銆佺瓥鐣ユā寮忋佺姸鎬佹ā寮忋佷唬鐞嗘ā寮忕瓑絳夛紝鍦–璇█涓紝鏃犱竴涓嶉渶瑕佸埄鐢ㄥ嚱鏁版寚閽堟潵瀹炵幇銆?/p>
涓庢澗鑰﹀悎鍘熷垯鏈夊叧銆傞潰鍚戣繃紼嬩笌闈㈠悜瀵硅薄鐩告瘮錛屼箣鎵浠ユ樉寰楄媿鐧芥棤鍔涳紝鍘熷洜涔嬩竴灝辨槸瀹冧笉鍍忛潰鍚戝璞′竴鏍鳳紝鍙互鐩磋鐨勬妸鐜板疄妯″瀷鏄犲皠鍒拌綆楁満涓傞潰鍚戣繃紼嬭鐨勬槸灞傚眰鎺у埗錛岃岄潰鍚戝璞℃洿寮鴻皟鐨勫璞¢棿鐨勫垎宸ュ悎浣溿傜幇瀹炰笘鐣屼腑鐨勫璞″浜庡眰嬈″叧緋葷殑杈冨皯錛屽浜庡絳夊叧緋葷殑灞呭銆備篃灝辨槸璇達(dá)紝瀵硅薄闂寸殑浜や簰寰寰鏄弻鍚戠殑銆傝繖浼?xì)鍔犲己瀵硅薄闂寸殑鑰﹀悎鎬с?/p>
鑰﹀悎鏈韓娌℃湁閿欙紝瀹為檯涓婅﹀悎鏄繀涓嶅彲灝戠殑錛屾病鏈夎﹀悎灝辨病鏈夊崗浣滐紝瀵硅薄涔嬮棿鏃犳硶褰㈡垚涓涓暣浣擄紝浠涔堜簨涔熷仛涓嶄簡(jiǎn)銆傚叧閿湪浜庤﹀悎瑕佹伆褰擄紝鍦ㄥ疄鐜伴瀹氬姛鑳界殑鍓嶆彁涓嬶紝鑰﹀悎瑕佸敖鍙兘鐨勬澗鏁c傝繖鏍鳳紝緋葷粺鐨勪竴閮ㄥ垎鍙樺寲瀵瑰叾瀹冮儴鍒嗙殑褰卞搷浼?xì)寰垶畱銆?/p>
鍑芥暟鎸囬拡鏄В鑰﹀璞″叧緋葷殑鏈浣?jīng)_埄鍣ㄣ係ignal(濡俠oost鐨剆ignal鍜実lib涓殑signal)鏈哄埗鏄竴涓吀鍨嬬殑渚嬪瓙錛屼竴涓璞¤嚜韜殑鐘舵佸彲鑳芥槸鍦ㄥ彉鍖栫殑錛堟垨鑰呬細(xì)瑙﹀彂涓浜涗簨浠訛級(jí)錛岃屽叾瀹冨璞″叧蹇?jī)瀹冪殑鍙樺寲銆備竴鏃﹁瀵硅薄鏈夊彉鍖栧彂鐢燂紝鍏跺畠瀵硅薄瑕佹墽琛岀浉搴旂殑鎿嶄綔銆?/p>
濡傛灉璇ュ璞$洿鎺ュ幓璋冪敤鍏跺畠瀵硅薄鐨勫嚱鏁幫紝鍔熻兘鏄畬鎴愪簡(jiǎn)錛屼絾瀵硅薄涔嬮棿鐨勮﹀悎澶揣浜?jiǎn)銆傚浣曟妸榪欑鑰﹀悎闄嶅埌鏈浣庡憿錛宻ignal鏈哄埗鏄緢濂界殑鍔炴硶銆傚畠鐨勫師鐞嗗ぇ鑷村涓嬶細(xì)鍏跺畠鍏蟲敞璇ュ璞″彉鍖栫殑瀵硅薄涓誨姩娉ㄥ唽涓涓洖璋冨嚱鏁板埌璇ュ璞′腑銆備竴鏃﹁瀵硅薄鏈夊彉鍖栧彂鐢燂紝灝辮皟鐢ㄨ繖浜涘洖璋冨嚱鏁伴氱煡鍏跺畠瀵硅薄銆傚姛鑳藉悓鏍峰疄鐜頒簡(jiǎn)錛屼絾瀹冧滑涔嬮棿鐨勮﹀悎搴﹂檷浣庝簡(jiǎn)銆?/p>
鍦–璇█涓紝瑕佽В鍐充互涓婅繖浜涢棶棰橈紝涓嶉噰鐢ㄥ嚱鏁版寚閽堬紝灝嗘槸闈炲父鍥伴毦鐨勩傚湪緙栫▼涓紝濡傛灉浣犱粠娌℃湁鎯沖埌鐢ㄥ嚱鏁版寚閽堬紝寰堥毦鎯沖儚浣犳槸涓涓狢璇█楂樻墜銆?/p>
(13)姹備粠x浣嶏紙楂橈級(jí)鍒皔浣嶏紙浣庯級(jí)闂村叡鏈夊灝戜釜1
public static int FindChessNum(int x, int y, ushort k)
{
int re = 0;
for (int i = y; i <= x; i++)
{
re += ((k >> (i - 1)) & 1);
}
return re;
}
(14)
/*灝?2浣嶆暟鍒嗚В涓?涓?浣嶆暟澶勭悊鍚庡啀鍚堟垚32浣嶆暟榪斿洖*/
DWORD GetDW(DWORD dw)
{
DWORD dwRet=0;
if (dw!=0)
{
BYTE b1=(dw>>24)&0xff,b2=(dw>>16)&0xff,b3=(dw>>8)&0xff,b4=dw&0xff;
//鍒嗗埆澶勭悊 b1,b2,b3,b4
dwRet=b1;
dwRet=(dwRet<<8)+b2;
dwRet=(dwRet<<8)+b3;
dwRet=(dwRet<<8)+b4;
return dwRet;
}
else{
return 0;
}
}
媯(gè)嫻嬩竴涓棤絎﹀彿鏁版槸涓嶄負(fù)2^n-1(^涓哄箓)錛?nbsp; x&(x+1)
灝嗘渶鍙充晶0浣嶆敼涓?浣嶏細(xì) x | (x+1)
浜岃繘鍒惰ˉ鐮佽繍綆楀叕寮忥細(xì)
-x = ~x + 1 = ~(x-1)
~x = -x-1
-(~x) = x+1
~(-x) = x-1
x+y = x - ~y - 1 = (x|y)+(x&y)
x-y = x + ~y + 1 = (x|~y)-(~x&y)
x^y = (x|y)-(x&y)
x|y = (x&~y)+y
x&y = (~x|y)-~x
x==y: ~(x-y|y-x)
x!=y: x-y|y-x
x< y: (x-y)^((x^y)&((x-y)^x))
x<=y: (x|~y)&((x^y)|~(y-x))
x< y: (~x&y)|((~x|y)&(x-y))//鏃犵鍙穢,y姣旇緝
x<=y: (~x|y)&((x^y)|~(y-x))//鏃犵鍙穢,y姣旇緝
浣跨敤浣嶈繍綆楃殑鏃犲垎鏀唬鐮侊細(xì)
璁$畻緇濆鍊?nbsp;
int abs( int x )
{
int y ;
y = x >> 31 ;
return (x^y)-y ;//or: (x+y)^y
}
絎﹀彿鍑芥暟錛歴ign(x) = -1, x<0; 0, x == 0 ; 1, x > 0
int sign(int x)
{
return (x>>31) | (unsigned(-x))>>31 ;//x=-2^31鏃跺け璐?^涓哄箓)
}
涓夊兼瘮杈冿細(xì)cmp(x,y) = -1, x<y; 0, x==y; 1, x > y
int cmp( int x, int y )
{
return (x>y)-(x-y) ;
}
doz=x-y, x>=y; 0, x<y
int doz(int x, int y )
{
int d ;
d = x-y ;
return d & ((~(d^((x^y)&(d^x))))>>31) ;
}
int max(int x, int y )
{
int m ;
m = (x-y)>>31 ;
return y & m | x & ~m ;
}
涓嶄嬌鐢ㄧ涓夋柟浜ゆ崲x,y:
1.x ^= y ; y ^= x ; x ^= y ;
2.x = x+y ; y = x-y ; x = x-y ;
3.x = x-y ; y = y+x ; x = y-x ;
4.x = y-x ; x = y-x ; x = x+y ;
鍙屽間氦鎹?x = a, x==b; b, x==a//甯歌緙栫爜涓簒 = x==a ? b :a ;
1.x = a+b-x ;
2.x = a^b^x ;
涓嬭垗鍏ュ埌2鐨刱嬈℃柟鐨勫嶆暟:
1.x & ((-1)<<k)
2.(((unsigned)x)>>k)<<k
涓婅垗鍏ワ細(xì)
1. t = (1<<k)-1 ; x = (x+t)&~t ;
2.t = (-1)<<k ; x = (x-t-1)&t ;
浣嶈鏁?緇熻1浣嶇殑鏁伴噺錛?nbsp;
1.
int pop(unsigned x)
{
x = x-((x>>1)&0x55555555) ;
x = (x&0x33333333) + ((x>>2) & 0x33333333 ) ;
x = (x+(x>>4)) & 0x0f0f0f0f ;
x = x + (x>>8) ;
x = x + (x>>16) ;
return x & 0x0000003f ;
}
2.
int pop(unsigned x) {
static char table[256] = { 0,1,1,2, 1,2,2,3, ...., 6,7,7,8 } ;
return table[x&0xff]+table[(x>>8)&0xff]+table[(x>>16)&0xff]+table[(x>>24)] ;
}
濂囧伓鎬ц綆?
x = x ^ ( x>>1 ) ;
x = x ^ ( x>>2 ) ;
x = x ^ ( x>>4 ) ;
x = x ^ ( x>>8 ) ;
x = x ^ ( x>>16 ) ;
緇撴灉涓綅浜巟鏈浣庝綅錛屽鏃犵鍙穢,緇撴灉鐨勭i浣嶆槸鍘熸暟絎琲浣嶅埌鏈宸︿晶浣嶇殑濂囧伓鎬?nbsp;
浣嶅弽杞細(xì)
unsigned rev(unsigned x)
{
x = (x & 0x55555555) << 1 | (x>>1) & 0x55555555 ;
x = (x & 0x33333333) << 2 | (x>>2) & 0x33333333 ;
x = (x & 0x0f0f0f0f) << 4 | (x>>4) & 0x0f0f0f0f ;
x = (x<<24) | ((x&0xff00)<<8) | ((x>>8) & 0xff00) | (x>>24) ;
return x ;
}
閫掑浣嶅弽杞悗鐨勬暟錛?nbsp;
unsigned inc_r(unsigned x)
{
unsigned m = 0x80000000 ;
x ^= m ;
if( (int)x >= 0 )
do { m >>= 1 ; x ^= m ; } while( x < m ) ;
return x ;
}
娣烽変綅錛?nbsp;
abcd efgh ijkl mnop ABCD EFGH IJKL MNOP->aAbB cCdD eEfF gGhH iIjJ kKlL mMnN oOpP
unsigned ps(unsigned x)
{
unsigned t ;
t = (x ^ (x>>8)) & 0x0000ff00; x = x ^ t ^ (t<<8) ;
t = (x ^ (x>>4)) & 0x00f000f0; x = x ^ t ^ (t<<4) ;
t = (x ^ (x>>2)) & 0x0c0c0c0c; x = x ^ t ^ (t<<2) ;
t = (x ^ (x>>1)) & 0x22222222; x = x ^ t ^ (t<<1) ;
return x ;
}
浣嶅帇緙╋細(xì)
閫夋嫨騫跺彸縐誨瓧x涓搴斾簬鎺╃爜m鐨?浣嶇殑浣?濡傦細(xì)compress(abcdefgh,01010101)=0000bdfh
compress_left(x,m)鎿嶄綔涓庢綾諱技錛屼絾緇撴灉浣嶅湪宸﹁竟: bdfh0000.
unsigned compress(unsigned x, unsigned m)
{
unsigned mk, mp, mv, t ;
int i ;
x &= m ;
mk = ~m << 1 ;
for( i = 0 ; i < 5 ; ++i ) {
mp = mk ^ ( mk << 1) ;
mp ^= ( mp << 2 ) ;
mp ^= ( mp << 4 ) ;
mp ^= ( mp << 8 ) ;
mp ^= ( mp << 16 ) ;
mv = mp & m ;
m = m ^ mv | (mv >> (1<<i) ) ;
t = x & mv ;
x = x ^ t | ( t >> ( 1<<i) ) ;
mk = mk & ~mp ;
}
return x ;
}
浣嶇疆鎹細(xì)
鐢?2涓?浣嶆暟琛ㄧず浠庢渶浣庝綅寮濮嬬殑浣嶇殑鐩爣浣嶇疆錛岀粨鏋滄槸涓涓?2*5鐨勪綅鐭╅樀錛?nbsp;
灝嗚鐭╅樀娌挎瀵硅綰胯漿緗悗鐢?涓?2浣嶅瓧p[5]瀛樻斁銆?nbsp;
SAG(x,m) = compress_left(x,m) | compress(x,~m) ;
鍑嗗宸ヤ綔錛?nbsp;
void init( unsigned *p ) {
p[1] = SAG( p[1], p[0] ) ;
p[2] = SAG( SAG( p[2], p[0]), p[1] ) ;
p[3] = SAG( SAG( SAG( p[3], p[0] ), p[1]), p[2] ) ;
p[4] = SAG( SAG( SAG( SAG( p[4], p[0] ), p[1]) ,p[2]), p[3] ) ;
}
瀹為檯緗崲錛?nbsp;
int rep( unsigned x ) {
x = SAG(x,p[0]);
x = SAG(x,p[1]);
x = SAG(x,p[2]);
x = SAG(x,p[3]);
x = SAG(x,p[4]);
return x ;
}
浜岃繘鍒剁爜鍒癎RAY鐮佺殑杞崲:
unsigned B2G(unsigned B )
{
return B ^ (B>>1) ;
}
GRAY鐮佸埌浜岃繘鍒剁爜:
unsigned G2B(unsigned G)
{
unsigned B ;
B = G ^ (G>>1) ;
B = G ^ (G>>2) ;
B = G ^ (G>>4) ;
B = G ^ (G>>8) ;
B = G ^ (G>>16) ;
return B ;
}
鎵懼嚭鏈宸?瀛楄妭鐨勪綅緗?
int zbytel( unsigned x )
{
static cahr table[16] = { 4,3,2,2, 1,1,1,1, 0,0,0,0, 0,0,0,0 } ;
unsigned y ;
y = (x&0x7f7f7f7f) + 0x7f7f7f7f ;
y = ~(y|x|0x7f7f7f7f) ;
return table[y*0x00204081 >> 28] ;//涔樻硶鍙敤縐諱綅鍜屽姞瀹屾垚
}
C\C++鏀寔姣旇緝浣庨樁鐨勪綅榪愮畻錛屽湪鏄紬浜虹殕鐭ョ殑浜?jiǎn)銆傛瘡鏈珻\C++鐨勬暀縐戜功閮戒細(xì)璇村埌榪欓儴鍒嗙殑鍐呭錛屼笉榪囬兘寰堢畝鐣ワ紝鎴戞兂浼?xì)鏈夊緢澶氫恨Z笉鐭ラ亾浣嶈繍綆楃敤鍦ㄤ粈涔堝湴鏂廣傝繖涓笘瀛愬氨綆鐣ヨ璇翠綅榪愮畻鐨勭敤澶勶紝鏇磋繘涓姝ョ殑鐢ㄦ硶瑕佸ぇ瀹惰嚜宸卞幓浣撲細(xì)銆傝屼富瑕佽鐨勬槸鎿嶄綔鏍囧織鍊兼柟闈€?/p>
/****************************************/
#define BTI_MSK(bit) (1 << (bit))
#define BIT_SET(x,bit) ((x) |= BTI_MSK (bit))
#define BIT_CLR(x,bit) ((x) &= ~BTI_MSK (bit))
#define BIT_TST(x,bit) ((x) & BTI_MSK (bit))
/****************************************/
鑰冭檻涓涓簨鐗┿佷竴涓郴緇熴佹垨鑰呬竴涓▼搴忓彲鑳戒細(xì)鍑虹幇涓縐嶆垨鑰呭嚑縐嶇姸鎬併備負(fù)浜?jiǎn)鍦ㄤ笉鍚岀殑鐘舵佷笅錛屼綔鍑轟笉鍚岀殑琛屼負(fù)錛屼綘鍙互璁劇珛涓浜涙爣蹇楀鹼紝鍐嶆牴鎹爣蹇楀兼潵鍋氬垽鏂傛瘮濡侰++鐨勬枃浠舵祦錛屼綘灝卞彲浠ヨ瀹氫竴浜涙爣蹇楀鹼紝ios::app, ios::ate, ios::binary, ios::in, ios::out, ios::trunc錛屽茍涓斿彲浠ュ皢瀹冪敤|緇勫悎璧鋒潵鍒涘緩涓涓伆褰撶殑鏂囦歡嫻併備綘鍙兘浼?xì)灏啒q欎簺鏍囧織鍊煎畾涔変負(fù)bool綾誨瀷錛屼笉榪囪繖鏍瘋鏄緗殑鏍囧織鍊間竴澶氾紝灝變細(xì)寰堟氮璐圭┖闂淬?br>
鑰屽亣濡傚畾涔変竴涓暣鍨嬫暟鍊鹼紝unsigned int flags; 鍦ㄧ幇鍦ㄧ殑緋葷粺錛宖lags搴旇鏄?2浣? 鐢?,2,3....32灝嗕綅榪涜緙栧彿錛屾垜浠彲浠ヨ繘琛岃繖鏍風(fēng)殑鍒ゆ柇, 褰撲綅1鍙?鏃訛紝琛ㄧず鐢ㄨ鏂瑰紡鎵撳紑鏂囦歡錛屽綋浣?鍙?鏃訛紝琛ㄧず鐢ㄥ啓鏂瑰紡鎵撳紑鏂囦歡錛屽綋浣?鍙?鏃訛紝鐢ㄤ簩榪涘埗鏂瑰紡鎵撳紑鏂囦歡....鍥犱負(fù)flags鏈?2浣嶏紝灝卞彲浠ヨ緗?2涓笉鍚岀殑鐘舵佸鹼紝涔熺浉褰撲簬32涓猙ool綾誨瀷銆傝繖鏍蜂竴鏂歸潰鐪佷簡(jiǎn)絀洪棿, 鍙︿竴鏂歸潰涔熷浜?jiǎn)涓ソ澶勫Q屽氨鏄鍓嶉潰鎵璇寸殑錛屽彲浠ュ皢鏍囧織鍊肩粍鍚堣搗鏉ャ?br>//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
濂藉暒錛屼笂闈㈡湁鐐逛笉娓呬笉妤氱殑銆備笅闈㈢湅鐪嬪埌搴曟庝箞鎿嶄綔榪欎簺鏍囧織鍊箋?br>璁炬兂C++鐨勭被ios榪欐牱瀹氫箟, 鍏跺疄娌℃湁榪欎釜綾伙紝鍙湁ios_basic綾伙紝typedef basic_ios<char> ios;
class ios
{
public:
enum { app = 0x0001, ate = 0x0002, binary = 0x0004,
in = 0x0008, out = 0x0010, trunc = 0x0020 };
....
private:
unsigned int flags;
};
娉ㄦ剰涓婇潰enum璇彞涓紝姣忎竴涓暟鍊煎彧鏈?浣嶆槸1錛屽叾浣欐槸0錛岃繖涓緢閲嶈錛屼綘鍙互灝嗗畠鍖栨垚2榪涘埗鐪嬬湅銆?br>
鐜板湪灝唂lags鐩稿簲鐨勪綅璁劇疆涓?, 鍙互榪欐牱鍋?nbsp;flags |= app銆傝繖涓瓑浜巉lags = flags | app, 涓轟粈涔堝憿? app鍙湁1浣嶆槸1錛屽叾浣欐槸0錛屽洜涓? | 1 = 0錛?nbsp;0 | 0 = 0錛?nbsp;榪欐牱0瀵瑰簲鐨勪綅鏄笉鍙樼殑銆傝? | 1 = 1, 1 | 0 = 1, 1瀵瑰簲鐨勪綅涓嶈鍘熸潵鏄粈涔堢姸鎬侊紝閮戒竴瀹氫負(fù)1銆傚鏋滄兂瑕佸皢鍑犱釜浣嶉兘璁劇疆涓?錛屽彲浠ヨ繖鏍峰仛 flags |= (app | ate | binary)銆傚洜涓烘瘡涓猠num甯告暟鍚勬湁涓浣嶄負(fù)1, 涓庤繍綆椾箣鍚庡氨鏈?浣嶄負(fù)1錛屽氨濡備笂闈㈢殑鍒嗘瀽錛屽氨鍙互灝嗛偅3浣嶉兘璁劇疆涓?, 鍏朵綑浣嶄笉鍙樸傝繖涓氨鏄爣蹇楀彲浠ョ粍鍚堣搗鏉ョ敤鐨勫師鍥犮備篃鍙互鐢?緇勫悎璧鋒潵錛屽師鍥犲湪浜?涓嬮潰鐨勬暟瀛楁槸2榪涘埗)0001 + 0010 + 0100 = 0111 璺熶笌榪愮畻緇撴灉涓鏍楓備笉榪囦笉鎻愬$敤+, 鑰冭檻(app | ate | binary)瑕佹槸鎴戜笉灝忓績(jī)鍐欏浜?jiǎn)涓爣蹇楀鹼紝(app | ate | ate | binary)緇撴灉榪樻槸姝g‘鐨勶紝濡傛灉鐢?鐨勮瘽錛屽氨浼?xì)漶旂敓杩涗綅锛尵l撴灉灝變細(xì)閿欒銆傞氬父鎴戜滑涓嶇煡閬撳師鍏堝凡緇忕粍鍚堜簡(jiǎn)澶氬皯涓爣蹇楀間簡(jiǎn)錛岀敤鎴栬繍綆椾細(xì)瀹夊叏銆?br>
鐜板湪灝唂lags瀵瑰簲鐨勪綅璁劇疆涓?, 鍙互榪欐牱鍋?nbsp;flags &= ~app銆傜浉褰撲簬 flags = flags & (~app). app鍙栧弽涔嬪悗錛屽彧鏈?浣嶆槸0錛屽叾浣欐槸1錛屽仛涓庤繍綆椾箣鍚庯紝1瀵瑰簲鐨勪綅騫朵笉浼?xì)鏀瑰彉锛?瀵瑰簲鐨勪負(fù)涓嶇鍘熸潵鏄?鏄?錛岄兘鑲畾涓?錛岃繖鏍峰氨灝嗗搴旂殑浣嶈緗簡(jiǎn)0銆傚悓鏍峰悓鏃惰緗嚑涓爣蹇椾綅鍙互榪欐牱鍋氾紝flags &= ~(app | ate | binary)銆?br>
鐜板湪灝唂lags瀵瑰簲鐨勪綅錛屽鏋滄槸1灝卞彉鎴?錛屽鏋滄槸0灝卞彉鎴?錛屽彲浠ヨ繖鏍峰仛 flags ^= app銆傚悓鏃惰緗嚑涓爣蹇椾綅鍙互鍐欐垚 flags ^= (app | ate | binary)銆備笉鍐嶅仛鍒嗘瀽浜?jiǎn)锛屼笉鐒稙澶|楀棪浜?jiǎn)銆備笉榪囦篃緇欏ぇ瀹朵竴涓緥瀛愶紝浣犳煡鏌scii琛紝浼?xì)鍙戠幇瀵瑰簲鐨勫ぇ灏忓啓瀛楁瘝鏄浉宸掓暟絎?浣嶏紝鍙互鐢ㄨ繖鏍風(fēng)殑鍑芥暟緇熶竴鐨勫皢澶у啓鍙樻垚灝忓啓錛屽皬鍐欏彉鎴愬ぇ鍐欍?br>void xchgUppLow(string& letters)
{
const unsigned int mask = (1<<5);
for (size_t i=0; i<letters.length(); i++)
letters[i] ^= mask;
}
鍓嶆彁鏄緭鍏ョ殑string涓瀹氳鍏ㄦ槸瀛楁瘝, 鑰岃鎯蟲槸鎿嶄綔瀛楁瘝錛屽彲浠ュ湪鍘熸潵鍩虹涓婂姞涓垽鏂?br>
濂藉暒錛屼笂闈㈠凡緇忓彲浠ヨ緗甪lags鐨勫搴斾綅鍊間簡(jiǎn)錛岃鏄垽鏂憿錛熷彲浠ヨ繖鏍峰啓 if (flags & app) 榪欐牱鍙互鍒ゆ柇瀵瑰簲鐨勪綅鍊兼槸鍚︿負(fù)1, 鍥犱負(fù)C\C++璇█涓潪0灝辯湡銆俛pp鍙湁涓浣嶆槸1錛屽叾浣欐槸0錛屽鏋? flags鐨勫搴斾綅涔熸槸0錛屽湪涓庢搷浣滀笅灝卞緱鍒扮粨鏋?錛屽弽涔嬮潪0錛岃繖鏍峰氨鍙互鍒ゆ柇鏍囧織浣嶄簡(jiǎn)銆?br>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
涓婇潰鍏充簬鏍囧織鍊肩殑鎿嶄綔灝變粙緇嶅畬姣曘傚叾瀹炲湪C++涓凡緇忔湁浜?jiǎn)涓猙itset浜?jiǎn)锛屾病鏈夊繀瑕佸幓鑷忿p繘琛屼綆闃剁殑浣嶈繍綆楋紝涓婇潰鐨勫洓涓搷浣滃湪bitset涓垎鍒彨鍋歴et, reset, flip, test銆備笉榪囧湪C涓紝榪欐牱鐨勪唬鐮佽繕寰堝父瑙? 鍙嶆鐭ラ亾澶氱偣涔熸病鏈夊潖澶勩?br>
鐢?nbsp;windows API 緙栫▼錛屼綘涔熺粡甯鎬細(xì)紕板埌榪欐牱鐨勬爣蹇楀鹼紝瑕佷簰鐩哥粍鍚堬紝鍙互鐢▅, 涔熷彲浠ョ敤+(鍙槸寤鴻鐢▅錛岀悊鐢變笂闈㈣浜?. 瀹冪殑鏍囧織鍊間篃鏄繖鏍峰畾涔夌殑錛屼笉榪囩敤#define
#define WS_BORDER 0x0001
#define WS_CAPTION 0x0002
......
褰撳垵鎴戝氨鏄兂涓嶆槑鐧戒負(fù)浠涔堝彲浠ョ敤|鎴栬呯敤+鏉ョ粍鍚堬紝鐜板湪鐭ラ亾浜?jiǎn)銆?br>
(娉細(xì)涓婇潰鍑虹幇鐨勬暟瀛楁槸鎴戣嚜宸變綔鐨勶紝鍒板簳瀹為檯鎬庝箞瀹氫箟鍏跺疄娌℃湁鍏崇郴錛屽彧瑕佷繚璇佸彧鏈変竴浣嶆槸1錛屽叾浣欐槸0灝卞彲浠ョ殑浜? 鍥犱負(fù)緙栫▼鐨勬椂鍊欑敤鐨勬槸甯擱噺鍊鹼紝娌℃湁浜鴻繖鏍風(fēng)鍘葷洿鎺ョ敤鏁板肩殑)
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
鍏跺疄錛屼綅榪愮畻榪樻湁寰堝鐢ㄥ銆傛瘮濡傜Щ浣嶇浉褰撲簬涔橀櫎2鐨勫箓鏁?涓嶈繃閫氬父緙栬瘧鍣ㄤ篃灝嗕箻闄?鐨勫箓鏁頒紭鍖栨垚姹囩紪鐨勭Щ浣嶆寚浠わ紝鎵浠ユ病鏈夊繀瑕佷笉瑕佽繖鏍峰崠寮勪簡(jiǎn)銆傛眹緙栫殑縐諱綅鎸囦護(hù)鏈変袱緇勶紝鍒嗗埆閽堝鏈夌鍙峰拰鏃犵鍙風(fēng)殑, 鎴戠寽鎯沖湪C\C++鐨勫悓涓縐諱綅榪愮畻閽堝鏈夌鍙鋒暣鏁板拰鏃犵鍙鋒暣鏁扮殑涓嶅悓錛屼細(xì)鏍規(guī)嵁鎯呭喌緙栬瘧鎴愪笉鍚岀殑姹囩紪縐諱綅鎸囦護(hù)錛屼笉榪囨病鏈夊幓璇佸疄), 鍏跺疄縐諱綅鏇寸敤寰楀鐨勫湴鏂規(guī)槸鍘繪瀯閫犱竴涓帺鐮? 姣斿涓婇潰鐨刴ask = (1<<5);
榪樻湁&榪愮畻錛屾湁鏃跺欏彲浠ョ敤鏉ユ眰浣欐暟銆傛瘮濡?nbsp;value & (1<<4 - 1) 榪欑浉褰撲簬灝唙alue鐨勯珮浣嶅叏鍙樻垚0浜?jiǎn)锛屾晥鏋溄{変簬 value % 8.
榪樻湁鍊煎緱涓鎻愮殑鏄痎榪愮畻錛屽畠鏈変釜寰堢壒孌婄殑鎬ц川銆傛瘮濡?nbsp;A ^= B, 鍙樻垚鍙︿竴涓暟錛岃窡鐫鍐嶆墽琛孉 ^= B錛屽張鍙樺洖鍘熸潵鐨勬暟浜?jiǎn)锛屼笉淇′綘鍙互鍒楃湡鍊艱〃鎴栬呭寲綆閫昏緫寮忕湅鐪嬨傚氨鍥犱負(fù)榪欎釜鎬ц川錛宆鏈夊緢澶氱敤閫斻傛瘮濡傚姞瀵嗭紝浣犲皢鍘熸枃鐪嬫垚A, 鐢ㄥ悓涓涓狟寮傛垨涓嬈★紝灝辯浉褰撲簬鍔犲瘑錛岃窡鐫鍦ㄧ敤B寮傛垨涓嬈★紝鐩稿綋浜庤В瀵嗐備笉榪囪繖鏍鋒槸寰堝鏄撶牬瑙e氨鏄簡(jiǎn)銆傝鏄竴涓狟涓嶅錛岃繕鍙互鍔犱釜C, 姣斿A ^= B, A ^= C, A ^= C, A ^= B, 鎭㈠鍘熺姸銆?br>
涓嬮潰涓涓皬紼嬪簭錛岀敤寮傛垨浜ゆ崲涓や釜鏁板瓧銆?br>int x = 3;
int y = 4;
x ^= y;
y ^= x;
x ^= y;
鍏跺疄浣曟浜ゆ崲鏁板瓧錛岃繛浜ゆ崲瀵硅薄涔熷彲浠ョ殑
template <typename T>
void swap(T& obj1, T& obj2)
{
const int sizeOfObj = sizeof(T);
char* pt1 = (char*)&obj1;
char* pt2 = (char*)&obj2;
for (size_t i=0; i<sizeOfObj; i++)
{
pt1[i] ^= pt2[i];
pt2[i] ^= pt1[i];
pt1[i] ^= pt2[i];
}
}
榪樻湁寮傛垨鎿嶄綔榪樺彲浠ョ敤鍦ㄥ浘璞$殑鍏夋爡鎿嶄綔銆傛垜浠煡閬擄紝棰滆壊涔熸槸鐢ㄤ簩榪涘埗鏉ヨ〃紺虹殑錛屽棰滆壊榪涜涓嶅悓鐨勪綅榪愮畻錛屽氨鍙互寰楀埌涓嶅悓鐨勫厜鏍呫傚洜涓哄紓鎴栫殑鐗規(guī)畩鎬ц川錛屾垜浠敤寮傛垨鎿嶄綔鐨勫厜鏍呯敾浜?jiǎn)鍓浘锛岃窡鐫鍐嶅湪鍘熸潵鐨勫湴鏂圭敾涓嬈★紝閭e壇鍥懼氨鍒烽櫎浜?jiǎn)銆傝繖鏍峰彲浠ョ敤鏉ユ樉紺哄姩鐢昏屼笉鐢ㄤ繚瀛樺師鏉ョ殑鐢誨儚淇℃伅銆備互鍓嶆垜鍐欒繃涓弻浜虹殑璐铔囷紝灝辯敤浜?jiǎn)寮傛垨鍏夋爡銆傚洜涓鴻儗鏅壊鏄櫧鑹茬殑錛屼篃灝辨槸鍏?錛屼綔A ^ 1 = A, 鎵浠ョ敤鐢誨埛鐢諱竴嬈℃槸鐢諱簡(jiǎn)璁懼畾鐨勯鑹詫紝鍐嶇敾涓嬈″氨鎭㈠銆傛渶鏈夎叮鐨勬槸涓よ泧鐩鎬氦鐨勬椂鍊欙紝棰滆壊涔熶細(xì)浣滃紓鎴栧彔鍔狅紝浜х敓涓縐嶆柊鐨勯鑹蹭簡(jiǎn)錛岀寮鐨勬椂鍊欎篃浼?xì)鑷姩鎭㈠銆?br>//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
濂藉暒錛屽闀夸簡(jiǎn)錛屽氨鍋滄鍚с傚湪鏈鍚庡啀緇欏ぇ瀹朵竴孌典唬鐮侊紝鏄敤鏉ョ湅鐪嬪璞″湪鍐呭瓨涓殑浣嶅肩殑銆傚彲浠ョ湅鐪嬨?br>string bitsOfUChar(unsigned char c)
{
const int numOfBitsInUChar = 8;
unsigned int mask = (1<<7);
string result(8, '0');
for (size_t i=0; i<numOfBitsInUChar; i++)
{
if ( mask & c)
result[i] = '1';
mask >>= 1;
}
return result;
}
template <typename T>
string bitsInMemory(const T& obj)
{
int sizeOfObj = sizeof(obj);
unsigned char* pt = (unsigned char*)&obj;
string result;
for (size_t i=0; i<sizeOfObj; i++)
{
result += bitsOfUChar(pt[i]);
result += ' ';
}
return result;
}
姣斿bitsInMemory(12)錛屼細(xì)杈撳嚭00001100 00000000 00000000 00000000, 鎴戝氨鐭ラ亾鎴戣嚜宸辯殑鏈哄櫒鏄皬灝鵑『搴忕殑浜?jiǎn)銆?br>