shawind 发表于 2007-6-1 19:19:39

[分享]一步一步做游戏

这是日站上很老的一个学习项目。
原来的地址在gamdev.org

把一个游戏分解成N步,然后一步一步的去完成。
当然,他们分步的思路未必就是最好的,但是把每一步看作是一个编程的习题的话,
一步一步的去做,和一题一题的去解,却也是异曲同工。
就把解完题后,出现一个完整的游戏,当作是练习编程的意外收获吧。

最难能可贵的是,已经有很多人去练习,并提供了各种语言实现的例子。
很多例子都提供了源代码。这让入门的难度大为降低。

现在这个项目中有针对以下游戏类型的练习

1.俄罗斯方块式游戏
2.撞球游戏
3.PACMAN式游戏
4.超级马里奥式横向卷轴动作游戏
5.2D STG
6.回合制SLG
7.FF式RPG制作 / DQ式RPG制作
8.7的补讲:地图编辑器

下面就每一个例子的每一步做一个简单的翻译。
有能力的,可以直接去看日文原文。

注意:不是所有例子都有源代码,也不是每一步骤都有单独的实现例子。

shawind 发表于 2007-6-1 19:24:31

俄罗斯方块类游戏

图例:
http://photo7.56.com/albums/userpics/dataa/87/37/15006181%7C1003321878465f8c563a428.png

Level1 显示窗口
创建一个窗口,按任意键退出

Level2 显示图像
图像显为精灵,键盘或手柄控制其移动

Level3 显示方块
决定方块的类型,并显示小画面中间。
按下键后,可切换方块的类型。
(俄罗斯方块中有L、|、凸、□等种类的方块)

Level4 作成方块的落下领域
方块随机从领域上方落下,并堆积在领域下方

Level5 消去横向整齐排列的方块

Level6 预告将落下的下一个的方块

Level7 显示得分

现有以下工具的例子
Delphi6
JavaScript
C&DirectX 9
C++&DirectX 9

shawind 发表于 2007-6-1 19:28:17

撞球类游戏

图例
http://photo7.56.com/albums/userpics/dataa/92/85/15006181%7C964398664465f8c565942b.png

Level1 显示窗口

Level2 制作游戏主循环

Level3 显示横竿(自机)
就是用来撞击球的东西

Level4 移动横竿
按键后,横竿左右移动,并不超出窗口画面范围。

Level5 移动球
显示球,并写一个函数让球能自行运动。

Level6 球和墙的碰撞检验

Level7 显示将被球撞击的方块

Level8 球和方块的碰撞检验

Level9 和球碰撞后,方块被消去

Level10 游戏结束
满足条件时,结束游戏,并显示GameOver画面

Level11 游戏清版
满足过关条件时,游戏清版

(到这里,并没有全部完成该游戏的制作,后面步骤,可按个人喜好自由设定。)

现有以下工具的例子
Visual C++
Visual Basic
BCC
C (LSI C-86 v3.30c 试食版 / 16bit DOS)

shawind 发表于 2007-6-1 19:32:15

吃豆类游戏

图例
http://photo7.56.com/albums/userpics/dataa/11/59/15006181%7C609314700465f8c5662895.png

Level1 显示图像
显示裂开的PACMAN图像,可以没有动画和响应按按键操作

Level2 按键操作
按下键后,PACMAN图像可以移动。
移动时要播放PACMAN的大嘴张合的动画,可不考虑和墙壁的碰撞。

Level3 显示地形

Level4 在地形上放置饲料
如果饲料全被被吃,显示清版信息。

Level5 制作敌人
首先制作一只。可不考虑它的AI。
一只制作出来后,再考虑多只,并增加适量的AI。

Level6 制作强力饲料
就是PACMAN的画面四边上的四个大的饲料。

Level7 制作鸟巢箱
被PACMAN吃了后,敌人順序变化,并返回鸟巢箱。

Level8 制作穿梭隧道
在隧道内敌人的移动速度下降

Level9 音效
PACMAN吃饲料和吃敌人时的音效

Level10 标题画面
标题画面,GameOver画面。有余力的,还可以作名字输入系统。

Level非正式 制作休息时间
休息时间后,敌人的畏缩时间不定量变长。
(休息时间=Coffee Break,用在这里,具体含义不明。)

现有以下工具的例子
Borland C++ Builder
C
C++ (Win32API)
HSP
Java
Java (MIDP)
VC#
VC++ (DirectX)
C++ (SGL2D)
HSP

shawind 发表于 2007-6-1 19:34:33

超级马里奥式横向卷轴动作游戏

Level1 显示窗口

Level2 精灵
可用键盘控制精灵移动

