The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Games::Terrain::DiamondSquare - Random terrain generation via the Diamond Square algorithm

VERSION

version 0.02

SYNOPSIS

 use Games::Terrain::DiamondSquare 'create_terrain';
 my $terrain = create_terrain( $height, $width, $roughness );

 foreach my $row (@$terrain) {
     foreach my $square (@$row) {
         # $square is a "height" value from 0.0 to 1.0. Do with it as you will
     }
 }

DESCRIPTION

From Wikipedia: The diamond-square algorithm is a method for generating highly realistic heightmaps for computer graphics. It's a fractal method of generating random terrain "heights" which is reasonably fast (though this being Perl, it's not fast enough for, say, real-time rendering). A proper C implementation would be nice here.

There is a tohtml.pl example in the examples directory of this distribution.

EXPORT

create_terrain

 my $terrain = create_terrain( $height, $width );
 # or
 my $terrain = create_terrain( $height, $width, $roughness );

This function accepts integer $height and $width arguments and an optional $roughness parameter. The latter is a float from 0.0 to 1.0 indicating how "rough" the map should be. Lower numbers generate smoother maps. Defaults to 0.5.

EXAMPLE

Here's an example terrain generated from a test script:

  $$$$$$$$$$$$$$$$$$$$$$$####################*********************!**!!!!!!!!!!!!!
  $$$$$$$$$$$$$$$$$$$$$$#####################****************************!!!!!!!!!
  $$$$$$$$$$$$$$$$$$$$$$###########################*#*##*#*####************!!!!!!!
  ####$####$#$#$$$$$$$$$##########################################**********!!!!!!
  ################$$$$$$$$##########################################**********!!!!
  #################$$$$$$$$$##########################################**********!!
  *###############$$$$$$$$$$$#########################$##$#$$$$########**********!
  ****#*############$$#$##$##########################$$$$$$$$$$$########**********
  ********#############################################$$$$$$$$#########**********
  *************#########################################$#$##$########************
  !*!*************###################################################*************
  !!!!!!*!**********####*##*#*#######################################*************
  !!!!!!!!!!!*****************############$##########################*************
  =!!!!!!!!!!!!***************###########$$$##########################**#*#*******
  ====!!!!!!!!!!!!***********############$$$$$#############################*******
  ;=======!!=!!!!!!!**********##**#######$##############################**********
  ;;;;;;========!!!!!!!***************###############################*************
  ;;;;;;;;========!!!!!!!!*!*!**********############*##############************###
  ;;;;;;;;;;;=====!!!!!!!!!!!!!!!********#*#**************######*************#####
  :;;;;;;;;;;======!!!!!!!!!!!!!!!***************************#*#*********#########
  :::;;;;;;;;;======!!!!!!!!!!!!!!!*************************************##########
  ::::::;;;;;;=======!!!!!!!!!!!!!!!*!*******************************#############
  ~:::::;;;;;;;;=========!!=!!!!!!!!!!!!!*!***************************############
  ~~::::::;;;;;;;;=;===========!=!=!!!!!!!!!!!!!!!*********************#*#########
  ~~~~:::::::;;;;;;;;=;===============!!!!!!!!!!!!!!!*********************########
  ~~~~~~:::::::;;;;;;;;;;;;;=;==========!!!!!!!!!!!!!*!*******************########
  -~~~~~~~::::::::::;;;;;;;;;;;;;==========!=!!!!!!!!!!!!*****************########
  ----~~~~~~~::::::::::;;;;;;;;;;;;=============!!!!!!!!!***************##########
  ------~~~~~~~~:~:::::::;;;;;;;;;;;;;============!!!!!!!!**************#######$$$
  ,--------~-~~~~~~~:::::::::::;;;;;;;;;==========!!!!!!!!!***********#########$$$

SEE ALSO

You can read about the algorithm at http://www.gameprogrammer.com/fractal.html#diamond

This implementation is based off of http://www.smokycogs.com/blog/plasma-fractals/.

AUTHOR

Curtis "Ovid" Poe <ovid@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Curtis "Ovid" Poe.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.