# Robo Rally [![Build Status](https://travis-ci.com/inf112-v20/Fiasko.svg?branch=master)](https://travis-ci.com/inf112-v20/Fiasko) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/51d37dc99db44758944198a59f2d2a4b)](https://www.codacy.com/gh/inf112-v20/Fiasko?utm_source=github.com&utm_medium=referral&utm_content=inf112-v20/Fiasko&utm_campaign=Badge_Grade)
Dette prosjektet har som mål å lage en digital kopi av brettspillet Robo Rally.  Foreløbig er målet å implementere all 
nødvendig funksjonalitet for å kunne spille et "spill" Robo Rally over lan med opp til 8 spillere. Om tiden strekker til,
vil vi gå over til en fase der målet blir å implementere ting som er gøy, men ikke nødvendig.

Alle regler er hentet fra 2005 utgaven av spillguiden fra Wizards of the Coast, Inc.

## Spillstatus
Ved kjøring av .jar filen blir det vist en "splash screen" og kjørt en demo når brukeren trykker venstre musetast, 
uten mulighet for bruker å bevege robot.

## Manuell testing
Demoen er definert i RoboRallyGame sin metode runGameLoop(). Metodene som kan brukes for testing er:
-   makeMove(Robot id, Korthandling) //Utfører en handling på en robot
-   fireAllLasers() //Fyrer av alle lasere inkludert robotlasere
-   moveAllConveyorBelts() //Flytter alle transportbånd
-   checkAllFlags() //Oppdaterer roboter som besøker flagg
-   rotateCogwheels() //Roterer tannhjul

Robot id blir representert ved enumen RobotID
Korthandling blir representert ved enumen Action

Ved å bruke metodene over kan alt i en eller flere faser testes og simuleres. Den store forskjellen fra MVP er at all
bruker-input blir hardkodet før programmet kjører.

Eksempel på makeMove: makeMove(RobotID.ROBOT_1, Action.MOVE_1); //Flytter robot 1 ett steg fremover

Linjene som inneholder runPhase(n) kjører spesifikke faser som bruker tilfeldig utdelte programmeringskort uten 
integritetsvalidering. Disse bør kommenteres ut under testing.

Robotene sin posisjon blir initialisert i RoboRallyGame sin metode initializeGame() og kan endres dersom det er 
fordelaktig å starte dem på andre posisjoner.

Brettet blir også lastet inn i RoboRallyGame sin metode initializeGame(). Det er 3 brett som er relevante å teste på:
-   Checkmate
-   Dizzy_Dash
-   Risky_Exchange

## Knapper og kontrollmekanismer
### Knapper
-   Q: Tilbakestiller kamera og kamerarotasjon
-   R: Roterer kameraet
-   HOME: Bytter til en debug instans av spillet som lar en sjekke at alle teksturer vises riktig

### Andre egenskaper ved brukergrensesnittet
-   Rullehjulet vil forstørre og forminske spillbrettet
-   Spillbrettet kan flyttes ved å holde inne venstre musetast og bevege musen i en retning

## Bygging og kompilering

### Forkrav for å kunne kompilere og kjøre koden
-   [java](https://www.java.com/en/download/)
-   [git](https://git-scm.com/)
-   [maven](https://maven.apache.org/)

### Byggeprosedyre
```shell script
git clone https://github.com/inf112-v20/Fiasko.git
cd Fiasko
mvn clean install
```
Dette vil også kjøre alle tester i koden

### Kjøreprosedyre
```shell script
cd target
java -jar roborally-0.2-alpha-jar-with-dependencies.jar
```
Den produserte .jar filen kan alternativt flyttes til en annen mappe og dobbeltklikkes for å kjøres.