{"id":20808390,"url":"https://github.com/std4453/terraingen","last_synced_at":"2026-04-24T14:36:37.510Z","repository":{"id":42417502,"uuid":"62138711","full_name":"std4453/TerrainGen","owner":"std4453","description":"Procedural random terrain generation playground, also a place to improve my Java skills.","archived":false,"fork":false,"pushed_at":"2016-08-07T13:54:26.000Z","size":453,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-18T13:49:32.597Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/std4453.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-28T12:25:33.000Z","updated_at":"2018-05-21T06:02:03.000Z","dependencies_parsed_at":"2022-09-16T10:52:16.608Z","dependency_job_id":null,"html_url":"https://github.com/std4453/TerrainGen","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std4453%2FTerrainGen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std4453%2FTerrainGen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std4453%2FTerrainGen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std4453%2FTerrainGen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/std4453","download_url":"https://codeload.github.com/std4453/TerrainGen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243152862,"owners_count":20244662,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T19:48:18.657Z","updated_at":"2025-12-24T14:28:48.076Z","avatar_url":"https://github.com/std4453.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TerrainGen\r\n\r\nTerrainGen is a playground of mine created when I read bunches of documents about procedural random terrain generation and finally decided to implement the algorithms by myself using *Java*, while, in the same time, giving a training to my Java skills.\r\n\r\n# Algorithms\r\n\r\nThough the repository will finally contain many different PRTG algorithms, I shall start everything from an algorighm decribed in [this post][algorithm-1]:\r\n\r\n[algorithm-1]: http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/\r\n\r\nWhile during the development / implementation of the algorithm, I'll try and implement some other algorithms oftenly-used in PRG, like *Perlin Noise* or *Veronoi Algorithm*, etc..\r\n\r\nStill this algorithm is merely an simple one:\r\n  \r\n* It only generates terrain for a rather small area;\r\n* It works only on a square map;\r\n* It cannot be expanded to theoretically infinite size;\r\n* It doesn't contain detailed topographic features ( canyons, caves, etc. );\r\n\r\nThough it would become a fairly good start. \r\n \r\nThese are algorithms that I want to implement after that:\r\n\r\n1. Voxel / Pixel-based terrain ( like *Minecraft* or *Terraria* )\r\n* Rogue-like game terrain ( like *Dwarf Fortress* )\r\n* Real-time strategy terrain ( like *Starcraft* or *Age of Empires* )\r\n\r\n# Architecture\r\n\r\nThe whole program is based on simple architecture with its front-end and back-end seperated and an communication module between them to pass data through.\r\n\r\nReadably, the packages in this Java project forms a tree:\r\n\r\n* Front-End\r\n\t* Basic UI System\r\n\t\t* Parameter Controls\r\n\t\t* General UI Templates\r\n\t\t* User Input Manager ( may be replaced by Swing built-in ones ) \r\n\t* 3D System\r\n\t\t* Modelling Adaptors / Interfaces\r\n\t\t* Navigation Controls\r\n\t\t* Renderer\r\n\t\t* First-Person Exploration System\r\n\t\t\t* TO BE DEVELOPED...\r\n* Back-End\r\n\t* Utilities\r\n\t* Common Algorithms\r\n\t* PRTG Algorithms\r\n\t\t* 1\r\n\t\t* 2\r\n\t\t* ...\r\n\t* Parameter-Driven Adaptors / Interfaces\r\n\t* Multi-Layer Generation Model\r\n* Communication\r\n\t* Event-Driven Model\r\n\t\t* Async / Multithread Model\r\n\t\t* Dispacher \u0026 Receiver\r\n\t\t* Producer \u0026 Consumer\r\n\t\t* Blob Data Pipe\r\n\t* Buffers\r\n\r\nBasically, the backend part works like an library: It receives parameters from the front-end / caller of the library, generates data ( expected to work asynchronously ), and passes data through the *Event Stream Model*. While the front-end part works like an framework: It initializes everything and waits for the modules to construct the data needed.  \r\nIn this way, the whole repository of different uses:\r\n\r\n* library that generates random terrain data\r\n* visible tools for random-generated terrain graph\r\n* first-person explorer in randomly generated 3D world\r\n\r\n# Dependencies\r\n\r\nAs one of the aims of this project is to improve my Java skills, I tried to code algorithms myself of those built in *Java SE*'s standard library instead of using opensource libraries. However, I still tend to accept some other external libraries that I don't have the ability to build, or, aims too far from my project.\r\n\r\nI fetch the *JAR* files directly from the maven repository, since I want this project be lightweight enough, so I used these libraries for now:  \r\n( The Files can be found in /lib )\r\n\r\n1. [json-20160212.jar](http://repo2.maven.org/maven2/org/json/json/20160212/json-20160212.jar) from [Github repo JSON-java](https://github.com/stleary/JSON-java)\r\n* [commons-logging-1.2.jar](http://repo2.maven.org/maven2/commons-logging/commons-logging/1.2/commong-logging-1.2.jar) from [Apache Commons Logging](http://commons.apache.org/proper/commons-logging/)\r\n\r\n# Conclusion\r\n\r\nBelieve it or not, I've not yet figured out what to write here, so...\r\n\r\nThis project is still under pre-alpha development, and you won't expect anything to work properly yet.   \r\n**Please be patient, I'm a student with little free time..**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstd4453%2Fterraingen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstd4453%2Fterraingen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstd4453%2Fterraingen/lists"}