Commit df9ca65c authored by 魔法少女赵志辉's avatar 魔法少女赵志辉 🍊
Browse files

完成了塔防游戏的project1草稿。

parent 0c2f9990
\documentclass{dreamClass}
\def\CC{ {C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\small\bf ++}} }
\usepackage[most]{tcolorbox}
\newenvironment{note}
{\begin{center}
\em
\begin{tcolorbox}[colback=gray!5,
colframe=black,
width=.9\textwidth,
arc=1mm, auto outer arc,
boxrule=0.5pt,
]
}
{
\end{tcolorbox}
\end{center}
}
\title{
\vspace{-50pt}
\textbf{\Huge Project1}\\
\textbf{\huge 塔防游戏}\\
\small Version 0.1.0\\
\text{\color{red}此文档尚未经过助教和老师的审核,只作草稿使用。}
}
\author{刘添翼\thanks{\href{mailto:tyi.liu@outlook.com}{tyi.liu@outlook.com}}}
\affil{计算机科学与技术系,南京大学}
\date{\today}
\begin{document}
\maketitle
\thispagestyle{empty}
\section{最后期限}
Project1的最后期限是\textbf{北京时间2021年10月10日23时59分}
在此之前,每位同学需要提交课程项目的源码、可执行文件和项目报告到待定的某个指定地点。
\section{概述}
塔防游戏是一种很有趣的游戏。在过去的十多年间,该类型的游戏一直流行着,如《植物大战僵尸》、《王国保卫战》、《保卫萝卜》和《明日方舟》等。所以,让我们写一个塔防游戏吧!
\section{原则}
游戏必须是从第一行代码开始写成的,符合面向对象和泛型程序设计范式的,\CC{}程序。推荐使用第三方的\CC{}图形库来完成图形的绘制,键盘鼠标事件的捕获和处理等等内容,这样可以集中精力设计和实现游戏的架构。
\section{技术指标}
我们参考《明日方舟》和《植物大战僵尸》,制订了这份技术指标。本节是Project1的基本要求,显式标注成
\begin{note}
可选的
\end{note}
内容之外的所有内容都需要完成。
\subsection{世界观}
游戏中存在两个对立\textbf{阵营},一个由玩家操控,一个由程序操控,分别称为\textbf{我方}\textbf{敌方}
每个阵营都有自己的胜利目标,我方的胜利目标是在有限次攻击中阻止敌方穿过地图(参见\autoref{sec:map}),敌方的目标是在有限次攻击之内穿过地图。
\begin{note}
具体的胜败条件可以自由发挥。
作为参考,失败条件可以像《植物大战僵尸》那样在路径的末端设置一个割草机;也可以像其他很多塔防游戏一样给我方设置一个生命值,有敌方单位到达路径的末端时扣除一定数值的生命。
而胜利条件,可以是挺过了若干波敌方的进攻,也可以简单地表示我方\textbf{无法胜利}
\end{note}
\subsection{地图}\label{sec:map}
\textbf{地图}是游戏的舞台。
\begin{note}
地图的数量和具体式样\text{\color{red}在Project1中}不做要求。
\end{note}
地图在逻辑上是一个\(m \times n\)的矩形,每个\(1 \times 1\)的矩形是一个\textbf{格点}。当然,在实现的时候,不用考虑美术方面的问题,能够达意就可以。
地图上存在若干条有向的\textbf{路径},每一条都由若干个逐一邻接的格点组成。敌方的单位将从路径的起始格点出现,按照路径移动到路径的结束格点。照此定义,路径不会分叉。
特别地,不同路径可以共用格点,包括起始点和结束点。
\begin{note}
引入路径的概念让地图的设计变得灵活:如果把所有的路径都设置成从右向左依次排开,就成为经典的《植物大战僵尸》;如果把路径设置成有很多转折,就有一点《王国保卫战》的感觉。
\end{note}
\subsection{资源}
我方可以在地图上合适的位置(参见\autoref{sec:unit}),以一定的\textbf{资源}为代价,部署单位。当然,实现上,需要游戏为玩家提供一套界面,让玩家能够选择要在何处部署何种单位。
\begin{note}
纯键盘操作当然是可行的。为了更好的游戏体验,可以尝试加入对鼠标的支持。
\end{note}
资源随时间流逝而自动增加。我方也可以手动撤退已经部署的单位。
\begin{note}
当然,可以设置一些特殊的单位可以产出资源,也可以设定成在手动撤退单位的时候返还若干资源。
这里的设定完全可以随各位同学开心,不过想要强调游戏平衡性的同学可以在这里稍微多思考一点。
\end{note}
\subsection{单位}\label{sec:unit}
每个阵营都可以产生若干种具有一定功能的\textbf{单位}。不同阵营的单位用各自的方式互相攻击,为对应的阵营争取胜利。每个单位都有一定的生命值,如果生命值过低,单位将被破坏。
我方的单位有\textbf{近战单位}\textbf{远程单位}。每种类别下,至少要设计3种不同的单位。
近战单位需要部署在路径所在的格点上。近战单位可以阻挡一定数量的敌方单位跨过自己所在的格点,也可以主动攻击自己攻击范围内的敌方单位。
\begin{note}
如果把近战单位的攻击范围设定得比较大,但是不能阻拦敌方单位,敌方单位也不能攻击自己,就可以实现《植物大战僵尸》中的\emph{地刺};如果把攻击力设定成0但是血量很高,就可以实现\emph{坚果}
我们并没有阻止同学们把近战单位部署在已经有其他近战单位的格点之上。或许可以用这个机制实现\emph{南瓜}
\end{note}
远程单位不能部署在路径所在的格点上,但需要部署在路径的附近。远程单位不能阻拦敌方的单位,但是攻击范围一般较近战单位大。
\begin{note}
远程单位的合法部署位置可以自由发挥。
\end{note}
敌方的单位,当然,不受我方控制。它们将在路径的起始点随机生成,按照一定的策略向路径的结束点移动,并攻击沿途的处在攻击范围内的我方单位。
\begin{note}
敌方单位的具体情况\text{\color{red}在Project1中}可以自由发挥。
\end{note}
\end{document}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment