2D console games tutorial!
- really bad title, I know *
Are you tired of making those text and decision-based RPG games? but feel like your game in PyGame just wouldn't suit?
Well, you've come to the right place, learn how to make, matrixes, dictionaries maps and scenes!
creating your Map/Scene
to start off you want to make a dictionary.
Whats a dictionary? it has two parts a key and a valuedict = {"key" : "value"}
calling the key would return a value
so with this knowledge, we create our scene:
scenes = {
1: {
{ "look" : [[map],
[map],
[map]]
}
- i am using map instead of 1,1,1,0,0,1 etc because that takes forever and i have no time for it , pretend it has value *
here I named the first scene 1 (an integer) this is so it can be referenced easily later
why another dictionary, this is so we can have more references inside the same scene(let's call these costumes) (for example if it is the night the character might not be able to see anything but if they had the night vision goggles the could)
We are using matrixes for our map for an x,y coordinate position (y being each list and x being each individual object inside the list)
now to print all we have to do is reference all the keys:print(scenes[1]["look"]
and the output would be this:
hmmm, that doesn't look very nice. since Y is the vertical axis and our lists inside the matrix are the y-axis we should stack them and get rid of those pesky commas, we can easily do this like:
for i in scenes[1]["look"]: #i is y-axis
for l in i: #l is x-axis
sys.stdout.write(f"{l}" #this prints but on the same line also has to be string not int or error
print(" ") #when that list is printed it goes to a new line
you have to import sys
for this to work
the output would be :
Much better but all those numbers look ugly and unusable so how about we change that around!
Printing your Scene
we can make another dictionary to reference the numbers, you can go wild and do what you want but for the purposes of this tutorial, I am going to keep simple and stick to a maze-style game.
convert = {
1: "🟥", #wall
0: " ", #empty space but you can make this grass or carpet etc, it's just something the user can walk on
3: "🧍", # character
4: "🟩", #finish or teleport to next scene
}
you can also add a scene variable to depict which scene the user is on/whats printedscene = 1#because that's our first scene
now the output would be more like this:
much nicer now isn't it?
Movement
input(for the movement we are going to need a few new variables!
)
we are going to need 4 new variables for this
x = 1#set to what you want your spawn point to be every scene
y = 1 # same - remember python arrays start at 0
newY = 1 #make these the same as x and y or your game will break
newX = 1
choice = input("where would you like to go> ")
if choice == "w":
if maps[map]["look"][y - 1][x] == 1:
print("you cant go there") #check for obstruction here it is wall
else:
newY -= 1 #do movement , not y because we need to update pos
# minus because positive y will go down the list
now repeat this for every option.
add in a while loop...(before the printing)
and euraka you are early finished!
now to just update the position and check if they need to move scenes...
Updating Position
if maps[map]["look"][newY][newX] == 4:
# map += 1 #for if you have more maps
print("the end") # if u got new maps
exit() #u could just ad if statement to exit but because i have no more maps
maps[map]["look"][y][x] = 0 # replaces old position
x = newX #updares all positions
y = newY
maps[map]["look"][y][x] = 3 # moves character to new position
and now we are truly finished yay
Hope you enjoyed advanced tutorial coming soon!
Notes
because of how fast the console clears you may want to create a function to clear it to keep it clean :
import os
import sys #dont if you already have
def Clear():
os.system("clear") #cls in windows
#and call
Clear()
Thanks!
Advanced coming soon with way more concepts here's a teaser: you can make procedural generation by randomly randinting each object in the list and to leave open space to maximize the number of walls etc!
this is basic knowledge but it should be enough to build of and do cool things like battles or platformers (PyGame is better for that) I
made this because I personally struggled with stuff like this when I wanted to make a game in the. early days and all the current projects were so complex i couldn't comprehend them.