本文目錄一覽:
- 1、當年的Fc《魂斗羅》《瑪麗》是用什麼工具做的。如何反編譯。
- 2、小時候玩的遊戲,像魂斗羅、街頭霸王等等是什麼語言編寫的?
- 3、(完整word版)純C語言寫的一個小型遊戲 源代碼
- 4、日本過去fc紅白機用什麼編寫遊戲,如魂斗羅、超級瑪麗,難道是彙編和C?街機遊戲又是怎麼編出來的?
- 5、求魂斗羅全版秘籍。
當年的Fc《魂斗羅》《瑪麗》是用什麼工具做的。如何反編譯。
彙編和c都可以,這裡有個編程器
任夭堂遊戲編程探密(文字版)
第一章 任天堂遊戲結構概論
長期以來,由於任天堂公司在技術上的封鎖和國內遊戲開發工具的久缺.任天堂遊戲
蒙上了一層神密的面紗,中國人只能玩任天堂遊戲.而不能象蘋果機、中華學習機那樣了解
遊戲程序、自己動手編寫遊戲。近年來,隨著任夭堂系列遊戲機配套鍵盤的問世,逐步創造了
揭開這層面紗的條件.特別是配有印表機介面的「裕興」、「金字塔」等高檔遊戲機鍵盤的陸續
推出,用戶僅僅編寫一個簡單的反彙編程序就可列印出系統軟體的源程序,從而為探索任天
堂遊戲軟體的奧秘提供了有效的手段。
有人疑問任夭堂遊戲機的中央處理器同中華學習機一樣也是八位的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,但它的顯示方式與中華學習機截然
不同。其顯示屏幕由三類四層顯示頁面鉤成。三類顯示頁依次為:卡通(角色或動畫)頁、背
景頁、底背景頁。卡通頁用於顯示遊戲中的角色,它有兩個頁面:卡通零頁——使角色顯示於
背景之前;卡通一頁——使角色顯示於背景之後。卡通員的顯示解析度為256×240點,卡通
可以點為單位移動。背景頁主要用於遊戲畫面的顯示,它共有四個顯示頁面,每頁的兩邊互
相相連並排成「田」字,採取字元顯示方式,顯示解析度為32列* 30行,每幅畫面由$60個
圖形塊構成,遊戲中可任取一個頁面顯示。底背景頁主要用於大面積的單色顯示,以襯托出
蘭天、草地、沙漠、大海等效果,顯示解析度為1×1。 四層顯示頁的排列由前向後依次為:卡
通零頁、背景頁、卡通一頁、底背景頁(見圖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個8×8點陣的卡通塊〔這是由PPU
內卡通定義區的RAM分配決定的〕,如《超級瑪麗》中,瑪麗在吃紅蘑菇之前為16×16點
陣大小(即由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開啟。
小時候玩的遊戲,像魂斗羅、街頭霸王等等是什麼語言編寫的?
當時貌似是用6502彙編語言編寫的(不敢保證一定是),現在當然很多種語言都能做到。
(完整word版)純C語言寫的一個小型遊戲 源代碼
“掃雷”小遊戲C代碼
#includestdio.h
#includemath.h
#includetime.h
#includestdlib.h
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j; /*循環變數*/
int x,y,z[999]; /*雷的位置*/
int t,s; /*標記*/
int m,n,lei; /*計數*/
int u,v; /*輸入*/
int hang,lie,ge,mo; /*自定義變數*/
srand((int)time(NULL)); /*啟動隨機數發生器*/
leb1: /*選擇模式*/
printf(“\n 請選擇模式:\n 1.標準 2.自定義\n”);
scanf(“%d”,mo);
if(mo==2) /*若選擇自定義模式,要輸入三個參數*/
{do
{t=0; printf(“請輸入\n行數 列數 雷的個數\n”);
scanf(“%d%d%d”,hang,lie,ge);
if(hang2){printf(“行數太少\n”); t=1;}
if(hang100){printf(“行數太多\n”);t=1;}
if(lie2){printf(“列數太少\n”);t=1;}
if(lie100){printf(“列數太多\n”);t=1;}
if(ge1){printf(“至少要有一個雷\n”);t=1;}
if(ge=(hang*lie)){printf(“雷太多了\n”);t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;} /*否則就是選擇了標準模式(默認參數)*/
for(i=1;i=ge;i=i+1) /*確定雷的位置*/
{do
{t=0; z[i]=rand( )%(hang*lie);
for(j=1;ji;j=j+1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i=hang+1;i=i+1) /*初始化a,b,c*/
{for(j=0;j=lie+1;j=j+1) {a[i][j]=’1′; b[i][j]=’1′; c[i][j]=’0′;} }
for(i=1;i=hang;i=i+1)
{for(j=1;j=lie;j=j+1) {a[i][j]=’+’;} }
for(i=1;i=ge;i=i+1) /*把雷放入c*/
{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]=’#’;}
for(i=1;i=hang;i=i+1) /*計算b中數字*/
{for(j=1;j=lie;j=j+1)
{m=48;
if(c[i-1][j-1]==’#’)m=m+1; if(c[i][j-1]==’#’)m=m+1;
if(c[i-1][j]==’#’)m=m+1; if(c[i+1][j+1]==’#’)m=m+1;
if(c[i][j+1]==’#’)m=m+1; if(c[i+1][j]==’#’)m=m+1;
if(c[i+1][j-1]==’#’)m=m+1; if(c[i-1][j+1]==’#’)m=m+1;
b[i][j]=m;
}
}
for(i=1;i=ge;i=i+1) /*把雷放入b中*/
{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]=’#’;}
lei=ge; /*以下是遊戲設計*/
do
{leb2: /*輸出*/
system(“cls”);printf(“\n\n\n\n”);
printf(” “);
for(i=1;i=lie;i=i+1)
{w=(i-1)/10+48; printf(“%c”,w);
w=(i-1)%10+48; printf(“%c “,w);
}
printf(“\n |”);
for(i=1;i=lie;i=i+1){printf(“—|”);}
printf(“\n”);
for(i=1;i=hang;i=i+1)
{w=(i-1)/10+48; printf(“%c”,w);
w=(i-1)%10+48; printf(“%c |”,w);
for(j=1;j=lie;j=j+1)
{if(a[i][j]==’0′)printf(” |”);
else printf(” %c |”,a[i][j]);
}
if(i==2)printf(” 剩餘雷個數”);
if(i==3)printf(” %d”,lei);
printf(“\n |”);
for(j=1;j=lie;j=j+1){printf(“—|”);}
printf(“\n”);
}
scanf(“%d%c%d”,u,w,v); /*輸入*/
u=u+1,v=v+1;
if(w!=’#’a[u][v]==’@’)
goto leb2;
if(w==’#’)
{if(a[u][v]==’+’){a[u][v]=’@’; lei=lei-1;}
else if(a[u][v]==’@’){a[u][v]=’?’; lei=lei+1;}
else if(a[u][v]==’?’){a[u][v]=’+’;}
goto leb2;
}
a[u][v]=b[u][v];
leb3: /*打開0區*/
t=0;
if(a[u][v]==’0′)
{for(i=1;i=hang;i=i+1)
{for(j=1;j=lie;j=j+1)
{s=0;
if(a[i-1][j-1]==’0′)s=1; if(a[i-1][j+1]==’0′)s=1;
if(a[i-1][j]==’0′)s=1; if(a[i+1][j-1]==’0′)s=1;
if(a[i+1][j+1]==’0′)s=1; if(a[i+1][j]==’0′)s=1;
if(a[i][j-1]==’0′)s=1; if(a[i][j+1]==’0′)s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i=hang;i=i+1)
{for(j=lie;j=1;j=j-1)
{s=0;
if(a[i-1][j-1]==’0′)s=1; if(a[i-1][j+1]==’0′)s=1;
if(a[i-1][j]==’0′)s=1; if(a[i+1][j-1]==’0′)s=1;
if(a[i+1][j+1]==’0′)s=1; if(a[i+1][j]==’0′)s=1;
if(a[i][j-1]==’0′)s=1; if(a[i][j+1]==’0′)s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i=1;i=i-1)
{for(j=1;j=lie;j=j+1)
{s=0;
if(a[i-1][j-1]==’0′)s=1; if(a[i-1][j+1]==’0′)s=1;
if(a[i-1][j]==’0′)s=1; if(a[i+1][j-1]==’0′)s=1;
if(a[i+1][j+1]==’0′)s=1; if(a[i+1][j]==’0′)s=1;
if(a[i][j-1]==’0′)s=1; if(a[i][j+1]==’0′)s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i=1;i=i-1)
{for(j=lie;j=1;j=j-1)
{s=0;
if(a[i-1][j-1]==’0′)s=1; if(a[i-1][j+1]==’0′)s=1;
if(a[i-1][j]==’0′)s=1; if(a[i+1][j-1]==’0′)s=1;
if(a[i+1][j+1]==’0′)s=1;if(a[i+1][j]==’0′)s=1;
if(a[i][j-1]==’0′)s=1; if(a[i][j+1]==’0′)s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i=hang;i=i+1) /*檢測0區*/
{for(j=1;j=lie;j=j+1)
{if(a[i][j]==’0′)
{if(a[i-1][j-1]==’+’||a[i-1][j-1]==’@’||a[i-1][j-1]==’?’)t=1;
if(a[i-1][j+1]==’+’||a[i-1][j+1]==’@’||a[i-1][j+1]==’?’)t=1;
if(a[i+1][j-1]==’+’||a[i+1][j-1]==’@’||a[i+1][j-1]==’?’)t=1;
if(a[i+1][j+1]==’+’||a[i+1][j+1]==’@’||a[i+1][j+1]==’?’)t=1;
if(a[i+1][j]==’+’||a[i+1][j]==’@’||a[i+1][j]==’?’)t=1;
if(a[i][j+1]==’+’||a[i][j+1]==’@’||a[i][j+1]==’?’)t=1;
if(a[i][j-1]==’+’||a[i][j-1]==’@’||a[i][j-1]==’?’)t=1;
if(a[i-1][j]==’+’||a[i-1][j]==’@’||a[i-1][j]==’?’)t=1;
}
}
}
if(t==1)goto leb3;
}
n=0; /*檢查結束*/
for(i=1;i=hang;i=i+1)
{for(j=1;j=lie;j=j+1)
{if(a[i][j]!=’+’a[i][j]!=’@’a[i][j]!=’?’)n=n+1;}
}
}
while(a[u][v]!=’#’n!=(hang*lie-ge));
for(i=1;i=ge;i=i+1) /*遊戲結束*/
{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]=’#’; }
printf(” “);
for(i=1;i=lie;i=i+1)
{w=(i-1)/10+48; printf(“%c”,w);
w=(i-1)%10+48; printf(“%c “,w);
}
printf(“\n |”);
for(i=1;i=lie;i=i+1){printf(“—|”);}
printf(“\n”);
for(i=1;i=hang;i=i+1)
{w=(i-1)/10+48; printf(“%c”,w);
w=(i-1)%10+48; printf(“%c |”,w);
for(j=1;j=lie;j=j+1)
{if(a[i][j]==’0′)printf(” |”);
else printf(” %c |”,a[i][j]);
}
if(i==2)printf(” 剩餘雷個數”);
if(i==3)printf(” %d”,lei); printf(“\n |”);
for(j=1;j=lie;j=j+1) {printf(“—|”);}
printf(“\n”);
}
if(n==(hang*lie-ge)) printf(“你成功了!\n”);
else printf(” 遊戲結束!\n”);
printf(” 重玩請輸入1\n”);
t=0;
scanf(“%d”,t);
if(t==1)goto leb1;
}
/*註:在DEV c++上運行通過。行號和列號都從0開始,比如要確定第0行第9列不是「雷」,就在0和9中間加入一個字母,可以輸入【0a9】三個字元再按回車鍵。3行7列不是雷,則輸入【3a7】回車;第8行第5列是雷,就輸入【8#5】回車,9行0列是雷則輸入【9#0】並回車*/
日本過去fc紅白機用什麼編寫遊戲,如魂斗羅、超級瑪麗,難道是彙編和C?街機遊戲又是怎麼編出來的?
你說的沒錯,FC是用6502彙編語言寫的,已經接近機器碼了,當時的電腦也很簡陋。gba是用C語言寫的 並用專用軟體GCC編譯
求魂斗羅全版秘籍。
魂斗羅全版秘籍如下:
一、70人秘籍:
在標題畫面,用2P手柄輸入C、B、A、右、左、C、B、A、右、左、C、B、A、右、左,聽到提示音後即表示輸入成功
二、選關秘籍:
在標題畫面,用2P手柄輸入左、右、A、B、C、左、右、A、B、C、左、右、A、B、C,聽到提示音後即表示輸入成功
三、立即獲得四種武器秘籍:
在遊戲中按Start鍵暫停,輸入上、上、下、下、A、上、上、下、下、B、上、上、下、下、C,聽到提示音後即表示輸入成功
故事背景
異形戰爭(即《魂斗羅精神》中的與外星人的戰爭)結束三年後的公元2639年,戰爭後的世界一片瘡痍,本就缺乏的物資掌握在少數人的手裡,人們生活艱難,前次異形戰爭中的英雄巴哈姆特上校在失蹤2年之後的2641年,聯邦軍的機器人部隊突然發生暴動;
地球聯邦軍統合機動部隊特別任務班,通稱「魂斗羅部隊(Hard Corps)」的四人雷、茜娜、生化改造狼人尖牙和機器人布羅尼被派遣前往平息暴動。在任務的同時,地球聯邦實驗室內保存的異形細胞被搶奪。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241779.html