{ "cells": [ { "cell_type": "markdown", "id": "fdc1fa62-d57a-4eb1-801e-3fcbe3cc9c89", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "# Schneckenrennen\n", "\n", "Es treten mehrere Rennschnecken in einem Schneckenrennen gegeneinander an.\n", "\n", "Hinweis: es gibt hierbei keine automatisierten Tests, ihr müsst selbst anhand der Beispiel-Programmierung erkennen, ob eure Programmierung richtig ist!" ] }, { "cell_type": "markdown", "id": "54c6e6e3-c1e0-4728-9ea5-24523b1a2142", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 1. Klasse `Rennschnecke`\n", "\n", "Rennschnecken sollen folgene Eigenschafen besitzen:\n", "* einen Namen (z.B. \"Frieda\")\n", "* eine Rasse (z.B. \"braune Rakete\")\n", "* eine Maximalgeschwindigkeit (d.h. maximale Veränderung der Strecke pro Schritt)\n", "* die Schnecke soll wissen, welche Strecke sie bereits zurückgelegt hat\n", "\n", "Erstelle für die Klasse `Rennschnecke` einen Konstruktor. Die Maximalgeschwindigkeit soll dabei einen zufälligen Wert zwischen 0 und 5 bekommen (Tipp: `Math.random()`), die zurückgelegte Strecke soll zu Beginn natürlich 0 sein.\n", "\n", "Lege eine Methode `krieche()` an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt. Soll heißen: sie kriecht eine zufällige Strecke größer null und kleiner ihrer Maximalgeschwindigkeit (Tipp: `Math.random() * maximalgeschwindigkeit`)\n", "\n", "Lege außerdem eine Methode toString() an, welche die Daten der Schnecke mit `return` als String zurückgibt:\n", "```\n", "Frieda (braune Rakete) hat bisher 17.5cm zurückgelegt\n", "```" ] }, { "cell_type": "raw", "id": "0e0d97e5-3c2f-4c4e-bef6-8a2c3a430860", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Klasse \"Rennschnecke\":\n", "\n", "Attribute:\n", "*\n", "\n", "Methoden:\n", "*" ] }, { "cell_type": "code", "execution_count": null, "id": "2800c9bf-7aa4-43dc-8008-1fb564ff2f43", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "class Rennschnecke {\n", "}" ] }, { "cell_type": "code", "execution_count": null, "id": "1a0ddceb-f579-4f22-ac70-9a8f3477ad3d", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "// Beispiel-Programmierung statt Testläufe\n", "// Diese Programmierung sollte problemlos durchlaufen und ihr müsst aufgrund der Ausgabe selbst entscheiden, ob eure Programmierung richtig ist!\n", "\n", "// neue Rennschnecke anlegen\n", "let s = new Rennschnecke(\"Frieda\", \"braune Rakete\")\n", "// ausgeben\n", "console.log( s.toString() )\n", "// kriechen lassen -> soll keine Ausgabe erzeugen\n", "s.krieche()\n", "// nochmal mit neuer Strecke neu ausgeben\n", "console.log( s.toString() )" ] }, { "cell_type": "markdown", "id": "3e58a0c6-e234-4b1c-8ab5-f91f15041534", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "## 2. Klasse `Rennen`\n", "\n", "Ein Rennen hat folgende Eigenschaften:\n", "* einen Namen\n", "* die teilnehmenden Schnecken selbst - lege hier 5 Schnecken an!\n", "* die Länge der zu kriechenden Strecke\n", "\n", "Überlege dir, welche dieser Werte bereits im Konstruktor gesetzt werden sollten.\n", "\n", "Lege eine Methode `toString()` an, welche die Daten des Rennens mit `return` als String zurückgibt in der Form:\n", "```\n", "Beim Rennen \"großer Preis\" steht es aktuell:\n", "* Frieda (braune Rakete) hat bisher 17.5cm zurückgelegt\n", "* Gunter (schleimiger Kriecher) hat bisher 14.9cm zurückgelegt\n", "```\n", "(Tipp: verwende für die Ausgabe der einzelnen Schnecken deren `toString()`-Methode.)\n", "\n", "Lege eine Methode `lasseSchneckenKriechen()` an, welche alle teilnehmenden Schnecken einmal kriechen lässt (also bei jeder Schnecke die `kriechen()`-Methode aufruft).\n", "\n", "Lege eine Methode `durchfuehren()` an, welche so lange `lasseSchneckenKriechen()` aufruft, bis eine der Schnecken das Ziel erreicht hat. Die Gewinnerschnecke soll dabei mit `return` zurückgegeben werden." ] }, { "cell_type": "raw", "id": "31fcd095-b08b-4953-b40b-dbf0b2515e50", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Klasse \"Rennen\"\n", "\n", "Attribute:\n", "*\n", "\n", "Methoden:\n", "*" ] }, { "cell_type": "code", "execution_count": null, "id": "255c6ac2-1589-475a-8ab0-e83b49aec82c", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "class Rennen {\n", "}" ] }, { "cell_type": "code", "execution_count": null, "id": "9c9e0e6b-8d42-4c72-ab4e-e0b609895077", "metadata": { "editable": false, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "// Beispiel-Programmierung statt Testläufe\n", "// Diese Programmierung sollte problemlos durchlaufen und ihr müsst aufgrund der Ausgabe selbst entscheiden, ob eure Programmierung richtig ist!\n", "\n", "// Rennen anlegen, Länge: 100cm\n", "let r = new Rennen(\"großer Preis\", 100)\n", "// ausgeben\n", "console.log( r.toString() )\n", "// alle Schnecken einmal kriechen lassen -> soll selbst keine Ausgabe erzeugen\n", "r.lasseSchneckenKriechen()\n", "// nochmals ausgeben\n", "console.log( r.toString() )\n", "// Dann Rennen komplett durchführen -> soll selbst keine Ausgabe erzeugen\n", "let sieger = r.durchfuehren()\n", "// Sieger ausgeben\n", "console.log( \"Gewonnen hat:\" )\n", "console.log( sieger.toString() )" ] } ], "metadata": { "kernelspec": { "display_name": "Deno", "language": "typescript", "name": "deno" }, "language_info": { "codemirror_mode": "typescript", "file_extension": ".ts", "mimetype": "text/x.typescript", "name": "typescript", "nbconvert_exporter": "script", "pygments_lexer": "typescript", "version": "5.8.3" } }, "nbformat": 4, "nbformat_minor": 5 }