diff --git a/wozek.py b/wozek.py deleted file mode 100644 index c7a13d1..0000000 --- a/wozek.py +++ /dev/null @@ -1,386 +0,0 @@ -import pygame -import sys -import random -import os -import time -from collections import deque -import heapq -from classes import * - -class Node(): - def __init__(self,position,rotation,action,parent,cost): - self.position=position - self.rotation=rotation - self.action=action - self.parent=parent - self.cost=cost - - def __lt__(self, other): - return (self.cost < other.cost) - def __le__(self, other): - return (self.cost <= other.cost) - -# Initialize Pygame -pygame.init() - -# Constants -TILE_SIZE = 96 # Size of a square tile in pixels -GRID_WIDTH, GRID_HEIGHT = 16,8 # Grid dimensions -SCREEN_WIDTH, SCREEN_HEIGHT = GRID_WIDTH * TILE_SIZE, GRID_HEIGHT * TILE_SIZE -FPS = 60 # Frames per second - -# Setup display -screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) -pygame.display.set_caption('Forklift Game') - -# Clock -clock = pygame.time.Clock() - -# Function to load and scale images -def load_image(name, scale=None): - """Loads an image and optionally scales it.""" - image = pygame.image.load(name).convert_alpha() - if scale: - image = pygame.transform.scale(image, scale) - return image - -# Placeholder for images (will be loaded after video mode set) -forklift_image_full = None -freight_images_full = None - -# Game variables -forklift_pos = [7, 0] -rotation='E'# Adjusted starting position of the forklift -carrying_freight = False -carried_freight = None -freight_positions = {} # Dictionary to keep track of freight positions and types - - -tile_cost={} -tile_cost[(8,0)]=10 -tile_cost[(7,1)]=10 -tile_cost[(6,1)]=3 -tile_cost[(5,0)]=10 - - -# Load images -def load_images(): - global forklift_image_full, freight_images_full - global rotation - if rotation=='E': - forklift_image_full = load_image('forkliftE.png', (TILE_SIZE, TILE_SIZE)) - elif rotation=='W': - forklift_image_full = load_image('forkliftW.png', (TILE_SIZE, TILE_SIZE)) - elif rotation=='N': - forklift_image_full = load_image('forkliftN.png', (TILE_SIZE, TILE_SIZE)) - elif rotation=='S': - forklift_image_full = load_image('forkliftS.png', (TILE_SIZE, TILE_SIZE)) - #forklift_image_full = load_image('forklift.png', (TILE_SIZE, TILE_SIZE)) - freight_images_full = { - 'clothes': load_image('clothes.png', (TILE_SIZE, TILE_SIZE)), - 'fruit': load_image('fruit.png', (TILE_SIZE, TILE_SIZE)), - 'nuclear_waste': load_image('nuclear_waste.png', (TILE_SIZE, TILE_SIZE)), - 'car_parts': load_image('car_parts.png', (TILE_SIZE, TILE_SIZE)), - } - -# Initialize or reset game elements -def init_game(): - freight_positions.clear() - load_images() # Ensure images are loaded after video mode set - reset_truck_bed_freight() - -# Reset freight on the truck bed -def reset_truck_bed_freight(): - types = list(freight_images_full.keys()) - for x in range(12, 16): - freight_positions[(x, 0)] = random.choice(types) - -# Drawing functions -def draw_board(): - screen.fill((255, 255, 255)) - for x in range(GRID_WIDTH): - for y in range(GRID_HEIGHT): - pygame.draw.rect(screen, (0, 0, 0), pygame.Rect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE), 1) - -def draw_truck_bed_and_racks(): - for x in range(12, 16): - pygame.draw.rect(screen, (0, 0, 255), (x * TILE_SIZE, 0, TILE_SIZE, TILE_SIZE)) - for y in range(5, 8): - for x in range(GRID_WIDTH): - pygame.draw.rect(screen, (165, 42, 42), (x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE)) - for key in tile_cost: - x=key[0] - y=key[1] - pygame.draw.rect(screen, (10*tile_cost[key], 130, 100), (x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE)) - - -def draw_forklift_and_freight(): - x, y = forklift_pos - if carrying_freight: - # Draw smaller images when carrying freight - small_size = (TILE_SIZE // 2, TILE_SIZE // 2) - forklift_small = pygame.transform.scale(forklift_image_full, small_size) - freight_small = pygame.transform.scale(freight_images_full[carried_freight], small_size) - screen.blit(forklift_small, (x * TILE_SIZE, y * TILE_SIZE + TILE_SIZE // 2)) - screen.blit(freight_small, (x * TILE_SIZE + TILE_SIZE // 2, y * TILE_SIZE)) - else: - screen.blit(forklift_image_full, (x * TILE_SIZE, y * TILE_SIZE)) - -def draw_freight(): - for (x, y), freight_type in freight_positions.items(): - screen.blit(freight_images_full[freight_type], (x * TILE_SIZE, y * TILE_SIZE)) - -# Game mechanics -def move_forklift(): - global forklift_pos - if(rotation=='E'): - new_pos=[forklift_pos[0]+1,forklift_pos[1]] - elif(rotation=='W'): - new_pos=[forklift_pos[0]-1,forklift_pos[1]] - elif(rotation=='N'): - new_pos=[forklift_pos[0],forklift_pos[1]+1] - elif (rotation == 'S'): - new_pos = [forklift_pos[0], forklift_pos[1] - 1] - #new_pos = [forklift_pos[0] + dx, forklift_pos[1] + dy] - if 0 <= new_pos[0] < GRID_WIDTH and 0 <= new_pos[1] < GRID_HEIGHT: - forklift_pos = new_pos -def rotate_forklift(x): - global rotation - rot=['N','E','S','W'] - rots=rot.index(rotation) - if x=='R': - if rots==0: - x=rot[3] - else: - x=rot[rots-1] - - elif x=='L': - if rots==3: - x=rot[0] - else: - x=rot[rots+1] - rotation=x -def handle_freight(): - global carrying_freight, carried_freight, freight_positions - pos_tuple = tuple(forklift_pos) - if carrying_freight: - if pos_tuple not in freight_positions: - freight_positions[pos_tuple] = carried_freight - carrying_freight = False - carried_freight = None - else: - if pos_tuple in freight_positions: - carried_freight = freight_positions.pop(pos_tuple) - carrying_freight = True - -#searching for successors -def succ(current_node): - current_rotation=current_node.rotation - x=current_node.position[0] - y=current_node.position[1] - current_cost=tile_cost.get((x,y),1) - successors=[] - if(current_rotation=="N"): - if(y>0): - pos=[] - pos.append(x) - - pos.append(y-1) - action='FW' - successor=Node(pos,current_rotation,action,current_node,current_cost) - successors.append(successor) - if(x>0): - pos = [] - pos.append(x) - pos.append(y) - new_rotation='W' - action='L' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - if(x<15): - pos = [] - pos.append(x) - pos.append(y) - new_rotation='E' - action='R' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - - - elif (current_rotation == "S"): - if (y < 7): - pos = [] - pos.append(x) - pos.append(y + 1) - action = 'FW' - successor = Node(pos, current_rotation,action,current_node,current_cost) - successors.append(successor) - if (x <15): - pos = [] - pos.append(x) - pos.append(y) - new_rotation = 'E' - action='L' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - if (x > 0): - pos = [] - pos.append(x) - pos.append(y) - new_rotation = 'W' - action = 'R' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - - elif (current_rotation == "E"): - if (x <15): - pos = [] - pos.append(x+1) - pos.append(y) - action = 'FW' - successor = Node(pos, current_rotation,action,current_node,current_cost) - successors.append(successor) - if (y <7): - pos = [] - pos.append(x) - pos.append(y) - new_rotation = 'S' - action='R' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - if (y >0): - pos = [] - pos.append(x) - pos.append(y) - new_rotation = 'N' - action = 'L' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - - elif (current_rotation == "W"): - if (x > 0): - pos = [] - pos.append(x-1) - pos.append(y) - action = 'FW' - successor = Node(pos, current_rotation,action,current_node,current_cost) - successors.append(successor) - if (y >0): - pos = [] - pos.append(x) - pos.append(y) - new_rotation = 'N' - action='R' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - if (y <7): - pos = [] - pos.append(x) - pos.append(y) - new_rotation = 'S' - action = 'L' - successor = Node(pos, new_rotation,action,current_node,current_cost) - successors.append(successor) - - return successors - -def distance(current_node,target): - return abs(current_node.position[0]-target.position[0])+abs(current_node.position[1]-target.position[1]) - -#bfs -def bfs(isstate,final): - fringe=deque() - fringe.append(isstate) - path=[] - explored=[] - while(True): - if(len(fringe)==0): - return False - node=fringe.popleft() - if(node.position[0]==final.position[0] and node.position[1]==final.position[1]): - while(node.parent!=None): - path.append(node) - node=node.parent - return path - explored.append(node) - successors=succ(node) - for successor in successors: - if (successor not in fringe and successor not in explored): - fringe.append(successor) -def astar(isstate,final): - fringe=[] - heapq.heappush(fringe,(0,isstate)) - path = [] - explored = [] - total_cost={isstate:0} - while(True): - if (len(fringe) == 0): - return False - a,node =heapq.heappop(fringe) - if (node.position[0] == final.position[0] and node.position[1] == final.position[1]): - while (node.parent != None): - path.append(node) - node = node.parent - return path - explored.append(node) - successors = succ(node) - for successor in successors: - new_cost=total_cost[node]+successor.cost - if (successor not in explored or new_cost