Game
This commit is contained in:
parent
15757a16a1
commit
5289c48fe2
5
colors.py
Normal file
5
colors.py
Normal file
@ -0,0 +1,5 @@
|
||||
gray = (80, 80, 80)
|
||||
white = (255, 255, 255)
|
||||
blue = (0, 0, 255)
|
||||
green = (0, 255, 0)
|
||||
red = (255, 0, 0)
|
23
house.py
Normal file
23
house.py
Normal file
@ -0,0 +1,23 @@
|
||||
class House:
|
||||
def __init__(self, position, grid_size):
|
||||
self.pos = position
|
||||
self.size = grid_size
|
||||
|
||||
|
||||
def is_house(position, houses):
|
||||
for house in houses:
|
||||
if house.pos == position:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def create_houses(grid_size):
|
||||
houses = []
|
||||
with open(file='houses.txt', mode='r', encoding='utf-8') as file:
|
||||
for l_index, line in enumerate(file):
|
||||
for h_index, if_house in enumerate(line):
|
||||
if if_house == '1':
|
||||
house = House(
|
||||
[h_index*grid_size, l_index*grid_size], grid_size)
|
||||
houses.append(house)
|
||||
return houses
|
16
houses.txt
Normal file
16
houses.txt
Normal file
@ -0,0 +1,16 @@
|
||||
11111111111111111111111111111111
|
||||
10000000000000000000000000000001
|
||||
10000000000000000000000000000001
|
||||
10011111110001000010001111111001
|
||||
10000000000001000010000000000001
|
||||
10000000000001000010000000000001
|
||||
11111111111111000011111111111111
|
||||
10000000000000000000000000000001
|
||||
10000000000000000000000000000001
|
||||
11111111111111000011111111111111
|
||||
10000000000001000010000000000001
|
||||
10000000000001000010000000000001
|
||||
10011111111001000010011111111001
|
||||
10000000000000000000000000000001
|
||||
10000000000000000000000000000001
|
||||
11111111111111111111111111111111
|
BIN
img/house.png
Normal file
BIN
img/house.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
img/trash.png
Normal file
BIN
img/trash.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
img/truck.png
Normal file
BIN
img/truck.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
81
main.py
Normal file
81
main.py
Normal file
@ -0,0 +1,81 @@
|
||||
import pygame
|
||||
|
||||
from text import msg_display
|
||||
from colors import gray
|
||||
from house import create_houses
|
||||
from truck import Truck
|
||||
from trash import Trash
|
||||
|
||||
from bfs import bfs
|
||||
|
||||
|
||||
pygame.init()
|
||||
|
||||
|
||||
def update_images(gameDisplay, truck, trash, houses, score):
|
||||
gameDisplay.fill(gray)
|
||||
for house in houses:
|
||||
gameDisplay.blit(pygame.image.load('./img/house.png'), house.pos)
|
||||
gameDisplay.blit(pygame.image.load('./img/trash.png'), trash.pos)
|
||||
gameDisplay.blit(truck.image, truck.pos)
|
||||
msg_display(gameDisplay, f'Trash collected: {score}')
|
||||
pygame.display.update()
|
||||
|
||||
|
||||
def game_loop():
|
||||
game_w = 1280 # 32
|
||||
game_h = 640 # 16
|
||||
grid_size = 40
|
||||
|
||||
gameDisplay = pygame.display.set_mode((game_w, game_h))
|
||||
pygame.display.set_caption('Garbage truck')
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
gameExit = False
|
||||
|
||||
score = 0
|
||||
truck = Truck(game_w, game_h, grid_size)
|
||||
trash = Trash(game_w, game_h, grid_size)
|
||||
houses = create_houses(grid_size)
|
||||
|
||||
trash.new_pos(truck.pos, houses)
|
||||
|
||||
while not gameExit:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
pygame.quit()
|
||||
quit()
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_ESCAPE:
|
||||
pygame.quit()
|
||||
quit()
|
||||
if (event.key == pygame.K_b):
|
||||
bfs()
|
||||
break
|
||||
if (event.key == pygame.K_w or event.key == pygame.K_UP):
|
||||
if truck.test_crash(houses):
|
||||
break
|
||||
truck.move()
|
||||
print('↑')
|
||||
if truck.pos == trash.pos:
|
||||
score += 1
|
||||
trash.new_pos(truck.pos, houses)
|
||||
break
|
||||
elif (event.key == pygame.K_a or event.key == pygame.K_LEFT):
|
||||
print('←')
|
||||
truck.rotate(-1)
|
||||
truck.rotate_image(90)
|
||||
break
|
||||
elif (event.key == pygame.K_d or event.key == pygame.K_RIGHT):
|
||||
print('→')
|
||||
truck.rotate(1)
|
||||
truck.rotate_image(-90)
|
||||
break
|
||||
|
||||
update_images(gameDisplay, truck, trash, houses, score)
|
||||
clock.tick(60)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
game_loop()
|
||||
pygame.quit()
|
16
text.py
Normal file
16
text.py
Normal file
@ -0,0 +1,16 @@
|
||||
from colors import white
|
||||
import pygame
|
||||
|
||||
|
||||
def text_objects(text, font):
|
||||
textSurface = font.render(text, True, white)
|
||||
return textSurface, textSurface.get_rect()
|
||||
|
||||
|
||||
def msg_display(gameDisplay, msg):
|
||||
msg_size = 35
|
||||
pos = (1100, 16)
|
||||
largeText = pygame.font.Font('freesansbold.ttf', msg_size)
|
||||
TestSurf, TextRect = text_objects(msg, largeText)
|
||||
TextRect.center = (pos)
|
||||
gameDisplay.blit(TestSurf, TextRect)
|
16
trash.py
Normal file
16
trash.py
Normal file
@ -0,0 +1,16 @@
|
||||
import random
|
||||
from house import is_house
|
||||
|
||||
|
||||
class Trash:
|
||||
def __init__(self, grid_w, grid_h, grid_size):
|
||||
self.grid_w = grid_w
|
||||
self.grid_h = grid_h
|
||||
self.size = grid_size
|
||||
|
||||
def new_pos(self, truck_pos, houses):
|
||||
while True:
|
||||
self.pos = [random.randrange(0, self.grid_w, self.size),
|
||||
random.randrange(0, self.grid_h, self.size)]
|
||||
if self.pos != truck_pos and not is_house(self.pos, houses):
|
||||
break
|
32
truck.py
Normal file
32
truck.py
Normal file
@ -0,0 +1,32 @@
|
||||
import pygame
|
||||
from house import is_house
|
||||
|
||||
|
||||
class Truck:
|
||||
def __init__(self, grid_w, grid_h, grid_size):
|
||||
self.grid_w = grid_w
|
||||
self.grid_h = grid_h
|
||||
self.size = grid_size
|
||||
self.pos = [self.grid_w // 2, self.grid_h // 2]
|
||||
self.direction = [1, 0]
|
||||
self.dir_control = 0
|
||||
self.image = pygame.image.load('./img/truck.png')
|
||||
|
||||
def move(self):
|
||||
self.pos[0] += self.direction[0] * self.size
|
||||
self.pos[1] += self.direction[1] * self.size
|
||||
|
||||
def test_crash(self, houses):
|
||||
new_pos = []
|
||||
new_pos.append(self.pos[0] + (self.direction[0]*self.size))
|
||||
new_pos.append(self.pos[1] + (self.direction[1]*self.size))
|
||||
return is_house(new_pos, houses)
|
||||
|
||||
def rotate(self, direction):
|
||||
all_dir = [[1, 0], [0, 1], [-1, 0], [0, -1]]
|
||||
self.dir_control = (direction + self.dir_control) % 4
|
||||
self.direction = all_dir[self.dir_control]
|
||||
|
||||
def rotate_image(self, angle):
|
||||
rotated_image = pygame.transform.rotate(self.image, angle)
|
||||
self.image = rotated_image
|
Loading…
Reference in New Issue
Block a user