Add pulling

This commit is contained in:
PAlexanderFranklin 2023-05-17 21:34:16 -07:00
parent a58db98866
commit c80f919382
4 changed files with 38 additions and 9 deletions

View File

@ -2,6 +2,7 @@ import pygame
import uuid import uuid
from globals import * from globals import *
from enemies import Enemy
class Block: class Block:
def __init__(self, id, x, y): def __init__(self, id, x, y):
@ -16,7 +17,19 @@ class Block:
raise Exception("Cannot push off edge!") raise Exception("Cannot push off edge!")
if gameMap[self.x + x][self.y + y]: if gameMap[self.x + x][self.y + y]:
gameMap[self.x + x][self.y + y].pushed(x, y, self, pusher) gameMap[self.x + x][self.y + y].pushed(x, y, self, pusher)
gameMap[self.x][self.y] = 0 gameMap[self.x][self.y] = False
self.x += x
self.sprite.x = (self.x*tile)+2
self.y += y
self.sprite.y = (self.y*tile)+2
gameMap[self.x][self.y] = self
def pulled(self, x, y):
for i in range(-1,2):
for j in range(-1,2):
if isinstance(gameMap[self.x + i][self.y + j], Enemy):
raise Exception("Cannot pull a block that is touching an enemy")
gameMap[self.x][self.y] = False
self.x += x self.x += x
self.sprite.x = (self.x*tile)+2 self.sprite.x = (self.x*tile)+2
self.y += y self.y += y

View File

@ -3,8 +3,8 @@ import uuid
import random import random
from globals import * from globals import *
from player import * from player import Player
from blocks import * from blocks import Block
def findClosestPlayer(x, y): def findClosestPlayer(x, y):
closestPlayerPosition = {"difference": (1,1), "distance": 9999} closestPlayerPosition = {"difference": (1,1), "distance": 9999}
@ -44,7 +44,7 @@ class Enemy:
gameMap[self.x + x][self.y + y].die() gameMap[self.x + x][self.y + y].die()
else: else:
raise Exception("Path is blocked.") raise Exception("Path is blocked.")
gameMap[self.x][self.y] = 0 gameMap[self.x][self.y] = False
self.x += x self.x += x
self.y += y self.y += y
gameMap[self.x][self.y] = self gameMap[self.x][self.y] = self

View File

@ -37,8 +37,8 @@ def generateMap():
for id, player in players.items(): for id, player in players.items():
maxTries = 5 maxTries = 5
for i in range(maxTries): for i in range(maxTries + 1):
if i == maxTries - 1: if i == maxTries:
raise Exception("No spots found for player!") raise Exception("No spots found for player!")
try: try:
spot = [random.randint(0, tileCountx - 1), random.randint(0, tileCounty - 1)] spot = [random.randint(0, tileCountx - 1), random.randint(0, tileCounty - 1)]

View File

@ -1,6 +1,7 @@
import uuid import uuid
from globals import * from globals import *
from blocks import Block
class Player: class Player:
def __init__(self, id, x, y, sprite, keys): def __init__(self, id, x, y, sprite, keys):
@ -8,6 +9,7 @@ class Player:
self.x = x self.x = x
self.y = y self.y = y
self.sprite = sprite self.sprite = sprite
self.pull = False
commands = { commands = {
"n": lambda: self.move(0,-1), "n": lambda: self.move(0,-1),
@ -18,14 +20,20 @@ class Player:
"sw": lambda: self.move(-1,1), "sw": lambda: self.move(-1,1),
"w": lambda: self.move(-1,0), "w": lambda: self.move(-1,0),
"nw": lambda: self.move(-1,-1), "nw": lambda: self.move(-1,-1),
"p": lambda: print("pull"),
} }
self.commands = [] self.commands = []
for key in keys: for key in keys:
if key[1] == "p":
self.pullKey = key[0]
else:
self.commands.append([key[0], commands[key[1]], 0, 0]) self.commands.append([key[0], commands[key[1]], 0, 0])
def useKeys(self, keys): def useKeys(self, keys):
try: try:
if keys[self.pullKey]:
self.pull = True
else:
self.pull = False
for command in self.commands: for command in self.commands:
if keys[command[0]]: if keys[command[0]]:
if command[2] == 0 or (command[2] > 10 and command[3] > 2): if command[2] == 0 or (command[2] > 10 and command[3] > 2):
@ -43,12 +51,20 @@ class Player:
try: try:
if self.x + x > tileCountx - 1 or self.y + y > tileCounty - 1 or self.x + x < 0 or self.y + y < 0: if self.x + x > tileCountx - 1 or self.y + y > tileCounty - 1 or self.x + x < 0 or self.y + y < 0:
raise Exception("Cannot move off edge!") raise Exception("Cannot move off edge!")
pulling = self.pull and isinstance(gameMap[self.x - x][self.y - y], Block)
if gameMap[self.x + x][self.y + y]: if gameMap[self.x + x][self.y + y]:
if pulling:
raise Exception("Cannot push and pull at the same time")
gameMap[self.x + x][self.y + y].pushed(x, y, self, self) gameMap[self.x + x][self.y + y].pushed(x, y, self, self)
gameMap[self.x][self.y] = 0 gameMap[self.x][self.y] = False
self.x += x self.x += x
self.y += y self.y += y
gameMap[self.x][self.y] = self gameMap[self.x][self.y] = self
try:
if pulling:
gameMap[self.x - 2*x][self.y - 2*y].pulled(x, y)
except:
pass
except Exception as error: except Exception as error:
raise error raise error