Files
worms/docs/samenvatting.md
2018-02-27 10:47:06 +01:00

5.3 KiB

Worms

inleiding

e-mail groepsindeling (OK)
first part: single class
second part: associations between classes
third part: inheritance and generics
TA voor vragen (ogp-project@cs.kuleuven.be)
Engels!
Git gebruiken (GitHub)
attention: documentation, accurate specifications, re-usability and adaptability

Assignment

2D wereld
goal: kill worms of other teams and have the last surviving Worms
based on original artillery strategy (1995 by Team17 Digital)
eventuele helper classes: classes marked @Value
All aspects schould be specified formally and informally

Properties of Worms

name
location
orientation
radius
mass
points

location

(x,y) coordinaten
in meter
defensief

orientation

direction hoek theta (radialen)
rechts: 0 boven: pi/2
nominaal
0..2pi

shape

cirkel
min 0.25m straal (final) (in toekomst veranderen maar niet tijdens leven van worm)
kan veranderen tijdens uitvoering
defensief

massa - DONE?

afh. van radius
in kg
p = 1062 kg/m3
m = p · (4/3 · πσ^3)

'action' points = stamina

points = massa
uitgedrukt in int (afgerond tot dichtsbijzijnde)
massa veranderd -> max punten ook
0 <= punten <= max
total

naam - DONE

min 2 letters
1e letter uppercase
alleen letters quotes en spaties
defensief
later mogelijk meer tekens

Opmerkingen

type niet gezegd -> double (radius, coordinaat)
Double.NEGATIVE_INFINITY && Double.POSITIVE_INFINITY toegestaan

##Turning and Moving

method move

change location worm (location, orientation, number of steps)
occurs in steps
distance one step = radius worm
given number of steps >= 0
defensief

method turn

change orientation of worm
adding given angle to current orientation
nominaal
resulting angle in specified range for orientation of worm

move and turn costs action points

orientation change by 2pi => decrease current action points by 60
orientation change by 2pi/f => decrease current action point by 60/f
movement: horizontal stap => 1 action points ; vertical => 4
total cost step: abs(cos theta) + abs(4sin theta)
action point: int (round to next int)

Jumping

method jump

change location (respect orientation and action points)
defensief
given: remaining action points and mass
force jump: F = (5*APs) + (m*g)       (g = 5.0m/s^2)
duration: 0.5s
initial velocity: v0 = (F/m) * 0.5s   (formula may change)
velocity: nonnegative and finite

method jumpStep

computes in-flight locations (xDeltaT, yDeltaT) of a jumping worm any deltaT
hom compute: page 5
distance: d = (v0^2 * sin(2 theta))/g
t = d/(v0 * cos theta)  (seconds)

method jumpTime

returns t above
orientation: pi < theta < 2pi => worm shall not move
jumping: consumes all remaining action points
jumpTime and jumpStep must not change attributes of a worm

Opmerkingen

future: involve further trajectory parameters or geographical features

Storing and Manipulating Real Numbers as Floating-Point Numbers

double: store/return arbitrary real numbers
double: subset of real numbers (Double.POSITIVE_INFINITY to Double.NEGATIVE_INFINITY)
arithmetic operations on double, whose result is double => rounding correct number to   obtain a value of type Double
idealised JAVA: double same meaning as in regular math
correct solution: interpreting your code and formal docu. as statements and expressions of idealised JAVA
reasoning: ignore rounding issues
testing program: not ignore => result within acceptable distance from correct result
acceptable: abs(r-e)/abs(e) < 0.01%   (r = observed result, e = expected result)
use JUnit's assertEquals(double, double, double) method to test acceptable distance

Testing

write JUnit test suite for move, turn and jump
include test suite in your submission

User Interface

GUI to visualise effects of various operations on worms
included in assignment as JAR file
import JAR into Eclipse as existing project
src-provided contains source code of user interface and helper classes
no modification form your side
developed classes must be placed in src and tests
connect implementation to GUI: write class Facade in worms.facade

method Facade

implements provided interface IFacade from package worms.facade
IFacade.java contains additional instructuons on implementation required methods

start program

run main method in class worms.Worms
press keys to modify state of program (see page 7)
GUI displays part of space: worms may leave and return to visible area
we will test your implementation by running JUnit tests against your implementation of IFacade
IFacade shall only throw ModelException
incomplete test class is included to show what our tests look like

Submitting

solution: submit jar file (individually by all team members)
before 11/03 at 11:59 PM
include all source files (including tests) and generated class files
include name, course of studies and link to your code repository in comments of solution

Feedback

TA will give feedback
feetback sessions between 19/03 en 30/03 (Toledo)