ruch_traktor_bfs #12

Merged
s481834 merged 2 commits from ruch_traktor_bfs into BFS 2024-04-12 20:44:17 +02:00
4 changed files with 67 additions and 17 deletions

View File

@ -1,3 +1,4 @@
import time
import pygame import pygame
import random import random
import displayControler as dCon import displayControler as dCon
@ -5,36 +6,85 @@ import Slot
import Osprzet import Osprzet
class Tractor: class Tractor:
DIRECTION_NORTH = 'N'
DIRECTION_SOUTH = 'S'
DIRECTION_WEST = 'W'
DIRECTION_EAST = 'E'
def __init__(self,slot,screen, osprzet): def __init__(self,slot,screen, osprzet):
self.tractor_image = pygame.image.load('images/traktor.png') self.tractor_images = {
self.tractor_image = pygame.transform.scale(self.tractor_image, (dCon.CUBE_SIZE, dCon.CUBE_SIZE)) Tractor.DIRECTION_NORTH: pygame.transform.scale(pygame.image.load('images/traktorN.png'),
(dCon.CUBE_SIZE, dCon.CUBE_SIZE)),
Tractor.DIRECTION_SOUTH: pygame.transform.scale(pygame.image.load('images/traktorS.png'),
(dCon.CUBE_SIZE, dCon.CUBE_SIZE)),
Tractor.DIRECTION_WEST: pygame.transform.scale(pygame.image.load('images/traktorW.png'),
(dCon.CUBE_SIZE, dCon.CUBE_SIZE)),
Tractor.DIRECTION_EAST: pygame.transform.scale(pygame.image.load('images/traktor.png'),
(dCon.CUBE_SIZE, dCon.CUBE_SIZE))
}
self.direction = Tractor.DIRECTION_EAST # początkowy kierunek wschód
self.current_tractor_image = self.tractor_images[self.direction]
self.screen=screen self.screen=screen
self.slot=slot self.slot=slot
self.osprzet = osprzet self.osprzet = osprzet
def draw_tractor(self): def draw_tractor(self):
self.screen.blit(self.tractor_image, (self.slot.x_axis*dCon.CUBE_SIZE,self.slot.y_axis*dCon.CUBE_SIZE)) self.screen.blit(self.current_tractor_image, (self.slot.x_axis * dCon.CUBE_SIZE, self.slot.y_axis * dCon.CUBE_SIZE))
pygame.display.update() pygame.display.update()
def move_tractor(self, pole, direction): def turn_left(self):
next_slot = None # zmiana kierunku w lewo
if direction == "right" and pole.is_valid_move((self.slot.x_axis + 1, self.slot.y_axis)): direction_map = {
next_slot = pole.get_neighbor(self.slot, 1, 0) Tractor.DIRECTION_EAST: Tractor.DIRECTION_NORTH,
elif direction == "left" and pole.is_valid_move((self.slot.x_axis - 1, self.slot.y_axis)): Tractor.DIRECTION_NORTH: Tractor.DIRECTION_WEST,
next_slot = pole.get_neighbor(self.slot, -1, 0) Tractor.DIRECTION_WEST: Tractor.DIRECTION_SOUTH,
elif direction == "down" and pole.is_valid_move((self.slot.x_axis, self.slot.y_axis + 1)): Tractor.DIRECTION_SOUTH: Tractor.DIRECTION_EAST
next_slot = pole.get_neighbor(self.slot, 0, 1) }
elif direction == "up" and pole.is_valid_move((self.slot.x_axis, self.slot.y_axis - 1)): self.direction = direction_map[self.direction]
next_slot = pole.get_neighbor(self.slot, 0, -1) self.current_tractor_image = self.tractor_images[self.direction]
self.draw_tractor()
if next_slot: def turn_right(self):
# zmiana kierunku w prawo
direction_map = {
Tractor.DIRECTION_EAST: Tractor.DIRECTION_SOUTH,
Tractor.DIRECTION_SOUTH: Tractor.DIRECTION_WEST,
Tractor.DIRECTION_WEST: Tractor.DIRECTION_NORTH,
Tractor.DIRECTION_NORTH: Tractor.DIRECTION_EAST
}
self.direction = direction_map[self.direction]
self.current_tractor_image = self.tractor_images[self.direction]
self.draw_tractor()
def move_forward(self, pole):
next_slot_coordinates = None
if self.direction == Tractor.DIRECTION_EAST:
next_slot_coordinates = (self.slot.x_axis + 1, self.slot.y_axis)
self.current_tractor_image = self.tractor_images[self.direction]
elif self.direction == Tractor.DIRECTION_WEST:
next_slot_coordinates = (self.slot.x_axis - 1, self.slot.y_axis)
self.current_tractor_image = self.tractor_images[self.direction]
elif self.direction == Tractor.DIRECTION_SOUTH:
next_slot_coordinates = (self.slot.x_axis, self.slot.y_axis + 1)
self.current_tractor_image = self.tractor_images[self.direction]
elif self.direction == Tractor.DIRECTION_NORTH:
next_slot_coordinates = (self.slot.x_axis, self.slot.y_axis - 1)
self.current_tractor_image = self.tractor_images[self.direction]
# sprawdzenie czy następny slot jest dobry
if next_slot_coordinates and pole.is_valid_move(next_slot_coordinates):
next_slot = pole.get_slot_from_cord(next_slot_coordinates)
self.slot.redraw_image()
self.slot = next_slot self.slot = next_slot
self.draw_tractor() self.draw_tractor()
def random_move(self, pole): def random_move(self, pole):
directions = ["right", "left", "down", "up"] # losowanie skrętu
direction = random.choice(directions) turn_direction = random.choice([self.turn_left, self.turn_right])
self.move_tractor(pole, direction) turn_direction()
time.sleep(0.5)
# wykonanie ruchu do przodu z uwzględnieniem aktualnej orientacji
self.move_forward(pole)
#to tak zrobiłam już na później, może się przyda #to tak zrobiłam już na później, może się przyda

BIN
images/traktorN.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
images/traktorS.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
images/traktorW.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB