再編譯游戲內容介紹
❶ 游戲編程
學習游戲編程最好是有系統的學習方式,有老師帶領會高效得多。
當下互聯網行業發展迅速,與之相關的產業大多發展都很好,游戲設計的前景自然也是相當不錯的。一個游戲問世要經歷很多環節,劇本設計,原畫創作,場景建模,但核心部分還是編程語言開發。
主要學的內容如下:
1.游戲程序設計:C++程序設計入門;基本數據類型和輸入輸出;流程式控制制語句;數組、指針和引用、函數;程序結構和書寫規;范結構體和聯合體、類;繼承與多態;異常處理與程序調試。
2.演算法與數據結構:演算法分析;數據結構;基本演算法;STL的概念與使用;靜態庫與動態庫;XML庫的使用。
3.Win32程序設計:Windows程序入門;Windows消息;GDI繪圖游戲工具與MFC;網路編程基礎。
4.游戲數學和智能應用:游戲中的坐標系;矢量、矩陣;幾何碰撞;物理模擬;人工智慧與尋路演算法。
5.2D游戲技術與應用:2D游戲技術概論;游戲地圖系統;GUI系統;戰斗系統設計;任務系統;優秀的聲音引擎BASS;Cocos2D-X引擎;Box2D物理引擎。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
❷ 怎麼把代碼變為游戲
1. 編程所寫的代碼 是如何變成游戲的
人能識別有意義的字母、數字組合,就是代碼。電腦機器只能識別0和1的二進制數字組合。人寫的代碼不能直接被電腦識別,需要一個翻譯的過程,這個過程叫"編譯",把對人有意義的代碼轉換為對電腦有意義的二進制碼。
你看到的游戲畫面是電腦理解了這些二進制碼之後的結果。電腦根據二進制碼來進行游戲圖像渲染、處理玩家的鍵盤滑鼠操作信息。
舉個簡單的例子吧,假設人寫的代碼如下:
Action action = drawCar();
boolean goLeftBool = getInputLeftArrow();
if(goLeftBool){
action.setLocation(action.getLocation().getX()--, action.getLocation().getY());
}這段代碼大概意思是:畫輛車,玩家按左,車往左走。編譯之後形成下面這樣的二進制碼:
其中每行代表源代碼中的一句。就像黑客帝國一樣,哈哈。這樣電腦才能理解。
當然,這是個例子而已,真正編譯出來的二進制碼比這個要多得多!
2. 有沒有大神能簡單易懂的介紹含鏈一下一個游戲的製作過程,是怎麼從代碼
1、製作前准備:准備好以下幾樣東西 刻錄機談野孫 游戲原盤 空白CDR CDRWIN (3.8x推薦) Echelon的自啟教程及hack工具 cdrtools-1.9a03-win32-bin工具包 1.4G左右的硬碟空間 newfile.exe(mmy生成工具) 在硬碟上做出以下的目錄 X:\xxxx\selfboot X:\xxxx\selfboot\data 其中X:任意,xxxx也任意,在根目錄也可以把Echelon自啟工具及cdrtools-1.9a03-win32-bin工具包及newfile.exe都放在selfboot目錄下。
另外,先看看游戲源盤有多大的容量,如果容量數+20mb已經超過74分鍾的盤,就要用80分鍾的盤了。如果超過80分鍾的盤,就可能沒戲了。
2、ok。准備好了,開始製作 a. 把1ST_READ.BIN和IP.BIN拷到selfboot目錄中。
有些時候1ST_READ.BIN有可能是別的名字,如果找不到1ST_READ.BIN,就用hex editor打開IP.BIN看看文件最頂上V.001XXXXXXXX ????.BIN,這個????.BIN就是要找的。不過到selfboot目錄里都要!保持原名!,為方便起見這里我們統稱1ST_READ.BIN。
b. 把游戲盤中!除了!1ST_READ.BIN和IP.BIN以外的所有文件都拷到data目錄下。 c. !把以上兩個步驟所拷的文件都去掉只讀! d. 運行CDRWIN,選擇Record Disc,點右邊load tracks。
點Add,選擇由Echelon工具包中的audio.raw,確定。!選Open New Session!,開始刻錄第一軌。
e. !注意,以下操作只需要進行一次! 運行dos命令行,在selfboot目錄里運行 cdrecord -scanbus 得出的結果可以找到你的刻錄機的代號為x,x,x,如0,1,0 再運行(這時候剛剛刻了音軌的盤要放在脊顫刻錄機中,否則有可能不能測數值) cdrecord -dev=0,1,0 -msinfo 可以得到0,11700(也有0,11702的) 記住這兩組數值,以後再做自啟盤時就不需要進行這項操作了。 f. 對1ST_READ.BIN和IP.BIN進行修改運行dos命令,在selfboot目錄運行 binhack.exe 第一行輸入1ST_READ.BIN !大寫! 第二行輸入IP.BIN !大寫! 第三行輸入11700(如果你是11702,就輸入11702) g. 把1ST_READ.BIN拷到data目錄里 h. 這時候看看data目錄有多大,如果需要加mmy就進行mmy製作 .mmy大小的計算。
650mb-data目錄大小mb-20mb=mmy大小,其中20mb是第一個音軌已經用掉的大小。但為保險起見再減去20mb左右。
..例如mmy需要160mb,在dos下運行newfile 160,000,000 。把生成的00mmy.dat移到data目錄中。
i. ISO生成 製作一個叫isoit.bat的批處理文件 mkisofs -C 0,11700 -V %1 -l -o DATA.ISO DATA !嚴格按此大小寫! 0,11700是cdrecord -dev=x,x,x -msinfo得到的數值 %1內容為卷標變數 在dos下運行isoit %1,如製作街霸3 3rd Strike的ISO,就運行isoit SF3_3 如果不願意每次另加卷標,把%1換成你自己喜歡的名字。運行後會有一個warning,不要管。
j. 把IP.BIN插入ISO 在dos下運行ipins.exe 第一行輸入IP.BIN !大寫! 第二行輸入DATA.ISO !大寫! k. 刻錄第二軌 這里本人推存使用工具包中的cdrecord.exe,而不是cdrwin。因為cdrecord.exe是在dos中直接對刻錄機進行操作的,不需要其他亂七八糟的鏈文件,也沒有GUI,相對穩定安全許多,而且做成batch文件後要比cdrwin方便。
製作一個叫burn.bat的批處理文件 cdrecord -dev=0,1,0 -xa1 -speed=4 DATA.ISO -dev=後面的參數是在cdrecord -scanbus中得到的數值 -speed=後的數字是指刻錄速度,自己根據需要修改。 製作完成後,如果不能馬上試,先放到光碟機里讀一下,如果能列出目錄就說明基本成功了。
*文中加!!的文字都是需要特別注意的。
❸ 如何製作手機游戲
製作游戲有製作的游戲的劇情和腳本、繪制游戲人物的圖形和背景、游戲建模、學會游戲製作軟褲困蠢件的操作、創建一個游戲的項目工程等五方面的內容。
1、通過參考不同的游戲,寫出想要製作的游戲的劇情和腳本。游戲的種類有多種,根據自己喜歡的游戲種類,通過參考不同的游戲,寫出要製作游戲的劇情。
2、根據游戲的劇情和腳本,使用手繪軟體繪制游戲人物的圖形和背景。
3、通過建模的軟體把平面胡陪圖形創建為立體模型效果。有多種建模軟體,可以通過建模的軟體把平面圖形創建為立體模型效果。比如使用常用的建模軟體3dmax。
4、學會游戲製作軟體尺兆的操作,這樣製作游戲的效率高些。游戲製作的軟體有多種,比如用Unity3D開發游戲,熟悉游戲製作軟體的操作,這樣製作更快捷。
5、創建一個游戲的項目工程,在製作游戲時方便查找。根據游戲的設計,創建一個游戲的項目工程。這樣把游戲中所使用的資源文件和模型都放在一個目錄便於修改。
/iknow-pic.cdn.bcebos.com/29381f30e924b8998db9a54561061d950b7bf6c2"target="_blank"title="點擊查看大圖"class="illustration_alink">/iknow-pic.cdn.bcebos.com/29381f30e924b8998db9a54561061d950b7bf6c2?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="//www.ultimate-communications.com/img_29381f30e924b8998db9a54561061d950b7bf6c2"/>
注意事項:
1、游戲製作,是一個很花費時間的過程,不是寫寫代碼就結束了。可玩性,難度調整,美工,等等。即使是小游戲,也會花大量的時間。
2、大型游戲不推薦一個人單獨製作,但是不是說只有大公司大企業才能做出大型游戲。游戲規模越大,內容整理起來越復雜,團隊非常重要。
❹ c++做游戲教程
你可以先去【繪學霸】網站找「游戲設計/游戲製作」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-2010284938382716748
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-2010284938382716748
在「游戲設計/游戲製作」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
❺ 游戲編程都學些什麼的
當下互聯網行業發展迅速,與之相關的產業大多發展都很好,游戲設計的前景自然也是相當不錯的。一個游戲問世要經歷很多環節,劇本設計,原畫創作,場景建模,但核心部分還是編程語言開發。
主要學的內容如下:
1.游戲程序設計:C++程序設計入門;基本數據類型和輸入輸出;流程式控制制語句;數組、指針和引用、函數;程序結構和書寫規;范結構體和聯合體、類;繼承與多態;異常處理與程序調試。
2.演算法與數據結構:演算法分析;數據結構;基本演算法;STL的概念與使用;靜態庫與動態庫;XML庫的使用。
3.Win32程序設計:Windows程序入門;Windows消息;GDI繪圖游戲工具與MFC;網路編程基礎。
4.游戲數學和智能應用:游戲中的坐標系;矢量、矩陣;幾何碰撞;物理模擬;人工智慧與尋路演算法。
5.2D游戲技術與應用:2D游戲技術概論;游戲地圖系統;GUI系統;戰斗系統設計;任務系統;優秀的聲音引擎BASS;Cocos2D-X引擎;Box2D物理引擎。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
❻ 急求C語言編譯的小游戲(如掃雷),附帶源代碼和注釋。
小游戲2048:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
int jsk( ); //計算空格數
void rsgm( ); //重置游戲
void inkey( ); //按鍵輸入
void left( ); //向左移動
void right( ); //向右移動
void up( ); //向上移動
void down( ); //向下移動
void show( ); //輸出界面
void adnum( ); //添加隨機數
void yes( ); //游戲是否結束(1是0否)
void gtxy(int x, int y); //控制游標位置的函數
int a[4][4]; //存儲16個格子中的數字
int score = 0; //每局得分
int best = 0; //最高得分
int ifnum; //是否需要添加數字(1是0否)
int over; //游戲結束標志(1是0否)
int i,j,k;
int main( )
{ rsgm( ); //重置游戲
inkey( ); //按鍵輸入
return 0;
}
void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)
{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);
} //用於控制字元顏色的函數
void rsgm( ) //重置游戲
{ score = 0; ifnum = 1; over = 0; srand((unsigned)time(0)); //啟動隨機數發生器
int n = rand( ) % 16; //隨機函數產生0-15的數字
for (i = 0; i < 4; i++)
{for (j = 0; j < 4; j++)
{ if (n == 0) { int k = rand( ) % 3; if (k == 0 || k == 1) { a[i][j] = 2; }
else { a[i][j] = 4; } n--; }
else { a[i][j] = 0; n--; }
}
}
adnum( );
system("cls");
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
setColor(14, 0); //設置字體淡黃色,背景為黑色
printf(" 2048小游戲"); setColor(7, 0); //恢復白字黑底
printf(" ┌──────┬──────┬──────┬──────┐");
printf(" │ │ │ │ │");
printf(" ├──────┼──────┼──────┼──────┤");
printf(" │ │ │ │ │");
printf(" ├──────┼──────┼──────┼──────┤");
printf(" │ │ │ │ │");
printf(" ├──────┼──────┼──────┼──────┤");
printf(" │ │ │ │ │");
printf(" └──────┴──────┴──────┴──────┘");
show( );
}
void show( ) //輸出界面
{ for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ gtxy(7*j+9,2*i+4); //gtxy(7*j+9, 2*i+4)是游標到指定位置輸出數字
if(a[i][j]==0){printf(" "); setColor(7, 0); printf("│");}
else if(a[i][j]<10){ if (a[i][j] == 2) {setColor(14, 0); }
else if (a[i][j] == 4) {setColor(13, 0); }
else if (a[i][j] == 8) {setColor(12, 0); }
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
}
else if (a[i][j] < 100){if (a[i][j] == 16) {setColor(12, 0); }
else if (a[i][j] == 32) {setColor(10, 0); }
else if (a[i][j] == 64) {setColor(2, 0); }
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
}
else if (a[i][j] < 1000) {if (a[i][j] == 128) {setColor(9, 0); }
else if (a[i][j] == 256) {setColor(1, 0); }
else if (a[i][j] == 512) {setColor(13, 0); }
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
}
else if (a[i][j] < 10000) {if (a[i][j] == 1024) {setColor(5, 0); }
else {setColor(15, 0); }
printf(" %d ", a[i][j]); setColor(7, 0); printf("│");
}
}
if (jsk( ) == 0)
{ yes( ); if (over) { gtxy(9,12); setColor(10, 0);
printf(" 游戲結束!是否繼續? [ Y/N ]:"); }
}
}
void inkey( ) //按鍵輸入
{ int key;
while (1)
{ key = getch( );
if (over) { if (key == 89|| key == 121) {rsgm( ); continue; }
else if (key == 78|| key == 110) { return; }
else continue; }
ifnum = 0;
if(key==224)key=getch( );
switch (key)
{ case 75: left( ); break;
case 77: right( ); break;
case 72: up( ); break;
case 80: down( );break;
}
if (score > best) { best = score; }
if (ifnum) { adnum( ); show( ); }
}
}
int jsk( ) //計算空格數
{ int n = 0;
for (i = 0; i < 4; i++)
{ for (j = 0; j < 4; j++) { if ( a[i][j] == 0) {n++;} } }
return n;
}
void left( ) //向左移動
{ for (i = 0; i < 4; i++)
{for (j = 1, k = 0; j < 4; j++)
{ if (a[i][j] > 0)
{ if ( a[i][k] == a[i][j])
{ a[i][k] *= 2; k++;
score = score + 2 * a[i][j];
a[i][j] = 0; ifnum = 1; }
else if ( a[i][k] == 0) { a[i][k] = a[i][j]; a[i][j] = 0; ifnum = 1; }
else { a[i][k + 1] = a[i][j]; if ((k + 1) != j) { a[i][j] = 0; ifnum = 1; }
k++; }
}
}
}
}
void right( ) //向右移動
{for (i = 0; i < 4; i++)
{for (j = 2, k = 3; j >= 0; j--)
{if (a[i][j] > 0)
{ if (a[i][k] == a[i][j])
{a[i][k] *= 2; k--; score = score + 2 * a[i][j]; a[i][j] = 0; ifnum = 1; }
else if ( a[i][k] == 0) {a[i][k] = a[i][j]; a[i][j] = 0; ifnum = 1; }
else { a[i][k - 1] = a[i][j]; if ((k - 1) != j) { a[i][j] = 0; ifnum = 1; } k--; }
}
}
}
}
void up( ) //向上移動
{for (i = 0; i < 4; i++)
{for (j = 1, k = 0; j < 4; j++)
{if (a[j][i] > 0)
{if ( a[k][i] == a[j][i]) { a[k][i] *= 2; k++;score = score + 2 * a[j][i];
a[j][i] = 0; ifnum = 1; }
else if ( a[k][i] == 0) { a[k][i] = a[j][i]; a[j][i] = 0; ifnum = 1; }
else { a[k + 1][i] = a[j][i]; if ((k + 1) != j) { a[j][i] = 0; ifnum = 1; }
k++; }
}
}
}
}
void down( ) //向下移動
{ for (i = 0; i < 4; i++)
{for (j = 2, k = 3; j >= 0; j--)
{if (a[j][i] > 0)
{if (a[k][i] == a[j][i])
{a[k][i] *= 2; k--;score = score + 2 * a[j][i]; a[j][i] = 0; ifnum = 1; }
else if (a[k][i] == 0) {a[k][i] = a[j][i]; a[j][i] = 0; ifnum = 1; }
else {a[k - 1][i] = a[j][i];
if ((k - 1) != j) {a[j][i] = 0; ifnum = 1; } k--; }
}
}
}
}
void adnum( ) //添加隨機數
{ srand(time(0)); int n = rand( ) % jsk( );
for (int i = 0; i < 4; i++)
{for (int j = 0; j < 4; j++)
{ if (a[i][j] == 0) {if (n != 0) { n--; }
else {int k = rand() % 3;
if (k == 0 || k == 1) {a[i][j] = 2; return; }
else {a[i][j] = 4; return; } }
}
}
}
}
void yes( ) //游戲是否結束
{ for (int i = 0; i < 4; i++)
{for (int j = 0; j < 3; j++)
{if (a[i][j] == a[i][j + 1] || a[j][i] == a[j + 1][i]) {over = 0; return; }}
}
over = 1;
}
void gtxy(int x, int y) //控制游標位置的函數
{ COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
❼ 反編譯游戲
現在手機游戲 要不是java 要不是 手機系統本身支持的軟體格式.
JAVA 那肯定是用JAVA寫的了, 如果是系統本身有可能是用C.
一般非智能手機 ,如摩托羅拉啊,若積壓啊都會支持JAVA,所以也只能玩JAVA格式的游戲了. 如果你手機是國產品牌的話, 就有點危險了,首先要看是否支持JAVA, 支持的話有些支持的也不是很好,當然有的還是很完美的.
如果你手機是山載 雜牌,那更危險了. 有些根本就不支持JAVA. 那什麼游戲也別想裝了. 還有這些會自帶游戲.這些游戲相當垃圾, 並且有些還扣費.
我發現,這些手好多都自帶了那幾種游戲, 都一樣, 比如 什麼摸法獸司啊等.
如果你手機為智能,那就再好不過了, 首先你要看系統是什麼型號的.
然後找這個型號支持的軟體格式. 然後下載這種格式的游戲.
當然JAVA也是支持的, 有些智能手機需要下載 軟體安裝 JAVA運行平台才可以支持JAVA, 所以論速度, 和穩定性, 玩系統本身運行的格式的游戲再好不過了.
如果需要安裝JAVA平台,就要選擇好點的程序,這樣也可以非常完美的運行JAVA.
畢竟現在JAVA游戲 相當流行和豐富, 很有新意.
還有一種游戲 就是 模擬器游戲了, 這需要是智能手機,因為模擬器軟體格式都是系統下的格式, 很少是JAVA格式,也有,我搜索過,也運行過,但在我的3星上沒成功運行. 所以 要想玩模擬器游戲還是智能比較好.
模擬器游戲是相當經典的,是JAVA游戲無法比的.
比如FC,SFC,MD,GB,GBA,等模擬器, 我的手機 運行 雪山兄弟(就是小時候在游戲廳玩的那個) 相當流暢,當然還有其他的MD ,比如吞食天地啊, 數碼寶貝(gb)等.
要想用手機玩游戲爽的話,只能是智能了.
❽ 游戲介紹怎麼寫
1、首先,你要介紹它的名字,由哪國哪個游戲公司出品。
2、然後,介紹它的游戲特色,是一款什麼類型的游戲,比如休閑類,益智類,動作類,射擊類。。給你帶來的感覺是什麼,什麼地方值得去玩。
3、介紹它的游戲背景,也就是劇情,劇情是什麼年代的(如果沒有那就不用介紹了)第四,游戲的優點和缺點(這個自己找)最後收尾,希望大家能夠喜歡上這款游戲。
❾ 當年的Fc《魂斗羅》《瑪麗》是用什麼工具做的。如何反編譯。
匯編和c都可以,這里有個編程器http://pocket.92wy.com/fc_info_33534.html
任夭堂游戲編程探密(文字版)
第一章 任天堂游戲結構概論
長期以來,由於任天堂公司在技術上的封鎖和國內游戲開發工具的久缺.任天堂游戲
蒙上了一層神密的面紗,中國人只能玩任天堂游戲.而不能象蘋果機、中華學習機那樣了解
游戲程序、自己動手編寫游戲。近年來,隨著任夭堂系列游戲機配套鍵盤的問世,逐步創造了
揭開這層面紗的條件.特別是配有列印機介面的「裕興」、「金字塔」等高檔游戲機鍵盤的陸續
推出,用戶僅僅編寫一個簡單的反匯編程序就可列印出系統軟體的源程序,從而為探索任天
堂游戲軟體的奧秘提供了有效的手段。
有人疑問任夭堂游戲機的中央處理器同中華學習機一樣也是八位的CPU.但為什麼
它能夠產生出如此絢麗多彩的動畫、美妙動聽的音響、栩栩如生的角色,其效果遠遠勝過美
國的「雅達利「,更強過中華學習機的游戲呢?究其原因,關鍵在於任天堂游戲機的設計者們
在傳統的八位機上獨具匠心、另闢蹊徑,從硬體上進行了獨創的改造,在軟體上進行了大膽
的嘗試,使一個CPU發揮了兩個CPU的功效,產生了絕妙非凡的藝術效果.從而以物美價
廉的絕對優勢迅速佔領了游戲機市場,掀起了家庭娛樂領域的第三次浪潮。本文擬從分析任
天堂游戲的軟、硬體特點出發,揭開任天堂游戲編程的秘密.以一與廣大同好切磋。
1·1 任天堂游戲機的硬體特點
1·1·1電路原理框圖
任天堂游戲機的硬體共分兩部分:主要部分是游戲機.從屬部分是游戲卡。游戲機提供
游戲的運行環境,游戲卡提供支持游戲的軟體,其電路原理框圖如圖1一1。
上圖中6527 CPU為中央處理器,田於它的任務是處理程序,所以一般把與它相連的部
件加以前綴"P".故CPU的地址匯流排表示為PADD,數據匯流排表示為PDATA,CPU管理的
存儲器表示為PRAM,PROM等。同樣.6528 PPU的任務是處理圖像,所以凡與它相關的部
件均加以前綴「V」。
1·1·2 中央處理器6527 CPU
1.CPU的內部結構
6527 CPU是一個八位單片機,在它的內部除固化有6502系列的CPU外,還有一個
可編程音響發生器PSG(Programable Sound Generator)和24個八位只寫寄存器,其地址空
間分配為$4000-$4017.主要用於CPU的I/O操作,PSG音響發生器的工作就是由這些
寄存器控制完成的.
1·1·4 游戲卡
1、游戲卡的基本組成
普通的單節目游戲卡一般由兩片ROM或EPROM組成,ROM的容量由游戲程序量的
大小決定.最簡單的任天堂游戲為24K,故這種卡內有塊16K的ROM存放程序,一塊
8K的ROM存圖形字模(目前有軟封裝的IC,它把兩塊ROM封在一起)。典型的任天堂
游戲程序量為40K,它使用一塊32K的ROM存程序、一塊8K的ROM存字模。當程序量大
於40K時則要對ROM進行容量擴充.
2、游戲卡各腳的功能
游戲卡是一60腳的接插件,各腳功能見圖1一4。
3、常用 ROM引腳功能簡介
游戲卡中常用ROM或EPROM的型號有27C64(8 X 8K)、27C128(8X l6K)、27C256(8
X 32K), 27C512 (8 X 64 K ), 27C1000 (8 X 128K),或後綴數字相同而前綴不同的其它公
司產品,盒卡中還有2兆位(8 x 256K)至8兆位(8X 1000K)的晶元。其中27C64~27C512為28
腳的晶元,27C1000或更大容量的晶元為32腳(個別的27C1000仍為28腳,它使用了OE.
CE中的一個腳作為地址線).
1·2 任夭堂游戲軟體的特點
目前流行的任夭堂游戲軟體有數百種,內容已涉及及到政治、經濟、軍事、戰爭、教育、管
理、體育、娛樂等各個領域.可以說任天堂游戲已兼顧了男、女、老、中、青、少、幼各個年齡階
層,深受世界各國人民所喜愛。也許這就是它迅速普及的主要原因。但是,任天堂游戲盡管
內容千變萬化、情節各異,其軟體結構和處理方法則是基本相同的,它們有著共同的特點。
1·2·1 任天堂游戲的軟體結構
歸納起來,任天堂游戲軟體結構可分為兩大類:基本結構和擴展結構.
一、基本結構
基本的任夭堂游戲軟體容分為40K位元組(標准卡標注為LB)。典型游戲如,《1942》、《超
級瑪麗》、《拆屋工》等.其中32k為游戲控製程序,供CPU執行;8K為圖形字模,由PPU處
理。另外還有一種低配置結構,軟體容量為24K{標注為LA),這是一種早期軟體。其中控制
程序為16K;字模為8K。典型游戲有《火箭車》、《馬戲團》、《金塊Ⅰ、Ⅱ》等。
40K軟體的控製程序存放地址在CPU管理的$8000一$FFFF空間;字模地址在PPU
管理的$0000-$1FFF空間。16K軟體的控製程序存放地址為$C000-$FFFF;字模地
址也是$0000一$1FFF。
二、擴展結構
容量在40K以上的軟體均為擴展結構。它們在基本結構的基礎上或者擴展控製程序
區、或者擴展字模區。擴展方法是在某段地址范圍進行空間存儲體切換。一般程序區在
$8000-$BFFF空間切換;字模區在$0000-$1FFF空間切換。切換種類以軟體容量的
大小略有不同:
對於48K卡(標注為LC〕,其程序部分為32K;宇模部分為16K,分兩個8K存儲體.
典型游戲有《七寶奇謀》、《影子傳說》等。
通常把24k-48K容量的游戲卡稱為低檔卡或低檔游戲。
對於64K卡(標注為LD)有兩種結構:一種是其程序部分為32K;字模部分為32x,分
為四個8K存儲體.典型游戲有《迷宮組曲》,《智慧城》、《沙羅曼蛇一代》、《北斗神拳一代》
等;第二種則是程序與字模共用64k,分為四個存儲體.典型游戲有《米老鼠大冒險》、《冒險
島》、《俄羅斯方塊1、2》等。
80K的游戲不多(標注為LE),常見的有《中國拳》、《金牌瑪麗》等。其程序部分為48K,
前32K分為兩個16k存儲體;字模部分為32k,分為四個8k存儲體。
通常稱64k、80K的游戲為中檔卡。
對於128K卡(標注為LF),其程序部分與字模部分棍合共用128k,分為八個16K存儲
體,其中前七個存儲體地址映射於$8000-$BFFF:最後一個存儲體(稱為HOME BANK)
映射於$0000一$FFFF,典型游戲有《魔界村》、《怒》、《火之鳥方》、《未來戰士》、《洛克人》、
《1943》 《1944 》《嵌特殊部隊》、《沖撞霹靂機車》等。
這類游戲卡中一般都配有一塊8K的RAM(動態隨機存儲器〕存儲當前使用的字模。
對於160k卡(標注為LG),其程序部分為128K;字模部分為32K。典型游戲有《倚天屠
龍記》、《立體大賽車》、《歡樂叮當》等。
對於256K卡(標注為LH),其程序部分為128K;字模部分為128K。典型游戲有《柯拉
米世界》、《惡魔城》、《雙截龍》、《松鼠歷險記》《人間兵器》、《聯合大作戰)等。另外,還有《魂
斗羅》、《赤色要塞》、《綠色兵團》、《立體籃球》《荒野大鏢客》等256K游戲被壓縮為128K游
戲,目前這類游戲的256K版已不多見,常見的均為128K的壓縮版;
通常稱128K一256K容量的游戲為高檔卡或強卡。
對於高於256K容是的游戲則稱為特卡,如《不動明王傳》,《戰斧》、《孔雀王》,《大旋風》
等游戲容量已達2M-4M。但由於任天堂系列游戲機的CPU的處理速度、畫面的解析度、音
域音色等方面的限制,即使軟體容量再增大,游戲效果也不會提高多少.總達不到街機的水
平,故目前單個游戲的容量大於256K的尚不多見。
1·3 任天堂游戲的圖像處理方法
本節簡要介紹任天堂游戲的圖像處理方法。
1·3·1屏幕顯示原理
任天堂游戲機中的CPU雖然仍屬65系列的CPU,但它的顯示方式與中華學習機截然
不同。其顯示屏幕由三類四層顯示頁面鉤成。三類顯示頁依次為:卡通(角色或動畫)頁、背
景頁、底背景頁。卡通頁用於顯示游戲中的角色,它有兩個頁面:卡通零頁——使角色顯示於
背景之前;卡通一頁——使角色顯示於背景之後。卡通員的顯示解析度為256x240點,卡通
可以點為單位移動。背景頁主要用於游戲畫面的顯示,它共有四個顯示頁面,每頁的兩邊互
相相連並排成「田」字,採取字元顯示方式,顯示解析度為32列* 30行,每幅畫面由$60個
圖形塊構成,游戲中可任取一個頁面顯示。底背景頁主要用於大面積的單色顯示,以襯托出
蘭天、草地、沙漠、大海等效果,顯示解析度為1x1。 四層顯示頁的排列由前向後依次為:卡
通零頁、背景頁、卡通一頁、底背景頁(見圖1一6)。系統默認的排列方式為背景00頁與卡通
賈、底背景頁四層頁面重疊,前面顯示頁的內容可以遮住後面顯示頁的內容,因而很容易構
成具有一定景深次序的立體畫面。
1·3·2背景處理技術
任天堂游戲中的背景畫面顯示採用字元方式,每個字元通常稱為背景圖形塊。每個圖
形塊為8*8點陣,其字模數據存放在由PPU管理的一段內存中,稱為背景字型檔,一般使用
$1000一$1FFF地址,共4K位元組.每個字模由連續的16個單元組成,故一次最多可定義
256個字元,序號依次為0~255.顯示字元時,只要把字元序號置入屏幕對應的顯示單元中
即可。
任關堂游戲中的背景處理由PPU獨立完成,每一個背景頁面對應PPU的1024個單
元,為順序對應關系。背景00頁對應PPU地址為$2000--$23FF,其中$2000一$23BF
對應於960個圖形顯示單元,$23C0--23FF為該顯示頁的配色單元;背景10頁對應的
PPU地址為$2400一$27FF;同樣,後面的兩頁依次對應$2800---$2BFF、$2C00
$2FFF。由於游戲機中只有一塊2K的VRAM(PPU使用的RAM),故一般只使用前兩個
頁面,通常稱其為背景零頁和背景一頁。游戲中可通過設置軟開關的方法控制畫面的橫、縱
向,以使兩幅面面橫向並列或縱向銜接。
在實際游戲中,要經常用到背景畫面的橫向卷動和縱向滾動。如(魂斗羅,游戲中的卻
一、五、六、七、八關是橫向卷動,第三關則是縱向滾動。這些畫面位移效果是如何實現的呢?
我們知道,中華學習機中的畫面位移是通過反復改寫顯示映射單元的內容而實現的,這種方
法處理速度慢、控製程序冗長。任天堂則採取了截然不同的方法。它通過硬體的待殊處理,
引入了顯示窗口的概念。畫面位移時,每個顯示單元的內容不變,而令顯示窗口向相反的方
向移動,從而實現了畫面的橫向卷動和縱向滾動。如《魂斗羅》中第一關橫向卷動的控制方法
是.令兩個背景頁橫向銜接,游戲開始時,背景零頁繪滿32列,而背景一頁僅繪制12列,令
顯示窗口對正零頁,當游戲中的角色前進到畫面右邊的一定位置時,則令顯示窗口右移一
格,同時繪制一頁的第13列;這樣,顯示窗口每右移一格,畫面繪制一列,從而使游戲畫面連
綿不絕,每移出一頁畫面(32列)令頁數計數器加一,當累計到一定頁數時則令窗口不再移
動,進行關底處理。這一畫面的位移控制極為簡單,僅通過向位移軟開關$2005置入移位數
據就可實現。F BASIC的控製程序為:
POKE &H2005,x:POKE &H2005,0
x為位移參數。其機器語言的控製程序為:
LDA x
STA $ 2005
LDA #$00
STA $ 2005
畫面的縱向位移則更為簡單,如《魂斗羅》的第三關——瀑布天險是一個縱版畫面,角色要從
最底層跳升到最頂層與關底魔頭決斗,游戲進程中畫面隨看角色的跳躍不停的上滾。實際--
這一位移過程是在一頁面面中進行的,控制方法是,每當角色前進到畫面上方某一位置時,
改寫畫面最底行的圖形數據,使其為即將移入畫面的一行.然後令顯示窗口向上移一格,由
於窗口是在一個顯示頁上移動,故最底行即是最頂行(這時可把一頁面面理解為上、下邊連
接的圓筒,顯示窗口是套在畫面圓筒外面稍大的一個圓筒,窗口移動一格就是向上旋轉一
格)。F BASIC控製程序為,
POKE &H2005,0:POKE &H2005,Y
Y為位移參數。相應的機器語言程序為,
LDA #$00
STA $2005
LDA Y
STA $2005
以上畫面的送效、位移操作都是在CPU響應非屏蔽中斷期間完成的(非屏蔽中斷是在
電視機的場回掃期間發出和響應的,這時的電視屏是黑的),所以我們感覺佈道位移的痕跡。
關於任天堂游戲中背景畫面的繪制 移動及畫面的分裂位移和扭曲等效果的實現,將在第六章詳細討論。
1·3·3動畫處理技術
組成任天堂游戲中動畫的最小單位是卡通塊,每個卡通塊為8X8點陣.與一個字元同
樣大小。卡通塊也有一個圖形字型檔,對應的PPU地址為$0000-$OFFF。每個個卡通塊的字
模數據也由連續的16個單元組成,故一次最多可定義256個卡通塊,序號依次為0-255
6527CPU規定.在一幅畫面上只允許同時顯示64個8x8點陣的卡通塊〔這是由PPU
內卡通定義區的RAM分配決定的〕,如《超級瑪麗》中,瑪麗在吃紅蘑菇之前為16x16點
陣大小(即由4個卡通塊組成),當吃了紅蘑菇之後身體長大一倍,變為32X 32點陣(即由
16個卡通塊組成〕的卡通。但實際游戲中要求顯示的卡通塊數往往遠遠超過這一限制,如目
前較流行的打鬥游戲《街霸》中,一個卡通即為128*64點陣(由128個卡通塊組成)有時還
更大,這是怎麼實現的呢?
原來在實際游戲中,對卡通進行了分時控制。所謂分時控制就是在不同的時間里顯示半
通的不同部分,依靠人眼的視覺惰性產生連續的感覺。如《魂斗羅》游戲中的卡通顯示(兩個
正面角色、敵人、發射的子彈、暗堡的閉合與開啟都是卡通)就是每一次中斷顯示卡通的二分
之一實現的。
卡通的定義操作極其簡單,系統規定一個卡通塊由連續的四個內存單元定義,第一寸
單元指定卡通顯示的Y坐標、第二個為卡通塊在字型檔中的序號、第三個為卡通塊的顯示狀
態〔配色組合、左右翻轉、上下顛倒以及顯示於那個卡通頁面,,第四個為顯示的X坐標。編
程中可任意指定定義卡通的內存頁面(一般選二頁或三頁,即$200一$2FF, $300
$3FF)。
關於任天堂游戲中的卡通的定義及運動控制將在第七章討論。
1·4 任天堂游戲的音響處理
在大部分任天堂游戲的過程始、終,一直伴奏著和諧動聽的背景音樂;隨岩游戲的進行
和角色的動作還不時發出逼真的效果音響,而且這些音響的發出與背景的移動、角色的運動
三者並行工作,互不幹擾,許多朋友玩過中華機上的游戲,如《警察抓小偷》《富士山決戰》
等,這些游戲中的音響發出與角色的動作是不能同時進行的,即角色動作時沒有音響;發出
音響時角色的動作要停下來.任天堂游戲中的音響處理確有獨到之處.由於在6527 CPU內
固化有可編程音響發生器,所以音響控製程序特別簡潔,任天堂游戲的發聲系統由五個聲部
組成,對應於CPU管理的$40DO——$4013二十個單元,每個聲部使用四個單元,它們的作
用依次為音色音量、音形包絡、音調細調、音調粗調。第一、二、三聲部可進行和聲旋律演奏,
也可以選取任一聲部發出效果音,如執行F BASIC程序
POKE &H4015,1:POKE &H4000. 255,255,255,255
就可發出長達三分鍾的頻率由低到高的警報聲。第四聲部可以模仿連續不斷的雜訊,如風
聲 雨聲 鍾生 腳步聲 火車聲等等 第五聲部則可模仿出人的講話聲。任天堂游戲中
背景音樂一般都是使用前三個聲部演奏的,演奏程序也是放在中斷中處理的.五個聲部的發
聲總開關由$4015控制,$4015的D0——D4位依次控制翻第一至第五聲部的工作狀態,置
0關閉、置1開啟。
❿ 如何使用安卓反編譯破解游戲
一、dexmp方法
dexmp是emulator自帶提供的查看dex文件的工具,可使用類似這樣的命令將dex文件mp到txt文件中:
D:/Program Files/android-sdk-windows-1.6_r1/platforms/android-1.6/tools>dexmp.exe -d classes.dex > spk.mp.txt
得到的文件內容,描述了類的信息,但實在是不好讀啊~~~~
二、dex2jar + XJad 方法
該方法是使用dex2jar.jar包,將classes.dex文件解包成jar,在通過XJad(或者其他class反編譯工具)進行java反編譯。如:
1、dex2jar.bat d:/play/classes.dex
默認的輸出路徑同classes.dex,生成的文件名為classes.dex.dex2jar.jar
2、使用XJad反編譯該jar包
之後的使用方法,大家都懂的:)
該方法的好處在於,通過XJad反編譯後,大家可直接開到java源文件,缺點在於只能反編譯出開發時的java文件,而開發時使用的lib包不能反編譯出來。
三、AXMLPrinter2.jar + baksmali.jar + smali.jar 方法
這個方法就強大了,AXMLPrinter2是還原AndroidManifest.xml和main.xml的工具,直接打開這兩個xml文件是亂碼,而通過還原之後,可以很明白的看到裡面的內容(我猜測還是使用了位元組異或的方式加的密)。
baksmali.jar是反解析dex的工具,smali.jar則是再還原成dex的工具
操作方式如下:
1、java -jar AXMLPrinter2.jar D:/play/AndroidManifest.xml > AndroidManifest.txt
2、java -jar AXMLPrinter2.jar D:/play/res/layout/main.xml > main.txt
3、java -jar baksmali-1.2.5.jar -o classout/ d:/play/classes.dex