diff --git a/README.md b/README.md index 1a7b222..27b72f7 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ -# PyGame-Snake +![PyGame](./pygame_logo.png) +# Snake + +Dette er mit bud på det klassiske spil Snake, skrevet i Python, ved hjælp af PyGame. + +## Spillets forløb +Slangen bevæger sig med en konstant fart, i én retning. Der er vilkårligt anbragte forhindringer på banen. + + +Slangen skal styres udenom forhindringerne samt vægge. Du dør hvis du rammer en væg, en forhindring eller dig selv. + +Der bliver også lagt føde ud, vilkårlige steder. Føden forsvinder igen, efter 5 sekunder. + +Hvis du spiser føden, forlænges slangen. + +Målet er, at overleve så længe som muligt, samt at få så mange point som muligt. + +Én strategi kunne være, at undgå at spise, og derved forblive samme længde, men så får du kun point for tiden. + +Hvis du derimod spiser, fordobles dine tidspoint, for hver gang du spiser. Derved kan du opnå mange flere point end ved ikke at spise. + +## Kontrol +Højre - d eller +Venstre - a eller +Op - w eller +Ned - s eller + +Alternativt, kan et joystick :joystick: eller gamepad :video_game: bruges. \ No newline at end of file diff --git a/gfx/LoseScreen.png b/gfx/LoseScreen.png new file mode 100644 index 0000000..76c56da Binary files /dev/null and b/gfx/LoseScreen.png differ diff --git a/gfx/StartScreen.png b/gfx/StartScreen.png new file mode 100644 index 0000000..21a383b Binary files /dev/null and b/gfx/StartScreen.png differ diff --git a/gfx/Textures.png b/gfx/Textures.png new file mode 100644 index 0000000..c175c4b Binary files /dev/null and b/gfx/Textures.png differ diff --git a/gfx/Vignette.png b/gfx/Vignette.png new file mode 100644 index 0000000..9206fe3 Binary files /dev/null and b/gfx/Vignette.png differ diff --git a/gfx/WinScreen.png b/gfx/WinScreen.png new file mode 100644 index 0000000..bf354a2 Binary files /dev/null and b/gfx/WinScreen.png differ diff --git a/main.py b/main.py new file mode 100644 index 0000000..d7718d1 --- /dev/null +++ b/main.py @@ -0,0 +1,5 @@ +from tilemap.playground import PlayGround + +if __name__ == "__main__": + pg = PlayGround(geometry = (1, 3)) + pass \ No newline at end of file diff --git a/pygame_logo.png b/pygame_logo.png new file mode 100644 index 0000000..0de28c4 Binary files /dev/null and b/pygame_logo.png differ diff --git a/tilemap/__init__.py b/tilemap/__init__.py new file mode 100644 index 0000000..90f1c69 --- /dev/null +++ b/tilemap/__init__.py @@ -0,0 +1 @@ +from . import playground \ No newline at end of file diff --git a/tilemap/playground.py b/tilemap/playground.py new file mode 100644 index 0000000..33a84d4 --- /dev/null +++ b/tilemap/playground.py @@ -0,0 +1,97 @@ +""" +This is the part responsible for generating the playing area. +The setup is a simple tilemap, which consists of a variety of +tiles of 32x32 pixels. +There's a series of wall_tiles, ground_tiles and obstacle_tiles. +""" +import html + +wall_tiles = {"WALL_NW": "╔", "WALL_HORIZONTAL": "═", + "WALL_NE": "╗", "WALL_VERTICAL": "║", + "WALL_SW": "╚", "WALL_SE": "╝", + "WALL_TOP_LEFT_OPENING": "╛", "WALL_TOP_RIGHT_OPENING": "╘", + "WALL_BOTTOM_LEFT_OPENING": "╕", "WALL_BOTTOM_RIGHT_OPENING": "╒", + "WALL_LEFT_UPPER_OPENING": "╜", "WALL_LEFT_LOWER_OPENING": "╖", + "WALL_RIGHT_UPPER_OPENING": "╙", "WALL_RIGHT_LOWER_OPENING": "╓"} + +walls = [ + ["WALL_NW", "WALL_HORIZONTAL", "WALL_HORIZONTAL", "WALL_HORIZONTAL", "WALL_NE"], + ["WALL_VERTICAL", " ", " ", " ", "WALL_VERTICAL"], + ["WALL_VERTICAL", " ", " ", " ", "WALL_VERTICAL"], + ["WALL_VERTICAL", " ", " ", " ", "WALL_VERTICAL"], + ["WALL_SW", "WALL_HORIZONTAL", "WALL_HORIZONTAL", "WALL_HORIZONTAL", "WALL_SE"] + ] + +# Playground geometry matrix of rooms can range from 1x1 to 3x3. +geometries = [(1, 1), (2, 1), (3, 1), + (1, 2), (2, 2), (3, 2), + (1, 3), (2, 3), (3, 3)] + +class Room: + def __init__(self, geometry: tuple): + self.room: list = [] + self.create_random(geometry) + + def create_random(self, geometry) -> None: + top: int = 0 # top = row 0 + left: int = 0 # left = char 0 of row + right: int = geometry[0] - 1 # right = room_width-1 + bottom: int = geometry[1] - 1 # bottom = room_height-1 + + room: list = [] + for r in range(geometry[1]): + row: list = [] + for c in range(geometry[0]): + if r == top and c == left: + row.append(wall_tiles["WALL_NW"]) + continue + elif r == top and c == right: + row.append(wall_tiles["WALL_NE"]) + continue + elif r == bottom and c ==left: + row.append(wall_tiles["WALL_SW"]) + continue + elif r == bottom and c == right: + row.append(wall_tiles["WALL_SE"]) + continue + if r == top or r == bottom: + if c > left and c < right: + row.append(wall_tiles["WALL_HORIZONTAL"]) + continue + if r > top and r < bottom: + if c == left or c == right: + row.append(wall_tiles["WALL_VERTICAL"]) + continue + row.append(" ") + room.append(row) + self.room = room + + def get_room(self) -> list: + return self.list + +class PlayGround: + def __init__(self, geometry: tuple): + self.rooms: list = [] + for r in range(geometry[0]): + row: list = [] + for c in range(geometry[1]): + row.append(self.create_room(geometry = (20, 10))) + self.rooms.append(row) + + def create_room(self, geometry) -> list: + return Room(geometry).room + + def print_room(self, room) -> None: + pass + +if __name__ == "__main__": + + pg = PlayGround(geometry = (1, 3)) + + line: str = "" + for r in pg.rooms[0]: + for c in r: + for b in c: + line = line + html.unescape(b) + line = line + "\n" + print(line) \ No newline at end of file diff --git a/tilemap/tiles/apple.png b/tilemap/tiles/apple.png new file mode 100644 index 0000000..bf94088 Binary files /dev/null and b/tilemap/tiles/apple.png differ diff --git a/tilemap/tiles/body_bottomleft.png b/tilemap/tiles/body_bottomleft.png new file mode 100644 index 0000000..c98ecdf Binary files /dev/null and b/tilemap/tiles/body_bottomleft.png differ diff --git a/tilemap/tiles/body_bottomright.png b/tilemap/tiles/body_bottomright.png new file mode 100644 index 0000000..ed9567e Binary files /dev/null and b/tilemap/tiles/body_bottomright.png differ diff --git a/tilemap/tiles/body_horizontal.png b/tilemap/tiles/body_horizontal.png new file mode 100644 index 0000000..5da61e8 Binary files /dev/null and b/tilemap/tiles/body_horizontal.png differ diff --git a/tilemap/tiles/body_topleft.png b/tilemap/tiles/body_topleft.png new file mode 100644 index 0000000..e57fd8f Binary files /dev/null and b/tilemap/tiles/body_topleft.png differ diff --git a/tilemap/tiles/body_topright.png b/tilemap/tiles/body_topright.png new file mode 100644 index 0000000..028bfce Binary files /dev/null and b/tilemap/tiles/body_topright.png differ diff --git a/tilemap/tiles/body_vertical.png b/tilemap/tiles/body_vertical.png new file mode 100644 index 0000000..f7c0b2c Binary files /dev/null and b/tilemap/tiles/body_vertical.png differ diff --git a/tilemap/tiles/head_down.png b/tilemap/tiles/head_down.png new file mode 100644 index 0000000..e3c6afa Binary files /dev/null and b/tilemap/tiles/head_down.png differ diff --git a/tilemap/tiles/head_left.png b/tilemap/tiles/head_left.png new file mode 100644 index 0000000..d1f8ec1 Binary files /dev/null and b/tilemap/tiles/head_left.png differ diff --git a/tilemap/tiles/head_right.png b/tilemap/tiles/head_right.png new file mode 100644 index 0000000..8b7baa5 Binary files /dev/null and b/tilemap/tiles/head_right.png differ diff --git a/tilemap/tiles/head_up.png b/tilemap/tiles/head_up.png new file mode 100644 index 0000000..30ec169 Binary files /dev/null and b/tilemap/tiles/head_up.png differ diff --git a/tilemap/tiles/tail_down.png b/tilemap/tiles/tail_down.png new file mode 100644 index 0000000..44703ea Binary files /dev/null and b/tilemap/tiles/tail_down.png differ diff --git a/tilemap/tiles/tail_left.png b/tilemap/tiles/tail_left.png new file mode 100644 index 0000000..f851fde Binary files /dev/null and b/tilemap/tiles/tail_left.png differ diff --git a/tilemap/tiles/tail_right.png b/tilemap/tiles/tail_right.png new file mode 100644 index 0000000..6c23b18 Binary files /dev/null and b/tilemap/tiles/tail_right.png differ diff --git a/tilemap/tiles/tail_up.png b/tilemap/tiles/tail_up.png new file mode 100644 index 0000000..f984b66 Binary files /dev/null and b/tilemap/tiles/tail_up.png differ