学习编程从游戏开始——多彩俄罗斯方块的设计构想

news/2024/12/21 19:12:56/文章来源:https://www.cnblogs.com/lexyao/p/18620616

0.前言

我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。

了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:

学习编程从游戏开始——编程计划(目录) - lexyao - 博客园

这是一篇通用文章,讲解的是各种方案都能用到的内容。

编写一个程序之前的策划至关重要。这个策划方案要说明要编写的程序能做什么(功能)、有什么约定(规则)、以什么形式出现(界面)、怎么实现(程序设计)、是否达到了预期的效果(功能测试)、特殊情况下的可靠性(极限测试)。

按着比较正规的说法,设计一个应用程序需要经过以下几个阶段:

  1. 编制软件开发计划。这一阶段需要做的工作包括:
    1. 系统定义及分析
    2. 可行性研究
    3. 编制实施计划报告
  2. 需求分析。这一阶段需要做的工作包括:
    1. 用户需求分析,包括功能、性能、可靠性等等
    2. 资源需求分析,包括需要的技术人员、财务资源、开发工具等
  3. 软件设计。这一阶段需要做的工作包括:
    1. 程序结构设计,包括模块划分、数据流程、程序结构、接口等等
    2. 详细设计阶段,包括具体的代码编写、测试数据准备等
  4. 测试。这一阶段需要做的工作包括:
    1. 功能测试,也就是说是不是实现了计划的功能
    2. 极限测试,也就是说在数据或者操作达到状态时确保程序能够采用有效的方法处理可能出现的危机,确保安全运行
  5. 维护。这一阶段需要做的工作包括:
    1. 问题的发现与收集。任何软件的开发都可能存在缺陷,在测试阶段不可能发现全部的问题,有些问题到了使用阶段才会暴露出来。
    2. 问题原因分析。对于收集到的问题,分析发生的条件,找到发生的原因。
    3. 解决问题。通过修改程序的代码,修正出现的问题。
    4. 测试。测试修改后的程序是否达到了预期的效果、可靠性等。

在这篇文章里,我主要讲述以下几个方面的内容:

  1. 要编写的应用程序的功能要求
  2. 要编写的程序的界面布局
  3. 编写程序总体思路
  4. 结束语

1.要编写的应用程序的功能要求

总的目标是编制一款使用者(下面称为用户)可以定制的俄罗斯方块游戏程序。

可以定制主要表现在以下几个方面:

  • 有多种的界面可供使用者选择,包括
    • 背景图案可以有多种形式可供选择,还可使用用户提供的图片、颜色等
    • 方块图案可以有多种形式可供选择,还可使用用户提供的图片、颜色等
  • 计分方法可以定制,包括用户可以在基础计分的基础上是否:
    • 按一次消减的数量加分,加分的倍数可设置
    • 消减多行是否按行数加分
    • 消减行所在的高度是否影响加分
  • 速度可定制,速度是指两次动作之间的间隔时间,最大间隔为1秒(1000毫秒)包括
    • 是否按消减数量的增加而加快速度
      • 按消减方块数量加分的算法
      • 一次消减多行是否有速度奖励,奖励算法
    • 是否按游戏时间的延长而提高速度
      • 消耗时间的加速算法
      • 暂停是否计入游戏时间
  • 游戏声音可定制,包括
    • 背景音乐定制
      • 游戏中是否开启背景音乐
      • 可选的背景音乐,包括用户提供的
    • 操作声音可定制
      • 游戏中是否给操作提供声音
      • 每种操作可选择不同的操作声音,包括用户提供的声音
  • 难度可定制,除了上面的速度定制外,还有起始难度设置,包括
    • 起始行数:指定游戏开始时已经存在方块的行数
    • 起始速度:指定游戏开始时两次动作之间的间隔毫秒数,取值0-1000毫秒

2.要编写的程序的界面布局

  • 主界面为一个窗口,从上到下分为标题栏、主菜单、工具栏、客户区、状态栏
    • 标题栏:显示应用程序的标题
    • 主菜单:提供给应用程序可以进行的所有操作
    • 工具栏:提供游戏操作中常用的操作,特别是需要快捷操作的部分
    • 客户区:从左到右分为设置区、游戏区、战绩榜
      • 设置区:提供用户定制游戏的所有选择项,包括图案选择、计分规则、计时规则、声音定制、起始难度
        • 图案选择、
        • 计分规则、
        • 计时规则、
        • 声音定制、
        • 起始难度
      • 游戏区:呈现一个游戏机的样式,包括背景图案、显示屏、操作按钮
        • 背景图案,包括四角图案、四边图案、内部填充,可以是颜色或图片,可以是方角、圆角、切角或不规则角部图案,可以是四边凸起或阴影立体
        • 显示屏:在背景图案中部的上区,从左向右分为难度指示、游戏区、数据统计区
          • 难度指示:使用柱状的长条或进度条显示当前速度,可以用颜色提示难度(如果提示多个方块,可以在这个区域显示)
          • 游戏区:方块移动、堆砌、消减的区域,是游戏的核心
          • 数据统计区:以文字、数字显示当前游戏的各种统计数据,包括得分、块数等在战绩榜中显示的数据,还可显示距离升级还差的分数、下次出现的方块图案
        • 操作按钮:在背景图案中部的下区,包括操作按钮,可以用鼠标点击或键盘点击,包括旋转、左右移动、加速下行、快速跌落、暂停/恢复等。
      • 战绩榜:每种设置组合游戏得分排行榜,可包括总得分、总耗时、操作次数、消减次数、下落块数等,以及用这些数据计算出的得分率等数据
    • 状态栏

