Du operierst mit window.name. Du überschreibst zwar kurzzeitig ihren Wert, doch der wird zeitnah vom Browser wieder (auf einen String) zurückgesetzt. Da ein String kein value-Property hat, bekommst du in der Funktion undefined zurück.

Ein paar Lösungsoptionen:

a) Deklariere deine name-Variable mit const oder let. Dann wird sie auch nicht an das window-Objekt gehängt.

b) Deklariere die Variable innerhalb der Funktion.

c) Wähle einen anderen Variablennamen.

PS.: Name und Passwort wolltest du sicherlich konkatenieren, anstatt sie als einzelne Argumente an alert zu übergeben. Die alert-Funktion verwertet nur das erste Argument für die Ausgabe.

...zur Antwort

Dein Dictionary ist invalid.

  1. Eine Liste kann nicht als Key verwendet werden. Nutze einen String oder schreibe die Liste in ein Tupel um.
  2. Das Wertepaar Tupel/String - {"infinitiv": "eager"} braucht eine Gruppierung in geschweiften Klammern.
data = {
  "28-11-2023": {
    "1": {
      ("eifrig", "2"): {
        "infinitiv": "eager"
      }
    }
  }
}
entry = data["28-11-2023"]["1"][("eifrig", "2")]
print(entry["infinitiv"]) # eager
...zur Antwort

1) Die Bildgröße kannst du via CSS dem umgebenden Container anpassen. Eine vertikale Ausrichtung klappt via Flexbox und align-items.

Beispiel:

Im Markup werden zunächst alle Elemente ihrer Reihenfolge entsprechend in einem nav-Element aufgelistet. Die Bilder liegen in extra Containern, über die Attribute height und width kann der Browser das Seitenverhältnis des jeweiligen Bilds berechnen.

<nav class="navigation">
  <div class="logo">
    <img alt height="643" src="..." width="857">
  </div>
  <ul class="link-list">
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 2</a></li>
    <li><a href="#">Link 3</a></li>
  </ul>
  <div class="right-image">
    <img alt="..." height="643" src="..." width="857">
  </div>
</nav>

Die Bildgröße, auf die der Browser ein Bild anschließend skalieren soll, wird via CSS bestimmt. Konkret angegeben wird nur die Containerbreite. Die Bildhöhe wird dynamisch anhand des Seitenverhältnis berechnet.

img {
  height: auto;
  width: 100%;
}

.logo {
  width: 100px;
}

.right-image {
  width: 150px;
}

Das Logo skaliert somit auf eine Pixelgröße von 100 x 75, das rechte Bild auf 150 x 113.

Die Ausrichtung / Positionierung der Elemente wiederum könnte folgendermaßen umgesetzt werden:

.navigation,
.link-list {
  column-gap: 10px;
  display: flex;
}

.link-list {
  align-items: center;
  background: yellow; /* for demo only */
  list-style-type: none;
  margin: 0;
  padding: 0;
}

Das Flexboxlayout positioniert alle Elemente horizontal nebeneinander. Da die Linkliste die Links als separate Kindelemente aufführt, muss sie ebenfalls zur Flexbox werden. Mit align-items werden die Listeneinträge vertikal zentriert.

Die Höhe der Linkliste richtet sich dabei an dem höchsten Bildelement in der Navigation aus. Wenn du das nicht möchtest, gib dem Element eine individuelle Höhe (height).

2) Du kannst entweder relative Pfade bilden oder absolute Pfade, ausgehend vom Rootverzeichnis deiner Webseite.

Das folgende Beispiel geht einmal von so einer Dateistruktur aus:

root
  home
    index.html
    styles
      styles.css
  news
    story1.html
    story2.html
  images
    news
      image1.jpg
      image2.jpg

HTML (root/home/index.html):

<!doctype html>
<head>
  <title>Home</title>
  <meta charset="utf-8">
  <link href="styles/style.css" rel="stylesheet">
</head>
<body>
  <figure>
    <img alt="..." src="../images/news/image1.jpg">
    <figcaption>
      <p>Some text about story 1</p>
      <a href="../news/story1.html">Read more</a>
    </figcaption>
  </figure>
  <figure>
    <img alt="..." src="../images/news/image2.jpg">
    <figcaption>
      <p>Some text about story 2</p>
      <a href="../news/story2.html">Read more</a>
    </figcaption>
  </figure>
