注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

FC游戏编程教程  

2009-06-14 23:26:32|  分类: FC开发记录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

FC游戏编程教程

作者:维京猎人

FC就是任天堂出产的红白机的别称。在欧美的机型是灰白两色的,所以欧美称之为灰机或NES。

本教程目标:

弄明白FC编程的基础。

弄明白学FC编程的步骤,参考书有哪些。

弄明白FC编程用什么编程语言和工具。

弄明白FC游戏有什么要素。

弄明白FC游戏的流程如何。

弄明白一些简单的FC游戏是如何运行的。

弄明白一些简单的FC游戏是如何构成的。

***********************************************************************************************

*******************                               开始                               *******************

***********************************************************************************************

说明一下,过了第一关和第二关之后,就可以开始学习FC的相关知识了。不用要逐关通过的。可以跳跃式过关。

第一关,数制,进制:

对于半路出家的人来说,电脑编程基本会了,进制当然也是早就会了,可以跳过,学下面的。

对于纯正的菜鸟,只会用QQ聊天,只会打字,或者会搞点图片这些与编程无关的功夫,进制是必修的。

要学哪几种进制呢?电脑编程就用到了2进制和16进制。

在分析程序,分析端口的时候就会用到2进制。

其实可以全部用2进制,但是非常麻烦,于是在编程上我们用更容易明白,更方便的16进制。

每4位2进制码就是1位16进制码。等于是缩短版。

参考书:这个太好找了,到处都有,自己找吧。

《数字逻辑》(第一章 基础知识),欧阳星明 著,华中科技大学出版社。

《数字电子技术》(第一章 数制与编码),江晓安 著,西安电子科技大学出版社。

名词,概念

2进制码,16进制码

过关标准:会用笔算互换10进制,2进制,16进制。会用与运算,并运算。习惯用16进制思考。

***********************************************************************************************

第二关,简单的电脑编程:

现在,很多中学开始教学生BASIC了。甚至小学也会让优秀的学生学BASIC。我中学时,学校让优秀的学生去学电脑,当时学的是LOGO和BASIC(我猜的)。我不是优秀学生,不能去学。

不管学什么编程语言,只要知道三个类型的命令就行了。1赋值,即”=”;2判断条件,即”if”;3跳转,即”goto”或”return”

这个要会变通的,会活学活用。不同的编程语言,文字上会有不同,现有的程序语言都是用这3种方式组合而成的。

初学者我建议用在电脑的DOS模式下编程,原因是这样比较纯粹。

DOS(或者说MSDOS)我推荐用Q-Basic。参考书《跟我学Quick BASIC》陈宗周,刘秉刚 著,云南大学出版社。

名词,概念

编程,命令,赋值,判断条件,跳转

学会了编程的朋友,我建议大家多用子程序,不要用goto。这对可读性有帮助,整个程序的结构会更好,方便以后修改。

如何来理解编程呢,我认为就是给电脑一序列的命令,电脑按步执行。

除非是写错了;电脑会一直执行下去。另一种情况是命令在文字上没错,可是编写不合理,造成电脑内部的硬件出错。

############

我们来好好说说编程吧。

编程本身,好多概念和方法是通用的。不同的是平台和语言。平台指的是什么机器(或系统)上运行。语言指的是用的编译(或解释)工具。这个最好多看书了。

因为好多概念和方法是通用的,所以只要学其中比较简单的语言,在比较单纯的系统上使用,也就等于是学习了一部分比较难的语言了。

例如学习了QBasic,也就等于学习了一部分C++,初学者不应该一开始就向高难道挑战。

打个比喻吧,小学入学时先学了加法。中学时再学习代数,要是小学入学时就将加法和代数同时学习会变成什么样子?

学习像C++和汇编这种高难道的语言,一定会同时学习多种困难的知识,初学者是吃不销的。

结论是:先学习像QBasic这样好上手编程语言。还要深入学习概念上的东西,以后再学一点像C这样的语言,但不要加上深入研究,要先联想它与之前学习过的语言的共通点。然后利用像QBasic这样的语言,再深入研究,像算法,数据结构这样的东西。将基础打好。等到能够将像QBasic这样的语言运用自如,写程序能一气和成。这样就可以去学C语言了。

C语言也了解了,再去学C++和汇编,学习的时候多想它们的联系。例如要是用汇编实现几个C语言的指令,要怎么写呢。正是这样就能加速学习了。学习是一个先慢后快的过程,前学得慢,学得扎实,后面就能够快。否则不光是会停止不动,学不会任何东西,反而会迷惑。

############

当然现在很多人学VB,拿VB作为入门也是可以的。只是个人认为在完全没有基础的情况下,接触视窗系统会令人沉迷于控件,而忘记了编程的核心-“算法”。

VB的参考书,非常的多,不用列举了,可是全部是入门级别的书,天下一大抄。不多说了,买两三本互补不足就是。

VB参考书《(译林)VisualBasic 6.0程序设计》[美]Scott Warner著,人民邮电出版社。

