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