</body>

Die CSS-Datei liegt in einem Subverzeichnis. Man kann sie wie angegeben über Verzeichnisname/Dateiname ansteuern. Der Slash steht für den Verzeichniswechsel bzw. für das Öffnen des zuvor angegebenen Verzeichnisses (Suche styles > Öffne > Suche style.css).

In einer Langform könnte man auch ./styles/style.css schreiben. Der Punkt kennzeichnet, dass man vom aktuellen Verzeichnis (in diesem Fall home) aus startet.

Um in ein übergeordnetes Verzeichnis zu wechseln, wird ../ genutzt. Bei ../news/story1.html wechselt man zuerst in das Rootverzeichnis und ausgehend davon dann in den Unterordner news.

Wenn deine Webseite über einen Webserver ausgespielt wird und ein Pfad mit Slash beginnt, liegt der Kontextstart im Rootverzeichnis. Das heißt, auf die story1.html könntest du auch via /news/story1.html zugreifen.

Eine dritte Option, um Pfade anzugeben, wären absolute Adressen. Die würden beispielsweise. den Domainnamen inkludieren (Beispiel.: https://deine-webseite.de/news/story1.html). Im Vergleich zu den zuvor vorgestellten Verzeichnisangaben haben sie allerdings den Nachteil, nicht so flexibel zu sein, denn sollte sich einmal der Stammpfad/der Domainname ändern, müsstest du im gleichen Zug auch alle Pfadangaben anpassen.

...zur Antwort

Von offizieller Seite wird so ein Verfahren nicht unterstützt. Wenn die Bibliothek auf Änderungen/Features von Version 16 fußt, die in Version 15 unbekannt sind und von dir nicht via Polyfill o.ä. ausgeglichen werden können, wird eine Integration nicht klappen.

Daher wäre meine Empfehlung, beide Versionen anzugleichen. Entweder durch ein Upgrade des Projekts auf Version 16 oder ein Downgrade der Bibliothek auf Version 15.

...zur Antwort

Ein absolut positioniertes Element richtet sich am nächstliegenden relativ positionierten Elternelement aus. Wenn es keines gibt, dient das body-Element als letztmöglicher Anker.

Beispiel:

<!doctype html>
<title>Example</title>
<link href="style.css" rel="stylesheet">
<body>
  <div class="wrapper">
    <div class="container">
      <div>First</div>
      <div class="top">Top</div>
    </div>
  </div>
</body>

style.css:

.wrapper {
  background: yellow;
  padding-top: 10px;
  position: relative;
}

.container {
  background: orange;
  padding-top: 10px;
  position: relative;
}

.top {
  background: blue;
  position: absolute;
  top: 0;
}

Für .top ist hier .container der Ankerpunkt zur Positionierung. Die y-Position (top) geht von der linken oberen Ecke des .container-Elements aus.

Wenn man nun einmal das position-Property aus der CSS-Regel für .container entfernt, richtet sich .top an .wrapper aus, da dies nun das nächstliegende relativ-positionierte Elternelement ist.

Wenn auch aus der Regel für .wrapper das position-Property entfernt wird, ist das body-Element der Ankerpunkt.

Dieses Verhalten erlebst du ebenso in deinem Beispiel im Tailwind-Editor. Das Element mit dem Text One richtet sich am body-Element aus, denn es gibt in der Hierarchie kein dazwischenliegendes Elternelement mit einer explizit relativen Positionierung.

...zur Antwort

Methodenaufrufe sind direkt im Klassenkörper nicht zulässig. Du brauchst einen Methodenkontext.

Beispiel:

class Person
{
  private string _name;

  public string GetName()
  {
    return _name;
  }

  public void IntroduceHimself()
  {
    Console.WriteLine("I am " + GetName());
  }
}

Überlege dir, wann du ControlSpeed aufrufen möchtest. In Unity gibt es dazu Hooks wie Awake, Start oder Update (siehe Event Functions und Execution Order).

...zur Antwort

Du kannst die Lichterkette via SVG zeichnen und animieren. Die Grafik kann anschließend als border-image verwendet werden (Beispiel).

Alternativ könntest du die Lichterkette auch mit JavaScript auf einem canvas-Element zeichnen (entweder direkt mit der Canvas API oder du nutzt eine Bibliothek wie p5.js). Das div-Element muss relativ dazu positioniert werden.

Beispiel:

<div style="position: relative">
  <canvas height="400" width="600"><!-- rectangle with bubbles ... --></canvas>
  <div style="left: 10px; position: absolute; top: 10px">Some text</div>
</div>
...zur Antwort

Die grundsätzliche Frage wäre wohl, wieso du für dein Spiel mehrere Fenster benötigst und ob sich nicht eine Alternative finden lässt.

PyGame ist an sich auf Ein-Fenster-Anwendungen ausgelegt. Für mehrere parallel laufende Fenster wäre eine Aufteilung in verschiedene Prozesse am naheliegendsten, wobei das auch mit Overhead verbunden ist. Immerhin hast du dann mehrere Interpreter-Instanzen offen und müsstest schauen, wie du am besten zwischen ihnen kommunizierst.

Sollte es bei dir lediglich darum gehen, das Spiel in verschiedene Szenen/Level zu unterteilen, dann belasse es bei einem Fenster (und einer Game Loop). Wenn eine Szene überschrieben werden soll, fülle den Bildschirm einfach weiß

screen.fill(255, 255, 255)

und zeichne anschließend deine neuen Spielkomponenten.

...zur Antwort
Aber wie zum Teufel kriege ich es hin, auf solche Logiken selber zu kommen?

Indem du versuchst, das Problem erst zu verstehen und anschließend in Einzelprobleme zu zerlegen.

Im Fall der Pyramide kennst du die Endform:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

Man kann zunächst feststellen, dass du n Zeilen brauchst, wobei n der Pyramidenhöhe entspricht.

Teilproblem 1: Ausgabe aller Pyramidenzeilen

n = Pyramidenhöhe

wiederhole n-mal:
  gib Zeile aus

Nun fehlt noch eine Überlegung, wie eine Zeile aufgebaut werden muss. Jede Zeile zählt von 1 an bis zur jeweiligen Zeilenhöhe (die erste Zeile zählt bis 1, die zweite Zeile zählt bis zwei, die dritte Zeile zählt bis drei, ...).

Teilproblem 2: Ausgabe einer einzelnen Pyramidenzeile

m = Zeilenhöhe
spalte = 1

wiederhole m-mal:
  gib Spalte aus
  spalte = spalte + 1

gib Zeilenumbruch aus

Beide Schritte werden in Folge miteinander kombiniert:

n = Pyramidenhöhe
zeile = 1

wiederhole n-mal:
  m = zeile
  spalte = 1

  wiederhole m-mal:
    gib Spalte aus
    spalte = spalte + 1

  gib Zeilenumbruch aus
  zeile = zeile + 1

Ich habe das soweit in Pseudocode formuliert. Struktogramme oder Programmablaufpläne würden sich dafür aber ebenso eignen. Die Hauptsache ist, dass die Lösungsschritte erst einmal mit möglichst einfachen Mitteln beschrieben werden.

Nach ein paar erfolgreichen Tests (via Testeinsetzungen) kann die tatsächliche Übersetzung in die jeweilige Programmiersprache erfolgen. Mache nicht den Fehler, schon von Anfang an deine Algorithmen in Programmcode von C (o.ä.) formulieren zu wollen, denn tendentiell lässt du dich so mehr von Syntaxregeln ablenken und machst es dir somit nur schwerer.

Eine Eins-zu-eins-Übersetzung könnte zunächst so aussehen:

int hoehe = 5;
int zeile = 1;

while (zeile <= hoehe) {
  int m = zeile;
  int spalte = 1;

  while (spalte <= m) {
    printf("%d ", spalte);
    spalte = spalte + 1;
  }

  printf("\n");
  zeile = zeile + 1;
}

Im Anschluss kann man noch schauen, ob der Code (z.B. in seiner Formulierung) optimierbar ist:

int hoehe = 5;

for (int zeile = 1; zeile <= hoehe; ++zeile) {
  for (int spalte = 1; spalte <= zeile; ++spalte) {
    printf("%d ", spalte);
  }

  printf("\n");
}

Es macht Sinn, dieses Prinzip für das Bilden von Algorithmen möglichst viel zu üben. In einigen meiner Beiträge auf GF habe ich schon einmal Aufgaben vorgeschlagen (siehe hier, hier und hier), die du bearbeiten könntest. Auf Webseiten wie CodingBat, Edabit, Exercism oder Projekt Euler findest du weitere Ideen.

(...) aber wieso kann ich die Variante in C nicht in Python nutzen (...)

C und Python sind zwei unterschiedliche Programmiersprachen mit eigenen Syntaxregeln. In Python gibt es nicht diese Art an Zählschleife mit Bedingungsausdruck, so wie in C.

Alternativ zu for...in könntest du allerdings eine while-Schleife einsetzen. Die ist in diesem Kontext der while-Schleife von C wieder ähnlicher.

spalte = 1

while spalte <= zeile:
  print(spalte + " ")
  spalte += 1
...zur Antwort
Ich suche also nach einer Website wo man eben Programme online erstellen kann (...)

Es gibt diverse Plattformen (Cloud9, CodePen, replit, ...), die für verschiedene Programmiersprachen eine Entwicklungsumgebung zur Verfügung stellen. Allerdings gibt es hierbei auch die Limitation, keine (desktop-)nativen grafischen Oberflächen entwickeln/testen zu können. Du müsstest dich auf webbasierte Oberflächen beschränken.

(...) und zu der es hinreichend Tutorials auf Youtube gibt.

Es ist zwar gut, nach einer Programmiersprache zu suchen, zu der es auch viele Tutorials gibt. Auf das Medium YouTube als einzige Lernquelle würde ich mich deswegen aber nicht unbedingt fokussieren, zumal du als Anfänger dort leicht auf Videos stoßen kannst, die Inhalte nicht gut oder im schlimmsten Fall auch falsch übermitteln. In diesem Zusammenhang würde ich beispielsweise empfehlen, Crashkurse eher zu meiden (dazu gehören auch Videos à la Lerne XY in Z Minuten/Stunden/...) und darauf zu achten, dass du dich nicht in Abtippkursen wiederfindest.

Ich würde eher dazu raten, die Quellenauswahl breiter zu streuen.

Schau als Erstes nach der offiziellen Webpräsenz deiner gewählten Programmiersprache, oft findest du dort bereits verschiedene Verweise (Manual, Lernplattformen, Buchreferenzen, u.ä.).

Als zweites verweise ich persönlich gern auf Bücher. Die Autoren sind in der Regel langjährige Fachexperten, die wissen, wie sie für ihren Leser einen roten Faden ausrollen. Es gibt einige Buchverlage (z.B. Apress, Manning, O'Reilly, packt, Rheinwerk), die sich gewissermaßen auf das Thema Programmierung spezialisiert haben.

Gute Online Lernkurse findest du bspw. auf der Hyperskill-Plattform. Für Videokurse kann es sich lohnen, bei Pluralsight oder Udemy nachzuschauen.

Je spezifischer Wahl könnte man eventuell noch zusätzliche Quellenempfehlungen geben.

Wie wähle ich die passende Programmiersprache aus?

Zuerst wäre es gut sich zu überlegen, was man vorrangig für Software entwickeln möchte (für welche Zielplattform: Android/iOS/macOS/Windows/Web, ...; welche Art: kleine Tools für Prozessautomatisierungen/Desktopanwendungen mit grafischer Oberfläche/Spiele/Plugins oder Mods/...) bzw. für welchen Anwendungsbereich man sich besonders interessiert. Je nachdem kommen bestimmte Sprachen eher infrage oder scheiden völlig aus.

Üblicherweise gibt es je Programmiersprache bestimmte Fokuspunkte (z.B. auf eine Zielplattform), bestimmte Eigenschaften (Einfachheit, Kürze, Portabilität, etc.) oder für einen Zielsektor gibt es schlichtweg schon mehr Ressourcen, die eine Entwicklung vereinfachen. Python beispielsweise ist dafür konzipiert, schnell kleine Tools (bspw. zur Automatisierung) entwickeln zu können, eignet sich dafür für komplexere Anwendungen eher weniger. Andersherum kannst du mit C++ oder Java leistungsstarke, stabile Programme entwickeln, benötigst für die Implementation aber mehr Zeit, da die Syntax der Sprache jeweils ausschweifender ist und mehr Faktoren berücksichtigt werden müssen.

Aus deiner Projektidee und deinen vorherigen Kriterien lassen sich derzeit folgende Eigenschaften/Anforderungen ableiten:

  • Du möchtest eine grafische Oberfläche haben
  • Es gibt ein möglicherweise komplexes Objektmodell im Hintergrund
  • Es gibt viele Lernquellen
  • Entwicklung und Ausführung finden online (in einem Webbrowser) statt

Du könntest dich JavaScript widmen und die Oberfläche mit HTML (Markupsprache) und CSS (Stylesheet-Sprache) erstellen. Das heißt, letzten Endes würdest du eine Webanwendung entwickeln.

Ein Einstieg in die Webentwicklung ist dabei sicherlich leichter, wenn du mit HTML und CSS startest und dich erst im Anschluss der Programmierung widmest.

Mehrere gute Online-Quellen zu JavaScript habe ich in diesem Beitrag schon einmal aufgelistet. Auf MDN und MediaEvent findest du zudem Artikel/Tutorials zu HTML und CSS. SelfHTML und W3Schools (als zusätzliches Nachschlagewerk) könnte man an der Stelle noch anfügen.

Sofern du Interesse daran hast, Spiele oder grafische (flüssige) Simulationen zu programmieren, schau dir p5.js an. Passende Übungen / Tutorials findest du auf diesen Seiten:

  • The Coding Train
  • HappyCoding (p5-Tutorials für Miniprojekte)
  • timrodenbroeker.de (p5-Tutorials für Miniprojekte)
Wie kann man vernünftig Programmieren lernen?

Neben der Auswahl guter Lernquellen würde ich empfehlen, dass du:

  • dir bereits von Beginn an eine Entwicklungsumgebung einrichtest, in der du experimentieren/üben kannst
  • versuchst, dich parallel zur Theorie praktisch an dem Gelernten/Angelesenen auszuprobieren
  • dir bewusst Zeit zum Lernen nimmst: Starte nicht sofort mit deinem Wunschprojekt, fange stattdessen klein an, suche ab und an nach passenden Übungsaufgaben (entweder auf den oben genannten Seiten oder Plattformen wie Edabit, Exercism, usw.). Haste nicht durch die verschiedenen Themengebiete.
...zur Antwort
python - dict -Iterite nicht durch?

dict

 {"26-11-2023": {"1": {"enos": {"infinitivee": "enormous", "k": "b"}},"25-11-2023": {"1": {"enor": {"infinitivee": "enormous", "k": "b"}}}}}

code:

def read_json():
    daters = []
    # sefly read json file
    try:
        with open('German-English_wordlist.json', 'r', encoding="utf-8-sig") as f:
            data = json.load(f)
    except json.decoder.JSONDecodeError:
        print("\033[91m[!!] File empty or anything wrong in file\033[0m", end=" - ")
        print("\033[93mTry running `add` command\033[0m", end="\n")
        return
    except FileNotFoundError:
        print("\033[91m[!!] File not found\033[0m", end=" - ")
        print("\033[93mTry running `add` command to create\033[0m", end="\n")
        return
    except Exception:
        print("\033[91m[!!]Unknown error \033[0m", end=" - ")
        print("\033[93mTry to report\033[0m", end="\n")
        print(Exception)
        return
    # check valid vocabulary daters
    #KeyError: '25-11-2023'
    try:
        for key in data.keys():
            print(data)
            print(data['25-11-2023'])
            print(key)
            if timestamp >= int(datetime.datetime.strptime(key, '%d-%m-%Y').strftime("%s")) and timestamp != "---":
                daters.append(key)

    except UnboundLocalError:
        print("\033[91m[!!] File empty or anything wrong in file\033[0m", end=" - ")
        print("\033[93mTry running `add` command\033[0m", end="\n")
        return
    # if not a dater in then print finish and break else choice random on of them
    print(daters)
    try:
        dater = random.choice(daters)
    except IndexError:
        print("\033[93mFinish\033[0m\n")
        return

    queried = [key for key in data[dater].keys()]
    queried = random.choice(queried)
    keys = [key for key in data[dater][queried].keys()]
    key = random.choice(keys)
    forms = [key for key in data[dater][queried][key].keys()]

    # depending on the mode asking for the form of the word
    if False:
        form = random.choice(forms)
    else:
        form = "infinitivee"

    value = data[dater][queried][key][form]

    return data, dater, queried, key, form, value

output:

{'26-11-2023': {'1': {'enos': {'infinitivee': 'enormous', 'k': 'b'}}, '25-11-2023': {'1': {'enor': {'infinitivee': 'enormous', 'k': 'b'}}}}}
Traceback (most recent call last):
  File "/media/deffer/User_data/Tools/vokabularis/vokabularis.py", line 135, in <module>
    data, choused_dater, queried, key, form, value = read_json()
  File "/media/deffer/User_data/Tools/vokabularis/vokabularis.py", line 44, in read_json
    print(data['25-11-2023'])
KeyError: '25-11-2023'

Wenn ich mein dictionary zum volgendem andere, funktioniert alles.

{"25-11-2023": {"1": {"enor": {"infinitivee": "enormous", "k": "b"}}}, "26-11-2023": {"1": {"enos": {"infinitivee": "enormous", "k": "b"}}}}

code:

ist der selbe wie davor

Output:

Successed
...zur Frage

Schau dir dein JSON einmal formatiert (mit Einrückungen) an (bspw. mit diesem Online-Formatter). Die Strukturen deiner JSONs unterscheiden sich. Im ersteren Fall ist 25-11-2023 ein Untereintrag im 26-11-2023-Objekt, im zweiteren Fall ist es gleichrangig.

...zur Antwort

Der Konstruktor ist eine spezielle Art einer Methode, die beim Erstellen eines Objekts der Klasse aufgerufen wird. Sie soll deine Felder mit den Werten befüllen, die in den Parametern stehen.

Beispiel:

class Person {
  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

// usage
Person testPerson1 = new Person("Lena", 24);
Person testPerson2 = new Person("Rupert", 27);

Die Klasse Person hat zwei Felder (name, age). Der definierte Konstruktor erwartet zwei Parameter, die beim Erstellen eines Personenobjekts angegeben werden müssen. Die Werte beider Parameter werden innerhalb des Konstruktorkörpers den Feldern zugeordnet.

...zur Antwort

Du hast eine Endlosschleife erzeugt, denn ein Fund wird von dir ignoriert.

Schau dir dazu die Zwischenwerte an, die bei Programmablauf erzeugt werden:

a = 0
b = 9

0 <= 9 ist wahr
  m = 4
  8 <= 5 ist unwahr
  a = 5

5 <= 9 ist wahr
  m = 7
  8 <= 8 ist wahr
  b = 7

5 <= 7 ist wahr
  m = 6
  8 <= 7 ist unwahr
  a = 7

7 <= 7 ist wahr
  m = 7
  8 <= 8 ist wahr
  b = 7

usw. ...

Bei Fund sollte die Schleife stattdessen beendet werden.

while a <= b:
  counter += 1

  m = (a + b) // 2

  if num == arr[m]:
    return counter

  if num < arr[m]:
    b = m
  else:
    a = m + 1
...zur Antwort

Auf Hyperskill findest du gute Python-Kurse, die auch kleine praktische Übungen inkludieren. Allerdings würde ich dir empfehlen, noch weitere Übungsaufgaben aus verschiedenen Quellen zu beziehen.

Ein paar Beispielseiten:

  • CodinGame
  • CodingBat
  • Edabit
  • Exercism
  • GeeksForGeeks
  • Hackinscience
  • Practice Python
  • Project Euler (mathematische Aufgaben/Rätsel)
  • w3resource
...zur Antwort

An sich (technisch/funktional) können PlayerPrefs auch die Spielerposition (aufgeteilt in x/y/z) oder die Szenen-ID speichern. Ich würde mir für solche Spielweltdaten allerdings eher ein eigenes Speicher- und Ladeskript schreiben, welches die Daten wahlweise als JSON/XML/INI (zumindest für die Entwicklungszeit) oder binär speichert. Es erlaubt dir mehr Flexibilität (Datenformat, Ablageort) und eine Separation (Spielweltdaten und Spieleinstellungen; erstere Gruppe könnte bei Bedarf noch in weitere Dateien/Datenquellen zerlegt werden).

Für deine Spielerdaten könnte es demzufolge eine Datenklasse geben:

[Serializable]
public PlayerState
{
  public string SceneId { get; set; }

  public Vector3 Position { get; set; }
}

Laden und Speichern kann man via StreamReader / StreamWriter. Im folgenden Fall werden die Daten in JSON gesichert.

private string _dataLocation = Path.Combine(Application.persistentDataPath, "playerData.json");

public T Load<T>()
{
  using (var reader = new StreamReader(_dataLocation))
  {
    var data = reader.ReadToEnd();
    return JsonUtility.FromJson<T>(data);
  }
}

public void Save<T>(T data)
{
  using (var writer = new StreamWriter(_dataLocation))
  {
    var jsonData = JsonUtility.ToJson(data);
    writer.Write(jsonData);
  }
}
...zur Antwort

Die Entscheidung über die Struktur hängt vor allem von dem Konzept hinter diesem Spielmodus ab.

  • Wenn die Partien zwischen zufälligen Spielern, die sich nicht gegenseitig kennen, ausgetragen werden sollen, brauchst du einen zentralen Server. Der könnte entweder das komplette Spiel leiten oder zumindest das Finden von Paaren arrangieren (Clients verbinden sich mit zentralem Server > Paarbildung > Clients bekommen jeweils Verbindungsdaten des ihm zugewiesenen Partners für P2P).
  • Für private Partien genügt eine P2P-Verbindung / eine Verbindung, bei der einer der beiden Spieler den Host (Serverrolle) stellt. Die Verbindungsdaten müssen sich beide Spieler privat austauschen.

Für die konkrete Implementation kannst du Sockets verwenden (etwas Komplexeres benötigst du sicherlich nicht) oder du schaust dir eine der zahlreichen Bibliotheken an, die bereits für Multiplayerspiele mit Pygame entwickelt wurden (z.B. pygnetic, PodSixNet).

...zur Antwort

Via String-Konkatenation:

System.out.println(erste_Zahl + " " + operator + " " + zweite_Zahl);

Oder via Formatter:

System.out.printf("%s %c %s%n", erste_Zahl, operator, zweite_Zahl);

Zusammen mit dem Ergebnis:

double ergebnis = // calculate ...

// concatenation
System.out.println(erste_Zahl + " " + operator + " " + zweite_Zahl + " = " + ergebnis);

// format
System.out.printf("%s %c %s = %.2f%n", erste_Zahl, operator, zweite_Zahl, ergebnis);

PS.: Für den Operator liest du einen Character ein. Daher wäre der Datentyp char für die Variable auch besser geeignet. Beim Lesen des Codes wird so direkt klar, welcher Werttyp in der Variable steckt (ein Zeichen, keine Zahl) und (in deinem Fall implizite) Typecasts sind nicht notwendig.

...zur Antwort

Steckt erst einmal das Anwendungsspektrum ab, was die Webseite denn nun erfüllen soll (use cases).

Eine reine Aufführung des Kinoprogramms braucht beispielsweise keinen Kunden. Dieses Objekt wird erst relevant, wenn über die Seite auch Reservierungen durchgeführt werden sollen, wobei dann auch spezifische Anforderungen hinzukommen können (Bsp.: Pärchensitz, irgendwelche Kinopakete: Film + Getränk, o.ä.).

Bei Rezensionen wiederum wäre die Frage, wer die schreiben darf: Nur Kunden? Nur Nutzer mit Account? Alle?

Ein gutes Werkzeug, um so ein System abzubilden, wäre ein Anwendungsfalldiagramm.

...zur Antwort

Schau in die Designer.cs, die zu deinem Form gehört. In dieser muss das Feld enthalten sein.

Beispiel:

Auf Form1 wurde ein Textfeld gesetzt. Folglich gibt es in Form1.Designer.cs ein entsprechendes Feld:

partial class Form1
{
  /* ... */

  private System.Windows.Forms.TextBox textBox1;
}

Wenn dem nicht so ist, dann stelle sicher, dass du dein Projekt schon gespeichert hast. Im Zweifel kann die Komponente auch gelöscht und noch einmal neu angelegt werden. Spätestens nach Speichern der Form (im Designmodus) sollte das Feld generiert werden.

...zur Antwort