FC游戏编程教程
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。这对可读性有帮助,整个程序的结构会更好,方便以后修改。
如何来理解编程呢,我认为就是给电脑一序列的命令,电脑按步执行。
除非是写错了;电脑会一直执行下去。另一种情况是命令在文字上没错,可是编写不合理,造成电脑内部的硬件出错。
当然现在很多人学VB,拿VB作为入门也是可以的。只是个人认为在完全没有基础的情况下,接触视窗系统会令人沉迷于控件,而忘记了编程的核心-“算法”。
VB的参考书,非常的多,不用列举了,可是全部是入门级别的书,天下一大抄。不多说了,买两三本互补不足就是。
VB参考书《(译林)VisualBasic 6.0程序设计》[美]Scott
Warner著,人民邮电出版社。
另外,很多人已经学会了C,(在学会basic的基础上学C,是比较快学懂的。C的精髓就是指针,会了指针,C也就会了。)那可以跳过本关了。
C语言的书,不光多,同时好多旧书写得非常深入。新版的C都不行。同时现在到了C这个级别,就有VC,VC++,J***A等等了。
C参考书《C语言高级实用教程》尹彦芝 著,清华大学出版社。
高级语言学多了,对FC也不会有帮助的。因为FC更多的是用低级语言编写的。FC局限性非常大。
过关标准:会灵活使用嵌套循环和嵌套条件语句。了解递归算法。看代码能跟踪变量值。能用黑箱测试调试代码。
***********************************************************************************************
第三关,算法,数据结构
很多人会卡在这里,只有精通数学和编程的人才能过关。到达这关的人,在网络上已经不能算是菜的了。
在学习编程的时候就会接触到算法。简单来说,就是计算的方法。不要看轻了计算,这里所说的计算是包括了集合论,代数系统,图论,逻辑命题理论在内的方法论。我的贪吃蛇就是用算法将一个得分的百,十,个位分离出来,一个一个显示。
《离散数学导论》徐洁磐 著 高等教育出版社。
深入研究算法的书:
《编译原理》,《形式语言、自动机和语法分析》
在学习编程的时候会接触到数组,数组就是数据结构的基础。在C语言里还会有结构类型。那就完全可以实现多种数据结构。包括队,栈,树,堆,这些等等。算法总是依靠数据结构来实现的。我的贪吃蛇的蛇身就是用了“队”这个数据结构。
《数据结构》
**以下是更新**
说起算法让我想起两件事。
一件是程序的可读性和整体流程。
另一件是局部的核心算法。
1程序的可读性和整体流程,我们要用抽象的方法。将整个程序分成几个互不调用的有单独功能的部分。
例如一个计算生肖的程序可以分成:输入,计算,输出。这三个部分。
重点在这里:将它们各写成子程序。主程序上只有调用这些子程序的语句。这样在程序代码的管理上和阅读上都非常方便。到了汇编里面即便是一个简单的功能,例如输入,也得写上几十行。这样的做法是为了以后方便。
2局部的核心算法。我推荐“程序推导”方法。就是以断言保证代码的正确性。同时以断言推导出程序,然后为提高运行效率,进行程序变换。这个方法要先学会逻辑运算和《离散数学》的谓词演算。
程序推导可以参考:
《程序设计方法学引论》陶葆兰 李庆华编著
华中理工大学出版社(这本估计有钱也买不到了)
《程序设计方法学》这个网上有好多不同的版本出售。
这关的参考书开始变得深奥和让人挠头了。你可以自己找书看,我只是给点参考,不一定看这几本,看同等的书就行了。
先看看这个视频
过关标准:能灵活使用队,链,栈,这些基本的数据结构。
***********************************************************************************************
第四关,硬件知识
前面说过FC是用低级语言编写的。那么就说我们要直接给硬件传数据,也就等于是操纵硬件了。
在BASIC语言和C语言里面,我们通过print指令来显示文字。可是用低级指令就是给一些特殊端口发送屏幕地址,再发送图形块的代号才能显示图形或文字。
呵呵,不要告诉我,你还想用C语言来写FC,也不是因为没有工具,工具可以用CC65,可是C用在FC里面实在是非常的有限。学下来你就知道什么了。
我们要知道有关FC的硬件的大部分。
《》,《》
程序的入口--《》。
Mapper和MMC是什么
如果有门电路和单片机的基础就最好了。
**以下是更新**
门电路的参考书:
《数字罗辑》欧阳星 主编 华中科技大学出版社
《数字电子技术》江晓安 编 西安电子科技出版社
关于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并不是完全用BASIC语言的。我建议嵌入汇编语言。而日后能力提高了,尽量使用汇编。
过关标准:编译成功一个ROM。
***********************************************************************************************
第八关,音乐引擎
制作完美音效和背景音乐。
别说原创音乐,就是移值人家的音乐也是不容易的。要了解硬件音频发生器,要了解这些硬件的端口用法。
过关标准:能为自己的游戏写出音效。
***********************************************************************************************
第九关,容量不足,
切页,有程序切页和字模切页两种。
Mapper主要就是扩容用的。就是切页。应用Mapper。Mapper总共有256个不同的号,就有256种方式。但常用的就是几种。每个游戏只挑一个mapper用。没有mapper功能就是0号。
程序要配合切页而要改写大部分地址。
过关标准:学会Mapper 76的用法。
***********************************************************************************************
第十关,游戏的构思,
提示:多看一些不同的理论,不同领域的,不同题材的。
例如多种操作变换的实现用上了最早出现的“图灵机”模式,或离散数学里叫同步时序,编译原理里面叫有穷自动机或有限状态机,硬件的书里面叫移位寄存器。
例如一个字符串的识别,用到了编译原理来实现,用上了硬件的优化方法来简化算法。
例如迷宫的AI,用到了数学上的迷宫解题的经典方法,右手贴墙法。或者用水漫迷城的方法来解。
以上说的方法就真的要靠创造力了。
我介绍几本古老的游戏书。我这有,可是以后都找不到了。
《IBM个人计算机的智力游戏》[美]罗伯特J。乔斯特 著 新时代出版社
这本书是讲通用baisc上的,用ASCII码作为图形,设计游戏的书。这个趣味性好强。
《BASIC游戏程序选集》周正明 编 电子工业了版社 1985
这本书也是讲通用basic上的,用ASCII码作为图形,设计游戏的书。这本书的程序虽然是BASIC,可是后面的程序用上了AI。
《趣味电脑游戏程序》王颂赞 费德宝 著 科学技术文献出版社 1992
这本书是讲在中华机或AppleII上用basic编游戏的书。这本书不光说BASIC,还调用了机器码。
我看90年代的电脑杂志,国内的牛人都是basic和机器码混用的。FC听说也是那个年代的。呵呵。
过关标准:写出一个受欢迎的原创游戏。
***********************************************************************************************
&&&&&&&&&&&&&&&&&&&&&&&
本教程不断补充,扩展。待续……
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。共有 8740 人关注过本帖
标题:【教程】c语言怎么编游戏
等 级:新手上路
帖 子:145
&&问题点数:0&&回复次数:10&&&
【教程】c语言怎么编游戏
纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on
line》.它是e时代常谈的话题,是交互式娱乐的主力军,是一种
高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式
.作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢?
爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础
学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小
游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦
,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是
我发贴的目的.
学习编程的第一个程序,一般就是打印一个亲切的词语——&Hell
o,world!&.让我们来看看这个最简单的C程序:
#incolude &stdio.h& /*把输入输出函数的头文件包含进来*/
int main()
printf(&Hello,&&
world!&);/*在屏幕上输出字符串&Hello,world!&*/
return
下面我们发现几个值得改进的地方,
.
还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸
曾经有人发贴专门问呢)让我们来改进一下这个程序吧!
束.
ch函数,需要在程序开头再包含头文件conio.h.
许多非常好玩的字符,比如ASCII码值为
以用printf(&%c&,
现在我们把Hello,world程序改成一个更好看的Hello,world了.下
面让我们开始做游戏吧!
大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让
我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当
它到达屏幕的边缘时会自动弹回来.
先在程序定义一个在屏幕中运动的点的结构:
struct move_point
&&&&&&&&int x,/*该点的位置,包括x坐标和y坐标*/
&&&&&&&&int xv,/*该点在x轴,y轴的速度*/
运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段
距离,再画出该物体.让我们看到以下代码:
gotoxy(man.x, man.y);/*把光标移到指定的坐标*/
printf(& &);/*输出一个空格,把先前的字符擦去*/
然后我们让物体按其速度运动:
man.x += man./*水平方向按x轴的速度运动*/
man.y += man./*垂直方向按y轴的速度运动*/
运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让
它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸:
gotoxy(man.x, man.y);
printf(&%c\b&,
怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能
让我们来控制它运动呢?***是肯定的,让我们继续往下学吧!
这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸
顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略
处理.接受按键我们用以下两条语句:
while (bioskey(
key = bioskey(
然后用switch语句来判断按键以及执行相关操作,如下:
switch (key) /*对变量key的值进行判断*/
case UP:&&& /*如果按的是向上键*/
&&&&&&&&… break; /*让物体向上运动,并退出switch*/
case DOWN: /*如果按的是向下键*/
&&&&&&&&… break; /*让物体向下运动,并退出switch*/
case LEFT:&&/*向左键*/
&&&&&&&&… break;;/*向左运动*/
case RIGHT: /*向右键*/
&&&&&&&&… break;/*向右运动*/
&&&&&&&&break;/*其他按键则忽略处理*/
怎么样,是不是有了玩游戏的感觉了?不过这个程序没有什么目的
,也没有什么判断胜负的条件.下面我们就利用这个能控制它移动
的笑脸来做一个更有趣的游戏吧!
小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜
欢玩,还常到一些书上找迷宫玩呢.好的,现在我们用C语言来编
个迷宫的游戏,重温一下童年的乐趣.
首先,我们定义一个二维数组map,用它来保存迷宫的地图,其中m
ap[x][y] == '#'表示在(x,y)坐标上的点是墙壁.DrawMap函数
在屏幕上输出迷宫的地图和一些欢迎信息.
在main函数里,我们定义了&小人&man的坐标和&目的地&des的
坐标.在游戏循环中,我们增加了一些用来判断胜负的语句:
if (man.x == des.x && man.y == des.y) /*如果人的坐标等于目
的地的坐标*/
&&&&&&&&gotoxy(
&&&&&&&&printf(&Ok! You win!&); /*输出胜利信息*/
在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不
是有&墙壁&,如果有的话,就不能往前移动了.好的,我们在判
断按键的switch语句的各个分支加上了判断语句,如下:
if (map[…][…] == '#') break;/*如果前面是墙壁,就不执行
哇噻!真棒,我们做出了一个完整的游戏了.当然你还可以通过修
改二维数组map来修改迷宫的地图,让它更有挑战性.不过,我们
要设计一个更好玩的游戏——
大家一定玩过&搬运工&的游戏吧!这是在电脑和电子字典上较流
行的益智游戏,让我们动手做一个属于自己的&搬运工&吧!
程序依然用数组map来保存地图,数组元素如果为空格则表示什么
也没有,'b'表示箱子,'#'表示墙壁,'*'表示目的地,'i
'表示箱子在目的地.我们以后每推一下箱子,不但要改变屏幕的
显示,也要改变map相应元素的值.
游戏的主循环依然是接受按键.当接收一个方向键,需要判断小人
前面一格的状态,如果是空地或目的地,则人物可以直接移动;如
果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继
续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推
箱子前进,否则不可移动.好的,我们在switch中增加了这些判断
程序还有一个重要的功能就是判断胜利.数组Des用来记录全部目
的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断
这些目的地上是否都有箱子了.
真棒啊!我们可以做游戏了.而且是一个老少皆宜,趣味十足的游
戏呢!当然,我们可以通过修改map数组来制作不同的游戏地图,
我们还可以相互分享好的游戏地图呢.
在C++等高级语言还没出来的时候,很多应用程序也是C语言开发的
.C语言在与硬件联系紧密的编程中,也占有重要地位.
其实我觉得学习编程,可以通过一些小游戏,实用的例子来学习.
象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的
曲子.而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就
有成就感,让你很快就能卖弄出来在别人面前表现自己了.通过编
游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方
好了,编游戏就这么简单,希望大家也尝试用C语言或其他的语言
来做几个自己喜欢的小游戏.
搜索更多相关主题的帖子:
等 级:论坛游民
帖 子:259
专家分:55
不错的东西,对于我这样的初学者算是给了一些思路
一切从爱C开始
回复 1# fish7fish7 的帖子
提示: 作者被禁止或删除 内容自动屏蔽
来 自:武汉
等 级:新手上路
帖 子:24
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
额,这个也叫游戏?
建议你看看Ogre游戏引擎:www.ogre3d.org
和Irrlicht游戏引擎:irrlicht.sourceforge.net
NEO游戏引擎:www.neoengine.org
Delta3D引擎:www.delta3d.org
Crazy Eddie's GUI系统(游戏界面系统):www.cegui.org.uk/wiki/index.php/Main_Page
天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
来 自:水星
等 级:ID已被封
帖 子:1867
[bo][un]flyue[/un] 在
14:19 的发言:[/bo]
额,这个也叫游戏?
建议你看看Ogre游戏引擎:www.ogre3d.org
和Irrlicht游戏引擎:irrlicht.sourceforge.net
NEO游戏引擎:www.neoengine.org
Delta3D引擎:www.delta3d.org
Crazy Eddie's GUI系统(游戏界面 ...
游戏中最低级的
爱上你 是 我的错&&可是离 开&&又舍不得&&听着你为我写的歌&&&&&好难过
如果说 我说如果&&我们还 能&&重新来过&&&不去计 较 谁对谁错&&会怎么做
来 自:水星
等 级:ID已被封
帖 子:1867
现在人真都神的着
爱上你 是 我的错&&可是离 开&&又舍不得&&听着你为我写的歌&&&&&好难过
如果说 我说如果&&我们还 能&&重新来过&&&不去计 较 谁对谁错&&会怎么做
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
我以上提供的连接都是免费开源的游戏引擎代码
游戏引擎的好处在哪里?——你不需要添加多少代码,就能做出很眩的效果——前提是你有好的3D模型和好的游戏音乐
——国内许多网游和单机游戏,都用了国外的游戏引擎。如《仙剑奇侠传4》《轩辕剑》等一些大宇、软星的游戏都是用的“RenderWare”游戏引擎,网游《天龙八部》用的是“Ogre3D”游戏引擎(http://www.ogre3d.org/phpBB2/viewtopic.php?t=33891&view=next&sid=ced3d7c4af509e6f4e2718c6)
天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
等 级:新手上路
你这里的man.x +=man.为什么要用这个加号,这个加号有代表什么呢?新手上路,谢谢哈
等 级:新手上路
还能这样玩啊,对我很有用&&& 顶!!!!
版权所有,并保留所有权利。
Powered by , Processed in 0.039877 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedVisual C++游戏编程教程:C++游戏开发入门教程!_微学苑(编程第一站)
--编程语言学习第一站!
Visual C++游戏编程教程:C++游戏开发入门教程!
本教程通过趣味游戏示例,生动形象,讲求实际,
让你的学习不再是一件枯燥乏味、无从下手的事情。
如果我们的教程有错误,或者您有更好的建议,欢迎给我们提出。怎样在电脑上编程,如果是想写游戏程序用哪种语言比较好,谢谢介绍一下,或者哪里有教程都可以,谢谢_百度知道想使用CEGUI做游戏的界面,请教一下入门的教程。
[问题点数:50分,结帖人luoya]
想使用CEGUI做游戏的界面,请教一下入门的教程。
[问题点数:50分,结帖人luoya]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2008年10月 专题开发/技术/项目大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。