98 lines
4.6 KiB
GDScript
98 lines
4.6 KiB
GDScript
extends "res://tests/basis.gd"
|
|
## Kampagne: Wertung, Rang, Verschwinden und Rückkehr der Kapitäne,
|
|
## Speichern und Laden, und eine echte Partie gegen einen Kapitän im
|
|
## Simulationsmodus.
|
|
|
|
var game: Node
|
|
|
|
|
|
func _ready() -> void:
|
|
Kampagne.datei = "user://kampagne_test.json"
|
|
Kampagne.zuruecksetzen()
|
|
add_child(preload("res://scenes/main.tscn").instantiate())
|
|
await get_tree().process_frame
|
|
_lauf()
|
|
|
|
|
|
func _seats(alive: Array, namen: Array) -> Array:
|
|
var out: Array = []
|
|
for i in namen.size():
|
|
out.append({"name": namen[i], "alive": alive[i]})
|
|
return out
|
|
|
|
|
|
func _lauf() -> void:
|
|
# --- Wertung und Rang
|
|
_pruef("Start: 1000, Matrose", int(Kampagne.elo) == 1000 and Kampagne.mein_rang() == "Matrose")
|
|
_pruef("Rang steigt mit der Wertung", Kampagne.rang(1300) == "Kapitän" and Kampagne.rang(800) == "Schiffsjunge")
|
|
|
|
# --- Sieg: Kapitän verschwindet, Wertung steigt
|
|
Kampagne.aktiv = "Roter Jack"
|
|
Kampagne.ergebnis(_seats([true, false], ["Spieler", "Roter Jack"]), [1])
|
|
var jack: Dictionary = Kampagne.kapitaen("Roter Jack")
|
|
_pruef("Sieg: Wertung steigt", Kampagne.elo > 1000.0)
|
|
_pruef("Sieg: Kapitän geht auf See", int(jack.weg) == Kampagne.AUF_SEE and int(jack.geschlagen) == 1)
|
|
_pruef("Ergebnistext steht", Kampagne.letztes.begins_with("Sieg gegen Roter Jack"))
|
|
Kampagne.starten("Roter Jack")
|
|
_pruef("Kein Start gegen einen auf See", Kampagne.aktiv == "" and _find(get_tree().root, "Game") == null)
|
|
var vorher := Kampagne.elo
|
|
|
|
# --- Niederlage: Spieler fliegt vor dem Kapitän
|
|
Kampagne.aktiv = "Salz-Marie"
|
|
Kampagne.ergebnis(_seats([false, false, true], ["Spieler", "Salz-Marie", "Maat 1"]), [0, 1])
|
|
_pruef("Niederlage: Wertung sinkt", Kampagne.elo < vorher)
|
|
_pruef("Niederlage: Kapitänin bleibt", int(Kampagne.kapitaen("Salz-Marie").weg) == 0)
|
|
_pruef("Jack rückt näher", int(Kampagne.kapitaen("Roter Jack").weg) == Kampagne.AUF_SEE - 1)
|
|
|
|
# --- Sieg, weil der Kapitän vor dem Spieler ging, obwohl ein Maat gewann
|
|
Kampagne.aktiv = "Salz-Marie"
|
|
Kampagne.ergebnis(_seats([false, false, true], ["Spieler", "Salz-Marie", "Maat 1"]), [1, 0])
|
|
_pruef("Kapitän vor mir raus zählt als Sieg", int(Kampagne.kapitaen("Salz-Marie").weg) == Kampagne.AUF_SEE)
|
|
jack = Kampagne.kapitaen("Roter Jack")
|
|
_pruef("Jack ist zurück, stärker", int(jack.weg) == 0 and int(jack.stufe) == 1 and float(jack.elo) > 900.0)
|
|
|
|
# --- Speichern und Laden
|
|
var elo_alt := Kampagne.elo
|
|
Kampagne.speichern()
|
|
Kampagne.elo = 0.0
|
|
Kampagne.laden()
|
|
_pruef("Laden stellt Wertung und Kapitäne wieder her",
|
|
absf(Kampagne.elo - elo_alt) < 0.01 and int(Kampagne.kapitaen("Salz-Marie").weg) == Kampagne.AUF_SEE
|
|
and int(Kampagne.kapitaen("Roter Jack").stufe) == 1)
|
|
|
|
# --- Beute, Meldung, Siegchance, Ziel
|
|
_pruef("Nach dem Sieg ist Beute offen", Kampagne.beute_offen)
|
|
_pruef("Rückkehr wird gemeldet", Kampagne.meldungen.any(func(m): return "ist zurück" in String(m)))
|
|
var c_jack := Kampagne.siegchance(Kampagne.kapitaen("Roter Jack"))
|
|
var c_kraehe := Kampagne.siegchance(Kampagne.kapitaen("Admiral Krähe"))
|
|
_pruef("Siegchance: leicht hoch, schwer niedrig", c_jack > 0.5 and c_kraehe < 0.3)
|
|
Kampagne.elo = 1425.0
|
|
Kampagne.aktiv = "Salz-Marie"
|
|
Kampagne.ergebnis(_seats([true, false], ["Spieler", "Salz-Marie"]), [1])
|
|
_pruef("Zielrang erreicht: Kampagne gewonnen", Kampagne.gewonnen and Kampagne.meldungen.any(func(m): return "gewonnen" in String(m)))
|
|
Kampagne.elo = 1000.0
|
|
Kampagne.gewonnen = false
|
|
Kampagne.spielername = "Kaperfahrer"
|
|
Kampagne.beute = "peek"
|
|
Kampagne.kapitaen("Roter Jack").weg = 0
|
|
|
|
# --- Echte Partie gegen Jack im Simulationsmodus, mit Beute und Temperament
|
|
var partien_vorher := Kampagne.partien
|
|
Kampagne.starten("Roter Jack")
|
|
await _warte(func(): game = _find(get_tree().root, "Game"); return game != null, 20.0)
|
|
_pruef("Partie gegen den Kapitän steht", game != null and game.seats.size() == 2
|
|
and String(game.seats[1].name) == "Roter Jack" and int(game.seats[1].stufe) == 1)
|
|
_pruef("Spielername und Beute am Tisch", String(game.seats[0].name) == "Kaperfahrer"
|
|
and game.hand[0].has("peek") and game.hand[0].size() == 2 and Kampagne.beute == "")
|
|
_pruef("Kapitän bringt sein Temperament", float(game.seats[1].regler.get("bluff", 0.0)) == 0.65)
|
|
game.tempo = 0.0
|
|
game.simulation = true
|
|
game.seats[game.local_seat].ai = true
|
|
await _warte(func(): return game.phase == "over", 120.0)
|
|
_pruef("Partie endet", game.phase == "over")
|
|
_pruef("Ergebnis verbucht", Kampagne.partien == partien_vorher + 1 and Kampagne.aktiv == "" and Kampagne.letztes != "")
|
|
_pruef("Endfeld zeigt Wertung", game.hud.over_slot.visible and Kampagne.letztes in game.hud.over_title.text
|
|
and game.hud.over_karte.visible)
|
|
DirAccess.remove_absolute(ProjectSettings.globalize_path(Kampagne.datei))
|
|
_fertig()
|