2023年12月23日发(作者:奥迪q2怎么样值得购买吗)
终于考完期末了,以后就开始假期了,闲暇的时间也估计多了,可以写东西的时间估计也多了,当然只是估计而已,也可能不上课期间忙。管它呢,离搬迁还有一两天,先写完这这最后一章再说了。
本来之前就写了部分的,可惜电脑中毒,重弄系统,忘了备份,损失啊,那多少个日日夜夜积累下的代码,全部重写吧。在此也给看到这篇教程的朋友们一个提醒,小心防毒、小心备份。
昨天看到好友说我太谦虚,其实感觉太谦虚很不恰当,因为知道自己懂的太少了,所以好多地方都不敢妄加评论,我怕误人子弟,希望大家在看到我的教程中的错误是可以给我提出,有错误才有进步嘛,错不可怕,就怕不知道自己错了,不是吗?
好吧,开始吧,说的这章要给大家一个完整的NES游戏创建,这游戏没有大家想象的那么刺激,好像只能够证明CC65还能写游戏,希望大家不要抛砖。
下面你看到的是一个创建游戏的整个过程,我将会从CC65的安装开始讲。
一下所讲到的所有工具包括代码和资源都可以在我的网盘下载到,当然有些东西你可以去官网或者工具编写者的空间下载最新版本。
首先安装CC65(官网 FTP下载目录,所以安装选项中只选对NES的支持就够了。如图:
安装完CC65就可以编译C文件了。假设我们自己写了一个C代码文件,文件名为“”,代码为:
#include <>
void main()
{
cprintf(\"OK!\");
while(1);
}
我们的编译命令可以这样写:
cl65 -t nes -o
意思是编译文件,使用的编译模式为nes模式,最终生成的文件名为。
用模拟器打开它就可以看到屏幕上显示“OK!”,更详细的可以看我前面的教程。
好吧,开始我们的游戏吧。
首先要大郅的构思一下我们的游戏的大致界面,我们想要的大致是可以移动一个主人公,他拥有推箱子、放炸弹的能力,他的任务是摧毁箱子获得通往下一关的钥匙,仅此而已。如果你还想更多一点的话,可以让他在某一关开始会遇到敌人,或者炸开箱子后遇到敌人,或者很有诗意的最后救出了公主等等。鉴于时间和能力,再说也要给大家修改的空间,我就不打算实现那么多功能了,其实也不知道CC65所支持的40k的NES允不允许我们再去弄那么多了,这也是一个问题。
要有主人公,当然要先让主人公有个人样(哦,当然主人公也可以是动物,当至少也要先有个样子),所以先画主人公和周围场景吧。
打开 yychr,导入我之前提过的“标准”这个是给我的,觉得里面的字体好看就定为自己的标准了,我不强求大家遵守,只是为了表述方便,我一直在以它为例。先把它另存为一下,以免之后的修改破坏了“标准”,我们另存为“”吧(migong的缩写,英文不好),记得把它存到待会我们要保存代码的文件夹下面。画面如下:
然后发挥自己的想象力画一下我们的主人公及其他相关的图块吧,顺便感谢一下风竹丽影,因为我的图片全是她抽空帮我画的。(主人公是打算使用8*8,这样易于实现,其他的地图也是由8*8的图块拼接成的)
最终的画面:
补充一下:
你可能会遇到导入chr文件后画面上也不显示任何东西,那可能是调色没弄对,你自己再配一下色就可以了。
Yychr的调色不会使用保存,希望知道的朋友可以给我提示,谢过。
更详细的使用见我前面的教程。
有了图块,我们需要还需要制作游戏开始的界面,也就是我们的logo,游戏时的框架(用来组织游戏在屏幕上的显示),以及游戏结束时的GAME OVER画面等等。于是我们需要用到另一个工具了,的“”,目前的最新版本是,在此谢过猎人。
先弄我们的logo吧,打开“”,在菜单——字模——导入字模中导入“”,设置一下配色,拼成你想要的logo之后保存为“”如图:
用同样的方法创建出游戏框架“”,如图:
暂停时的画面“”,如图:
游戏结束画面“”,如图:
完成这些资源后,我们开始写代码吧,我写这个游戏的时候是一部分代码一部分资源的完成的,但是我我希望大家在写游戏的时候先整体构思后,准备好相关的资源在开始写代码,细心的朋友可能会发现我的字模文件很没有连贯性,就是因为想到一部分弄一部分的后果,希望大家吸取经验教训。
给游戏想一个拉风的名字吧,原本想写的是迷宫,后了又改了,改的迷宫不像迷宫,泡泡堂不像泡泡堂,随便想一个名字吧,叫“迷宫不迷”,也希望FC对于大家不是迷,希望大家精通FC,本人的小小愿望,呵呵。
代码部分我已经很详细的写了注释了。大部分都可以看懂了,又因为百度空间的文章长度限制,我不可能一一讲述了。我挑几个地方讲讲吧。不懂的欢迎E-Mail我。
1、 头文件包含
你可能会看到如下的预处理命令:
#include \"\" ”,并且在头文件中的数组名也是“文件名_后缀”。这样一来我们就容易记忆多了。比如我们要加载游戏的logo画面的话只需要“load_full_name_0((u8*)mglogo_dat);”就可以载入logo了。这样也就可以避免变量名的冲突。
最后的一句是包含游戏的说明,其原文件名为“”,文档中“~”表示说明完,“$”表示换页。
也许你会觉得这样包含很麻烦,我承认的确麻烦,但是本人也是没办法了。曾看过rNES的作者使用直接包含的方法(好像是直接包含一个其他格式的文件的方法,如#include \"\"),试了好久也没有成功,难道是编译器问题,还是他使用的是伪代码,只为说明问题。在VC++平台下也试了他的办法,但好像这个不是C标准,伪代码的概率大。。。
2、 关于VRAM的读写访问
感觉这问题是个难题,之前问过猎人,他给过我一些建议,才实现了现在的访问功能。但现
在有一个问题,直接访问的话会有屏幕的闪烁问题。于是不断调试不断探索,才有了现在的一点点经验。如下:
访问前先waitvblank();访问完之后卷轴归位,再waitvblank();这样就不会有闪烁,但有有一个问题来了,一个游戏中每个大循环中有好多个访问VRAM的过程,如果每次都这样的话游戏的速度就慢好的了。问题一直有只是换了一种形式。希望有解决方案的朋友给给建议,谢过!
在代码中,卷轴归位我使用的是预处理命令来完成的,所以你会看到:
#define ES() address(SCR_scroll_offset)=0;
address(SCR_scroll_offset)=0
这两行之后我们可以使用ES();来完成卷轴归位。
所以但你看到:
waitvblank();
c=getc_xy(VRAM_name_0,bx-1,by);
ES();
waitvblank();
也不用奇怪,这几句代码实现了读取对名字表0的(bx-1,by)位置的读取。
其他部分的说明希望大家自己去改改,然后发现其作用原理,说实话代码写的很纠结,好些想法都是想到了才加上去,所以从变量的命名到这个的游戏框架都很晕人,体谅体谅。。。
写完代码可以开始编译了,因为之前包含了好多其他格式的资源文件所以我们必须先编译其他格式的文件,再编译我们的代码文件。
于是编译文件这样写:
anytoc 8 \"const u8 mglogo_dat[]=\"
anytoc 8 \"const u8 mglogo_col[]=\"
anytoc 8 \"const u8 mgsp_col[]=\"
anytoc 8 \"const u8 mgabout_txt[]=\"
anytoc 8 \"const u8 mgframe_dat[]=\"
anytoc 8 \"const u8 mgpause_dat[]=\"
anytoc 8 \"const u8 mgframe_col[]=\"
anytoc 8 \"const u8 mgover_dat[]=\"
anytoc 8 \"const u8 mgover_col[]=\"
cl65 -t nes 迷宫不迷.c
replace 迷宫不迷.nes 迷宫不迷
pause
前面anytoc开头的那些都是对资源文件的编译,期中包括对FC专用地图编辑器生成的名字表和调色板的编译、对说明文档的编译。
“cl65 -t nes 迷宫不迷.c”是对我们的代码文件“迷宫不迷.c”的编译,编译完了之后会生成“迷宫不迷”,这个是一个NES文件,只是没有后缀而已,加上后缀就是正常的NES文件了。但我们现在的“迷宫不迷”还不完全对,其中的字模是cc65自带的字模,我们必须把它替换成“”,所以有下一条了。
最后一句“replace 迷宫不迷.nes 迷宫不迷 ”是对NES文件图案表的替换。
关于anytoc和replace你可以去看我前面的教程。
直接运行编译命令文件,当你看到如下结果时证明你成功了:
用模拟器打开它吧,可以开始试试我们的游戏了,激动吧?当然真正写游戏的时候过程可没有这么简单,不停的调试修改才能得到可以运行的游戏,过程一定是艰辛的,写过代码的人都知道跳程序的难。下面是部分截图:
怎么样,这样一个NES小游戏的开发过程,是不是觉得繁琐呢?
目前为止,我没有发现cc65内核的IDE,本来NES开发的IDE就没几个,仅有的几个也都是汇编的。可能是我孤陋寡闻了,呵呵,有C语言版的IDE的同志说一声,参考参考。
C语言开发NES的难度使我有了写个IDE的想法,之前和猎人说过一下大致的,很深入的我
没法弄,能力问题。我想着应该只能弄一个外壳,然后通过宏或者脚本来实现正开发和编译,甚至测试的过程。
不过有一点得提一下,打算使用VC++开发的,但是MFC编程还在入门,入了好长时间了,一直没入,呵呵,不断加油中,完成的时间还不能确定,开发完成了我会通知大家的。
下面大致的介绍了一下我的IDE,给大家一个雏形吧,都是用画图板画的。
界面估计会和VC++类似,感觉这样的开发界面比较工整。左边会有资源管理窗口,它里面会有字模、地图、调色板、精灵等的管理,你可以直接双击就修改其内容。大致界面如下:
它应该只是一个壳,几乎所有的功能都只是通过配置脚本或者宏来完成,这样做的目的是为了避免其他工具软件的重写,并且方便扩展。
所有的所有,期待吧,和你们一起。。。。
如果IDE发布的话,估计还得再也几篇IDE的教程,如果IDE升级的话,它的升级方向应该是:
1.易用性
2.中断和声音的支持
3.对40kNES代码限制的突破
4.其他
如果谁对我所提的IDE有更好的建议的话,欢迎我,在我能力范围内的东西我会尽量吸取。
对教程一到教程十(包括插曲)中的任何地方的任何疑问,也欢迎我,能答的我尽力答,答不了的我找人帮忙答,别人也答不了的,我也没办法了。
经过几乎一个学期的不断更新,我把我所知道的关于cc65开发FC/NES游戏的知识几乎都给了这个网络,希望没入门的朋友看了之后可以很快入门,已经入门的朋友可以很深入的了解
FC/NES开发。
写该系列教程的原因是网络上关于cc65开发FC/NES游戏的东西太少(说实话其他开发方案的资料也寥寥无几),自己学习的时候走过不少弯路,写下来和大家分享,希望大家少走弯路,并且对FC/NES充满信心。
如果你对我的教材有任何的意见或者建议,欢迎留言或者我,任何有用或者无用的意见或者建议都将受到感激。
说点其他的吧,)一直在致力于FC/NES的推广,他自己写教程、写博客、答问题、写编译器、前几天还自己录制了视频教程等等一大串的事情足以看出他的FC/NES所下的功夫了,他不是计算机专业的,不是搞软件的,说实话他与计算机编程关联不大,但是他对FC/NES热情,并且想把FC/NES推广出去,这份心很难得。据我所知,他应该是全中国FC/NES推广第一人吧(国外的我没接触过。。。),因为我所认识的其他人都没有他这么执着的在推广。说句实在话,现在推广FC/NES不容易,由于当今科技的发展,FC/NES几乎已经退出了历史舞台,从街上卖的小霸王可以看出来,几年前大街上卖小霸王的商家很多,而现在已经寥寥无几了。大部分人都会选择电脑,而不是小霸王了。不过猎人所推广的FC/NES和小霸王的相关性好像也不大,因为猎人(我们都一样)所推广的基本上都是生成nes文件,然后用模拟器打开,或者放到支持nes游戏的MP4或PMP中运行,当然把它烧写到卡上也行,那样就可以放到小霸王上面了(但这样的机会很少)。
随着小霸王的淘汰,按理说FC/NES也应该退出历史的舞台了,但后来使FC/NES经久不衰的原因应该是一些支持NES游戏的掌机的出现,想部分MP4、PMP之类的东西,好像越山寨的越支持。这些东西使NES游戏在网络上流行起来,好多游戏网址都提供NES游戏的下载。这应该是FC/NES推广的一个方向。
但就近几年来说,NES很少有经典之作了,其很大原因是因为开发NES的人很少,至少在中国很少,而且都没有深入的开发,都是和我一样略懂皮毛的菜鸟之辈,成不了大气也是理所当然的。
曾经想过FC/NES的推广,想过FC/NES的未来,也曾在群上发起过关于想过FC/NES发展的讨论,不过很快就被其他话题所打乱了。
FC/NES开发到底是针对什么人?在我的观点中有一下三类:
1. 和猎人一样,怀念小时候的小霸王,现在有固定的工作,业余之时可以抽时间自己写写游戏,由于对小霸王的怀念就选了FC/NES平台,这类人是最稳定的,应该说他们是FC/NES开发的主力。
2. 和我一样,刚学了计算机编程,然后想到了小时候写游戏的梦,于是不停的百度,发现了可以写FC/NES游戏,其实我们也不知道为什么会选择FC/NES平台,可能是我们在百度搜索栏中写下的是 “如何编魂斗罗一样的游戏”,于是就有一些链接把我们拉到FC/NES平台下面来了。我们这类人可能随着所学习的知识的不断深入,感觉FC/NES满足不了我们的学习了,我们需要面向对象了,需要使用类了,需要网络了等待的时候,开始慢慢的冷落FC/NES,可能会弄GBA(支持C++)或者直接转向计算机编程了。我们很不稳定,当练习的目的达到之后就会离开了,除非我们很怀念FC/NES,在我们转向其他平台的时候也会偶尔拿起FC/NES。
3. 和谁一样的,估计在高中,自己有个可以运行NES游戏的MP4,觉得魂斗罗老是死人也不是办法,想自己弄或者修改一下,于是依然选择百度,得到的资料不多,而且都是写不懂的鸟语,没学过编程,没学过硬件,于是迷迷糊糊的加了群,迷迷糊糊的看着群里面的人讨论,后来有迷迷糊糊的被请出了群。他们想做FC/NES游戏,但是知识有限,时间有限。能力强的能够把网络上给的例子编译运行一下,其他的就做不了什么,这不能怪他们,因为网上的教程很少是针对没有任何计算机知识的
人写的。当然猎人的有些教程倒是挺详细的,零基础开的,但这样的资源实在太少了。就如我所写的教程,直接跳过了C语言的知识。
那么,FC/NES推广的方向应该是什么?这个问题我问大家了,希望能够看到大家的留言或者来信什么的。
补充:
早该出的教程了,一直拖到现在,对不起大家了。不过值得一提的是,在我拖拖拉拉这段时间有幸赶上了猎人出的《》,用过我预发版本《迷宫不迷》的同志都知道我里面的汉字是用手写的,那个惨不忍睹就不多说了。现在版本里面的16*16字模都是用生成的,再次看出猎人的高效与执着了,在此佩服过,谢过。需要该软件的同志可以到他的网盘。
最后,感谢支持,感谢阅读,谢谢!
所有和教程相关的例子、库、工具都可以在我的网盘下载到。
E-Mail:
Q Q :4
百度空间:教程分类:
我的网盘:我们的QQ群:
新手接待群:
FC游戏DIY群:
相关链接:
维京猎人的博客: 维京猎人的网盘: 维京猎人的视频教程:
事后PS:希望更多的人加入到FC/NES这个行列来。
我们的贴吧:
更多推荐
游戏,大家,代码,希望,文件,开发,编译,教程
发布评论