70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
# libraries
|
|
|
|
import pygame
|
|
import time
|
|
from pyglet.gl import * # for blocky textures
|
|
|
|
# other files of this project
|
|
import project_constants as const
|
|
import minefield as mf
|
|
import searching_algorithms.a_star as a_star
|
|
from display_assets import blit_graphics
|
|
|
|
|
|
def main():
|
|
|
|
pygame.init()
|
|
pygame.display.set_caption(const.V_NAME_OF_WINDOW)
|
|
|
|
# for blocky textures
|
|
glEnable(GL_TEXTURE_2D)
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
|
|
|
# FPS clock
|
|
clock = pygame.time.Clock()
|
|
|
|
# create an instance of Minefield, pass necessary data
|
|
minefield = mf.Minefield(const.MAP_RANDOM_10x10)
|
|
|
|
# get sequence of actions found by BFS algorithm
|
|
action_sequence = a_star.graphsearch(
|
|
initial_state=a_star.State(
|
|
row=minefield.agent.position[0],
|
|
column=minefield.agent.position[1],
|
|
direction=const.Direction.UP),
|
|
minefield=minefield)
|
|
|
|
running = True
|
|
while running:
|
|
|
|
# FPS control
|
|
clock.tick(const.V_FPS)
|
|
|
|
# graphics (from display_assets)
|
|
blit_graphics(minefield)
|
|
|
|
# make the next move from sequence of actions
|
|
if any(action_sequence):
|
|
|
|
action = action_sequence.pop(0)
|
|
|
|
if action == const.Action.ROTATE_LEFT:
|
|
minefield.agent.rotate_left()
|
|
elif action == const.Action.ROTATE_RIGHT:
|
|
minefield.agent.rotate_right()
|
|
elif action == const.Action.GO:
|
|
minefield.agent.go()
|
|
|
|
time.sleep(const.ACTION_INTERVAL)
|
|
|
|
else:
|
|
|
|
for event in pygame.event.get():
|
|
|
|
if event.type == pygame.QUIT:
|
|
running = False
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|