With the COVID-19 pandemic dramatically altering society and forcing shutdowns, we are relatively lucky in that our project was designed to be worked on remotely, and has therefore been minimally impacted. Due to the nature of coding and our need to be able to work on our project from different computers, our entire project is available online, and we are well-accustomed to online collaboration. Because of this, the pandemic has not significantly impacted our schedule, resources, or projected outcome and we remain on track to finalize our project in the coming days weeks.
While the pandemic has not forced us to alter our project in any way, it has reinforced to us the importance of dedicating time during the early stages to ensure the project is correctly set up. While we spent a tremendous amount of time finding the correct developer environment and collaboration software during development, it was this time investment that allows to continue our project in light of the pandemic. Had we rushed through this process into development, we likely would have had to dramatically alter our project and potentially scale back. Though no one could have predicted this pandemic, we are grateful that the nature of our project and our early time investment allows us to proceed as planned.
0 Comments
Over the spring break and the weeks leading up to it, we have been very successful and productive in our efforts. Among our progress is a second biome and fully expanded world generation--both crucial steps as we near our final product. After working hard to develop and test infinite generation procedures, as well as restructure our code, we implemented infinite generation and the world can now be as large as the user desires. While this required a general restructuring, another primary challenge was ensuring that we maintain rendering capabilities and prevent the infinite generation from straining the computer. To work around this, we used our Perlin noise algorithm and its properties to only store blocks that were modified--therefore allowing generation to expand exponentially as the blocks-stored decreases exponentially. Another addition to our game is the desert biome featuring flat terrain, cacti, and a new "sand" block. This biome was created using a modified Perlin noise algorithm, and served as the model for how future biomes will be created and implemented. We also used Perlin noise to implement a biome-generation mechanism, which randomly, though realistically, separates and distributes the biomes. In other words, an optimal implementation of this algorithm will give our world distinct "deserts," "plains," and "forests." This is also crucial to creating a realistic and world-like feel. In the future we hope to build off of our experience with the desert biome and biome distribution to add more biomes. These will be exciting additions and will feature new blocks and structures. They will also make the game feel more polished and enjoyable. We also intend on creating an aesthetically-pleasing user interface which will help with organization and user immersion. While these final two features conclude our initial goals, we hope to add some more interaction in the form of AI mobiles like animals or hostile creatures if time permits. This addition will certainly bring its own challenges, but we are eager to bring new features as we near the end-stages of development. Once a more polished product is developed, we also intend to package it with the necessary software and have members of the community beta-test for potential glitches or errors. Thanks and happy coding! Since our last blog post, we have accomplished a lot in terms of bringing the game to a more playable state. Mainly, we reworked the code to allow for expanded terrain generation. This rework opened up opportunities for further refinement, so we also optimized various aspects of generation and rendering which were originally done over the summer. We also developed an algorithm for advanced tree and environment-object generation. This should allow us to place further objects like rocks, statues, and even AI mobiles as we progress. Furthermore, the number of objects spawned can be adjusted for given biomes. Throughout the rework process, we encountered many unexpected bugs and errors. While they were tedious to locate and fix, they did not hinder our progress in any way. The next steps include the addition of multiple biomes and a basic inventory system. These features will make the game more enjoyable and will greatly contribute to the overall "game" feel. Thanks and happy coding!
So far, we have completed the framework for the final game and have implemented critical features such as graphics rendering, random terrain generation, and user interaction with the environment. We have also added multiple features to reduce the stress load on the computer and allow for optimal performance on a variety of systems. The game is currently in a semi-playable state, as the user can explore, create, and destroy, though it lacks the polishing and additional content needed to deem it complete.
Collectively, we have most enjoyed the collaboration and problem solving necessary to mesh together all aspects of the game. While we each have our specialities in the code, we often find ourselves working together to solve a particularly difficult problem or optimize various features. It is very rewarding to see what each person brings to the table and can offer to better the game. Collaboration has worked very well for us throughout the project, and we credit the program "Floobits" for making it a success. Floobits allows for each of us to simultaneously edit and view the code in real time, and it has worked in conjunction with programs like FaceTime and Skype to allow us to remotely collaborate. The entire development process has been fairly smooth, though we have encountered our share of challenges. Setting up our IDE to work with Floobits and the JDK was a long, arduous process, and we have encountered numerous bugs with graphics rendering which temporarily slowed progress. As it stands today, the framework for the game is complete and the game is semi-playable. To take the game to its final state, we seek to add multiple features which significantly bolster the user experience. We aim to greatly expand the map size, add unique biomes, add more blocks, add AI mobiles, and create a pleasant user interface. As of now, we hope to acquire better computers which (preferably) have a dedicated graphics processing unit in order to smoothly run the game. We have been using laptops with integrated graphics which limit our rendering abilities and the complexity of our game models. While the programming process has been doable on these computers, a better computer would allow us to speed up progress. The remainder of our project can be divided into phases which we aim to complete by the May deadline of the final project. Phase 1 will be completed by the end of winter break and will include map expansion and player movement with environmental collisions. We aim to have player movement and environmental collisions completed by the end of Thanksgiving break and spend the rest of the time working on map expansion, as it will require a semi-restructuring of the code. Phase 2 will last from the end of winter break through spring break and will largely focus on making the game more enjoyable. This will include the addition of multiple unique biomes with new blocks, AI mobiles, and a simplified inventory system. Phase 3 will last from the end of spring break through the end of the the school year, and will focus on polishing the game and making final modifications to features. Given the time, we also hope to make the game more accessible to users on different systems. We look forward to the end of the year when the game will be completed--polished and fully-playable--and will be fully released to the Severn Community. Since our last post, we have successfully completed our 40% goal for the summer. In our game, we are able to generate and render a random terrain, place and destroy blocks in a given location, and move around with a collision system to detect blocks and the ground below. Furthermore, we have implemented a number of optimizations aimed at lowering the graphical intensity and strain on the GPU so that our game can be run on a wider array of computers. With these optimizations, it runs much smoother than before and is set up for when we decide to implement infinite terrain generation (so far, for testing purposes, we have only scaled up to 16 by 16 chunks). The next step in the project is to create a HUD and allow for the user to keep track of how many blocks they possess. We also plan to add more biomes such as a forest, mountainous region, ocean, etc, and to use our noise function to distribute the biomes in a way that makes sense. We also have many ideas about block additions and interesting mechanics that utilize the features of a more refined game. We are looking forward to expanding our game and creating a truly enjoyable experience for the player. Thanks and happy coding!
In the last couple of weeks since our last post, we have accomplished a great deal of progress and our 40% goal for the summer is pretty much achieved. We have successfully setup our rendering capabilities to take coordinates as an input and display a block in the desired position. We also have a random, yet cohesive terrain generation method using Perlin noise. Finally, we put these two elements together and we can now render and display a chunk of blocks which resemble a natural terrain. The next step will be to add collision so the camera can only move along the exposed terrain. As of now, the camera is free-moving (which is useful for debugging purposes), but it will need to be locked to the surface for the final product. We also need to add block creation and destruction, but that should be easy given our hierarchy of block and chunks, in which blocks can be added and deleted with minimal added code. We have faced a couple minor challenges in the recent weeks with bugs and errors, but these were usually quickly corrected. We look forward to the coming weeks and how we can add to our working skeleton of the final game. Thanks and happy coding!
Since our last post, a lot has been accomplished. Robby successfully rendered 3-dimensional cubes with textures on them--a crucial part of our summer 40%. The next step in terms of rendering is being able to render an entire chunk (16 by 16 by 256 blocks) and being able to move the camera along the blocks to simulate walking. Ben has begun to use Perlin noise to develop height maps which will be used to generate the terrain along a gradient, creating a sense of realism. Sam has been helping to debug the code and is patiently waiting for the rendering to progress before he delves further into user interaction, as it is semi-dependent on rendering. While we have made a lot of progress, we also encountered a very significant, and unexplained bug which prevented our program from running and compiling. We were stuck debugging this error for around a week with no progress, until we realized that it was an error in the method that runs the code. In the coming weeks, we plan to spend a lot of time integrating all of our components to reach our 40% completion and have a product that is both interactive and uses realistic topography. Thanks and happy coding!
After we received the computers from Severn's IT staff, we began work on the actual code needed to run our project. We started out by outlining the structure of our code, with various class hierarchies such as the main class, objects, and shaders. Robby began research and work on implementing OpenGl to draw a basic rectangle. Due to the intricacies of this API, a seemingly simple task such as drawing a rectangle is actually very complex and is a needed first step in our greater rendering goals. Ben began research on Perlin noise and and how to form a realistic, randomized terrain. He also set up the structure of the necessary classes for terrain generation. Sam has aided in the code layout and is working with both Ben and Robby to further develop the class hierarchies. Sam's part is semi-dependent on rendering and will therefore become more advanced in the coming weeks. Some challenges that we encountered were correctly setting up Floobits so we could collaborate. Because Floobits is a third-party software, it required some additional work to ensure constant uniformity. In the coming weeks we plan to further develop rendering and have the necessary classes written for terrain generation. We also plan to make rendering and terrain generation more interconnected so that a given area is rendered to our specifications. Thanks and happy coding!
After completing our last blog post, we went back to exploring our JDE of choice, Intellij IDEA. Intellij is very interesting, as it allows for easy integration with java libraries, and aided in our implementation of JWLGL. After successfully testing our Intellij and JWLGL systems, we realized that it was time to find a way to collaborate effectively across multiple unique workstations. We found a program called Floobits, which both suited our needs for collaboration and was free to use. This program allows us to make and see each other’s syntactical changes in real time. We encountered some challenges along the way but were able to move past them with the generous assistance of the school. Our first challenge was that our preferred system—MacOS—was not compatible with JWLGL, and we therefore needed to borrow the school’s Windows laptops. Upon receiving the Windows laptops, we ran into the issue of being denied access to our accounts because we were not connected to the Severn domain. With the help of Severn’s IT experts, we were able to turn in the computers and fix the problem by establishing accounts on the local domain. In the next few days, we hope to start outlining class hierarchies so we can begin the actual coding of the project by early July. Thanks for reading and happy coding!
After a successful Fellows leadership lab where we set up our website and discussed ways to effectively pitch an idea, we immediately began preliminary work on our code. Our first step was to download and set up our IDE (interactive development environment) of choice--Eclipse--which we will use to compile and organize all of our code. Downloading this program was fairly easy, but difficulties arose when we attempted to implement the JLWGL (java light weight gaming library), a library which we will use to render and display graphics. Because this library is a professional-grade tool, it was difficult to find appropriate resources to help us better understand the implementation of the library. After hours of extensive research and fruitful collaboration, we were able to compile and run a sample program using the JLWGL on the Eclipse IDE. Our next step is to setup our own test program for JLWGL to ensure that we have an adequate understanding of the basics of the library. Until next time and happy coding!
|
Details
AuthorThese blogs are written by the Fellows: Ben Berlin, Sam Bruce, and Robert Dubinski. We are a group of seniors at Severn School in Severna Park, MD, who are highly interested in programming and game design. After completing AP Computer Science A, we wanted to delve deeper into the world of computer science and we are very fortunate to have been granted this opportunity by the Van Eney Severn Fellows Program. Archives
May 2020
Categories |