revert Schaden Gegner, Buch, Angriff
This commit is contained in:
Lyzzy 2024-03-01 21:50:39 +00:00
parent 5625db18c7
commit f6827b5f05
2 changed files with 49 additions and 175 deletions

42
main.py
View file

@ -39,11 +39,9 @@ def genRooms(WIDTH, HEIGHT, type:str):
def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): def play(screen, clock, running, background, isblack, WIDTH, HEIGHT):
main = [MainCharacter('Herbert', 100, 'oldman.png', 500, 500, 20, 5, 1, 1, 50)] main = [MainCharacter('Herbert', 100, 'oldman.png', 500, 500, 20, 5, 1, 1, 50)]
mobs = [Skeleton(i, random.randint(40, 60), 'reddy.png', random.randint(20,1000), random.randint(20,700), 5, 1, 1, 1, 200) for i in range(0,random.randint(2, 8))] mobs=[Skeleton(i, random.randint(40, 60), 'reddy.png', random.randint(20,1000), random.randint(20,700), 125, 1, 1, 1, 200) for i in range(0,random.randint(2, 8))]
others = [] others = []
npcs = [NPC('name', 100, 'reddy.png', 1, 200, 200)] objects = [main, mobs, others]
objects = [main, mobs, npcs, others]
freeze = False #Gameplay is freezed in certain situations
while running: while running:
screen.fill('#000000') screen.fill('#000000')
@ -51,9 +49,6 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT):
for event in events: for event in events:
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
quitGame() quitGame()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_e: #when book is open gameplay is freezed
freeze = not freeze
# RENDER YOUR GAME HERE # RENDER YOUR GAME HERE
"""with open(background, 'r') as i: """with open(background, 'r') as i:
bg = pygame.image.load(i) bg = pygame.image.load(i)
@ -61,28 +56,20 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT):
# fill the screen with an image to clear the screen # fill the screen with an image to clear the screen
screen.blit(bg, (0, 0)) screen.blit(bg, (0, 0))
""" """
if not freeze: for thing in objects[0]:
for thing in objects[0]: if not thing.update(pygame.key.get_pressed()):
thing.book.hidden = not freeze menu(screen, clock, running, background, isblack, WIDTH, HEIGHT)
if not thing.update(pygame.key.get_pressed(), objects): thing.draw(screen)
menu(screen, clock, running, background, isblack, WIDTH, HEIGHT)
thing.draw(screen)
for mob in objects[1]: for mob in objects[1]:
mob.update(objects) mob.update(objects)
mob.draw(screen) mob.draw(screen)
for thing in objects[2]:
thing.update(objects)
thing.draw(screen)
for npc in objects[2]:
npc.update(pygame.key.get_pressed(), objects)
npc.draw(screen)
for thing in objects[3]:
thing.update(objects)
thing.draw(screen)
else:
objects[0][0].book.hidden = not freeze
objects[0][0].book.draw(screen)
objects[0][0].book.update()
# flip() the display to put your work on screen # flip() the display to put your work on screen
pygame.display.flip() pygame.display.flip()
@ -183,9 +170,8 @@ def main():
#objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2 - 72, 160, 64, 'medieval', 48, "Play", play)) #objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2 - 72, 160, 64, 'medieval', 48, "Play", play))
#objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2, 160, 64, 'medieval', 48, "Options", uwu)) #objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2, 160, 64, 'medieval', 48, "Options", uwu))
#objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2 + 72, 160, 64, 'medieval', 48, "Exit game", quitGame)) #objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2 + 72, 160, 64, 'medieval', 48, "Exit game", quitGame))
menu(screen, clock, running, background, isblack, WIDTH, HEIGHT)
test(screen, clock, running, background, isblack, WIDTH, HEIGHT) test(screen, clock, running, background, isblack, WIDTH, HEIGHT)
menu(screen, clock, running, background, isblack, WIDTH, HEIGHT)
"""while running: """while running:
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:

View file

