\documentclass[12pt,a4paper]{article}
\usepackage{ngerman,fullpage,graphicx,times,hyperref}
\usepackage[latin1]{inputenc}

\parindent0pt
\parskip2mm

\def\kdo#1{\textbf{\texttt{#1}}}
\def\myurl#1{\href{#1}{\textbf{\texttt{#1}}}}

\begin{document}
\setcounter{page}{0}

\parindent0pt
\parskip1mm


\title{Software Engineering Projekt (SEP) mit ROBOCODE}
\author{Klaus Knopper \textbf{\texttt{$<$robocode@knopper.net$>$}}}
\date{Stand: 2014\\\myurl{http://robocode.sourceforge.net/}}

\maketitle
\thispagestyle{empty}

\bigskip

\begin{center}
\includegraphics[scale=0.5]{robocode_logo_tanks.jpg}
\end{center}

\bigskip

\def\abstractname{Kurzbeschreibung}
\abstract{\noindent\parindent0pt\parskip1mm
  Es wird  mit den Methoden des Software Engineering in Teamarbeit ein
  virtuelles Roboter-Team von Planung (Spezifikation, Design, Gewinn-Strategie, Ablaufplan, ...) bis
  zur Implementation aufgebaut, und in Form einer gemeinsamen Abschlusspräsentation der Teams sowie eines technischen Handbuchs dokumentiert.

  Lernziele:\\
  Praktische Anwendung des Software Engineering, Fähigkeit zum Arbeiten im Team,
  Fähigkeit zur Dokumentation und Präsentation der Arbeitsergebnisse.

  Voraussetzung für die Teilnehmer:\\
  - Grundkenntnisse in JAVA\\
  - Grundlagen Software-Engineering

  Das Projekt ist Betriebssystem-unabhängig, und kann sowohl auf den
  Übungs-Notebooks im Multifunktions-Pool, als auch auf mitgebrachten, eigenen
  Rechnern implementiert werden.
}

\parindent0pt
\parskip1mm

\newpage

\section{Einführung: Robocode}
Robocode ist ein OpenSource-Projekt von IBM, das zum Erlernen bzw. Vertiefen der objektorientierten Programmiersprache JAVA eingesetzt wird. Da in Robocode selbst bereits eine umfangreiche graphische Laufzeit- und Entwicklungsumgebung vorhanden ist, mit Verweis auf die ausführliche Beschreibung der API für den Programmierer, sind hiermit auch die im Studium erlernten Methoden der zielgerichteten Softwareentwicklung praktisch einsetzbar.

\begin{center}
\includegraphics[scale=0.25]{robocode.png}
\end{center}

Robocode ist eine Simulation von Robotern (Tanks), die sich in einer virtuellen Arena einstellbarer Größe bewegen, ihre Umgebung mit Hilfe eines Radars scannen und sich mit Hilfe von Projektilen gegenseitig bekämpfen können. Weiterhin sind Methoden zum Nachrichtenaustausch zwischen "`befreundeten"' Robotern, Hilfen zur optischen Kontrolle der Strategieverfolgung (Farbwechsel, Sichtbarmachen der gescannten Umgebung) und Kollisionserkennung vorhanden, die mitverwendet werden können.

\begin{center}
\includegraphics[width=0.75\textwidth]{robot-parts.pdf}
\end{center}

\textbf{Vereinfachte Spielregeln}

Jeder Roboter hat zu Beginn der Simulation eine bestimmte Energiemenge\footnote{Diese Anfangsenergie unterscheidet sich zwischen Teamrobots und dem Basis-Robot.} zur Verfügung, die durch Bewegung, Kollisionen mit anderen Robotern oder Treffer fremder Projektile, Abfeuern eigener Projektile etc. reduziert wird. Ist die verbliebene Energie 0, explodiert der Roboter, und das Spiel ist für ihn\footnote{Wenn auch nicht unbedingt für das ganze Team.} damit beendet. Gewonnen hat am Ende Team mit der höchsten Punktzahl, die sich unter anderem aus der Anzahl der "`überlebten"' Runden zusammensetzt.

\newpage

\section{Aufgabenstellung}
\subsection{Ziel}\label{ziel}
Ziel und Aufgabe des Projektes ist es, ein Team von genau 2 Robotern zu \textbf{planen}, zu \textbf{implementieren} und zu \textbf{dokumentieren}. Das Roboterteam soll mit einer gewinnenden Strategie sowohl gegen die von den anderen Kursteilnehmern programmierten Roboterteams, als auch gegen die in der Robocode-Umgebung vorhandenen Beispielroboter und -teams in einer ausreichend großen Arena (meist 1000$\times$1000) erfolgreich antreten können.

\subsection{Projektbearbeitung in Teams}
Es werden zu Beginn des Kurses Teams von 3 (empfohlene Teamgröße), maximal 4 Personen gebildet. Innerhalb des Teams sollen einerseits alle teilnehmenden Personen mit fest zugewiesenen, speziellen Aufgaben betraut werden, andererseits sollen alle Teammitglieder auch nach Bedarf an anderen notwendigen Teilprojekten (z.B. Implementation, Dokumentation) mitarbeiten. Eine Person aus dem Team wird zum Projektleiter/zur Projektleiterin gewählt, der oder die für das Ressourcen-, Zeit- und Qualitätsmanagement verantwortlich ist. Analyse, Planung, Implementation, Tests und Präsentation können von jeweils einer oder mehreren Personen geleitet werden, speziell an der Abschlusspräsentation sollten alle Teammitglieder beteiligt sein und einen Teil vortragen.

In der Dokumentation (s.S.~\pageref{doku}) soll ersichtlich werden, welche Person während des Projektes für welche Aufgabe(n) verantwortlich war, um neben der Gesamtwertung für die Gruppe auch eine personenbezogene Einzelbewertung des Projekts durchführen zu können.

\subsection{Methoden}
Es sollen die Methoden des \href{http://de.wikipedia.org/wiki/Software_Engineering}{Software Engineering} angewandt werden, also
\begin{enumerate}
\item Planung,
\item Analyse,
\item Entwurf,
\item Programmierung,
\item Tests,
\item ... begleitende Prozesse, insbesondere Dokumentation,
\end{enumerate}
mit Validierung und Verifizierung in geeigneten Phasen des Projektverlaufs.

\newpage

\section{Vorgehen}
\subsection{Projektplan/Zeitplan}
Vom Projektleiter ist in einem frühen Projektstadium in Absprache mit den übrigen Teammitgliedern ein Projektplan zu erstellen, die Aufgaben sind festzulegen und zu verteilen.

Beispielsweise könnte der Projektplan für Woche 1 eine "`Orientierungsphase"' vorsehen, um die Robocode Laufzeit- und Entwicklungsumgebung kennenzulernen, und einen ersten Blick in die Beispielprogramme und die Robocode-API zu werfen, Woche 2 für Analyse der Möglichkeiten, die die Robocode-API bietet, Design (Entwurf einer Gewinn-Strategie) und Planung (wer kümmert sich um welchen Teil der Implementation, welche Module sind wann fertigzustellen und zu testen?), Woche 3 für die Implementierung und Tests.

\subsection{Analyse und Design}
Auch wenn es den einen oder anderen Teilnehmer vielleicht reizt, gleich "`draufloszuprogrammieren"', soll die Arbeit an der Software zielgerichtet ablaufen. Es wird zunächst gemeinsam die Strategie, die jeder der Teamroboter verfolgen kann, festgelegt. In der Implementationsphase soll diese Strategie nach Möglichkeit nicht mehr geändert werden. Da hierzu die Kenntnis der Möglichkeiten innerhalb der Laufzeitumgebung Voraussetzung ist, müssen sich die Teilnehmer vorher eingehend mit der Robocode-API, insbesondere der Klasse \kdo{Team\-Robot} und den darin geerbten Basisklassen und deren Methoden beschäftigt haben.

\subsection{Implementation}
In der Implementationsphase sollen (Vorgabe), ausgehend von Objekten der Klasse \kdo{Team\-Ro\-bot}, zwei Roboter programmiert werden. Diese sollen sich gegenseitig bei der Erreichung des Ziels (s.S.~\pageref{ziel}) unterstützen, was z.B. durch geeignete Kommunikations-Schnittstellen erreicht werden kann. Das Team kann in der virtuellen Arena von Robocode getestet werden.

Um fair gegenüber den anderen Projektteams zu bleiben, sollen nur die in Robocode vorhandenen Beispiele als Basis dienen und keine 1:1-Kopien aus dem Internet heruntergeladener "`Killermaschinen"', die oft auch kaum verständlich programmiert und unzureichend dokumentiert sind. Sie dürfen aber durchaus Strategien wiederverwenden, die Sie bei anderen Robotern gesehen haben, sofern Sie diese durchschauen und verständlich erklären und dokumentieren können.

\subsection{Abschlusspräsentation/Dokumentation}
Am letzten Tag des Projektes muss jedes Team
\begin{enumerate}
\item Eine Dokumentation
\item Eine Präsentation
\item Einen funktionsfähigen Prototyp bzw. ein fertiges Roboter-Team (\kdo{jar}-Package!)
\end{enumerate}
abliefern.

\subsubsection{Dokumentation}\label{doku}
Die Dokumentation soll, pro Team eine, in elektronischer Form (PDF + eine weiterbearbeibare Fassung) beim Kursleiter abgegeben werden und enthält:
\begin{itemize}
\item Den Namen des Projektes,
\item Die Namen der in diesem Team beteiligten Personen und ihre Funktionen für das Projekt,
\item Eine \underline{\textbf{kurze}} Einführung ("`Worum geht es überhaupt?"'),
\item eine Ausarbeitung, wobei das \href{http://de.wikipedia.org/wiki/Pflichtenheft}{Pflichtenheft} als Gliederungshilfe dienen kann, u.a.:
\begin{itemize}
\item Eine Beschreibung des Vorgehens und der verwendeten Methoden bei der Realisierung des Projektes,
\item Eine Erläuterung der Strategie für jeden programierten Roboter,
\item Die Umsetzung dieser Strategie, z.B. mit Beispielcode aus der Implementation,
\end{itemize}
\item Ein Fazit: Wurde das Ziel erreicht? Welche Problempunkte sind noch ungelöst? Was könnte man anders/besser machen, wie hoch ist der Aufwand dafür?
\end{itemize}

\subsubsection{Präsentation}
Das Team stellt sein abgeschlossenes Projekt in Form einer Kurzpräsentation (max. 20 Minuten, plus 10 Minuten Diskussion) vor.
Hierbei kann der Beamer oder die Tafel mitverwendet werden. Falls Live-Demonstrationen am Rechner gezeigt werden, sind diese im Vorfeld so vorzubereiten, dass keine zusätzliche Zeit für die Technik aufgewandt werden muss.

\subsection{Demonstration}
Nach Abschluss aller Präsentationen erfolgt (als Demonstration der Ergebnisse) eine Gegenüberstellung aller Teams in einer gemeinsamen, großen Robocode-Arena in 10 Runden, um das Team mit der "`besten"' Strategie zu ermitteln. Hierzu ist dem Kursleiter ein Snapshot (\kdo{jar}-Export) des programmierten Roboter-Teams zur Verfügung zu stellen.

Während oder nach der Demonstration erfolgt eine Abschlussdiskussion mit allen Teilnehmern.

\end{document}
