Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions hyperbook/book/entwicklung/abgabe.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Computerspieler abgabefertig machen
index: 9
index: 3
---

# Computerspieler abgabefertig machen
Expand All @@ -9,23 +9,34 @@ Damit das :t[Wettkampfsystem]{#contest} mit dem :t[Computerspieler]{#player} arb
muss er als ausführbares Programm in ein ZIP-Archiv verpackt werden.

Je nach Programmiersprache, in der der Spieler entwickelt wurde,
sind unterschiedliche Schritte notwendig. </br>
Für Java siehe [hier](Anleitung-Abgabe.md).
sind unterschiedliche Schritte notwendig.

:::alert{info}
In der Regel enthält die Spielervorlage alle nötigen Instruktionen zum Packen.
:::

### Offizielle Spielervorlagen
- [Java](https://github.com/software-challenge/backend/blob/main/player/configuration/README.md)
- [Ruby](https://github.com/software-challenge/client-ruby/blob/main/README.md)

#### Java
Anleitungen finden sich in der
[Readme](https://github.com/software-challenge/backend/blob/main/player/configuration/README.md)
des Repositories, und ergänzend dazu: [Hier](java/Anleitung-Abgabe.md) in der Dokumentation.

#### Python
Eine Anleitungen dafür gibt es in der [Dokumentation](python/7-spieler-abgeben.md).

### Inoffizielle Spielervorlagen
<!--
- [C#](https://github.com/jnccd/socha-client-csharp/blob/master/README.md)
- [C++](https://github.com/Estugon/sc-penguins-cpp/blob/main/README.md)
- [Python](https://github.com/FalconsSky/socha-python-client/blob/master/README.md)
- [Rust](https://github.com/fwcd/socha-client-rust-2023/blob/main/README.md)
- [Swift](https://github.com/matthesjh/sc23-swift-client/blob/main/README.md)
- [Ruby](https://github.com/software-challenge/client-ruby/blob/main/README.md)
-->
Für die aktuelle Saison gibt es bisher keine inoffiziellen Spielervorlagen.

## Generelles zum Upload

Das Hochladen des Spielers im Wettkampfsystem wird detailliert
unter :t[Wettkampfsystem->Computerspieler]{#contest.computerspieler} beschrieben.
Expand Down
124 changes: 79 additions & 45 deletions hyperbook/book/entwicklung/eine-idee-implementieren.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
name: Idee implementieren
index: 8
index: 2
---

# Eine Idee implementieren

Man hat einige Spiele absolviert und sich eine gute Strategie
ausgedacht. Damit hat man zwar schon einen wichtigen Teil der Arbeit
geleistet, aber irgendwie muss dem
[Computerspieler](software/client) noch beigebracht werden, nach
:t[Computerspieler]{#player} noch beigebracht werden, nach
dieser Strategie zu spielen.

Anhand einer kleinen Aufgabe soll gezeigt werden, wie man eine Idee
Expand All @@ -34,53 +34,87 @@ zunächst beschreiben, wie man als Mensch vorgehen würde.

3. Die kleinste Karte ist jetzt an der richtigen Position.

4. Führe die Schritte nochmal für den Reststapel (ohne die sortierten
4. Führe die Schritte immer wieder für den Reststapel (ohne die sortierten
Karten) aus.

### Idee implementieren

Nachdem man seine Idee formal niedergeschrieben hat, kann sie ganz
leicht in ein Programm überführt werden:

/**
* Das Array a[] symbolisiert den Stapel der unsortierten Karten. Dabei steht
* eine Zahl immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
* dass es sich um eine kleinere Karte handelt.
*
* start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
*/
public static void sortiere(int[] a, int start) {
//Position der kleinsten Karte
int pos = start;

// Gehe Array durch und merke die Position der kleinsten Karte
for (int i = start+1; i < a.length; i++) {
// Wenn eine kleinere Karte gefunden wurde...
if (a[i] < a[pos]) {

... neue Position merken
pos = i;
}
}

// kleinste Karte mit erster Karte des Reststapels tauschen
int temp = a[start]; // erste Karte merken
a[start] = a[pos]; // kleinste Karte nach vorne bringen
a[pos] = temp; // gemerkte Karte in die Mitte des Stapels schreiben

// Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden
if (start < a.length) {
sortiere(a, start+1);
}
}

- Gehe den Stapel durch und merke die Position, an der sich die
kleinste Karte befindet.

- Tausche die Position der kleinsten Karte mit der untersten Karte im
Stapel.

- Die kleinste Karte ist jetzt an der richtigen Position.

- Führe die Schritte nochmal für den Reststapel (ohne die sortierten
Karten) aus.
#### Java

```java
/**
* Das Array a[] symbolisiert den Stapel der unsortierten Karten. Dabei steht
* eine Zahl immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
* dass es sich um eine kleinere Karte handelt.
*
* start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
*/
public static void sortiere(int[] a, int start) {
// Position der kleinsten Karte
int pos = start;

// Gehe Array durch und merke die Position der kleinsten Karte
for (int i = start+1; i < a.length; i++) {
// Wenn eine kleinere Karte gefunden wurde...
if (a[i] < a[pos]) {

// ... neue Position merken
pos = i;
}
}

// kleinste Karte mit erster Karte des Reststapels tauschen
int temp = a[start]; // erste Karte merken
a[start] = a[pos]; // kleinste Karte nach vorne bringen
a[pos] = temp; // gemerkte Karte in die Mitte des Stapels schreiben

// Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden
if (start < a.length) {
sortiere(a, start+1);
}
}
```

#### Python

```python
# Die Liste a symbolisiert den Stapel der unsortieren Karten als Zahlen repräsentiert.
# Dabei steht eine immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
# dass es sich um eine kleinere Karte handelt.
#
# start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
#
# Beachte: in Python müssen Datentypen nicht explizit angegeben werden, es hilft aber
# möglicherweise bei der Entwicklung
def sortiere(a: list[int], start: int):
# Position der kleinsten Karte
pos = start

# Gehe die Liste durch und merke die Position der kleinsten Karte
for i in range(start + 1, len(a)):
# Wenn eine kleinere Karte gefunden wurde...
if a[i] < a[pos]:

# ... neue Position merken
pos = i;

# kleinste Karte mit erster Karte des Reststapels tauschen
temp = a[start]; # erste Karte merken
a[start] = a[pos]; # kleinste Karte nach vorne zum sortierten Bereich bringen
a[pos] = temp; # gemerkte Karte in die Mitte des Stapels schreiben

# Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden,
# ansonsten gebe die sortierte Liste zurück
if start < len(a) - 1:
return sortiere(a, start+1);
else:
return a
```

## Weiterführende Links

Wir haben hier den Sortieralgorithmus [Selection Sort](https://de.wikipedia.org/wiki/Selectionsort)
rekursiv implementiert.
10 changes: 9 additions & 1 deletion hyperbook/book/entwicklung/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ die den Start mit der Entwicklung erleichtern soll.
## Die richtige Programmiersprache

Am einfachsten ist es natürlich,
eine der offiziellen Spielervorlagen (Java, Ruby, Python) als Basis zu nutzen,
eine der offiziellen Spielervorlagen (Java, Python) als Basis zu nutzen,
allerdings könnt ihr auch eigene Clients in anderen Sprachen schreiben.
Das ist mit mehr Arbeit verbunden,
aber wenn ihr eine Sprache besonders gerne nutzt oder Vorteile seht,
Expand Down Expand Up @@ -51,3 +51,11 @@ welches man bei Galileo Computing als
[Open-Book](http://openbook.galileocomputing.de/javainsel)
kostenlos online betrachten und herunterladen kann.
Man kann es dort ebenfalls als gedruckte Ausgabe bestellen.

### Python

Für Python gibt es eine direkt von der Python Organisation bereit gestellte Dokumentation.
Diese ist für die Version 3.12.8 [hier](https://docs.python.org/3.12/) verfügbar und enthält auch ein Python-Tutorial.
Wem das etwas unübersichtlich vorkommt, kann sich auch die bekannte Plattform [w3schools](https://www.w3schools.com/python/)
zum Thema Python anschauen. Beide Ressourcen sind auf Englisch, aber es lassen sich sowohl im Text,
als auch im Videoformat, viele weitere Einführungen in die Sprache Python im Internet finden.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Anleitung für Abgabe
index: 10
index: 9
---

# Computerspieler abgabefertig machen (Anleitung für Export aus der IDE für Java)
Expand Down
5 changes: 5 additions & 0 deletions hyperbook/book/entwicklung/java/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
name: Java
index: 8
expanded: false
---
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Installation von Java
index: 5
index: 1
---

# Installation von Java
Expand Down
6 changes: 3 additions & 3 deletions hyperbook/book/entwicklung/kennenlernen.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ index: 1

# Das Spiel kennenlernen

Um ein Computerprogramm zu schreiben, das ein Spiel spielen kann,
sollte man vorher das Spiel selbst verstehen und spielen können.
Um ein Computerprogramm zu schreiben, was ein Spiel spielen kann, muss
man vorher das Spiel selbst verstehen und spielen können.
Dabei könnt ihr bereits Ideen und Strategien entwickeln,
die ihr in eurem :t[Computerspieler]{#player} nachher umsetzen wollt.
die ihr in euren :t[Computerspieler]{#player} nachher umsetzen wollt.

Das Spiel selbst kann zu zweit oder allein gegen den :t[Zufallsspieler]{#player}
mit dem :t[Spielleiter]{#server} gespielt werden.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
name: Einrichtung der Entwicklungsumgebung
index: 2
---

# Einrichtung der (Python-)Entwicklungsumgebung

Python Code lässt sich mit jedem Text Editor schreiben.
Wenn man weitere nützliche Features neben dem einfachen Editor haben möchte,
sollte man zu einer integrierten Entwicklungsumgebung (IDE) greifen,
welche das Arbeiten wirklich erleichtert.

Im Folgenden wird die Einrichtung von [Visual Studio Code](https://code.visualstudio.com/)
(eine IDE von Microsoft, die für sämtliche Sprachen geeignet ist) gezeigt.
Aber auch Umgebungen wie [PyCharm](https://www.jetbrains.com/pycharm/),
welche ausschließlich für Python entworfen wurden, sind beliebt.

**Hinweis:** Bevor die IDE eingerichtet wird, sollten [Python und pip](installation-von-python) erfolgreich
installiert sein.

## Visual Studio Code einrichten

### Installation

Die einfachste Installation geschieht mit Hilfe des VS Code Installers von
der [Download-Seite](https://code.visualstudio.com/Download). \
Nachdem man den die Installer Datei heruntergeladen hat,
gelangt man im Browser auf eine [Seite](https://code.visualstudio.com/docs/),
die das Aufsetzen sehr detailliert erklärt.

Die wichtigsten Schritte für die Software-Challenge erklären wir hier:

Bei der Installation empfehlen wir,
alle Zusatzfeatures mitzuinstallieren.

Für Python-Unterstützung dann in VS Code die Erweiterung installieren:

1. Im linken Menü auf "Extensions" gehen
2. Nach "Python" suchen
3. Die "Python" Erweiterung von Microsoft auswählen
4. Das Paket installieren

![Python in VS Code](/images/python/vs-code-python.png)
Loading