update
This commit is contained in:
@@ -13,14 +13,23 @@ const RAENGE := [
|
||||
]
|
||||
## Kapitäne mit Wertung, Bot-Stufe, Mannschaft (weitere Bots eine Stufe
|
||||
## darunter) und Platz auf der Karte (0..1 in Breite und Höhe).
|
||||
## `art` ist das Temperament: die vier Regler aus ai.gd, je Kopf anders.
|
||||
## `wesen` steht auf der Karte.
|
||||
const START_KAPITAENE := [
|
||||
{"name": "Roter Jack", "elo": 900, "stufe": 0, "mannschaft": 0, "pos": Vector2(0.14, 0.32)},
|
||||
{"name": "Salz-Marie", "elo": 960, "stufe": 0, "mannschaft": 1, "pos": Vector2(0.33, 0.68)},
|
||||
{"name": "Einauge Bill", "elo": 1030, "stufe": 1, "mannschaft": 1, "pos": Vector2(0.52, 0.24)},
|
||||
{"name": "Käpt'n Grau", "elo": 1110, "stufe": 1, "mannschaft": 2, "pos": Vector2(0.70, 0.62)},
|
||||
{"name": "Die Witwe", "elo": 1210, "stufe": 2, "mannschaft": 2, "pos": Vector2(0.87, 0.30)},
|
||||
{"name": "Admiral Krähe", "elo": 1360, "stufe": 2, "mannschaft": 3, "pos": Vector2(0.50, 0.86)},
|
||||
{"name": "Roter Jack", "elo": 900, "stufe": 0, "mannschaft": 0, "pos": Vector2(0.14, 0.32),
|
||||
"wesen": "Bluffer", "art": {"bluff": 0.65, "genau": 0.40, "zweifel": 0.30, "sicher": 0.30}},
|
||||
{"name": "Salz-Marie", "elo": 960, "stufe": 0, "mannschaft": 1, "pos": Vector2(0.33, 0.68),
|
||||
"wesen": "Zauderin", "art": {"bluff": 0.10, "genau": 0.45, "zweifel": 0.45, "sicher": 0.40}},
|
||||
{"name": "Einauge Bill", "elo": 1030, "stufe": 1, "mannschaft": 1, "pos": Vector2(0.52, 0.24),
|
||||
"wesen": "Genau-Rufer", "art": {"bluff": 0.30, "genau": 0.15, "zweifel": 0.30, "sicher": 0.42}},
|
||||
{"name": "Käpt'n Grau", "elo": 1110, "stufe": 1, "mannschaft": 2, "pos": Vector2(0.70, 0.62),
|
||||
"wesen": "Rechner", "art": {"bluff": 0.20, "genau": 0.26, "zweifel": 0.26, "sicher": 0.50}},
|
||||
{"name": "Die Witwe", "elo": 1210, "stufe": 2, "mannschaft": 2, "pos": Vector2(0.87, 0.30),
|
||||
"wesen": "Eiskalt", "art": {"bluff": 0.45, "genau": 0.24, "zweifel": 0.22, "sicher": 0.50}},
|
||||
{"name": "Admiral Krähe", "elo": 1360, "stufe": 2, "mannschaft": 3, "pos": Vector2(0.50, 0.80),
|
||||
"wesen": "Draufgänger", "art": {"bluff": 0.55, "genau": 0.20, "zweifel": 0.28, "sicher": 0.44}},
|
||||
]
|
||||
const ZIEL_RANG := "Admiral" ## wer das erreicht, hat die Kampagne gewonnen
|
||||
|
||||
var datei := DATEI ## Tests schreiben woandershin
|
||||
var elo := 1000.0
|
||||
@@ -31,6 +40,11 @@ var aktiv := "" ## Kapitän der laufenden Partie, "" = keine Kampagn
|
||||
var letztes := "" ## Text zum letzten Ergebnis, fürs Endfeld
|
||||
var zur_karte := false ## nach dem Ende zurück auf die Karte statt ins Hauptmenü
|
||||
var kampagnenpartie := false ## die laufende (oder gerade beendete) Partie gehört zur Kampagne
|
||||
var spielername := "Spieler"
|
||||
var meldungen: Array = [] ## die letzten Ereignisse für die Karte, neueste zuerst
|
||||
var beute := "" ## gewählte Münze für die nächste Partie
|
||||
var beute_offen := false ## nach einem Sieg darf eine Münze gewählt werden
|
||||
var gewonnen := false ## Zielrang erreicht
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -55,6 +69,10 @@ func zuruecksetzen() -> void:
|
||||
siege = 0
|
||||
aktiv = ""
|
||||
letztes = ""
|
||||
meldungen = []
|
||||
beute = ""
|
||||
beute_offen = false
|
||||
gewonnen = false
|
||||
kapitaene = []
|
||||
for k in START_KAPITAENE:
|
||||
var e: Dictionary = k.duplicate()
|
||||
@@ -78,10 +96,25 @@ func starten(name: String) -> void:
|
||||
return
|
||||
aktiv = name
|
||||
kampagnenpartie = true
|
||||
var bots: Array = [{"name": name, "stufe": int(k.stufe)}]
|
||||
Net.player_name = spielername
|
||||
var bots: Array = [{"name": name, "stufe": int(k.stufe), "regler": k.art}]
|
||||
for i in int(k.mannschaft):
|
||||
bots.append({"name": "Maat %d" % (i + 1), "stufe": maxi(0, int(k.stufe) - 1)})
|
||||
Net.start_singleplayer(Net.player_name, bots.size(), int(k.stufe), 5, bots)
|
||||
var mit := beute
|
||||
beute = ""
|
||||
beute_offen = false
|
||||
Net.start_singleplayer(spielername, bots.size(), int(k.stufe), 5, bots, mit)
|
||||
|
||||
|
||||
## Erwartete Siegchance gegen einen Kapitän, nach Elo.
|
||||
func siegchance(k: Dictionary) -> float:
|
||||
return 1.0 / (1.0 + pow(10.0, (float(k.elo) - elo) / 400.0))
|
||||
|
||||
|
||||
func _melden(text: String) -> void:
|
||||
meldungen.push_front(text)
|
||||
if meldungen.size() > 3:
|
||||
meldungen.pop_back()
|
||||
|
||||
|
||||
## Wird vom Spiel am Ende gerufen. `ausgeschieden` ist die Reihenfolge der
|
||||
@@ -125,9 +158,15 @@ func ergebnis(seats: Array, ausgeschieden: Array) -> void:
|
||||
siege += 1
|
||||
k.weg = AUF_SEE
|
||||
k.geschlagen = int(k.geschlagen) + 1
|
||||
beute_offen = true
|
||||
letztes = "Sieg gegen %s! %d → %d (%s)" % [k.name, int(round(vorher)), int(round(elo)), mein_rang()]
|
||||
_melden("%s geschlagen - auf See für %d Partien. Beute wartet." % [k.name, AUF_SEE])
|
||||
else:
|
||||
letztes = "%s behält die Oberhand. %d → %d (%s)" % [k.name, int(round(vorher)), int(round(elo)), mein_rang()]
|
||||
_melden("%s behält die Oberhand." % k.name)
|
||||
if not gewonnen and mein_rang() == ZIEL_RANG:
|
||||
gewonnen = true
|
||||
_melden("Du bist %s. Die Kampagne ist gewonnen - die See bleibt offen." % ZIEL_RANG)
|
||||
speichern()
|
||||
|
||||
|
||||
@@ -138,10 +177,14 @@ func _zurueck(k: Dictionary) -> void:
|
||||
k.stufe = int(k.stufe) + 1
|
||||
else:
|
||||
k.mannschaft = mini(4, int(k.mannschaft) + 1)
|
||||
_melden("%s ist zurück - %s, Wertung %d, Mannschaft %d." % [
|
||||
k.name, ["leicht", "normal", "schwer"][int(k.stufe)], int(round(float(k.elo))), int(k.mannschaft)])
|
||||
|
||||
|
||||
func speichern() -> void:
|
||||
var daten := {"elo": elo, "partien": partien, "siege": siege, "kapitaene": []}
|
||||
var daten := {"elo": elo, "partien": partien, "siege": siege, "kapitaene": [],
|
||||
"name": spielername, "meldungen": meldungen, "beute": beute, "beute_offen": beute_offen,
|
||||
"gewonnen": gewonnen}
|
||||
for k in kapitaene:
|
||||
daten.kapitaene.append({"name": k.name, "elo": k.elo, "stufe": k.stufe,
|
||||
"mannschaft": k.mannschaft, "weg": k.weg, "geschlagen": k.geschlagen})
|
||||
@@ -162,6 +205,11 @@ func laden() -> void:
|
||||
elo = float(daten.get("elo", 1000.0))
|
||||
partien = int(daten.get("partien", 0))
|
||||
siege = int(daten.get("siege", 0))
|
||||
spielername = String(daten.get("name", "Spieler"))
|
||||
meldungen = daten.get("meldungen", [])
|
||||
beute = String(daten.get("beute", ""))
|
||||
beute_offen = bool(daten.get("beute_offen", false))
|
||||
gewonnen = bool(daten.get("gewonnen", false))
|
||||
for d in daten.get("kapitaene", []):
|
||||
var k := kapitaen(String(d.get("name", "")))
|
||||
if k.is_empty():
|
||||
|
||||
Reference in New Issue
Block a user