另外,很多人已经学会了C,(在学会basic的基础上学C,是比较快学懂的。C的精髓就是指针,会了指针,C也就会了。)那可以跳过本关了。

C语言的书,不光多,同时好多旧书写得非常深入。新版的C都不行。同时现在到了C这个级别,就有VC,VC++,JAVA等等了。

C参考书《C语言高级实用教程》尹彦芝 著,清华大学出版社。

高级语言学多了,对FC也不会有帮助的。因为FC更多的是用低级语言编写的。FC局限性非常大。

过关标准:会灵活使用嵌套循环和嵌套条件语句。了解递归算法。看代码能跟踪变量值。能用黑箱测试调试代码。

***********************************************************************************************

第三关,算法,数据结构

很多人会卡在这里,只有精通数学和编程的人才能过关。到达这关的人,在网络上已经不能算是菜的了。

算法

在学习编程的时候就会接触到算法。简单来说,就是计算的方法。不要看轻了计算,这里所说的计算是包括了集合论,代数系统,图论,逻辑命题理论在内的方法论。我的贪吃蛇就是用算法将一个得分的百,十,个位分离出来,一个一个显示。

参考书

《离散数学导论》徐洁磐 著 高等教育出版社。

深入研究算法的书:

《编译原理》,《形式语言、自动机和语法分析》

数据结构

在学习编程的时候会接触到数组,数组就是数据结构的基础。在C语言里还会有结构类型。那就完全可以实现多种数据结构。包括队,栈,树,堆,这些等等。算法总是依靠数据结构来实现的。我的贪吃蛇的蛇身就是用了“队”这个数据结构。

参考书

《数据结构》

**以下是更新2009-7-4**

说起算法让我想起两件事。

一件是程序的可读性和整体流程。

另一件是局部的核心算法。

1程序的可读性和整体流程,我们要用抽象的方法。将整个程序分成几个互不调用的有单独功能的部分。

例如一个计算生肖的程序可以分成:输入,计算,输出。这三个部分。

重点在这里:将它们各写成子程序。主程序上只有调用这些子程序的语句。这样在程序代码的管理上和阅读上都非常方便。到了汇编里面即便是一个简单的功能,例如输入,也得写上几十行。这样的做法是为了以后方便。

2局部的核心算法。我推荐“程序推导”方法。就是以断言保证代码的正确性。同时以断言推导出程序,然后为提高运行效率,进行程序变换。这个方法要先学会逻辑运算和《离散数学》的谓词演算。

程序推导可以参考:

《程序设计方法学引论》陶葆兰 李庆华编著 华中理工大学出版社(这本估计有钱也买不到了)

《程序设计方法学》这个网上有好多不同的版本出售。

这关的参考书开始变得深奥和让人挠头了。你可以自己找书看,我只是给点参考,不一定看这几本,看同等的书就行了。

先看看这个视频"吴文虎解答“算法擂台”"

过关标准:能灵活使用队,链,栈,这些基本的数据结构。

***********************************************************************************************

第四关,硬件知识

前面说过FC是用低级语言编写的。那么就说我们要直接给硬件传数据,也就等于是操纵硬件了。

在BASIC语言和C语言里面,我们通过print指令来显示文字。可是用低级指令就是给一些特殊端口发送屏幕地址,再发送图形块的代号才能显示图形或文字。

呵呵,不要告诉我,你还想用C语言来写FC,也不是因为没有工具,工具可以用CC65,可是C用在FC里面实在是非常的有限。学下来你就知道什么了。

我们要知道有关FC的硬件的大部分。

V-Blank是什么》,《关于vblank

程序的入口--《FC的中断向量》。

Mapper和MMC是什么

《每周一Mapper(第一周 Mapper 2)》

《每周一Mapper(第二周 Mapper 76)》

如果有门电路和单片机的基础就最好了。

**以下是更新2009-7-4**

门电路的参考书:

《数字罗辑》欧阳星 主编 华中科技大学出版社

《数字电子技术》江晓安 编 西安电子科技出版社

关于FC的硬件

请留意“王让定”教授的文章和书。

还有90年代的任天堂游戏机维修书。这个就真难找了。

过关标准:了解VBlank,中断,Mapper,FC控制端口的用法。

***********************************************************************************************

第五关,CPU和CPU的寄存器,CPU的汇编指令及对应的机器码

FC用的CPU是6502,

那么6502里面有什么寄存器呢,又有什么用呢。

CPU里面是必然有寄存器的,一般都会有几个寄存器的。

6502的寄存器,可以用来记录数据的有3个,就是A,X,Y。当然还有标志位等等。

6502的汇编指令用法(寻址)

汇编是最低级的语言了。汇编的指令分几类,

1传送数据指令,将数据在内存与寄存器之间传送。这个可以达到赋值的作用。

2比较指令、位检测跳转指令和无条件跳转指令。这个可以达到条件判断和跳转的作用。(循环是用条件判断和跳转来实现的)

