88 lines
2.4 KiB
Python
88 lines
2.4 KiB
Python
import math
|
|
import random
|
|
import time
|
|
|
|
class Kart:
|
|
|
|
def __init__(self, name, color, acceleration, vMax, handling):
|
|
self.vMax = vMax
|
|
self.name = name
|
|
self.color = color
|
|
self.speed = 0
|
|
self.rotation = 0
|
|
self.handling = handling
|
|
self.position = [0, 0]
|
|
self.acceleration = acceleration
|
|
self.lastRam = 0
|
|
self.knockback = [0, 0]
|
|
|
|
def acc(self, brk): #brk is true or false
|
|
if brk == False:
|
|
if self.speed < self.vMax:
|
|
self.speed += self.acceleration
|
|
elif brk:
|
|
if self.speed > -(self.vMax / 2):
|
|
self.speed -= self.acceleration * 0.5
|
|
else:
|
|
if self.speed != 0:
|
|
self.speed -= self.speed / 50
|
|
|
|
def turn(self, dir): #dir = 1 or -1
|
|
self.rotation += dir * self.handling
|
|
|
|
def pos(self):
|
|
# normale Eigenbewegung
|
|
self.position[0] += math.cos(math.radians(self.rotation)) * self.speed
|
|
self.position[1] += math.sin(math.radians(self.rotation)) * self.speed
|
|
|
|
# Bewegung durch Rammen
|
|
self.position[0] += self.knockback[0]
|
|
self.position[1] += self.knockback[1]
|
|
|
|
# Knockback langsam abbauen
|
|
self.knockback[0] *= 0.90
|
|
self.knockback[1] *= 0.90
|
|
|
|
if self.speed > 5:
|
|
self.speed *= 0.98
|
|
|
|
def ram(self, other):
|
|
|
|
current = time.time()
|
|
|
|
if current - self.lastRam < 1:
|
|
return
|
|
|
|
dx = other.position[0] - self.position[0]
|
|
dy = other.position[1] - self.position[1]
|
|
|
|
distance = math.sqrt(dx**2 + dy**2)
|
|
|
|
if distance > 200 or distance == 0:
|
|
return
|
|
|
|
self.lastRam = current
|
|
|
|
# Richtung VOM eigenen Kart ZUM Gegner
|
|
direction_x = dx / distance
|
|
direction_y = dy / distance
|
|
|
|
# Das eigene Kart macht einen schnellen Satz zum Gegner
|
|
self.speed = 10
|
|
|
|
# Gegner fliegt in Bewegungsrichtung des Angreifers weg
|
|
knockbackSpeed = 18
|
|
|
|
other.knockback[0] = direction_x * knockbackSpeed
|
|
other.knockback[1] = direction_y * knockbackSpeed
|
|
|
|
|
|
class Item:
|
|
def __init__(self, type):
|
|
self.type = type
|
|
self.color = (255, 255, 255)
|
|
|
|
def typ(self):
|
|
if self.type == "pool":
|
|
self.color = (0, 0, 200)
|