這種外掛的方法不適合于連連看、對(duì)對(duì)碰等游戲,逐像素分析太慢了,而且消掉幾行后你還得重新采樣。
最適合的辦法是抓取網(wǎng)絡(luò)封包,抓取游戲和服務(wù)器之間的通信數(shù)據(jù),在這些數(shù)據(jù)中,肯定會(huì)用比較簡(jiǎn)單的數(shù)字表示每一個(gè)單元格是什么圖片,也會(huì)用簡(jiǎn)單的數(shù)字表示什么時(shí)候消除結(jié)束,什么時(shí)候獲得道具,等等。。。然后外掛分析這些數(shù)據(jù),向游戲窗口發(fā)送鼠標(biāo)消息即可。
逐像素分析適合于找茬這樣的游戲。前一段時(shí)間我剛好謝了個(gè)找茬的小外掛,歡迎交流:
http://www.shnenglu.com/youxia/archive/2010/11/29/135024.html
Ubuntu我也不習(xí)慣
我以前也是用RedHat AS,后來(lái)聽說(shuō)了CentOS,就改用CentOS了
《深入淺出MFC雖然經(jīng)典》,但是已經(jīng)有好多年了。另外一本MFC方面的著作《精通MFC》,電子工業(yè)大學(xué)出版社出的,相當(dāng)?shù)暮茫沂亲x了一遍又一遍,每一遍都很有啟發(fā)。不知道這本書為什么推薦的不多?
@空明流轉(zhuǎn)
謝謝指正!
不是我不想了解,而是有很多東西我看不懂。我文章中列出的,是我稍微看得懂一點(diǎn)點(diǎn)的,呵呵。
對(duì)于C++0x的了解,我主要是看的劉未鵬的博客,還有一些通過(guò)搜索引擎搜到的零散碎片。
你能給我一些更好的資料嗎?
我發(fā)現(xiàn)我上面的結(jié)論錯(cuò)了。剛才把代碼輸入到VS2008,調(diào)試了一下。發(fā)現(xiàn):
*p=(int)test;確實(shí)只是把test的地址放到了*p里面,而不是調(diào)用test();
而在return的時(shí)候調(diào)用了test,然后出錯(cuò)。
說(shuō)明*p這個(gè)非法內(nèi)存訪問是真的改變了main函數(shù)返回后執(zhí)行的下一條指令的地址。
高手好多哦。你們想得太復(fù)雜了。
我認(rèn)為這一句
*p = ( int )test;
調(diào)用了test函數(shù),只不過(guò)test函數(shù)沒有返回值,且p指向非法內(nèi)存,所以給*P賦值就會(huì)犯錯(cuò),于是程序就會(huì)掛掉。
樓主說(shuō)的特性是不是test和test()是一樣的啊?
我想你的郁悶主要是因?yàn)槟銈冺?xiàng)目組的人不少,每個(gè)人寫代碼的風(fēng)格都不一樣造成的吧?
其實(shí)C++非常美,非常具有詩(shī)意的,但是如果你天天看別人寫的垃圾代碼,那無(wú)疑是一種噩夢(mèng)。MFC并不難,關(guān)鍵是要理解,有很多時(shí)候我們并不需要MFC中的大多數(shù)特性,只需要用設(shè)計(jì)器拖放出一個(gè)簡(jiǎn)單的界面,然后和它交互,知道在哪個(gè)事件里寫代碼,知道怎么畫圖就行了。(事實(shí)上,MFC包含的內(nèi)容遠(yuǎn)不止這些)
你可以到我的博客看看,我寫過(guò)一個(gè)俄羅斯方塊的游戲,只用了一點(diǎn)點(diǎn)MFC的知識(shí),但是我認(rèn)為我的C++代碼設(shè)計(jì)得很優(yōu)美。
http://www.shnenglu.com/youxia/archive/2007/12/16/38605.html用到了STL中的deque,用到了Factory模式,用到了多線程和線程同步的知識(shí),用到了GDI繪圖,但是沒用多少M(fèi)FC的東西。
re: epoll相關(guān)資料整理 海邊沫沫 2008-10-16 20:43
頂
windows中的完成端口也不錯(cuò)。Boost中的ASIO庫(kù)也不錯(cuò),前段時(shí)間我就專門去看Boost的ASIO的文檔了。推薦博主看一下。
老兄,真的很佩服你
一是佩服你找工作下的苦功,IBM這樣的公司都被你進(jìn)去了,你這么復(fù)雜的經(jīng)歷,真不知道你的簡(jiǎn)歷是怎么填的。我曾經(jīng)去華為面過(guò)試,第一關(guān)技術(shù)關(guān)都過(guò)了,但是因?yàn)槲业暮?jiǎn)歷上面寫的是非計(jì)算機(jī)專業(yè)的工作經(jīng)歷,結(jié)果在第二關(guān)被一個(gè)不懂技術(shù)的面試人員給否定了。
二是覺得你老是這樣跳來(lái)跳去肯定不行,你必須要在同一個(gè)領(lǐng)域做深做大,如果沒有高薪和高職位,像你這樣工作十年了,肯定超過(guò)30歲了的,又有老婆孩子的,沒有積蓄會(huì)過(guò)得很凄慘。我現(xiàn)在只工作了四年,薪水不超過(guò)6k,技術(shù)估計(jì)也沒有你強(qiáng),但是我不擔(dān)心失業(yè),而且離我升下一個(gè)級(jí)別估計(jì)只有一年了,這就是熬資歷吧。
樓上的,我早就說(shuō)了叫你不要復(fù)制嘛,這些空格是該博客系統(tǒng)自己添加的。
至于你說(shuō)不存在這個(gè)目錄,那就冤枉我了,請(qǐng)看下面截圖:
@空明流轉(zhuǎn)
微軟的文檔我還讀得懂,不過(guò)它的Reference讀起來(lái)確實(shí)要費(fèi)點(diǎn)勁,Knowledge Base要好讀一些,不過(guò)Boost的更好。
呵呵,模板元編程其實(shí)也是遞歸的方式
還有宏定義也可以做到,也是遞歸的方式
@Kevin Lynx
你說(shuō)得非常對(duì),這幾個(gè)例子都是《C++ Templates》上的,原因嘛,一是因?yàn)槲矣X得這些例子對(duì)于我們理解這些理論非常有幫助,二是因?yàn)橐晕业乃剑矊?shí)在是翻不出什么花樣來(lái)。
剛才去你的博客看了一下,覺得你寫的那個(gè)利用宏進(jìn)行代碼生成的文章非常好,我想,使用模板元編程干這事,應(yīng)該也是一樣的吧。
我也覺得你是一個(gè)知識(shí)面非常廣的實(shí)戰(zhàn)型高手,不僅懂理論,還自己寫了那么多的實(shí)現(xiàn),確實(shí)令人佩服。
re: 瓦格納的排場(chǎng)[未登錄] 海邊沫沫 2008-02-14 17:15
博主真了不起,藝術(shù)造詣這么深。
使勁頂!
其實(shí)我早就想在C++中使用IoC了,可惜能力有限,怎么都想不到一個(gè)好的實(shí)現(xiàn)方法,眼光有限,也找不到一個(gè)可以使用的IoC框架。
博主的這篇開山之作對(duì)我很有用。
有空多交流。
re: 寫個(gè)小游戲練一練手 海邊沫沫 2007-12-19 19:13
我今天稍微把游戲修改了一下,不用
if(pDlg->m_GameActionQue.empty())
{
::Sleep(100);
}
了,而是在對(duì)話框類中加入了一個(gè)CEvent類的變量m_event
然后,讀取隊(duì)列的時(shí)候使用
if(pDlg->m_GameActionQue.empty())
{
pDlg->m_event.Lock();
}
而在其他寫入隊(duì)列的時(shí)候調(diào)用
m_event.SetEvent();
這樣修改之后,游戲?qū)︽I盤的響應(yīng)就基本上沒有延時(shí)了,而且占用CPU要下降不少。
re: 寫個(gè)小游戲練一練手 海邊沫沫 2007-12-17 13:37
@TD
你說(shuō)得不錯(cuò),游戲中確實(shí)需要考慮線程同步問題。首先是多個(gè)線程訪問同一個(gè)變量的時(shí)候,最好能加入競(jìng)爭(zhēng)機(jī)制。在我這個(gè)游戲中,就沒有對(duì)m_GameActionQue的訪問進(jìn)行控制,不過(guò)兩個(gè)線程在尾部寫,一個(gè)線程在頭部讀,倒沒有出現(xiàn)問題。
其次是這里
if(pDlg->m_GameActionQue.empty())
{
::Sleep(100);
}
我在一個(gè)循環(huán)中不斷進(jìn)行判斷隊(duì)列是否為空,這種做法雖然可行,但是不好,因?yàn)樵陉?duì)列為空的時(shí)候不斷循環(huán)判斷很占用CPU時(shí)間。正確的做法應(yīng)該是調(diào)用WaitForSingleObject使線程阻塞起來(lái),當(dāng)別的線程向隊(duì)列中添加消息的時(shí)候解除阻塞。
又有一個(gè)超級(jí)高手橫空出現(xiàn)在cppblog了。
希望摟主把你安裝蘋果主題以及美化字體的過(guò)程都寫出來(lái)。
還要告訴我們到哪里可以下載這些資源。
不錯(cuò),是沒有辦法改變分隔符。
不過(guò)可以重載operator << 和自定義一個(gè)自己的string來(lái)實(shí)現(xiàn)這樣的功能。
不過(guò)這樣搞劃不來(lái),不如使用getline
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::ifstream input_file("D:\\emails100w.txt");
std::istream_iterator<std::string> input_begin(input_file);
std::istream_iterator<std::string> input_end;
std::vector<std::string> log_vector(input_begin,input_end);
//寫入到另外一個(gè)文件
std::ofstream output_file("D:\\emails100w_copy.txt");
std::ostream_iterator<std::string> output_begin(output_file,"\n");
std::copy(log_vector.begin(),log_vector.end(),output_begin);
}
上面的代碼是可以編譯通過(guò)的,其中的D:\\emails100w.txt是一個(gè)包含一百萬(wàn)條記錄的文本。
剛才我給出的代碼通不過(guò)編譯,確實(shí)是我的問題,主要是
std::istream_iterator<std::string> input_end;
這一行,最后應(yīng)該沒有括號(hào)。如果加上括號(hào),編譯器就不會(huì)認(rèn)為這是一個(gè)iterator,就會(huì)調(diào)用vector的錯(cuò)誤構(gòu)造函數(shù),就會(huì)出現(xiàn)博主所敘的錯(cuò)誤。
呵呵,為什么要用list?為什么不用vector?
還有,讀取文件的代碼寫得太不C++了,像C的代碼。
C++的代碼,要么是
ifstream inputfile("filename);
string tmpstr;
vector<string> log_vector;
while(inputfile >> tmpstr)
{
log_vector.push_back(tmpstr);
}
要么是
ifstream inputfile("filename);
istream_iterator input_begin(inputfile);
istream_iterator input_end();
vector<string> log_vector(input_begin,input_end);
內(nèi)存大小和尋址快慢有關(guān)系嗎?vector是可以隨機(jī)訪問的,像數(shù)組一樣,尋址任何一個(gè)元素的時(shí)間花費(fèi)都是常數(shù)。list是不能隨機(jī)訪問的,才會(huì)出現(xiàn)容器越大尋址越慢的情況。
std::set和std::tr1::unordered_set是不同的,它們的底層實(shí)現(xiàn)不同。std::set不是hash,而是紅黑樹。
@heroboy
多謝指點(diǎn)。由此可見,我們不能在for each中修改容器的內(nèi)容。
Hash table在VC++ 2005和VC++ 2008中,有hash_map、hash_set、hash_multimap、hash_multiset可用,在下一代C++標(biāo)準(zhǔn)中,它們將被更名為unordered_map和unordered_set。
用它們來(lái)去除重復(fù)項(xiàng),的確很快,但是它們不能排序。
正準(zhǔn)備學(xué)OpenMP,摟主的文章對(duì)我很有幫助。
按樓上的建議修改后,運(yùn)行結(jié)果如下:
real 0m35.157s
user 0m26.005s
sys 0m9.219s
效率的提升并不大,由此可見,你說(shuō)的并不是關(guān)鍵問題。
<a href=http://minidx.com>minidxer</a>
不好意思,有很多東西讓閣下誤解了。
我的第一個(gè)回帖,同時(shí)對(duì)多個(gè)人的言論進(jìn)行了辯解,即辯解了不是新東西都是高起點(diǎn),又辯解了不要只局限于Windows操作系統(tǒng),當(dāng)然,也不要局限于Unix或者Linux系統(tǒng)。等等。
讓閣下總認(rèn)為我在標(biāo)榜自己是高手,看來(lái)是我回帖時(shí)太懶惹得禍了。
“高手們都知道,GNU和開源社區(qū)的東西,都是可以跨越很多平臺(tái)的”,這句話只是為了進(jìn)一步說(shuō)明不要局限于Windows,不要局限于COM,Windows下有COM這樣的好東西,開源社區(qū)肯定也有好東西和它對(duì)應(yīng),而且開源社區(qū)的好東西,同樣也可以運(yùn)行于Windows。
至于閣下推論的知道啥啥啥就是高手的言論,那不是我的本意。
我說(shuō)過(guò)我精通C++嗎?我的目標(biāo)是要把自己鍛煉成一個(gè)C++高手。
也不要認(rèn)為我對(duì)“精通”有一個(gè)很“低格調(diào)”的理解,混跡C++世界的高手們都是不敢隨便說(shuō)自己精通的。C++是這樣一個(gè)東西,你越學(xué)得多,越是覺得自己不夠,越是想往里面鉆研。C++太有吸引力了。
但Windows下那一套很顯然不具有這樣的特質(zhì),搞著搞著就會(huì)覺得心煩,因此,對(duì)這些技術(shù)都下過(guò)苦功,能夠在自己的項(xiàng)目中熟練應(yīng)用這些技術(shù),就隨便說(shuō)個(gè)“精通”了;但也并不是全都了如指掌了,往上看要能把握整個(gè)軟件系統(tǒng)的架構(gòu),往下看要能明白每個(gè)組件的封裝細(xì)節(jié),那在下確實(shí)是大大的不足的。
我可沒有說(shuō)新技術(shù)就是高起點(diǎn)哦,是不是高起點(diǎn)主要還是看個(gè)人的見識(shí)是不是增長(zhǎng)了。現(xiàn)在的我比讀書時(shí)的我,那不知是高了多少了,不管使用的是不是C++語(yǔ)言。
新技術(shù)有時(shí)候也會(huì)帶來(lái)挑戰(zhàn),如64位、多核、硬件虛擬化技術(shù),我們不得不去面對(duì)。
對(duì)于COM,難道我不懂嗎?不是我吹牛,Windows下的那套在下可精得很啦,MFC、ATL、COM+以及Windows下的多線程和網(wǎng)絡(luò)編程本人都曾下過(guò)苦功,只不過(guò)現(xiàn)在興趣已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)Windows了。雖然我的文中不斷出現(xiàn)Linux/Unix字樣,也并不代表著只局限于Linux/Unix系統(tǒng)。我關(guān)注的,是更具通用性的東西。
高手們都知道,GNU和開源社區(qū)的東西,那都是可以跨越很多個(gè)平臺(tái)的!
re: Vista初體驗(yàn)(上) 海邊沫沫 2007-10-04 19:23
看我的計(jì)算機(jī)得分
算機(jī)分級(jí).png)