5.3 KiB
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)