Level3 地面
显示背景和地面,预定画面下1/3为地面,实现精灵左右移动和跳跃。

Level4 卷轴
设计横向滚动的地图格式,按玩家角色移动卷动。
可能的话,制作一个地图编辑器。

Level5 碰撞检验

Level6 敌人
设计一种敌人,包括出现,碰撞检验,死亡处理。

现有以下工具的例子
VC&Java
Delphi&QuadrupleD3(DirectX9)

shawind 发表于 2007-6-1 19:38:33

2D STG

图例
http://photo7.56.com/albums/userpics/dataa/39/42/15006181%7C1133928790465f8c9b79225.png

Level1 显示自机

Level2 按键处理
按下键盘(手柄)后,自机移动。

Level3 自机不会移动到画面外

Level4 自机发射子弾

Level5 制作敌机
显示敌机,先是从上到下直线移动类型,从画面下方出去后又从上方出现。

Level6 敌机和子弹的碰撞检验
敌机死后,显示爆炸动画,然后再从别的地方出现。
同时加上得点分数。

Level7 自机和敌机的碰撞检验
可选用两种计量方式,自机的HP数值和剩余飞机架数。

Level8 敌机的攻击
敌机间隔一定时间发射子弹。最初子弹向下打就行了。
数学学得好的人,可以去作复杂的弹道。
敌机子弹和自机的碰撞检验。

Level9 增加自机的子弹发射数

Level10 增加敌机数量
增加敌机种类也在这里。在数据中加入“敌机序号”来分配处理。

Level11 增加敌机移动方式种类

Level12 多个敌机联合行动

Level13 制作BOSS

Level14 制作场景
读入场景定义文件,然后敌人出现。

Level15 场景结束
一个场景结束后,打开下一个场景(或重新再打开当前场景)

Level16 制作背景

Level17 敌机出现和背景同步

Level18 添加BGM

Level19 添加音效

Level20 添加炸弹

Level21 添加道具

Level22 出击准备画面

Level23 存档&读档

All Level 保持活动
(原文:モチベーション,动机?不解!估计是保持一个游戏循环的意思。)

现有以下工具的例子
Borland C++ BuilderX
shooterDX -- dev-c++/Irrlicht Engine 0.6
SampleSTG -- Visual Stdio .Net/Luna
GameMaker5.3A
Delphi
C
Dev-Cpp + Allegro
C++&SDL
C++& Irrlicht
C++&DXlib

shawind 发表于 2007-6-1 19:43:19

回合制SLG

图例
http://photo7.56.com/albums/userpics/dataa/96/58/15006181%7C1515015760465f8c9b94767.png

基本篇
level1 显示
作成由方格构成的地图

level2 移动(1) 基本
角色在地图上显示,并按格子移动

level3 移动(2) 移动范围
点击角色显示,这个角色的移动范围

level4 移动(3) 移动点
不能通过的地形,和经过时消费2点以上移动点的地形

level5 敌(1) 显示
显示敌人,以及显示自己角色移动后,可以攻击到的范围

level6 敌(2) 攻击
点击在可攻击范围内的敌人,敌人被消灭

level7 回合(1)

level8 回合(2)
自己角色移动后,在角色的右下显示“E”,表示该角色在这个回合中不能再行动。

level9 回合(3)
流程:
自角色移动→己方回合结束→敌方移动(先随便给点移动)→敌回合结束→自角色移动

level10 菜单
可弹出移动后,或移动前的移动、攻击、待机的菜单

Level11 光标
鼠标在方格上时,显示方格大小的光标

Level12 单位管理(1)
多个敌方,味方

Level13 单位管理(2)
设定单位的HP和攻击力

Level14 单位管理(3)
根据攻击,减少HP,被击倒

Level15 单位管理(4)
在单位动作中追加,显示单位状态的动作

Level16 单位管理(5)
移动点的消费
例:步兵在山地消费4,而飞兵消费1

Level17 单位的移动类型
比Level16更深一点,是否可以通过,能不能待机,跳跃时减少移动消费。
根据游戏的类型,飞行也是可能的。

Level18 地图整理
作成角色移动力,类型各不同的地图

战斗画面篇
Level1 绘制前的准备
新开一个窗口用来显示战斗动画

Level2 画出来看看
没有动画只显示角色,只需要一张图片。做动画就需要多张图片,初作的时会很麻烦。

Level3 动起来看看
同Level2,只用一张图片。动作的时候,移动图片位置就行。

敌方AI篇
Level1 移动!移动!
敌方向着靠近味方的方向移动

Level2 攻撃!攻撃!
和味方邻接就攻击

Level3 贫弱!贫弱!
可攻击的对象有多个时候,攻击最弱的那个

