GenericAI_Sweeper/sprites.py
2021-04-14 15:30:36 +02:00

275 lines
10 KiB
Python

import pygame as pg
import enum
import ctypes
import ast
from settings import *
from maze import *
class Player(pg.sprite.Sprite):
def __init__(self, game, x, y, direction = 'Right'):
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
#self.image = pg.Surface((TILESIZE, TILESIZE))
self.image = pg.image.load('images/robot.bmp')
self.baseImage = pg.image.load('images/robot.bmp')
#self.image.fill(YELLOW)
self.image = pg.transform.scale(self.image, (TILESIZE, TILESIZE))
self.baseImage = pg.transform.scale(self.image, (TILESIZE, TILESIZE))
self.rect = self.image.get_rect()
self.x = x
self.y = y
self.direction = direction
self.maze = Maze()
self.moves = ''
def set_direction(self, direction):
self.direction = direction
def move(self, dx=0, dy=0, move = ''):
if move == Moves.Right.name:
if self.direction == Direction.Right.name:
self.direction = Direction.Down.name
elif self.direction == Direction.Down.name:
self.direction = Direction.Left.name
elif self.direction == Direction.Left.name:
self.direction = Direction.Up.name
elif self.direction == Direction.Up.name:
self.direction = Direction.Right.name
elif move == Moves.Left.name:
if self.direction == Direction.Right.name:
self.direction = Direction.Up.name
elif self.direction == Direction.Down.name:
self.direction = Direction.Right.name
elif self.direction == Direction.Left.name:
self.direction = Direction.Down.name
elif self.direction == Direction.Up.name:
self.direction = Direction.Left.name
elif move == Moves.Forward.name:
if self.direction == Direction.Right.name:
if self.check_border(1):
if not self.collide_with_walls(1):
if self.collide_with_mines(1):
#ctypes.windll.user32.MessageBoxW(0, "Mine Ahead!", "Warning", 1)
print("Mine Ahead!")
self.x += 1
else:
self.x += 1
if self.direction == Direction.Up.name:
if self.check_border(0, -1):
if not self.collide_with_walls(0, -1):
if self.collide_with_mines(0, -1):
#ctypes.windll.user32.MessageBoxW(0, "Mine Ahead!", "Warning", 1)
print("Mine Ahead!")
self.y += -1
else:
self.y += -1
if self.direction == Direction.Down.name:
if self.check_border(0, 1):
if not self.collide_with_walls(0, 1):
if self.collide_with_mines(0, 1):
#ctypes.windll.user32.MessageBoxW(0, "Mine Ahead!", "Warning", 1)
print("Mine Ahead!")
self.y += 1
else:
self.y += 1
if self.direction == Direction.Left.name:
if self.check_border(-1):
if not self.collide_with_walls(-1):
if self.collide_with_mines(-1):
#ctypes.windll.user32.MessageBoxW(0, "Mine Ahead!", "Warning", 1)
print("Mine Ahead!")
self.x += -1
else:
self.x += -1
print("I move: " + str(self.direction))
print("My direction is: " + str(self.direction))
def check_border(self, dx=0, dy=0):
if (self.x + dx) < 0 or (self.y + dy) < 0 or (self.x + dx) >= MAP_SIZE or (self.y + dy) >= MAP_SIZE :
return False
else:
return True
def collide_with_mines(self, dx=0, dy=0):
for mine in self.game.mines:
if mine.x == self.x + dx and mine.y == self.y + dy:
return True
return False
def collide_with_walls(self, dx=0, dy=0):
for wall in self.game.walls:
if wall.x == self.x + dx and wall.y == self.y + dy:
return True
return False
"""
right = 1
left = -1
if self.self.moves[n+1] != 'R':
if self.moves[n+1] == 'U':
module.insert(n, 'Turn Up')
if self.moves[n+1] == 'L':
module.insert(n, 'Turn Left')
if self.moves[n+1] == 'D':
module.insert(n, 'Turn Down')
"""
def parse_maze_moves(self):
self.moves = [char for char in self.maze.moves]
if self.moves[0] != 'R':
if self.moves[0] == 'D':
self.moves.insert(0, 'Turn Down')
if self.moves[0] == 'U':
self.moves.insert(0, 'Turn Up')
if self.moves[0] == 'L':
self.moves.insert(0, 'Turn Left')
for n, i in enumerate(self.moves):
if i == 'R':
self.moves[n] = 'Right'
if n != len(self.moves)-1:
if i != self.moves[n+1]:
if self.moves[n+1] == 'D':
self.moves.insert(n+1, 'Turn Down')
if self.moves[n+1] == 'U':
self.moves.insert(n+1, 'Turn Up')
if self.moves[n+1] == 'L':
self.moves.insert(n+1, 'Turn Left')
else:
self.move(dx=-1, direction='Right')
if i == 'L':
self.moves[n] = 'Left'
if n != len(self.moves)-1:
if i != self.moves[n+1]:
if self.moves[n+1] == 'D':
self.moves.insert(n+1, 'Turn Down')
if self.moves[n+1] == 'U':
self.moves.insert(n+1, 'Turn Up')
if self.moves[n+1] == 'R':
self.moves.insert(n+1, 'Turn Right')
if i == 'D':
self.moves[n] = 'Down'
if n != len(self.moves)-1:
if i != self.moves[n+1]:
if self.moves[n+1] == 'R':
self.moves.insert(n+1, 'Turn Right')
if self.moves[n+1] == 'U':
self.moves.insert(n+1, 'Turn Up')
if self.moves[n+1] == 'L':
self.moves.insert(n+1, 'Turn Left')
if i == 'U':
self.moves[n] = 'Up'
if n != len(self.moves)-1:
if i != self.moves[n+1]:
if self.moves[n+1] == 'D':
self.moves.insert(n+1, 'Turn Down')
if self.moves[n+1] == 'R':
self.moves.insert(n+1, 'Turn Right')
if self.moves[n+1] == 'L':
self.moves.insert(n+1, 'Turn Left')
print(self.moves)
def update(self):
#sleep(0.25)
self.rect.x = self.x * TILESIZE
self.rect.y = self.y * TILESIZE
class Direction(enum.Enum):
Up = 1;
Left = 2;
Down = 3;
Right = 4;
class Moves(enum.Enum):
Left = 1
Right = 2
Forward = 3
class Mine(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites, game.mines
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
#self.image = pg.Surface((TILESIZE, TILESIZE))
self.image = pg.image.load('images/mine.bmp')
#self.image.fill(YELLOW)
self.image = pg.transform.scale(self.image, (TILESIZE, TILESIZE))
self.rect = self.image.get_rect()
self.x = x
self.y = y
def update(self):
self.rect.x = self.x * TILESIZE
self.rect.y = self.y * TILESIZE
class Bomb(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites, game.mines
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
#self.image = pg.Surface((TILESIZE, TILESIZE))
self.image = pg.image.load('images/bomb.bmp')
#self.image.fill(YELLOW)
self.image = pg.transform.scale(self.image, (TILESIZE, TILESIZE))
self.rect = self.image.get_rect()
self.x = x
self.y = y
def update(self):
self.rect.x = self.x * TILESIZE
self.rect.y = self.y * TILESIZE
class Grenade(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites, game.mines
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
#self.image = pg.Surface((TILESIZE, TILESIZE))
self.image = pg.image.load('images/grenade.bmp')
#self.image.fill(YELLOW)
self.image = pg.transform.scale(self.image, (TILESIZE, TILESIZE))
self.rect = self.image.get_rect()
self.x = x
self.y = y
def update(self):
self.rect.x = self.x * TILESIZE
self.rect.y = self.y * TILESIZE
class Wall(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites, game.walls
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
#self.image = pg.Surface((TILESIZE, TILESIZE))
self.image = pg.image.load('images/wall.bmp')
#self.image.fill(YELLOW)
self.image = pg.transform.scale(self.image, (TILESIZE, TILESIZE))
self.rect = self.image.get_rect()
self.x = x
self.y = y
def update(self):
self.rect.x = self.x * TILESIZE
self.rect.y = self.y * TILESIZE