JavaScriptsSpiele

Vier gewinnt

Der Klassiker mit den fallenden Steinen — gegen den Rechner oder zu zweit, mit Gewinnlinie und Punktestand.

Sieben Spalten, sechs Reihen, abwechselnd einen Stein einwerfen: Wer zuerst vier in einer waagerechten, senkrechten oder schrägen Linie hat, gewinnt. Vier gewinnt ist in zwei Minuten erklärt und trotzdem nie ganz durchschaut — genau die Mischung, die ein gutes Spiel ausmacht.

Klickt auf eine Spalte, um euren Stein einzuwerfen; er fällt bis auf den untersten freien Platz. Ihr könnt gegen den Rechner spielen oder zu zweit an einem Gerät. Die Gewinnlinie wird am Ende hervorgehoben, und der Punktestand läuft über mehrere Partien mit.

Der Rechner spielt nicht perfekt, aber auch nicht dumm: Er nimmt einen sofortigen Sieg mit, verhindert euren, wenn er ihn sieht, und bevorzugt sonst die mittleren Spalten. Diese Vorliebe für die Mitte ist kein Zufall — durch das mittlere Feld laufen die meisten möglichen Viererlinien, und deshalb ist es der wertvollste Platz auf dem Brett.

Übrigens ist Vier gewinnt mathematisch vollständig gelöst: 1988 zeigten James Allen und Victor Allis unabhängig voneinander, dass der Anziehende bei fehlerfreiem Spiel immer gewinnt — vorausgesetzt, er beginnt in der mittleren Spalte. Bei jedem anderen Eröffnungszug wird es ein Unentschieden oder er verliert.

Verwandtes im Archiv: Tic Tac Tile ist der kleine Bruder mit drei in einer Reihe, Mühle ein weiterer Brettklassiker und Mastermind ein Spiel mit ganz anderer Denkart.

Spiele Baujahr 2026 läuft in deinem Browser
Script von kostenlose-javascripts.de

So funktioniert das Script

Drei Dinge muss ein Vier-gewinnt-Programm können: Steine fallen lassen, Viererlinien erkennen und für den Rechner einen Zug wählen. Der zweite Teil ist der lehrreichste.

function stelle(spalte, reihe) {
  return reihe * SPALTEN + spalte;
}

Das Brett ist kein zweidimensionales Feld, sondern eine flache Liste aus 42 Zahlen. Diese Hilfsfunktion rechnet Spalte und Reihe in die Position darin um — dieselbe Umrechnung wie beim Polybios-Quadrat. Der Vorteil einer flachen Liste: Kopieren, Leeren und Vergleichen sind je eine Zeile.

for (let reihe = REIHEN - 1; reihe >= 0; reihe--) {
  if (felder[stelle(spalte, reihe)] === 0) return reihe;
}
return -1;

Das Fallenlassen: Die Suche beginnt unten und geht nach oben, der erste freie Platz ist das Ziel. Die -1 als Rückgabewert für „Spalte voll" ist eine gängige Übereinkunft — Positionen sind nie negativ, deshalb ist der Wert eindeutig als Fehlanzeige erkennbar.

const richtungen = [[1, 0], [0, 1], [1, 1], [1, -1]];
for (const vorzeichen of [1, -1]) {
  let s = spalte + dx * vorzeichen;
  …
}

Hier steckt der Kern. Statt das ganze Brett nach Viererlinien abzusuchen, wird nur vom eben gesetzten Stein aus geschaut — er muss ja Teil jeder neuen Linie sein. Vier Richtungen genügen: waagerecht, senkrecht und die beiden Diagonalen. Die inneren Schleife läuft jede Richtung einmal vorwärts und einmal rückwärts, deshalb die beiden Vorzeichen. Aus acht Richtungen werden so vier Paare — und aus 69 möglichen Viererlinien auf dem Brett werden vier kurze Zählungen.

felder[stelle(spalte, reihe)] = spieler;
const gewinnt = pruefeSieg(spalte, reihe, spieler) !== null;
felder[stelle(spalte, reihe)] = 0;

So denkt der Rechner einen Zug voraus: Er setzt probeweise, prüft und nimmt zurück. Dieses „Setzen, Testen, Zurücknehmen" ist das Grundmuster jeder Spielsuche — auch die großen Schachprogramme arbeiten so, nur viele Züge tief. Wichtig ist, dass das Zurücknehmen wirklich in jedem Fall geschieht, sonst bleiben Geisterzüge auf dem Brett stehen.

for (const spieler of [2, 1]) { … }

Eine hübsche Abkürzung: Dieselbe Schleife prüft erst, ob der Rechner selbst gewinnen kann, und dann, ob der Mensch es im nächsten Zug könnte. Die Reihenfolge ist entscheidend — der eigene Sieg geht immer vor dem Verhindern des gegnerischen, denn wer gewinnen kann, muss nichts mehr abwehren.

const wertung = [1, 2, 3, 4, 3, 2, 1];
for (let i = 0; i < wertung[spalte]; i++) auswahl.push(spalte);

Für den Fall ohne Zwang wird gewichtet gewürfelt: Die mittlere Spalte kommt viermal in den Lostopf, die äußeren nur einmal. So spielt der Rechner meist vernünftig, bleibt aber unberechenbar — ein rein deterministischer Gegner wäre nach drei Partien durchschaut. Diese Art, Wahrscheinlichkeiten über mehrfache Einträge abzubilden, ist der einfachste Weg zu gewichtetem Zufall.

Zum Anpassen: Ein deutlich stärkerer Gegner entsteht, wenn ihr die Vorausschau auf mehrere Züge ausdehnt — das Verfahren heißt Minimax und braucht eine Bewertungsfunktion für Stellungen. Wollt ihr ein anderes Brettmaß, ändert ihr nur SPALTEN und REIHEN; die Siegprüfung kommt ohne feste Zahlen aus.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Spiele