← Zurück zur Startseite

🎮 Labor: Mini-Spiele in C

Kleine, spielbare Programme — nur mit dem, was ihr schon könnt
K59 · Einführung in die IKT · HTW Berlin
Dauer: ca. 180 Minuten

🎯 Worum geht's heute?

Ihr baut kleine Spiele, die man wirklich spielen kann — eines nach dem anderen. Ihr braucht nur, was ihr aus Grundlagen schon kennt:

🧰 Das einzige Neue: Zufallszahlen

Spiele brauchen Zufall (eine geheime Zahl, der Computer-Zug …). In C geht das so — diese Zeilen einfach übernehmen:

#include <stdio.h> #include <stdlib.h> // für rand() #include <time.h> // für time() // EINMAL ganz am Anfang von main() — startet den Zufall: srand(time(NULL)); // Danach: rand() % N gibt eine Zufallszahl von 0 bis N-1 int wuerfel = rand() % 6 + 1; // 1 bis 6 int zahl = rand() % 100 + 1; // 1 bis 100

Merksatz: rand() % N = „eine Zufallszahl von 0 bis N−1". Mit + 1 verschiebt man den Start.

🛠️ So testet ihr ein Spiel (in VS Code)

Wie in Grundlagen — alles direkt in VS Code: Datei spiel.c anlegen, dann das integrierte Terminal öffnen (Menü Terminal → Neues Terminal) und dort:

Wichtig: im Terminal starten — nicht über den Ausgabe-Bereich des ▶-Knopfes. Nur im Terminal könnt ihr eure Tipps mit der Tastatur + Enter eingeben (das braucht scanf).


1 Zahlenraten Pflicht · 45 Min

Der Computer denkt sich eine geheime Zahl von 1 bis 100. Ihr ratet — und das Programm sagt jedes Mal „zu klein" oder „zu groß", bis ihr sie trefft. Am Ende zeigt es, wie viele Versuche ihr gebraucht habt.

🎬 So soll es laufen

Ich denke an eine Zahl zwischen 1 und 100. Dein Tipp: 50 Zu gross! Dein Tipp: 25 Zu klein! Dein Tipp: 37 Richtig! Du hast 3 Versuche gebraucht.

🧩 Welche Bausteine?

📝 Euer Gerüst (Lücken füllen)

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); int geheim = rand() % 100 + 1; // fertig: geheime Zahl 1..100 int tipp = 0; int versuche = 0; printf("Ich denke an eine Zahl zwischen 1 und 100.\n"); // TODO: while-Schleife, solange tipp != geheim : // 1) "Dein Tipp: " ausgeben, dann mit scanf("%d", &tipp) einlesen // 2) versuche um 1 erhöhen // 3) if (tipp < geheim) -> "Zu klein!" else if (tipp > geheim) -> "Zu gross!" printf("Richtig! Du hast %d Versuche gebraucht.\n", versuche); return 0; }
Tipp: Der Kopf der Schleife ist while (tipp != geheim) { ... }. Alles, was sich pro Runde wiederholt (fragen, einlesen, vergleichen), kommt zwischen die geschweiften Klammern.
erst selbst versuchen!
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); int geheim = rand() % 100 + 1; int tipp = 0; int versuche = 0; printf("Ich denke an eine Zahl zwischen 1 und 100.\n"); while (tipp != geheim) { printf("Dein Tipp: "); scanf("%d", &tipp); versuche++; if (tipp < geheim) printf("Zu klein!\n"); else if (tipp > geheim) printf("Zu gross!\n"); } printf("Richtig! Du hast %d Versuche gebraucht.\n", versuche); return 0; }

2 Schere – Stein – Papier 45 Min

Ihr wählt Schere, Stein oder Papier (als Zahl), der Computer würfelt zufällig — und das Programm sagt, wer gewinnt.

🎬 So soll es laufen

Schere(0) Stein(1) Papier(2)? 1 Computer hatte: 0 Du gewinnst!

🧩 Welche Bausteine?

📝 Euer Gerüst

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); int computer = rand() % 3; // 0=Schere, 1=Stein, 2=Papier int spieler; printf("Schere(0) Stein(1) Papier(2)? "); scanf("%d", &spieler); printf("Computer hatte: %d\n", computer); // TODO: // if (spieler == computer) -> "Unentschieden!" // else if (Spieler gewinnt) -> "Du gewinnst!" // else -> "Computer gewinnt!" return 0; }
Tipp — wann gewinnt der Spieler? Bei genau diesen drei Fällen: Schere(0) schlägt Papier(2), Stein(1) schlägt Schere(0), Papier(2) schlägt Stein(1). In C verbindet man die drei mit || (oder), und jedes Paar mit && (und).
erst selbst versuchen!
if (spieler == computer) { printf("Unentschieden!\n"); } else if ((spieler == 0 && computer == 2) || // Schere schlägt Papier (spieler == 1 && computer == 0) || // Stein schlägt Schere (spieler == 2 && computer == 1)) { // Papier schlägt Stein printf("Du gewinnst!\n"); } else { printf("Computer gewinnt!\n"); }

(Diese drei if-Zweige kommen direkt unter die printf-Zeile mit „Computer hatte" — vor das return 0;.)

3 Mathe-Quiz mit Punkten optional · wer Zeit hat

Das Programm stellt 5 Aufgaben (zufällige Multiplikation), prüft jede Antwort und zählt die Punkte. Hier kommt zum ersten Mal eine for-Schleife mit einem Zähler zusammen.

🎬 So soll es laufen

Runde 1: Was ist 3 * 7? 21 Richtig! Runde 2: Was ist 6 * 4? 25 Falsch! Richtig waere 24. ... Du hast 4 von 5 Punkten.

🧩 Welche Bausteine?

📝 Euer Gerüst

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); int punkte = 0; // TODO: for-Schleife, 5 Runden (runde von 1 bis 5): // - int a = rand() % 10 + 1; int b = rand() % 10 + 1; // - "Runde X: Was ist a * b? " ausgeben und Antwort einlesen // - if (antwort == a * b) -> "Richtig!" und punkte++ // else -> "Falsch! Richtig waere ..." (mit a*b) printf("Du hast %d von 5 Punkten.\n", punkte); return 0; }
Tipp: Der Schleifenkopf ist for (int runde = 1; runde <= 5; runde++) { ... }. Die Variablen a, b und antwort deklariert ihr innerhalb der Schleife, damit sie jede Runde neu sind.
erst selbst versuchen!
for (int runde = 1; runde <= 5; runde++) { int a = rand() % 10 + 1; int b = rand() % 10 + 1; int antwort; printf("Runde %d: Was ist %d * %d? ", runde, a, b); scanf("%d", &antwort); if (antwort == a * b) { printf("Richtig!\n"); punkte++; } else { printf("Falsch! Richtig waere %d.\n", a * b); } }

Bonus — mach die Spiele zu DEINEN freiwillig

Wer ein Spiel fertig hat, kann es erweitern. Such dir eine Idee aus:

🔢 Zahlenraten: Limit

Nur 7 Versuche erlauben — danach „Verloren! Die Zahl war …".

✊ Best of 3

Schere-Stein-Papier in einer Schleife, bis jemand 2 Runden gewonnen hat.

➕ Quiz: Plus & Minus

Statt nur * zufällig auch + oder - fragen.

🎲 Würfel-Duell

Du und der Computer würfeln je einmal — höhere Zahl gewinnt.

✅ Was ihr heute gemacht habt

Wichtig: Lieber ein Spiel wirklich verstanden und selbst getippt als drei nur kopiert. 🎮

← Zurück zur Startseite