lördag 3 juni 2017

Challenges

Some issues in the game that I will have to solve are how to make the player unit interact with the game world. In Such a way that he can stand on blocks, climb ladders etc. The world entities aren’t even connected to each other yet. But that’s not the main issue. On one hand I will need to draw the player to the screen by using coordinates somewhere between (0,0) to the corresponding width and height. On the other hand I want the player to interact with the game world by using a separate set of coordinates. Depending on where the player is within the game he will also have to be able to interact with the world, which means that the array grids that now are used as maps also have to know their own coordinates somehow. This has gotten a bit messy quickly. As always when writing code, there is no right way of doing it, only ‘less worse’.

A possible solution for this is to create a class that stores a map, which is an array grid of numbers, and the corresponding drawable texture for it. Besides this, the class should also have its own starting coordinates representing where this map piece is in the world. In other words, it could have a coordinate for its upper-left corner (if anything here sounds stupid it is because I made this up as I wrote it). I already know that a map will always have a width of 20x20 and height of 15x20. To display these maps on the screen I simply scale up the drawable images that I generate for them. By first loading the grids from text-files and then draw to an image in the code 20x20 blocks representing each number of the grid. So anyway, a map coordinate will go from an unknown value, (x,y), to (x+20x20,y+15x20). Likely I will need to initialize a starting position for a map and then write a function that calculates the other connected maps coordinates which are in the same world. The question that comes from this is how I will determine in what map the player is currently in. I should always easily have the players coordinates available by looking in the “entity class” that I have made for the player, but what I fear is that I might have to loop through all map classes for a world in order to find in which of them the player is in. I need a smart way of organizing the map classes in perhaps an array of some sort so that I can always instantly know where the player is at, instead of doing something that takes a linear time, O(n). The big O notation is used to discuss theoretical speeds of algorithms. For instance, if there were a million map classes and the algorithm to find the player was O(n) there is a possibility that the program needs to run one million times all the time as you’d play the game.


I need to know that if I divide the player coordinates x with the map width (20x20=400) and y with the map height (20x15=300), that I always will get the corresponding number for the map inside of a 2D array, containing all the map pieces. If you didn’t know, you don’t get any decimals when dividing two “integers” programmatically.



After I have solved the problems mentioned above, I also will have to correctly draw the player to the screen, possibly by subtracting its current coordinates with its present map coordinates. But then the problem arises, what if the map coordinate is negative? Do I instead add the players coordinates with the maps coordinates? Most likely not.  Also, I will need to draw the map it is currently in on the right location of the screen as well as neighboring maps if certain conditions are met. “The right way” to position a map on the screen may entirely depend on how far to one side the player is. I.e. if he is by the edge of the map I may need to only display half of the map.

Inga kommentarer:

Skicka en kommentar