伯克利神课 CS61B 游戏项目 Project3 建立我的世界(地图生成)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

项目背景

此项目是伯克利神课2020 年CS61B Data Structure 建立我的世界游戏项目。项目介绍请看这里。 由伯克利最受欢迎的老师Josh Hug教授。此项目分为两个部分,第一部分是随机生成地图,第二部分是人机交互。此文主要解决第一部分地图自动生成。


前言

这是一个大的project,前前后后我断断续续做了一个月。真正自己的从无到有设计的迷宫出来的时候是很兴奋的。这个project老师给出的start code很少,不像BearMap骨架很清晰,自己思考怎样算法实现就是了。Project3 更倾向于让你从头到尾设计一个自己的小世界,不局限什么方法,也不限制方法的复杂度。这里没有正确和错误的答案,只有符合要求的答案即可以。这个过程中要不断的问自己,我需要什么类?我需要什么方法?再问自己怎么实现?做这个project我感受最多的感觉是无从下手的惶恐。所以这里将我的设计心路历程贴出来,给无从下手的小伙伴一个参考。

这篇博文着重分析题目要求,思考怎样建立地图,解析项目步骤,使用的是最简单的包里生成方法,没有任何技巧和算法。如果想要更美一些地图,可以看这篇BPS地图生成。


目录

文章目录

前言

一、项目要求

二、start code 分析

1.Package Core

2. package TileEngine

3. Package inputDemo

三、思路分析

总结

一、项目要求

第一部分:生成随机的世界

要求:

  • 2D
  • 伪随机生成,只要seed是确定的世界就是确定的
  • 至少包括room and hallway
  • 房间可以使正方形长方形
  • 房间,走廊,大小和位置都是随机的
  • 房间和走廊要连接

无从下手的小伙伴可以从lab12做起, lab12 是一个熟悉tile render engine的过程。作为generate world的开胃菜,让你通过一个lab深入了解Tile Engine Package的内容。熟悉怎样在画布上画出自己想要的东西。

第二部分:人机交互

包括在电脑上输入随机种子,键盘控制。

二、start code 分析

1.Package Core 

这是我们主要工作的包,这里提供的类有:

 1)Main.java 用来调用Engine.java中的两种方法,启动游戏。一种是在args输入字符串,worldState接收后生成TETile世界,在做phase1时,不需要用到人机交互。

 2)Engine.java 将一个包含种子的input String 生成 一个 TETile[][] WorldFrame。比如输入字符串: "n123sswwdasdassadwas", "n123sss:q", "lwww". 之后,Engine.java 应该返回一个2D TETile[][] 数组。在这里,定义了世界的长和宽。

 3)RandomUtils 给我们提供了不同的分布方式产生伪随机数字的方法还有shuffle()的方法给我们使用。当然我们也可以使用Java自带的Random,不过这个更加方便。

Random对象是一个“伪随机数”生成器,它可以产生一串无穷的看起来是随机数的数字序列,调用nextInt方法获取序列中的每一个数字。它之所以叫“伪随机数”是因为它产生的序列并不是真正随机的。我们获取不同的序列的方式是向Random的构造器中传入一个数字,这个数字被称为“seed”,如果我们用相同的seed构造Random,那么我们一定会获得完全相同的序列。这里提供了产生随机数的方法uniform(), 重新排列数组 shuffle(), 和返回数字内或一定范围数字内的全排列Permutation()三个方法。

2. package TileEngine

 1)Tileset.java 提供了不同类型的tile选择。有墙,地板,们,玩家等等。也可以自己填写自己喜欢的tile类型在这里面。

 2)TETile.java 定义了一个tile,由字符,字符颜色和背景颜色。你也可以加入自己喜欢的tile图片的路径,不过不添加路径,filepath默认为null。会画出开始定义的字符。

 3)TERender.java 用来提交tile的类。输入四个变量画布的长和宽,和开始画的点(xOffset,yOffset).有2个方法。

 a.initialize()初始化画布,b.renderFrame(TETile[][] world)初始化所有的tile,提交2D数组给屏幕,

 tile画的开始点是 xOffset, yOffset.

3. Package inputDemo

这个包中并不需要我们修改,主要提供给我们测试的数据。

三、思路分析

当我们无从下手的时候,这里采用的是由大到小的思考方式,有点像algorithm中讲的 divide and co

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值