2021-03-11 00:47:14 +01:00
# libraries
2021-03-10 14:01:17 +01:00
import pygame
2021-03-14 18:27:12 +01:00
from pyglet . gl import * # for blocky textures
2021-03-10 14:01:17 +01:00
2021-03-11 00:47:14 +01:00
# other files of this project
2021-03-14 19:18:23 +01:00
import project_constants as const
2021-03-12 11:49:19 +01:00
import minefield as mf
2021-03-11 00:47:14 +01:00
2021-03-10 14:01:17 +01:00
2021-03-12 09:55:59 +01:00
def main ( ) :
2021-03-10 14:01:17 +01:00
pygame . init ( )
2021-03-14 19:18:23 +01:00
pygame . display . set_caption ( const . V_NAME_OF_WINDOW )
2021-03-11 00:47:14 +01:00
2021-03-16 06:41:40 +01:00
# FPS clock
clock = pygame . time . Clock ( )
2021-03-11 18:51:43 +01:00
# for blocky textures
glEnable ( GL_TEXTURE_2D )
glTexParameteri ( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_NEAREST )
2021-03-12 11:49:19 +01:00
# create an instance of Minefield, pass necessary data
2021-03-14 19:18:23 +01:00
minefield = mf . Minefield ( const . MAP_RANDOM_10x10 )
2021-03-11 00:47:14 +01:00
2021-03-10 14:01:17 +01:00
running = True
2021-03-11 00:47:14 +01:00
while running :
2021-03-16 06:41:40 +01:00
# FPS control
clock . tick ( const . V_FPS )
2021-03-11 00:47:14 +01:00
2021-03-14 18:27:12 +01:00
# ================ #
# === GRAPHICS === #
# ================ #
2021-03-11 00:47:14 +01:00
# background grid (fills frame with white, blits grid)
2021-03-14 19:18:23 +01:00
const . SCREEN . fill ( ( 255 , 255 , 255 ) )
const . SCREEN . blit (
const . ASSET_BACKGROUND ,
2021-03-11 00:47:14 +01:00
(
2021-03-14 19:18:23 +01:00
const . V_SCREEN_PADDING ,
const . V_SCREEN_PADDING
2021-03-11 00:47:14 +01:00
)
)
2021-03-12 21:25:33 +01:00
# draw tiles and mines
2021-03-14 19:18:23 +01:00
minefield . draw ( const . SCREEN )
2021-03-11 00:47:14 +01:00
pygame . display . update ( )
2021-03-14 18:27:12 +01:00
# ============== #
# === EVENTS === #
# ============== #
2021-03-11 00:47:14 +01:00
for event in pygame . event . get ( ) :
if event . type == pygame . QUIT :
running = False
2021-03-14 11:32:44 +01:00
# Assigning all input from keyboard as variables into an array
keys = pygame . key . get_pressed ( )
2021-03-14 18:27:12 +01:00
2021-03-14 11:32:44 +01:00
# Depending on what key we press, the agent will move in that direction
# DISCRETION : The only keys that are available are arrow keys
2021-03-26 16:36:21 +01:00
# DISCRETION : is_valid_move is a new brand funcation that now plays a critical role in movement of our Agent (It is NOT just the "check up" function anymore)
2021-03-14 11:32:44 +01:00
if keys [ pygame . K_RIGHT ] :
2021-04-11 19:04:06 +02:00
target_row , target_column = minefield . agent . go_right ( )
minefield . is_valid_move ( target_row , target_column )
2021-03-26 16:36:21 +01:00
2021-03-14 11:32:44 +01:00
elif keys [ pygame . K_LEFT ] :
2021-04-11 19:04:06 +02:00
target_row , target_column = minefield . agent . go_left ( )
minefield . is_valid_move ( target_row , target_column )
2021-03-26 16:36:21 +01:00
2021-03-14 11:32:44 +01:00
elif keys [ pygame . K_UP ] :
2021-04-11 19:04:06 +02:00
target_row , target_column = minefield . agent . go_up ( )
minefield . is_valid_move ( target_row , target_column )
2021-03-12 11:49:19 +01:00
2021-03-26 16:36:21 +01:00
elif keys [ pygame . K_DOWN ] :
2021-04-11 19:04:06 +02:00
target_row , target_column = minefield . agent . go_down ( )
minefield . is_valid_move ( target_row , target_column )
2021-03-14 18:27:12 +01:00
2021-03-12 09:55:59 +01:00
if __name__ == " __main__ " :
main ( )