原理很简单,请不要喷。


效果展示

种子输入框

种子为12345的地形

种子为23456的地形


代码展示

globalvar map

random_set_seed(real(get_string("Seed: ","")))//获取种子

for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32;j+=1)
{
map[i,j]=0;//初始化数组
}
} for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32;j+=1)
{
if(random_range(0,100)>=65) map[i,j]=1;//按概率填充房间
}
} for(n=1;n<=room_height/32;n+=1)
{
for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32-1;j+=1)
{
if(map[i,j+1]==0&&map[i,j]==1)
{
map[i,j+1]=map[i,j];
map[i,j]=0;//方块重力处理
}
}
}
} for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32;j+=1)
{
if(map[i,j]==1) instance_create(i*32,j*32,obj_block)//在房间中按地图创建物体
}
}

代码讲解

使用的坐标系

1 2 3 4 5 6 7 8 9 ...
2
3
4
5
6
7
8
9
... ...

随机数

random_set_seed():置随机数种子
random_range:生产随机数

方块重力处理

map[i,j]==1是确保正在处理的位置有方块
map[i,j+1]==0是确保正在处理的位置下面一格没有方块

如果符合条件的话

map[i,j+1]=map[i,j]//清空当前格
map[i,j]=0;//填充下面格

(即当前方块下落)

注意一下,这里没有用map[i,j+1]=1,让日后二次开发有更多方块。

放置方块

其实它的本质就是创建对象。

instance_create(x,y,obj)的用法自己看F1.

结语

这是我做的第一个记录,希望我的沙盒游戏也能坚持做下去!

说明

本文原作者Tesla,首发于Tesla-173的个人博客

Tesla本人转载至Gamemaker开发者之家

未经授权禁止转载。

如需转载请联系2230229670@qq.com。

 

最新文章

  1. Android性能优化之App应用启动分析与优化
  2. x01.Tetris: 俄罗斯方块
  3. Bash 会清空从父进程继承来的 OLDPWD
  4. java实现二分查找
  5. Meet Python: little notes
  6. Android 之 2048 的游戏逻辑分析
  7. android 解析XML方式(一)
  8. centos6.4 安装erlang
  9. sql新感悟(where 1 = 1)
  10. 问题-delphi 程序在某电脑中显示???问号 乱码
  11. iOS开发——判断是否第一次启动
  12. win7+ ubuntu 双系统
  13. java对象拷贝和复制
  14. InnoDB的4个特性
  15. JS 关于 bind ,call,apply 和arguments p8
  16. Web设计中打开新页面或页面跳转的方法
  17. 软件工程-CMM与CMMI
  18. [转帖]Oracle字符集的查看与修改 --- 还未尝试 找个周六 试试.
  19. hdu 1847 博弈基础题 SG函数 或者规律2种方法
  20. UEditor前端配置项说明

热门文章

  1. ES6的Array.from()和Array.fill()方法
  2. springboot整合dubbo+zookeeper最新详细
  3. 树莓派3B+之Raspbian系统的安装
  4. 【原创】linux spinlock/rwlock/seqlock原理剖析(基于ARM64)
  5. Java多线程问题40个
  6. 线程状态以及sleep yield wait join方法
  7. vue3.0+axios 跨域+封装
  8. 移动端rem布局实现(vw)
  9. css指示箭头两种实现方法
  10. Spring如何解决循环依赖,你真的懂了?