{"id":4883,"date":"2024-11-14T16:00:31","date_gmt":"2024-11-14T16:00:31","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=4883"},"modified":"2025-10-22T11:11:46","modified_gmt":"2025-10-22T11:11:46","slug":"rock-paper-scissors","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/rock-paper-scissors\/","title":{"rendered":"Wie man ein Spiel mit k\u00fcnstlicher Intelligenz (KI) in Java programmiert &#8211; Stein, Papier, Schere"},"content":{"rendered":"<p>Wer von uns w\u00fcrde nicht das beliebte Spiel Stein, Papier, Schere kennen, das wir als Kinder gespielt haben. Aber wer h\u00e4tte damals gedacht, dass er es eines Tages in seiner Lieblingsprogrammiersprache, zum Beispiel <a href=\"https:\/\/msgprogramator.sk\/java\/\" target=\"_blank\" rel=\"noopener\">Java<\/a>, programmieren k\u00f6nnte. <\/p>\n<p>Nur wenige Menschen wissen, dass Stein, Papier, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Rock_paper_scissors\" target=\"_blank\" rel=\"nofollow noopener\">Schere<\/a> ein Handspiel ist, das seinen Ursprung in China haben soll, von wo aus es nach Japan gelangte. Dort entstand es in seiner modernen Form, wie wir sie kennen, und verbreitete sich Anfang des 20. Jahrhunderts sehr schnell in der ganzen Welt.  <\/p>\n<h2>Stein, Papier, Schere Regeln<\/h2>\n<p>Wir m\u00fcssen uns die Spielregeln sicher nicht vorstellen. Aber falls es jemanden gibt, der sie noch nicht kennt, werden wir sie kurz erw\u00e4hnen. <\/p>\n<p>Meistens wird es von zwei Spielern (oder mehr) gespielt, von denen jeder unbewusst entweder einen Stein, Papier oder eine Schere w\u00e4hlt. Auf das Kommando eins, zwei, drei zeigen beide Spieler gleichzeitig, was sie gew\u00e4hlt haben &#8211; Stein (geschlossene Faust) oder Schere (mit Zeige- und Mittelfinger) oder Papier (offene Hand). Das Ergebnis des Spiels, das nat\u00fcrlich \u00fcber mehrere Runden gespielt wird, ist ein Unentschieden, ein Sieg oder eine Niederlage.  <\/p>\n<p>Der Spieler, der den Stein spielt, schl\u00e4gt den anderen Spieler, der die Schere w\u00e4hlt (der Stein stumpft die Schere ab), verliert aber gegen den Spieler, der das Papier spielt (das Papier \u00fcberzieht den Stein). Der Spieler mit dem Papier verliert gegen den Spieler, der die Schere gew\u00e4hlt hat (die Schere schneidet das Papier). Wenn beide Spieler die gleiche Form w\u00e4hlen, ist das Spiel unentschieden und wird normalerweise wiederholt, um das Unentschieden aufzul\u00f6sen.  <\/p>\n<p>Stein, Papier, Schere wird oft als Methode der fairen Auswahl unter Kindern verwendet, wenn es darum geht, welches Kind zuerst etwas anfangen darf.<\/p>\n<p>Haben Sie das gewusst?<br \/>\nEs wurden auch verschiedene Turniere f\u00fcr Stein, Papier, Schere organisiert. Die Gewinner der Turniere nahmen zwischen $5.000 und $20.000 mit nach Hause. <\/p>\n<h2>Stein, Papier, Schere in Java<\/h2>\n<p>Heute werden wir dieses Spiel gemeinsam in Java programmieren. Um das Spiel f\u00fcr die Spieler interessanter zu machen, <g id=\"gid_0\">werden wir auch eine k\u00fcnstliche Intelligenz (KI) programmieren<\/g>, die nicht zuf\u00e4llig entscheidet, ob sie in jeder Runde Stein, Papier oder Schere benutzt, sondern in jeder Runde eine der Standardstrategien w\u00e4hlt. Nat\u00fcrlich hat der Spieler keine Ahnung, welche Geste die Computer-KI gerade gew\u00e4hlt hat.  <\/p>\n<h3>Interessanter Fakt<\/h3>\n<p>Sie wollen bestimmt nicht Rock, Paper, Scissors mit einem Roboter spielen. Im Jahr 2012 haben Forscher des Ishikawa Watanabe Laboratory an der Universit\u00e4t von Tokio einen Roboterarm entwickelt, der jedes Spiel gegen einen menschlichen Gegner gewinnen kann. Mithilfe einer Hochgeschwindigkeitskamera erkennt der Roboter innerhalb einer Millisekunde, welche Form die menschliche Hand macht, und erstellt dann die entsprechende Siegerform.  <\/p>\n<h2>Spielkonzept mit KI<\/h2>\n<p>Das Spiel wird \u00fcber eine vordefinierte Anzahl von Runden gespielt, die bei der Erstellung der Spielinstanz festgelegt wird. Da die Spielrunden sehr schnell sind und wir das Verhalten der KI testen wollen, setzen wir den Standardwert f\u00fcr die Anzahl der Runden auf 20. <\/p>\n<p>Zu Beginn jeder Runde m\u00fcssen wir die Auswahl des Spielers aufzeichnen, die KI-Strategie f\u00fcr diese Runde ausw\u00e4hlen und damit die Auswahl des KI-Computers bestimmen. Die KI w\u00e4hlt nach dem Zufallsprinzip aus den Standardstrategien aus, so dass es f\u00fcr den Spieler schwierig ist, zu bestimmen, welche Geste der Computer spielen wird. <\/p>\n<p>Wir pr\u00fcfen dann, wer was getippt hat und vergeben entsprechend Punkte, +1 f\u00fcr einen Sieg, 0 f\u00fcr ein Unentschieden oder eine Niederlage. Der erste, der 20 Punkte erreicht, gewinnt das Spiel. <\/p>\n<h2>Spielstrategien f\u00fcr KI<\/h2>\n<p>Die k\u00fcnstliche Intelligenz des Spiels zeichnet die Gewinnergesten des Spielers auf und entscheidet auf der Grundlage der Historie, welche Geste gespielt werden soll. Zu den grundlegenden Strategien geh\u00f6ren: <\/p>\n<ul>\n<li>\nZuf\u00e4llige Auswahl von Gesten<em>(RandomStrategy<\/em>)<\/li>\n<li>\nDas Wiederholen der eigenen Geste aus der vorherigen Runde.<em>(RepeatLastMoveStrategy<\/em>)<\/li>\n<li>Anwenden einer Gegengeste auf die Geste eines Gegners aus der vorherigen Runde<em>(CounterLastPlayerMoveStrategy<\/em>)<\/li>\n<li>Wiederholung der am h\u00e4ufigsten gespielten Geste des Gegners<em>(RepeatMostFrequentPlayerMoveStrategy<\/em>)<\/li>\n<li>Gegengeste f\u00fcr die vom Gegner am h\u00e4ufigsten gespielte Geste<em>(CounterMostFrequentPlayerMoveStrategy<\/em>)<\/li>\n<\/ul>\n<p>Auch heute noch wird dar\u00fcber diskutiert, welche Spielstrategie die beste ist. Unsere Artikel versuchen, den Lesern etwas Neues beizubringen, ihnen zu zeigen, wie sie einige Probleme l\u00f6sen k\u00f6nnen, und wir freuen uns am meisten, wenn sie anfangen, mit dem Programm zu experimentieren und sich ihre eigenen Spielstrategien auszudenken. Sie k\u00f6nnen sich auch von diesem <a href=\"https:\/\/www.youtube.com\/watch?v=rudzYPHuewc\" target=\"_blank\" rel=\"nofollow noopener\">Video<\/a> oder von diesem <a href=\"https:\/\/remptongames.com\/2024\/08\/24\/how-to-win-rock-paper-scissors-and-why-it-matters-more-than-you-think\/\" target=\"_blank\" rel=\"nofollow noopener\">Artikel \u00fcber Rempton-Spiele<\/a> auf Englisch inspirieren lassen.  <\/p>\n<p>Machen wir uns also an die Programmierung des Spiels in Java.<\/p>\n<h2>Java Implementierung des Spiels Stein, Papier, Schere<\/h2>\n<p><a href=\"https:\/\/msgprogramator.sk\/de\/java-strategy\/\" target=\"_blank\" rel=\"noopener\">Das <strong><em>Strategy-Designmuster<\/em><\/strong><\/a> eignet sich gut f\u00fcr die Implementierung einer KI-Strategie.<\/p>\n<p>Bei diesem Programm handelt es sich um ein einfaches Konsolenspiel, bei dem der Spieler Stein, Papier oder Schere w\u00e4hlt und gegen die KI des Computers spielt, die in jeder Runde zuf\u00e4llig eine von vielen Strategien ausw\u00e4hlt. Der Gewinner wird auf der Grundlage der Spielregeln ermittelt. <\/p>\n<p><strong><u>Enum Move<\/u><\/strong><\/p>\n<p>Die Enum <strong><em>Move<\/em><\/strong> definiert die m\u00f6glichen Z\u00fcge (Stein, Papier, Schere) und bietet Methoden zum Vergleich der Z\u00fcge des Spielers und der KI sowie zur Bestimmung des besten Konterzugs f\u00fcr einen bestimmten Zug.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors;\n\npublic enum Move {\n    ROCK, PAPER, SCISSORS;\n\n    \/\/ Method to check who won\n    public static int compareMoves(Move player, Move ai) {\n        \/\/ Draw\n        if (player == ai) {\n            return 0;\n        }\n\n        switch (player) {\n            case ROCK:\n                \/\/ Rock beats Scissors, loses to Paper\n                return (ai == SCISSORS) ? 1 : -1;\n            case PAPER:\n                \/\/ Paper beats Rock, loses to Scissors\n                return (ai == ROCK) ? 1 : -1;\n            case SCISSORS:\n                \/\/ Scissors beats Paper, loses to Rock\n                return (ai == PAPER) ? 1 : -1;\n        }\n        return 0;\n    }\n\n    public static Move counterMove(Move move) {\n        switch (move) {\n            case ROCK:\n                return Move.PAPER;\n            case PAPER:\n                return Move.SCISSORS;\n            case SCISSORS:\n                return Move.ROCK;\n        }\n        throw new IllegalArgumentException();\n    }\n}<\/code><\/pre>\n<p><strong><u>Schnittstelle AIStrategy<\/u><\/strong><\/p>\n<p>Schnittstelle <strong><em>AIStrategy<\/em><\/strong> definiert eine <em>nextMove()<\/em>-Methode, die entscheidet, welchen Zug die KI basierend auf der Historie machen wird.<\/p>\n<p><strong>Spezifische Strategien<br \/>\n<\/strong>Die KI hat verschiedene Strategien, die sie anwenden kann. Die Strategie wird vor jeder Runde nach dem Zufallsprinzip ausgew\u00e4hlt, was bedeutet, dass es f\u00fcr den Spieler schwierig ist, vorherzusagen, welchen Zug die KI w\u00e4hlen wird. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors.ai.strategies;\n\nimport games.rockpaperscissors.Move;\nimport java.util.List;\n\npublic interface AIStrategy {\n    Move nextMove(List&lt;Move&gt; playerHistory, List&lt;Move&gt; aiHistory);\n}<\/code><\/pre>\n<p><strong><u>Klasse RandomStrategy<br \/>\n<\/u><\/strong>Zuf\u00e4llige Auswahl einer Geste.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors.ai.strategies;\n\nimport games.rockpaperscissors.Move;\nimport java.util.List;\nimport java.util.Random;\n\npublic class RandomStrategy implements AIStrategy {\n    private final Random random = new Random();\n\n    @Override\n    public Move nextMove(List&lt;Move&gt; playerHistory, List&lt;Move&gt; aiHistory) {\n        return Move.values()[random.nextInt(Move.values().length)];\n    }\n}<\/code><\/pre>\n<p><strong><u>Klasse RepeatLastMoveStrategy<br \/>\n<\/u><\/strong> Das Wiederholen der letzten Geste des Spielers.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors.ai.strategies;\n\nimport games.rockpaperscissors.Move;\nimport java.util.List;\n\npublic class RepeatLastMoveStrategy implements AIStrategy {\n    @Override\n    public Move nextMove(List&lt;Move&gt; playerHistory, List&lt;Move&gt; aiHistory) {\n        return aiHistory.isEmpty()\n                ? new RandomStrategy().nextMove(playerHistory, aiHistory)\n                : aiHistory.get(aiHistory.size() - 1);\n    }\n}<\/code><\/pre>\n<p><strong><u>Klasse CounterLastPlayerMoveStrategy<br \/>\n<\/u><\/strong>Ein Kontrazug zu einer Geste eines Spielers aus der vorherigen Runde.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors.ai.strategies;\n\nimport games.rockpaperscissors.Move;\nimport java.util.List;\n\npublic class CounterLastPlayerMoveStrategy implements AIStrategy {\n    @Override\n    public Move nextMove(List&lt;Move&gt; playerHistory, List&lt;Move&gt; aiHistory) {\n        if(!playerHistory.isEmpty()) {\n            Move lastPlayer = playerHistory.get(playerHistory.size() - 1);\n            return Move.counterMove(lastPlayer);\n        }\n        return new RandomStrategy().nextMove(playerHistory, aiHistory);\n    }\n}<\/code><\/pre>\n<p><strong><u>Klasse RepeatMostFrequentPlayerMoveStrategy<br \/>\n<\/u><\/strong>Wiederholt die Geste, die der Spieler am h\u00e4ufigsten verwendet hat.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors.ai.strategies;\n\nimport games.rockpaperscissors.Move;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class RepeatMostFrequentPlayerMoveStrategy implements AIStrategy {\n    @Override\n    public Move nextMove(List&lt;Move&gt; playerHistory, List&lt;Move&gt; aiHistory) {\n        if(!playerHistory.isEmpty()) {\n            Map&lt;Move, Integer&gt; moveFrequency = new HashMap&lt;&gt;();\n            for(Move move : playerHistory) {\n                moveFrequency.put(move, moveFrequency.getOrDefault(move, 0) + 1);\n            }\n            return Collections.max(moveFrequency.entrySet(), Map.Entry.comparingByValue()).getKey();\n        }\n        return new RandomStrategy().nextMove(playerHistory, aiHistory);\n    }\n}<\/code><\/pre>\n<p><strong><u>Klasse CounterMostFrequentPlayerMoveStrategy<br \/>\n<\/u><\/strong>Der Gegenzug zu der Geste, die der Spieler am h\u00e4ufigsten verwendet hat.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors.ai.strategies;\n\nimport games.rockpaperscissors.Move;\nimport java.util.List;\n\npublic class CounterMostFrequentPlayerMoveStrategy implements AIStrategy {\n    @Override\n    public Move nextMove(List&lt;Move&gt; playerHistory, List&lt;Move&gt; aiHistory) {\n        if(!playerHistory.isEmpty()) {\n            Move mostFrequentMove = new RepeatMostFrequentPlayerMoveStrategy().nextMove(playerHistory, aiHistory);\n            \/\/ Counter the most frequent player&#039;s move\n            return Move.counterMove(mostFrequentMove);\n        }\n        return new RandomStrategy().nextMove(playerHistory, aiHistory);\n    }\n}<\/code><\/pre>\n<p><strong><u>RockPaperScissors Klasse<br \/>\n<\/u><\/strong>Klasse <strong><em>RockPaperScissorsGame<\/em><\/strong> implementiert die gesamte Spiellogik und verwaltet den Spielablauf, die Punkteaufzeichnung und die Strategieauswahl.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package games.rockpaperscissors;\n\nimport games.rockpaperscissors.ai.strategies.*;\nimport java.util.*;\n\npublic class RockPaperScissors {\n    private final int totalRounds;\n    private final List&lt;Move&gt; playerHistory = new ArrayList&lt;&gt;();\n    private final List&lt;Move&gt; aiHistory = new ArrayList&lt;&gt;();\n    private int playerScore = 0;\n    private int aiScore = 0;\n\n    private final List&lt;AIStrategy&gt; aiStrategies = Arrays.asList(\n            new RandomStrategy(),\n            new RepeatLastMoveStrategy(),\n            new CounterLastPlayerMoveStrategy(),\n            new RepeatMostFrequentPlayerMoveStrategy(),\n            new CounterMostFrequentPlayerMoveStrategy()\n    );\n\n    public RockPaperScissors(int totalRounds) {\n        this.totalRounds = totalRounds;\n    }\n\n    private Move getPlayerMove(int input) {\n        switch (input) {\n            case 1:\n                return Move.ROCK;\n            case 2:\n                return Move.PAPER;\n            case 3:\n                return Move.SCISSORS;\n            default:\n                Move playerMove = new RandomStrategy().nextMove(playerHistory, aiHistory);\n                System.out.println(&quot;Chybny vstup, vyberam za hraca: &quot; + playerMove);\n                return playerMove;\n        }\n    }\n\n    public void play() {\n        Scanner scanner = new Scanner(System.in);\n        Random random = new Random();\n\n        while (playerScore &lt; totalRounds &amp;&amp; aiScore &lt; totalRounds) {\n            System.out.println(&quot;Vyber si: (1) Kamen, (2) Papier, (3) Noznice&quot;);\n            Move playerMove = getPlayerMove(scanner.nextInt());\n            Move aiMove = aiStrategies.get(random.nextInt(aiStrategies.size()))\n                    .nextMove(playerHistory, aiHistory);\n            System.out.println(&quot;HRAC vybral: &quot; + playerMove);\n            System.out.println(&quot;AI vybrala: &quot; + aiMove);\n\n            \/\/ Compare moves\n            int result = Move.compareMoves(playerMove, aiMove);\n            if (result &gt; 0) {\n                System.out.println(&quot;Vyhral si toto kolo.&quot;);\n                playerScore++;\n            } else if (result &lt; 0) {\n                System.out.println(&quot;AI vyhrala toto kolo.&quot;);\n                aiScore++;\n            }\n\n            \/\/ Record moves\n            playerHistory.add(playerMove);\n            aiHistory.add(aiMove);\n\n            System.out.println(&quot;Aktualne skore - Hrac: &quot; + playerScore + &quot; | AI: &quot; + aiScore);\n            System.out.println();\n        }\n\n        if(playerScore &gt;= totalRounds) {\n                System.out.println(&quot;Gratulujeme! Vyhral si tuto hru!&quot;);\n        }\n        else {\n            System.out.println(&quot;AI vyhrala tuto hru! Skus ju porazit.&quot;);\n        }\n    }\n}<\/code><\/pre>\n<p><strong><u>Klasse Main<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import games.rockpaperscissors.RockPaperScissors;\n\npublic class Main {\n    public static void main(String[] args) {\n        RockPaperScissors game = new RockPaperScissors(20);\n        game.play();\n    }\n}<\/code><\/pre>\n<h2>Wie das Spiel funktioniert<\/h2>\n<ol>\n<li>Der Spieler w\u00e4hlt einen Zug (Stein, Papier, Schere) anhand der Eingabe.<\/li>\n<li>Die KI w\u00e4hlt ihre Strategie zuf\u00e4llig aus und w\u00e4hlt eine Geste, die auf dieser Strategie basiert.<\/li>\n<li>Das Spiel vergleicht die Z\u00fcge und aktualisiert den Punktestand.<\/li>\n<li>Das Spiel geht weiter, bis ein Spieler 20 Punkte erreicht.<\/li>\n<\/ol>\n<p>Der Ausgang eines 3-Runden-Spiels kann wie folgt aussehen:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4762 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/11\/vystup_hry_RockPaperScissors-1.webp\" alt=\"Rock Paper Scissors 3-Runden Spiel Ausgabe\" width=\"456\" height=\"1364\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/11\/vystup_hry_RockPaperScissors-1.webp 456w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/11\/vystup_hry_RockPaperScissors-1-100x300.webp 100w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/11\/vystup_hry_RockPaperScissors-1-342x1024.webp 342w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/p>\n<p>In diesem Java-Spiel spielt die k\u00fcnstliche Intelligenz sehr gut und es ist nicht so einfach, in einem Spiel mit mehreren Runden zu gewinnen.<\/p>\n<p>Hier k\u00f6nnen Sie den Quellcode von <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/11\/RockPaperScissors.zip\" target=\"_blank\" rel=\"noopener\">RockPaperScissors in Java herunterladen .<\/a><\/p>\n<p>Wenn Sie auf der Suche nach einem Job sind und ein <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\" target=\"_blank\" rel=\"noopener\">Java-Programmierer<\/a> sind, informieren Sie sich \u00fcber unsere <a href=\"https:\/\/msg-life.sk\/de\/mitarbeiter-benefits\/\" target=\"_blank\" rel=\"noopener\">Mitarbeitervorteile<\/a> und reagieren Sie auf unsere <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\" target=\"_blank\" rel=\"noopener\">aktuellen Stellenausschreibungen<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel erf\u00e4hrst du, wie du das Spiel Schere, Stein, Papier in Java mit k\u00fcnstlicher Intelligenz und verschiedenen Strategien programmieren kannst.<\/p>\n","protected":false},"author":14,"featured_media":4729,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-4883","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/comments?post=4883"}],"version-history":[{"count":2,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4883\/revisions"}],"predecessor-version":[{"id":9336,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4883\/revisions\/9336"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/4729"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=4883"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=4883"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=4883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}