@ -45,6 +45,7 @@ class Objects():
self.x = x self.x = x
self.y = y self.y = y
self.hidden = False self.hidden = False
self.rect = pg.Rect(self.x, self.y, self.sprite.get_width(), self.sprite.get_height()) self.rect = pg.Rect(self.x, self.y, self.sprite.get_width(), self.sprite.get_height())
def draw(self, screen): def draw(self, screen):
@ -53,59 +54,9 @@ class Objects():
self.rect.x, self.rect.y = self.x, self.y self.rect.x, self.rect.y = self.x, self.y
screen.blit(self.sprite, self.rect) screen.blit(self.sprite, self.rect)
class NPC(Objects): class NPC(Objects):
def __init__(self, name, ms, sprite, convo_act, x, y) -> None: pass
self.talking = False
self.hidden = True
super().__init__(name, ms, sprite, x, y)
self.conversation = Convo('Hallo', convo_act, 'person')
def talk(self, objects):
self.talking = True
objects[0][0].talking = True
self.conversation.hidden = False
def draw(self, screen):
super().draw(screen)
if self.talking == True:
self.conversation.draw(screen)
def update(self, keys, objects):
if self.talking:
self.conversation.update(keys, objects)
class Convo():
def __init__(self, text, convo_act, person, x = 140, y = 600, width = 1000, height = 100, font='simple', font_size = 20) -> None:
self.x = x
self.y = y
self.width = width
self.height = height
self.hidden = False
self.font = pg.font.Font(f'fonts/{fonts[font]}', font_size)
with open('art/images/label.png', 'r') as tb:
self.box = pg.image.load(tb)
self.box = pg.transform.scale(self.box, (width, height))
self.labelRect = pg.Rect(self.x, self.y, self.width, self.height)
self.labelSurf = self.font.render(text, True, '#1E90FF')
def draw(self, screen):
if self.hidden:
return
self.box.blit(self.labelSurf, [
self.labelRect.width/2 - self.labelSurf.get_rect().width/2,
self.labelRect.height/2 - self.labelSurf.get_rect().height/2
])
screen.blit(self.box, self.labelRect)
def update(self, keys, objects):
if keys[pg.K_SPACE]:
objects[0][0].book.addspell('fireball')
self.talking = False
objects[0][0].talking = False
self.hidden = True
class Fighter(Objects): class Fighter(Objects):
@ -118,16 +69,18 @@ class Fighter(Objects):
self.attack_range = atr self.attack_range = atr
self.lastHurt = pg.time.get_ticks() self.lastHurt = pg.time.get_ticks()
self.lastAttack = pg.time.get_ticks() self.lastAttack = pg.time.get_ticks()
self.hurtCooldown = 0 self.hurtCooldown = 250
class MainCharacter(Fighter): class MainCharacter(Fighter):
def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr) -> None: def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr, weapon=None, shield=None) -> None:
super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr) super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr)
self.book = Book(0, 0, [], None, None) self.attack_spell = weapon
self.shield_spell = shield
self.talking = False self.talking = False
self.level = Level(1000, 38, level, 150, 40, f'will to live: {level}%', 'simple', 20) self.level = Level(1000, 38, level, 150, 40, f'will to live: {level}%', 'simple', 20)
self.health = Hearts(health, sprite=['fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png'], x=900, y= 50, hurtCooldown=self.hurtCooldown) self.health = Hearts(health, sprite=['fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png'], x=900, y= 50)
def draw(self, screen): def draw(self, screen):
if self.hidden: if self.hidden:
@ -136,11 +89,9 @@ class MainCharacter(Fighter):
screen.blit(self.sprite, self.rect) screen.blit(self.sprite, self.rect)
self.health.draw(screen) self.health.draw(screen)
self.level.draw(screen) self.level.draw(screen)
self.book.draw(screen)
def hurt(self, damage, objects): def hurt(self, damage):
if not self.talking: self.health.hurt(damage)
self.health.hurt(damage)
def walk(self, keys, objects): def walk(self, keys, objects):
moveto = vec(0, 0) moveto = vec(0, 0)
@ -158,37 +109,23 @@ class MainCharacter(Fighter):
self.y += moveto[1] / fps self.y += moveto[1] / fps
touches = pg.sprite.spritecollideany(self, objects[1] + objects[2]) touches = pg.sprite.spritecollideany(self, objects[1] + objects[2])
if touches is not None: if touches is not None:
self.x -= moveto[0]*1.5 / fps #change later self.x -= moveto[0] / fps #change later
self.y -= moveto[1]*1.5 / fps #change later self.y -= moveto[1] / fps #change later
if isinstance(touches, NPC):
touches.talk(objects)
def attack(self, obj, moveto = vec(0,1)):
if self.lastAttack + self.attack_speed * 1000 < pg.time.get_ticks():
if self.book.current_sp == 'fireball':
weapon = Fireball('fb1', 100, self.x, self.y, moveto, 5)
else:
return
obj[3].append(weapon)
self.lastAttack = pg.time.get_ticks()
def update(self, keys, objects): def update(self, keys, objects):
if not self.talking: self.walk(keys, objects)
self.walk(keys, objects)
if keys[pg.K_f]:
self.attack(objects)
if self.health.health <= 0: if self.health.health <= 0:
return False return False
else: else:
return True return True
class Hearts(): class Hearts():
def __init__(self, health, sprite, x, y, hurtCooldown) -> None: def __init__(self, health, sprite, x, y) -> None:
self.x = x self.x = x
self.y = y self.y = y
self.health = health self.health = health
self.lastHurt = pg.time.get_ticks() self.lastHurt = pg.time.get_ticks()
self.hurtCooldown = hurtCooldown self.hurtCooldown = 1000
self.hidden = False self.hidden = False
self.sprite=[] self.sprite=[]
for parts in sprite: for parts in sprite:
@ -252,32 +189,6 @@ class Level():
]) ])
screen.blit(self.box, self.labelRect) screen.blit(self.box, self.labelRect)
class Book():
def __init__(self, x, y, spells, current_spell, current_shield) -> None:
with open(f'art/images/book.png') as i:
self.sprite = pg.image.load(i)
self.sprite = pg.transform.scale(self.sprite, (1280, 720))
self.x = x
self.y = y
self.hidden = True
self.rect = pg.Rect(self.x, self.y, self.sprite.get_width(), self.sprite.get_height())
self.sp_list = spells
self.current_sp = current_spell
def draw(self, screen):
if self.hidden:
return
self.rect.x, self.rect.y = self.x, self.y
screen.blit(self.sprite, self.rect)
def addspell(self, spell):
if spell not in self.sp_list:
self.sp_list.append(spell)
self.current_sp = spell
def update(self):
pass
class Mobs(Fighter): class Mobs(Fighter):
def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr, drops) -> None: def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr, drops) -> None:
super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr) super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr)
@ -300,15 +211,9 @@ class Skeleton(Mobs):
def attack(self, moveto, obj): def attack(self, moveto, obj):
if self.lastAttack + self.attack_speed * 1000 < pg.time.get_ticks(): if self.lastAttack + self.attack_speed * 1000 < pg.time.get_ticks():
obj[3].append(Arrow("arrow", 200, self.x, self.y, moveto, self.damage)) obj[1].append(Arrow("arrow", 200, self.x, self.y, moveto, self.damage))
self.lastAttack = pg.time.get_ticks() self.lastAttack = pg.time.get_ticks()
def hurt(self, damage, objects):
self.health -= damage
if self.health <= 0:
self.hidden = True
objects[1].remove(self)
def update(self, obj): def update(self, obj):
self.chase(obj) self.chase(obj)
@ -318,44 +223,27 @@ class Weapons(Objects):
super().__init__(name, ms, sprite, x, y) super().__init__(name, ms, sprite, x, y)
self.moveto = moveto self.moveto = moveto
self.damage = damage self.damage = damage
class Arrow(Weapons):
def __init__(self, name, ms, x, y, moveto, damage, sprite="arrow.png") -> None:
super().__init__(name, ms, sprite, x, y, moveto, damage)
pos = vec(1,0) pos = vec(1,0)
angle = pos.angle_to(moveto) angle = pos.angle_to(moveto)
with open(f'art/images/{sprite}') as i: with open(f'art/images/{sprite}') as i:
self.sprite = pg.transform.rotate(pg.image.load(i), -angle) self.sprite = pg.transform.rotate(pg.image.load(i), -angle)
def die(self, objects, kills): def move(self):
touches = pg.sprite.spritecollideany(self, objects[0] + objects[1]) self.moveto.scale_to_length(self.speed)
if touches is not None and isinstance(touches, kills): self.x += self.moveto[0] / fps
touches.hurt(self.damage, objects) self.y += self.moveto[1] / fps
def die(self, objects):
touches = pg.sprite.spritecollideany(self, objects[0])
if touches is not None and isinstance(touches, MainCharacter):
touches.hurt(self.damage)
self.hidden = True self.hidden = True
objects[3].remove(self)
class Spells(Weapons):
def __init__(self, name, ms, sprite, x, y, moveto, damage) -> None:
super().__init__(name, ms, sprite, x, y, moveto, damage)
class Fireball(Spells):
def __init__(self, name, ms, x, y, moveto, damage, sprite = 'fireball.png') -> None:
super().__init__(name, ms, sprite, x, y, moveto, damage)
def move(self):
self.moveto.scale_to_length(self.speed)
self.x += self.moveto[0] / fps
self.y += self.moveto[1] / fps
def update(self, objects): def update(self, objects):
self.move() self.move()
self.die(objects, Mobs) self.die(objects)
class Arrow(Weapons):
def __init__(self, name, ms, x, y, moveto, damage, sprite = 'arrow.png') -> None:
super().__init__(name, ms, sprite, x, y, moveto, damage)
def move(self):
self.moveto.scale_to_length(self.speed)
self.x += self.moveto[0] / fps
self.y += self.moveto[1] / fps
def update(self, objects):
self.move()
self.die(objects, MainCharacter)