Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
44154604fa
19
main.py
19
main.py
@ -3,20 +3,20 @@ import pygame
|
|||||||
from pyglet.gl import * # for blocky textures
|
from pyglet.gl import * # for blocky textures
|
||||||
|
|
||||||
# other files of this project
|
# other files of this project
|
||||||
import project_constants
|
import project_constants as const
|
||||||
import minefield as mf
|
import minefield as mf
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
pygame.init()
|
pygame.init()
|
||||||
pygame.display.set_caption(project_constants.V_NAME_OF_WINDOW)
|
pygame.display.set_caption(const.V_NAME_OF_WINDOW)
|
||||||
|
|
||||||
# for blocky textures
|
# for blocky textures
|
||||||
glEnable(GL_TEXTURE_2D)
|
glEnable(GL_TEXTURE_2D)
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
||||||
|
|
||||||
# create an instance of Minefield, pass necessary data
|
# create an instance of Minefield, pass necessary data
|
||||||
minefield = mf.Minefield(project_constants.MAP_RANDOM_10x10)
|
minefield = mf.Minefield(const.MAP_RANDOM_10x10)
|
||||||
|
|
||||||
running = True
|
running = True
|
||||||
while running:
|
while running:
|
||||||
@ -26,17 +26,17 @@ def main():
|
|||||||
# ================ #
|
# ================ #
|
||||||
|
|
||||||
# background grid (fills frame with white, blits grid)
|
# background grid (fills frame with white, blits grid)
|
||||||
project_constants.SCREEN.fill((255, 255, 255))
|
const.SCREEN.fill((255, 255, 255))
|
||||||
project_constants.SCREEN.blit(
|
const.SCREEN.blit(
|
||||||
project_constants.ASSET_BACKGROUND,
|
const.ASSET_BACKGROUND,
|
||||||
(
|
(
|
||||||
project_constants.V_SCREEN_PADDING,
|
const.V_SCREEN_PADDING,
|
||||||
project_constants.V_SCREEN_PADDING
|
const.V_SCREEN_PADDING
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# draw tiles and mines
|
# draw tiles and mines
|
||||||
minefield.draw(project_constants.SCREEN)
|
minefield.draw(const.SCREEN)
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
|
|
||||||
# ============== #
|
# ============== #
|
||||||
@ -48,7 +48,6 @@ def main():
|
|||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
running = False
|
running = False
|
||||||
|
|
||||||
# else: event_interpreter.interpret( event )
|
|
||||||
# Assigning all input from keyboard as variables into an array
|
# Assigning all input from keyboard as variables into an array
|
||||||
keys = pygame.key.get_pressed()
|
keys = pygame.key.get_pressed()
|
||||||
|
|
||||||
|
49
minefield.py
49
minefield.py
@ -1,31 +1,30 @@
|
|||||||
import pygame
|
|
||||||
import json
|
import json
|
||||||
import project_constants as consts
|
import project_constants as const
|
||||||
import tile as tl
|
import tile as tl
|
||||||
import mine as mn
|
import mine as mn
|
||||||
|
|
||||||
tile_asset_options = {
|
tile_asset_options = {
|
||||||
"BLUE": consts.ASSET_TILE_BLUE,
|
"BLUE": const.ASSET_TILE_BLUE,
|
||||||
"GREEN": consts.ASSET_TILE_GREEN,
|
"GREEN": const.ASSET_TILE_GREEN,
|
||||||
"ORANGE": consts.ASSET_TILE_ORANGE,
|
"ORANGE": const.ASSET_TILE_ORANGE,
|
||||||
"PURPLE": consts.ASSET_TILE_PURPLE,
|
"PURPLE": const.ASSET_TILE_PURPLE,
|
||||||
"RED": consts.ASSET_TILE_RED,
|
"RED": const.ASSET_TILE_RED,
|
||||||
"WHITE": consts.ASSET_TILE_WHITE,
|
"WHITE": const.ASSET_TILE_WHITE,
|
||||||
"YELLOW": consts.ASSET_TILE_YELLOW
|
"YELLOW": const.ASSET_TILE_YELLOW
|
||||||
}
|
}
|
||||||
|
|
||||||
mine_asset_options = {
|
mine_asset_options = {
|
||||||
'A': consts.ASSET_MINE_A,
|
'A': const.ASSET_MINE_A,
|
||||||
'B': consts.ASSET_MINE_B,
|
'B': const.ASSET_MINE_B,
|
||||||
'F': consts.ASSET_MINE_F,
|
'F': const.ASSET_MINE_F,
|
||||||
'K': consts.ASSET_MINE_K
|
'K': const.ASSET_MINE_K
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def calculate_screen_position(x, y):
|
def calculate_screen_position(x, y):
|
||||||
coords = (
|
coords = (
|
||||||
consts.V_SCREEN_PADDING + consts.V_TILE_SIZE * x,
|
const.V_SCREEN_PADDING + const.V_TILE_SIZE * x,
|
||||||
consts.V_SCREEN_PADDING + consts.V_TILE_SIZE * y,
|
const.V_SCREEN_PADDING + const.V_TILE_SIZE * y,
|
||||||
)
|
)
|
||||||
|
|
||||||
return coords
|
return coords
|
||||||
@ -41,13 +40,13 @@ class Minefield:
|
|||||||
# create matrix of a desired size, fill it with default tile objects
|
# create matrix of a desired size, fill it with default tile objects
|
||||||
self.matrix = [
|
self.matrix = [
|
||||||
[
|
[
|
||||||
tl.Tile((i, j)) for i in range(consts.V_GRID_VER_TILES)
|
tl.Tile((i, j)) for i in range(const.V_GRID_VER_TILES)
|
||||||
] for j in range(consts.V_GRID_HOR_TILES)
|
] for j in range(const.V_GRID_HOR_TILES)
|
||||||
]
|
]
|
||||||
|
|
||||||
# iterate through tiles, set their colors and add mines
|
# iterate through tiles, set their colors and add mines
|
||||||
for x in range(consts.V_GRID_HOR_TILES):
|
for x in range(const.V_GRID_HOR_TILES):
|
||||||
for y in range(consts.V_GRID_VER_TILES):
|
for y in range(const.V_GRID_VER_TILES):
|
||||||
|
|
||||||
# load tile's data from json
|
# load tile's data from json
|
||||||
tile_data = data[f"{x},{y}"]
|
tile_data = data[f"{x},{y}"]
|
||||||
@ -82,18 +81,24 @@ class Minefield:
|
|||||||
|
|
||||||
# draw the sapper
|
# draw the sapper
|
||||||
sapper_screen_coords = calculate_screen_position(self.sapper_position[0], self.sapper_position[1])
|
sapper_screen_coords = calculate_screen_position(self.sapper_position[0], self.sapper_position[1])
|
||||||
window.blit(consts.ASSET_SAPPER, sapper_screen_coords)
|
window.blit(const.ASSET_SAPPER, sapper_screen_coords)
|
||||||
|
|
||||||
|
# ================ #
|
||||||
|
# === MOVEMENT === #
|
||||||
|
# ================ #
|
||||||
|
|
||||||
# Make sure that sapper won't step on the mine.
|
# Make sure that sapper won't step on the mine.
|
||||||
def check_legal_move(self, target):
|
def check_legal_move(self, target):
|
||||||
|
|
||||||
if self.matrix[target[1]][target[0]].mine is None:
|
if self.matrix[target[1]][target[0]].mine is None:
|
||||||
return target
|
return target
|
||||||
else:
|
else:
|
||||||
return self.sapper_position
|
return self.sapper_position
|
||||||
|
|
||||||
# Here are defined functions that move our agent. They are being called in main when certain key is pressed
|
# Here are defined functions that move our agent. They are being called in main when certain key is pressed
|
||||||
|
|
||||||
def go_right(self):
|
def go_right(self):
|
||||||
if self.sapper_position[0] < consts.V_GRID_HOR_TILES - 1:
|
if self.sapper_position[0] < const.V_GRID_HOR_TILES - 1:
|
||||||
self.sapper_position = self.check_legal_move(
|
self.sapper_position = self.check_legal_move(
|
||||||
(int(self.sapper_position[0]) + 1, int(self.sapper_position[1])))
|
(int(self.sapper_position[0]) + 1, int(self.sapper_position[1])))
|
||||||
|
|
||||||
@ -108,6 +113,6 @@ class Minefield:
|
|||||||
(int(self.sapper_position[0]), int(self.sapper_position[1]) - 1))
|
(int(self.sapper_position[0]), int(self.sapper_position[1]) - 1))
|
||||||
|
|
||||||
def go_down(self):
|
def go_down(self):
|
||||||
if self.sapper_position[1] < consts.V_GRID_VER_TILES - 1:
|
if self.sapper_position[1] < const.V_GRID_VER_TILES - 1:
|
||||||
self.sapper_position = self.check_legal_move(
|
self.sapper_position = self.check_legal_move(
|
||||||
(int(self.sapper_position[0]), int(self.sapper_position[1]) + 1))
|
(int(self.sapper_position[0]), int(self.sapper_position[1]) + 1))
|
||||||
|
Loading…
Reference in New Issue
Block a user