3数据进栈出栈指令,和子程序跳转指令,这是在高级语言看到的子程序方法,(子程序跳转和返回也就是程序地址的进栈和出栈)。同时还有C里面见不到的中断。

4计算和移位运算指令。这个计算只有加减法,只能算0~255的整数。其它运算要靠自己编程实现。

汇编是不能不提寻址的。

寻址:就是得到数据所在的地址。寻址在FC中总共有十多种。传送数据可对应多达八个寻址方式。也就是对应8个机器码。一半的汇编指令只是一到两种寻址方式的。

C语言的指针就是靠多种的寻址来实现的。

6502的机器码

机器码:就是CPU直接读取并识别的代码。

有的汇编指令对应N个寻址,那么就有N个机器码与之对应;有的汇编指令只有一种寻址方式,那就只对应一个机器码。

另外某汇指令后机要带若干个操作数。识别出机器码之后,CPU就会知道后面有多少个操作数,那就接着读多少个数,读完之后,下一个读的码就会被认为是机器码了。

汇编工具到我的网盘找。

过关标准:完全学会FC的CPU6502的汇编指令,还了解寄存器和标签位。

***********************************************************************************************

第六关,游戏的流程

如何才能达到游戏的效果?

流程大致分成两种:

1是好像BASIC或者C的编写方法。流水线式,一个工作到一个工作的做。

例如 清屏->显示图形->接收手柄信号->判断手柄操作->实现操作显示某图形->发出声效->然后判断结果->作出反应->又回到接手柄信号。

我的贪吃蛇就是用这个流程的,但我没有加声效。由于游戏简单,在手柄操作上不会的不适。

商业的游戏,正规的游戏都不是这样写的。可是如果游戏极简单,同时不带音乐。可以考虑用这个方式。作为练习也是可以的。

2是中断式。FC每隔约2毫秒调用一次中断。(这个间隔的时间由电视信号的制式而定。它跟vblank相关。 FC是电视游戏机,那自然与电视有关。很特技都是因此实现的。)在中断的程序里,实现音乐、读手柄、显示图形。在主程中要与中断的程序交流,协同运行。中断的开头和结尾我们会用到现场保护和现场恢复。在主程序和中断之间要建立公共变量,实现互锁,才能协同远行。参考书《计算机组成原理》(中断部分)

过关标准:能为自己的程序写出流程序图。

***********************************************************************************************

第七关,实施

嘴巴上说得动听不如真刀真枪干一番!

关于游戏里的一些操作的实现方式,这个才真正接触到游戏的本身。

要了解ROM的“文件头”。

你可以用汇编(ASM)或N-BASIC

我这里提供N-BASIC的教程。

N-BASIC并不是完全用BASIC语言的。我建议嵌入汇编语言。而日后能力提高了,尽量使用汇编。

过关标准:编译成功一个ROM。

***********************************************************************************************

第八关,音乐引擎

制作完美音效和背景音乐。

别说原创音乐,就是移值人家的音乐也是不容易的。要了解硬件音频发生器,要了解这些硬件的端口用法。

过关标准:能为自己的游戏写出音效。

***********************************************************************************************

第九关,容量不足,

切页,有程序切页和字模切页两种。

Mapper主要就是扩容用的。就是切页。应用Mapper。Mapper总共有256个不同的号,就有256种方式。但常用的就是几种。每个游戏只挑一个mapper用。没有mapper功能就是0号。

程序要配合切页而要改写大部分地址。

过关标准:学会Mapper 76的用法。

***********************************************************************************************

第十关,游戏的构思,

提示:多看一些不同的理论,不同领域的,不同题材的。

例如多种操作变换的实现用上了最早出现的“图灵机”模式,或离散数学里叫同步时序,编译原理里面叫有穷自动机或有限状态机,硬件的书里面叫移位寄存器。

例如一个字符串的识别,用到了编译原理来实现,用上了硬件的优化方法来简化算法。

例如迷宫的AI,用到了数学上的迷宫解题的经典方法,右手贴墙法。或者用水漫迷城的方法来解。

以上说的方法就真的要靠创造力了。

我介绍几本古老的游戏书。我这有,可是以后都找不到了。

《IBM个人计算机的智力游戏》[美]罗伯特J。乔斯特 著 新时代出版社 1986

这本书是讲通用baisc上的,用ASCII码作为图形,设计游戏的书。这个趣味性好强。

《BASIC游戏程序选集》周正明 编 电子工业了版社 1985

这本书也是讲通用basic上的,用ASCII码作为图形,设计游戏的书。这本书的程序虽然是BASIC,可是后面的程序用上了AI。

《趣味电脑游戏程序》王颂赞 费德宝 著 科学技术文献出版社 1992

   这本书是讲在中华机或AppleII上用basic编游戏的书。这本书不光说BASIC,还调用了机器码。

我看90年代的电脑杂志,国内的牛人都是basic和机器码混用的。FC听说也是那个年代的。呵呵。

过关标准:写出一个受欢迎的原创游戏。

***********************************************************************************************

                        本教程不断补充,扩展。待续……

  评论这张
 
阅读(701)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017