0.前言
我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。
了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:
学习编程从游戏开始——编程计划(目录) - lexyao - 博客园
这是一篇通用文章,讲解的是各种方案都能用到的内容。
编写一个程序之前的策划至关重要。这个策划方案要说明要编写的程序能做什么(功能)、有什么约定(规则)、以什么形式出现(界面)、怎么实现(程序设计)、是否达到了预期的效果(功能测试)、特殊情况下的可靠性(极限测试)。
按着比较正规的说法,设计一个应用程序需要经过以下几个阶段:
- 编制软件开发计划。这一阶段需要做的工作包括:
- 系统定义及分析
- 可行性研究
- 编制实施计划报告
- 需求分析。这一阶段需要做的工作包括:
- 用户需求分析,包括功能、性能、可靠性等等
- 资源需求分析,包括需要的技术人员、财务资源、开发工具等
- 软件设计。这一阶段需要做的工作包括:
- 程序结构设计,包括模块划分、数据流程、程序结构、接口等等
- 详细设计阶段,包括具体的代码编写、测试数据准备等
- 测试。这一阶段需要做的工作包括:
- 功能测试,也就是说是不是实现了计划的功能
- 极限测试,也就是说在数据或者操作达到状态时确保程序能够采用有效的方法处理可能出现的危机,确保安全运行
- 维护。这一阶段需要做的工作包括:
- 问题的发现与收集。任何软件的开发都可能存在缺陷,在测试阶段不可能发现全部的问题,有些问题到了使用阶段才会暴露出来。
- 问题原因分析。对于收集到的问题,分析发生的条件,找到发生的原因。
- 解决问题。通过修改程序的代码,修正出现的问题。
- 测试。测试修改后的程序是否达到了预期的效果、可靠性等。
在这篇文章里,我主要讲述以下几个方面的内容:
- 要编写的应用程序的功能要求
- 要编写的程序的界面布局
- 编写程序总体思路
- 结束语
1.要编写的应用程序的功能要求
总的目标是编制一款使用者(下面称为用户)可以定制的俄罗斯方块游戏程序。
可以定制主要表现在以下几个方面:
- 有多种的界面可供使用者选择,包括
- 背景图案可以有多种形式可供选择,还可使用用户提供的图片、颜色等
- 方块图案可以有多种形式可供选择,还可使用用户提供的图片、颜色等
- 计分方法可以定制,包括用户可以在基础计分的基础上是否:
- 按一次消减的数量加分,加分的倍数可设置
- 消减多行是否按行数加分
- 消减行所在的高度是否影响加分
- 速度可定制,速度是指两次动作之间的间隔时间,最大间隔为1秒(1000毫秒)包括
- 是否按消减数量的增加而加快速度
- 按消减方块数量加分的算法
- 一次消减多行是否有速度奖励,奖励算法
- 是否按游戏时间的延长而提高速度
- 消耗时间的加速算法
- 暂停是否计入游戏时间
- 是否按消减数量的增加而加快速度
- 游戏声音可定制,包括
- 背景音乐定制
- 游戏中是否开启背景音乐
- 可选的背景音乐,包括用户提供的
- 操作声音可定制
- 游戏中是否给操作提供声音
- 每种操作可选择不同的操作声音,包括用户提供的声音
- 背景音乐定制
- 难度可定制,除了上面的速度定制外,还有起始难度设置,包括
- 起始行数:指定游戏开始时已经存在方块的行数
- 起始速度:指定游戏开始时两次动作之间的间隔毫秒数,取值0-1000毫秒
2.要编写的程序的界面布局
- 主界面为一个窗口,从上到下分为标题栏、主菜单、工具栏、客户区、状态栏
- 标题栏:显示应用程序的标题
- 主菜单:提供给应用程序可以进行的所有操作
- 工具栏:提供游戏操作中常用的操作,特别是需要快捷操作的部分
- 客户区:从左到右分为设置区、游戏区、战绩榜
- 设置区:提供用户定制游戏的所有选择项,包括图案选择、计分规则、计时规则、声音定制、起始难度
- 图案选择、
- 计分规则、
- 计时规则、
- 声音定制、
- 起始难度
- 游戏区:呈现一个游戏机的样式,包括背景图案、显示屏、操作按钮
- 背景图案,包括四角图案、四边图案、内部填充,可以是颜色或图片,可以是方角、圆角、切角或不规则角部图案,可以是四边凸起或阴影立体
- 显示屏:在背景图案中部的上区,从左向右分为难度指示、游戏区、数据统计区
- 难度指示:使用柱状的长条或进度条显示当前速度,可以用颜色提示难度(如果提示多个方块,可以在这个区域显示)
- 游戏区:方块移动、堆砌、消减的区域,是游戏的核心
- 数据统计区:以文字、数字显示当前游戏的各种统计数据,包括得分、块数等在战绩榜中显示的数据,还可显示距离升级还差的分数、下次出现的方块图案
- 操作按钮:在背景图案中部的下区,包括操作按钮,可以用鼠标点击或键盘点击,包括旋转、左右移动、加速下行、快速跌落、暂停/恢复等。
- 战绩榜:每种设置组合游戏得分排行榜,可包括总得分、总耗时、操作次数、消减次数、下落块数等,以及用这些数据计算出的得分率等数据
- 设置区:提供用户定制游戏的所有选择项,包括图案选择、计分规则、计时规则、声音定制、起始难度
- 状态栏
3.编写程序总体思路
- 采用多种编程方式编写,实现编程方法的对比
- 界面组件的选择根据不同的编程方法可以选择各自适宜的组件
- 数据算法采用统一的算法和代码
- 数据存储采用xml或json
4.结束语
事先形成一个完整的计划可以减少过程中修改方案造成的资源浪费,也有利于工作的顺利完成。
我写这个程序的目的是通过写程序的过程熟悉编写程序的方法,所以编写什么样的程序不重要,重要的是编写的过程和积累的知识。