- import pygame as pg
- import random as rd
- from OpenGL.GL import *
- pg.init()
- bg = (30,30,30)
- white = (255,255,255)
- black = (0,0,0)
- pg.font.init()
- sysfont = pg.font.Font("LeagueGothic-Regular.otf", 30)
- sw = 960
- sh = 540
- gridsize = 50
- wall1img = pg.image.load("wall1.png")
- floor1img = pg.image.load("floor1.png")
- class character:
- def __init__(self, gridlength, grid):
- self.x = 0
- self.y = 0
- self.charimg = pg.image.load("samplechar.png")
- def draw(self, window):
- self.char = window.blit(self.charimg, (self.x * gridsize, self.y * gridsize))
- def drawgrid(gridlength):
- grid = []
- for y in range(gridlength):
- grid.append([])
- for x in range(gridlength):
- grid[y].append("X")
- return grid
- def display(window, grid, character):
- pg.draw.rect(window, bg, (0, 0, sw, sh))
- sample = sysfont.render("testing 1234567890", True, white)
- window.blit(sample, (0,0))
- for y in range(len(grid)):
- for x in range(len(grid[y])):
- if grid[y][x] == "@": #main char
- character.draw(window)
- elif grid[y][x] == "O": #wall
- window.blit(wall1img, (x * gridsize, y * gridsize))
- elif grid[y][x] == ".":
- window.blit(floor1img, (x * gridsize, y * gridsize))
- pg.display.update()
- def mapgen(grid, gridlength, character, level):
- #initialize character
- # cx, cy= rd.randint(0, gridlength-1), rd.randint(0, gridlength-1)
- # grid[cy][cx] = "@"
- # character.x, character.y = cx, cy
- #init rooms
- #set number of rooms depending on level
- roomcount = rd.randint(5+level, 10+level)
- #create room but only when its not occupied
- occupied = True
- for y in range(roomcount):
- while occupied:
- #top left and bottom right
- r1 = [rd.randint(0, gridlength-12), rd.randint(0, gridlength-12)]
- r2 = [rd.randint(r1[0]+4, r1[0]+10), rd.randint(r1[1]+4, r1[1]+10)]
- occupied = False
- for y in range(r1[1], r2[1]+1):
- for x in range(r1[0], r2[0]+1):
- if grid[y][x] != "X":
- occupied = True
- for y in range(r1[1], r2[1] + 1):
- for x in range(r1[0], r2[0] + 1):
- grid[y][x] = "."
- if y == r1[1] or y == r2[1]:
- grid[y][x] = "O"
- if x == r1[0] or x == r2[0]:
- grid[y][x] = "O"
- occupied = True
- def main():
- window = pg.display.set_mode((sw,sh))
- gridlength = 35
- level = 1
- grid = drawgrid(gridlength + level)
- samplechar = character(gridlength, grid)
- mapgen(grid, gridlength, samplechar, level)
- for i in grid:
- print(*i)
- run = True
- while run:
- for event in pg.event.get():
- if event.type == pg.QUIT:
- pg.quit()
- quit()
- elif event.type == pg.MOUSEBUTTONDOWN:
- if event.button == 4:
- glScaled(1.2,1.2,1.2);
- elif event.button == 5:
- glScaled(0.8,0.8,0.8);
- display(window, grid, samplechar)
- if __name__ == "__main__":
- main()