关于“搭桥”游戏生成随机地图的设计思路
是很久以前写的一个小游戏。名字为:Bridge Puzzle Game。 是一款益智类的小游戏。
游戏链接:http://www.puzzle-bridges.com/
游戏中最重要的一个功能是随机生成游戏地图功能,我们的目的是用户输入游戏棋盘的大小,应用会根据棋盘大小生成相应的随机数的岛屿。如图:
通过游戏链接,可以看到游戏棋盘是一个正方形的N X N的方格棋盘。从游戏中通过观察,可以得到到:
1.每个“岛屿”之间不可以水平和垂直相邻,只可以斜线方向相邻。
2.搭桥链接“岛屿”时,不能有桥相互交叉和相互重复。
3.生成的地图必须要保证可以链接到所有的“岛屿”。
4.生成地图时,每个“岛屿”的数标。
。。。
想过很多种方法,都可以生成随机地图,但是由于随机性不高,生成的地图种类就会偏少。提供一个我能想到的最高随机的方法:
1.首先需要两个List集合,一个储存Line对象信息,另一个储存”岛屿“对象的信息。
2.在给定的网格中,随机选取一个坐标,放置一个“岛屿”。把“岛屿”信息放到List中。
3.创建一个循环。
4.在循环中随机选中一个已经创建的“岛屿”,并随机在此“岛屿”的水平或者竖直方向上选取一个坐标,记得此坐标要排除选定“岛屿“的坐标以及其坐标的相邻位置。
4.如果新选定的坐标在List集合中不会与其他坐标重复或者相邻,则创建一个Line对象,把此坐标和选中”岛屿“的坐标作为起始点和终点。
5.新创建的Line比较在List中的Line对象,如果有重复的或者垂直的Line对象在List中,则返回步骤4,如果没有则在该坐标处创建一个”岛屿“,将”岛屿“信息存入到List中,并且该坐标的Line信息存入到Line的List中。
6.循环结束,随机地图创建完成。
由于是C#写的,就不放代码了,放几张图:
难看了点
关于“搭桥”游戏生成随机地图的设计思路相关推荐
- 游戏中随机地图的实现
游戏中随机地图的实现 很多游戏都用到了随机地图,比如矮人要塞,CDDA,MineCraft,RimWorld. 随机地图带给游戏更多的趣味性,每一次新建游戏都有不同的体验. 一般游戏中生成随机地形都是 ...
- Unity使用波函数坍缩 (Wave Collapse Function)算法生成随机地图
在游戏领域和人工智能领域有一个随机生成地图用的比较多的算法叫做波函数坍缩 (Wave Collapse Function)算法,这个算法可以根据自己定制的规则生成随机地图. 根据波函数坍缩算法的源码 ...
- Unity中利用柏林噪音生成随机地图
利用柏林噪音生成随机地图<2/2/2018> 什么是柏林噪音?(请自行百度)Perlin噪声 ( Perlin noise )指由Ken Perlin发明的自然噪声生成算法 . 原理学习可 ...
- Arduino制作俄罗斯方块小游戏(一)整体设计思路
emmm,虽然标题是Arduino,但我其实用的不是Arduino,是chipKIT.为什么标题叫Arduino呢,因为玩Arduino的小白多啊. 你看,这就叫标题党[Doge] 虽然我的确不是用的 ...
- java项目生成多个条码_java – 生成随机条形码 – 一个设计问题
我正在修复生成条形码的java代码中的错误(线程问题).根据设计,条形码只是一个数字,下一个"未使用"条形码是序列中的下一个.有990亿可能的数字. 首先,由于安全问题,我不喜欢自 ...
- 分布式 ID 生成系统 Leaf 的设计思路,源码解读
什么是分布式ID? ID 最大的特点是 唯一 而分布式 ID,就是指分布式系统下的 ID,它是 全局唯一 的. 为啥需要分布式ID呢? 这就和 唯一 息息相关了. 比如我们用 MySQL 存储数据,一 ...
- 类似元气骑士的九宫格随机地图实现
类似元气骑士的九宫格随机地图实现 主要思路 代码部分 效果演示 补充 参考 主要思路 情况1.九宫格中随机选择7个方格出来必定可联通(可斜向联通). 情况2.九宫格中随机选择7个方格出来大部分情况可联 ...
- 《DFQ》开发随录——随机地图
欢迎参与讨论,转载请注明出处. 前言 虽然先前未曾严明,但<DFQ>的全称为<DungeonFighterQuest>,由字面上便可得出,这是一款<DNF>的同人游 ...
- 工作日记:JavaScript生成随机色
不多啰啰,直接上硬货! /*** 获取指定闭区间的随机数* @param min 最小值* @param max 最大值* @returns {number}*/ export function ge ...
最新文章
- 制作Windows Mobile程序安装包
- 如何从Java中的字符串值获取枚举值?
- java 内存区域中的栈
- Tark钱包面向全球招募优秀上币方,千亿财富等你来拿!
- 深入理解分布式技术 - 分布式缓存总结回顾
- linux C 快速排序法
- SQL PROMPT5.3.4.1的一些设置选项
- 【牛客 - 331E】炫酷划线(权值线段树,树状数组哈希,随机数)
- html6与html5的区别,XHTML和HTML5的区别
- Http Header的Transfer-Encoding
- 【python数据分析】用python进行数据探索2(常见matplotlib及pandas绘图函数汇总、对比及拓展)
- 如何做好抖音?做抖音必学的上热门技巧
- 将png格式图片批量转存为jpg格式
- YOLOV5网络结构
- Mask R-CNN网络详解
- PPT导出图片质量太差?简单操作直接导出印刷质地图片
- 面经_OPPO研究院_数据科学研究员实习岗
- JSP标签隐藏以及不可修改
- 华三交换机irf 堆叠配置_交换机的堆叠配置
- STM32小白入门(第八天)-------低功耗蓝牙模块
热门文章
- rda分析怎么做_利用Oracle RDA快速收集Oracle产品分析数据
- gtj2018如何生成工程量报表_BIM造价应用:Revit+GTJ2018土建计量教程
- 如何提升自己电脑网速
- 【ROM定制】Android 12 制作『MIUI官改』那点事①了解
- 中国AI半壁江山:微软亚洲研究院20年20大创业公司
- 推荐一个腾讯出品的Android UI框架 —— QMUI
- 从用户心理看游戏运营和推广
- SpringBoot 整合【Mybatis-Plus实现分页查询】
- 1125和855最小公倍数C语言,备战1125联考 | 巧用“最小公倍数”,计算题1秒变简单...
- 08 在ATmega8中真实可用的ADC转换器写法