Code: Alles auswählen
class Character:
[...]
def __str__(self):
return "%s %s %s %s" % (self.name, self.health, self.strength, self.xp)
print(player)
Code: Alles auswählen
class Character:
[...]
def __str__(self):
return "%s %s %s %s" % (self.name, self.health, self.strength, self.xp)
print(player)
Code: Alles auswählen
#!/usr/bin/env python
from random import randint
class Game:
def __init__(self):
pass
def game_loop(self, player, enemy):
status = ""
round = 1
while player.health > 0 and enemy.health > 0:
print("------------------")
print("|....Round %s....|" % round)
round += 1
print("------------------")
print(player)
print(enemy)
self.fight(player, enemy)
if enemy.health <= 0:
status = "You win!"
player.xp += enemy.xp
break
self.fight(enemy, player)
if player.health <=0:
status = "You lose!"
break
print(player)
print(enemy)
print(status)
def fight(self, active, opponent):
print("%s attacks %s" %(active.name, opponent.name))
hp = active.attack(opponent)
print("%s hp removed..." % hp)
class Character:
def __init__(self, name, health, strength, xp):
self.name = name
self.health = health
self.strength = strength
self.xp = xp
def __str__(self):
return "%s %s %s %s" % (self.name, self.health, self.strength, self.xp)
def attack(self, opponent):
foo = randint((int(self.strength)/2), self.strength)
opponent.health -= foo
return foo
class Player(Character):
pass
class Enemy(Character):
pass
def main():
player1 = Player("Christopher", 100, 15, 10)
player2 = Enemy("Dominika", 100, 15, 10)
game = Game()
game.game_loop(player1, player2)
if __name__ == "__main__":
main()
Das halte ich für eine sehr fragwürdige Begründung.CrisBee hat geschrieben:Mir wurde kürzlich halt noch gesagt, dass so eine Game Klasse Sinn machen würde, da dort der Loop reinkommt.
Auf Modulebene als Funktion wäre wohl die naheliegendste Möglichkeit.CrisBee hat geschrieben:Wo soll ich den game_loop() denn sonst platzieren?
Irgendwas in den Konstruktor schreiben, nur damit er Inhalt hat, oder wie...?CrisBee hat geschrieben:Eine __init__ ist der Klasse Game schnell hinzugefügt bzw. eine "Aufgabe" für den Konstruktor!
Wenn es aber erst vom Benutzer-Input abhängt, wie der Charakter aussieht, welche und wieviele Gegenspieler es gibt, die Gegenspieler erst nach und nach entstehen und zum Game noch Gänge, Abzweigungen und Gegenstände hinzukommen, soll all das dann auch übergeben werden?BlackJack hat geschrieben:Bestandteile (Spieler) vor dem Objekt das aus denen zusammengesetzt wird (Spiel) zu erzeugen und die dann zu übergeben hat allerdings den Vorteil das man sowohl zum automatisierten Testen als auch im realen Programm leichter Variationen übergeben kann. Also Mock-Objekte oder Computerspieler mit einer speziellen KI. Man könnte auch einfach verschiedene KIs gegeneinander spielen lassen.
Gibt auch Spiele wo NPC Gegner auch XP gewinnen oder zumindest ein Level aufsteigen können wie z.B. Shadow of Mordor.sparrow hat geschrieben:Aber der Spieler hat XP, die erhöht werden, wenn er ein Monster killt, oder?