From 2830efa2473f0c3b711fe20b6a9fb5f0722c1365 Mon Sep 17 00:00:00 2001 From: Cezary Adamczak Date: Mon, 10 May 2021 14:35:41 +0200 Subject: [PATCH] Zaktualizuj 'basic_grid.py' --- basic_grid.py | 107 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 74 insertions(+), 33 deletions(-) diff --git a/basic_grid.py b/basic_grid.py index ad8da28..64d73f9 100644 --- a/basic_grid.py +++ b/basic_grid.py @@ -1,3 +1,5 @@ +### TO DO: PLANT SPRITES, PLANT GROWTH ### + # Import the pygame module import pygame @@ -5,20 +7,20 @@ import pygame # Updated to conform to flake8 and black standards from pygame.locals import ( K_UP, - K_DOWN, K_LEFT, K_RIGHT, K_ESCAPE, - K_SPACE, KEYDOWN, QUIT ) -from field import * -from tractor import * -from plant import * -from colors import * -from dimensions import * +import field as F +import tractor as T +import plant as P +import colors as C +import dimensions as D +import node as N +import mapschema as maps # Initialize pygame pygame.init() @@ -28,32 +30,46 @@ pygame.display.set_caption("Inteligentny Traktor") # Create the screen object # The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT -screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) +screen = pygame.display.set_mode((D.SCREEN_WIDTH, D.SCREEN_HEIGHT)) + +#define map + +mapschema = maps.createField() # Create field array field = [] -for row in range(GSIZE): +for row in range(D.GSIZE): field.append([]) - for column in range(GSIZE): - fieldbit = Field(row, column) + for column in range(D.GSIZE): + fieldbit = F.Field(row, column, mapschema[column][row]) field[row].append(fieldbit) -tractor = Tractor(field[0][0]) -plant = Plant(field[1][1], "wheat") +tractor = T.Tractor(field[0][0]) + +mapschema = maps.createPlants() + +plants = [] + +for row in range(D.GSIZE): + plants.append([]) + for column in range(D.GSIZE): + if mapschema[column][row] != 0: + plantbit = P.Plant(field[row][column], mapschema[column][row]) + plants[row].append(plantbit) -print(tractor.rect) -print(field[0][0].rect) +path = [] # Variable to keep the main loop running RUNNING = True -ticker = 0 +TICKER = 0 clock = pygame.time.Clock() + # Main loop while RUNNING: @@ -68,37 +84,62 @@ while RUNNING: elif event.type == QUIT: RUNNING = False + processor = N.Node(field, tractor.position, tractor.direction) + + if path is None or len(path) == 0: + path = processor.findPathToPlant() + + if path is not None: + if path[0] == "move": + tractor.move() + path.pop(0) + elif path[0] =="left": + tractor.rotate_left() + path.pop(0) + elif path[0] == "right": + tractor.rotate_right() + path.pop(0) + elif path[0] == "hydrate": + tractor.hydrate(field) + path.pop(0) + else: + path.pop(0) + # Get all keys pressed at a time pressed_keys = pygame.key.get_pressed() - - # Update the state of tractor - tractor.update(pressed_keys) - tractor.hydrate(field, pressed_keys) + + if pressed_keys[K_UP]: + tractor.move() + elif pressed_keys[K_LEFT]: + tractor.rotate_left() + elif pressed_keys[K_RIGHT]: + tractor.rotate_right() # Set the screen background - screen.fill(DBROWN) + screen.fill(C.DBROWN) # Draw the field - for row in range(GSIZE): - for column in range(GSIZE): + for row in range(D.GSIZE): + for column in range(D.GSIZE): screen.blit(field[row][column].surf, field[row][column].rect) screen.blit(tractor.surf, tractor.rect) # Draw the player on the screen - screen.blit(plant.surf, plant.rect) + for row in plants: + for plant in row: + if TICKER % 10 == 0: + plant.grow() + screen.blit(plant.surf, plant.rect) - if ticker == 0: - for row in range(GSIZE): - for column in range(GSIZE): + if TICKER == 0: + for row in range(D.GSIZE): + for column in range(D.GSIZE): field[row][column].dehydrate() - plant.grow() - - ticker = (ticker + 1)%4 + TICKER = (TICKER + 1)%100 # Update the screen pygame.display.flip() - - # Ensure program maintains a rate of 15 frames per second - clock.tick(4) + + clock.tick(8)