现有以下工具的例子
C++ (SDL)
C++ (DirectX9)
Delphi6
Delphi6
C
C/C++ (DirectX9/Luna)
C (SDL)
C++ (DXLIB)
C (32Bit DOS)
C/C++ (DirectX9)
C++ (SDL+OpenGL)

shawind 发表于 2007-6-1 19:48:17

FF式RPG

图例
http://photo7.56.com/albums/userpics/dataa/32/62/normal_15006181%7C972653576465f8c9ba50f2.png

Level1 显示窗口

Level2 显示图像
显示角色图像,并响应键盘(手柄)操作

Level3 显示地图
设计地图格式,并显示地图。
键盘输入上下左右,地图随之卷动。

Level4 制作地图编辑器

Level5 碰撞检验
地图上实现不可通过地形

Level6 制作NPC
设计随机或有规律活动的NPC,并显示在地图上,处理NPC和地图的碰撞检验。

Level7 制作地图移动事件
人物在地图上移动时,地图随之卷轴

Level8 和NPC对活
显示对话窗口

Level9 制作菜单
菜单显示项能选择

Level10 制作BGM

Level11 音效
同时播放两种以上的音效

Level12 道具操作
游戏开始时拥有道具,作成使用道具的窗口,道具使用后,删除除理。

Level13 宝箱事件
在地图上配置宝箱事件,发生获得道具事件

Level14 状态
状态中包含HP,MP。使用道具时,会对状态发生影响。

Level15 商店事件
和特点NPC接触时发生

Level16 金钱
显示拥有的金钱。在商店购入道具时,金额随之变动。

Level17 武器&防具
装备窗口,商店中可购入武器和防具。

Level18 场景切换
城镇到野外,野外到城镇,野外到战斗(伪切换即可)

Level19 战斗场景
敌人图像和命令窗口

Level20 战斗命令
显示“战斗&逃跑”。选“战斗”,显示“打到了敌人”。
选“逃跑”,显示“成功逃走”。

Level21 ATB系统
ATB计量器,ATB值全满时,才可以选择命令。

Level22 HP增减
选择“战斗”命令,减少敌方的HP。当敌方HP低于0时,战斗场景结束。

Level23 敌方的攻击
为敌方导入ATB、实现自动攻击。当玩家HP低于0时,战斗场景结束。

Level24 显示多个敌人

Level25 选择要攻击的敌人
包括了全体攻击

Level26 选择魔法的窗口

Level27 魔法
攻击,回复,辅助魔法。MP值不够魔法消费值时,显示“MP不足”。

Level28 使用道具(战斗场景中)

Level29 创建战士和僧侣职业
可在游戏开始时选择。(有余力,可再作黑白魔导师职业。)

Level30 转职

Level? 读档,存档

Level? 导入事件脚本

Level? 数据脚本导入
包含敌人,道具,魔法,职业...

Level? 制作一个完整的事件
《打倒住在洞窟中的BOSS》
从村长处接受任务,事件发生(Level1~8)
村庄->野外->洞窟,潜入洞窟(Level~18)
潜入到地下N层后,打倒BOSS(Level~28)
返回村庄,从村长处获得报酬。(Level~?)

现有以下工具的例子
C++ (EasyLinkLibrary)
Delphi(QuadrupleD)
C(Win32API)
C++ (Win32API)
HSP
C(DXLib)

shawind 发表于 2007-6-1 19:50:22

DQ式RPG

不翻了。
大体上和FF式的差不多。
特别是,如果按照他说的那种步骤弄出来的游戏,画面效果很难弄得好看。

现有以下工具的例子可看
BCC
Java

shawind 发表于 2007-6-1 19:53:02

地图编辑器
7.FF式RPG的补讲

Level 1 显示窗口

Level 2 显示点
窗口内任意位置显示点。

Level 3 在鼠标点击的地方显示点

Level 4 显示BMP图像

Level 5 显示地图切片
读入的BMP图像在地图切片中显示出来。先显示一个就行。

Level 6 显示地图
按照地图数据中的规则,用地图切片铺满编辑画面。

Level 7 放置地图切片
在鼠标点击的位置放置地图切片。

Level 8 选择地图切片

Level 9 保存为地图数据

Level 10 读入地图数据

Level 11 实现卷轴功能
地图大小超出窗口大小时,起用卷轴功能。

Level ? 实现REDO,UNDO功能

Level ? 放大键(缩放)

Level ? 剪切,复制,粘贴

Level ? 选择矩形区域后,剪切,复制,粘贴

Level ? 追加属性和插件功能(或层)

现有以下工具的例子
BCC
Delphi
Java+SWT+OpenGL
页: [1] 2 3
查看完整版本: [分享]一步一步做游戏