3.编写程序总体思路

  • 采用多种编程方式编写,实现编程方法的对比
  • 界面组件的选择根据不同的编程方法可以选择各自适宜的组件
  • 数据算法采用统一的算法和代码
  • 数据存储采用xml或json

4.结束语

事先形成一个完整的计划可以减少过程中修改方案造成的资源浪费,也有利于工作的顺利完成。

我写这个程序的目的是通过写程序的过程熟悉编写程序的方法,所以编写什么样的程序不重要,重要的是编写的过程和积累的知识。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856467.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【甲方安全】工业行业+工业无线网络技术

摘 要 工业互联网体系融合了新一代信息通信技术与工业经济,推动了工业数字化、网络化、智能化转型,其中网络体系是基础。工业无线网络作为其重要组成部分,具有灵活部署的特性,能适应复杂的工业环境,为工业互联网的构建提供基础。深入探讨了工业无线网络技术在工业互联网中…

AutoCAD VBA 模态窗口焦点丢失的终极解决办法

话不多说上代码 问题出在userform这个窗体的样式上需要用到的win32api函数以及常量Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Public Const…

数值计算方法(1) 插值方法

+++ date = 2024-12-21T10:12:41+08:00 draft = true title = 数值计算方法(1) 插值方法 +++ 初次发布于我的个人文档 之前有一期简单介绍了一下拉格朗日插值和数值积分微分方法,我感觉有点太简单了。所以这次打算开个系列,好好唠一唠。 什么是插值 在小学阶段,有一种题目叫…

Antdesign React之API展示页面

本项目基于antdesignpro,点击调试后跳转弹窗,左边展示public/doc路径下的md文档并且通过markdownview渲染成md,右侧是json编辑器index.tsx import React, { useState, useMemo } from react; import { Layout, Menu, theme, Row, Col } from antd; import { HomeOutlined, F…

时间复杂度:理解算法性能的核心指标

在编程和算法设计中,时间复杂度是一个至关重要的概念。它用来衡量一个算法在处理不同规模的输入数据时,执行所需要的时间增长速度。换句话说,时间复杂度能够帮助我们理解算法在面对大数据时的表现,是否能高效地完成任务。 什么是时间复杂度? 时间复杂度是一个描述算法效率…

TIA环境下SCL编程练习:产生m到n之间的随机整数,存入数组

假设需要读取100个随机数,存入有100个成员的数组。做这个练习是为了学习一下SCL编程。随机数使用系统时钟纳秒数来线性转换。 新建项目,选用1500PLC(6ES7 513-1AL02-0AB0,当然可以选用其它型号),设定本地时区,建立网络。 新建DB,建立变量,取消优化块的访问。 新建FC,…

大学微积分 AB 第六单元:变革的整合与积累(定积分、黎曼近似)

积分学简介 定积分简介 例子: 示例:变化的积累 1/2是面积的一半 例子:

实验六 C++

任务四: Vector.hpp:#pragma once #ifndef VECTOR_HPP #define VECTOR_HPP#include <iostream> #include <stdexcept> // 为异常类提供支持 #include <memory> // 为 std::unique_ptr 提供支持template <typename T> class Vector { private:std::…

道阻且长——2024秋软工实践个人总结

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标 回顾自己的软工实践课程学号 102201120道阻且长——2024秋软工实践个人总结 一、学期回顾 1.1 想象与实际 开课之…

【Rive】Rive在Android上的简单应用

1 前言 ​ Rive 是一款强大的矢量图编辑器,可以设计图形、也可以制作动画。Rive 提供了矩形、圆形、三角形、多边形、星形、钢笔、文字等工具来绘制各式各样的矢量图形;提供了平移、旋转、缩放等工具对矢量图形进行各种变换;提供了骨骼、约束、时间线、状态机、过渡条件、…

UML之类与类图

在所有项目中,类都是最常见的UML模型元素(当然,不可否认,很多项目还没画出类图就直接进入编码实现的阶段了)。类是UML模型与具体实现代码之间的桥梁,随着对UML建模的深入了解,我们也会发现,类(确切说是分析类)其实也是一些模型之间的桥梁。 在真实世界中不同对象通过…

Linux学习笔记(二) vi/vim快速入门

Linux系统会内置vi文本编辑器。 vim具有程序编辑的能力,可以看作是vi的增强版本,可以主动的以字体颜色辨别语法的正确性, 方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 下面将介绍: 1.vim打开或创建文件的方法。 2.vim的三种工…