starting to implement program
This commit is contained in:
12
OGP1718-Worms/src/worms/programs/BinaryExpression.java
Normal file
12
OGP1718-Worms/src/worms/programs/BinaryExpression.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package worms.programs;
|
||||||
|
|
||||||
|
public abstract class BinaryExpression<L, R> implements Expression {
|
||||||
|
|
||||||
|
protected final L left;
|
||||||
|
protected final R right;
|
||||||
|
|
||||||
|
public BinaryExpression(L left, R right) {
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
}
|
7
OGP1718-Worms/src/worms/programs/Expression.java
Normal file
7
OGP1718-Worms/src/worms/programs/Expression.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package worms.programs;
|
||||||
|
|
||||||
|
public interface Expression<T> {
|
||||||
|
|
||||||
|
T execute();
|
||||||
|
|
||||||
|
}
|
358
OGP1718-Worms/src/worms/programs/ProgramFactory.java
Normal file
358
OGP1718-Worms/src/worms/programs/ProgramFactory.java
Normal file
@@ -0,0 +1,358 @@
|
|||||||
|
package worms.programs;
|
||||||
|
|
||||||
|
import worms.model.Program;
|
||||||
|
import worms.util.ModelException;
|
||||||
|
import worms.util.MustNotImplementException;
|
||||||
|
import worms.programs.Expression;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ProgramFactory implements IProgramFactory {
|
||||||
|
/**
|
||||||
|
* Create a program from the given arguments.
|
||||||
|
*
|
||||||
|
* @param procs The procedure definitions for the program.
|
||||||
|
* @param main The main statement of the program. Most likely this is a
|
||||||
|
* sequence statement.
|
||||||
|
* @return A new program.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createProgram(List procs, Object main) throws ModelException {
|
||||||
|
System.out.println("create program");
|
||||||
|
return new Program();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO checken of dit moet
|
||||||
|
// /**
|
||||||
|
// * Create a program from the given argument.
|
||||||
|
// *
|
||||||
|
// * @param main The main statement of the program. Most likely this is a
|
||||||
|
// * sequence statement.
|
||||||
|
// * @return A new program without procedure definitions.
|
||||||
|
// */
|
||||||
|
// @Override
|
||||||
|
// public Object createProgram(Object main) throws ModelException {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a procedure definition with the given name and body.
|
||||||
|
*
|
||||||
|
* @param procedureName The name of the procedure
|
||||||
|
* @param body
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createProcedureDefinition(String procedureName, Object body, SourceLocation sourceLocation) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a statement that assigns the value obtained by evaluating the
|
||||||
|
* given expression to a variable with the given name.
|
||||||
|
*
|
||||||
|
* @param variableName
|
||||||
|
* @param value
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createAssignmentStatement(String variableName, Object value, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a print statement that prints the value obtained by evaluating the
|
||||||
|
* given expression.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createPrintStatement(Object value, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a turn statement that makes the worm that is executing the program
|
||||||
|
* turn by the amount obtained by evaluating the given expression.
|
||||||
|
*
|
||||||
|
* @param angle
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createTurnStatement(Object angle, SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a statement that makes the worm that is executing the program move
|
||||||
|
* one step.
|
||||||
|
*
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createMoveStatement(SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a statement that makes the worm that is executing the program jump.
|
||||||
|
*
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createJumpStatement(SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a statement that makes the worm that is executing the program eat.
|
||||||
|
*
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createEatStatement(SourceLocation location) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a statement that makes the worm that is executing the program fire
|
||||||
|
* a weapon.
|
||||||
|
*
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createFireStatement(SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a sequence of statements involving the given list of statements.
|
||||||
|
*
|
||||||
|
* @param statements
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createSequenceStatement(List statements, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an if-then-else statement involving the given condition and the
|
||||||
|
* given then-part and else-part.
|
||||||
|
* The else-part may be null.
|
||||||
|
*
|
||||||
|
* @param condition
|
||||||
|
* @param ifBody
|
||||||
|
* @param elseBody
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createIfStatement(Object condition, Object ifBody, Object elseBody, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a while statement involving the given condition and given body.
|
||||||
|
*
|
||||||
|
* @param condition
|
||||||
|
* @param body
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createWhileStatement(Object condition, Object body, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a break statement.
|
||||||
|
*
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createBreakStatement(SourceLocation sourceLocation) throws ModelException, MustNotImplementException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an invoke statement that invokes the procedure with the given name.
|
||||||
|
*
|
||||||
|
* @param procedureName
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createInvokeStatement(String procedureName, SourceLocation sourceLocation) throws ModelException, MustNotImplementException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an expression that evaluates to the current value of the given
|
||||||
|
* variable.
|
||||||
|
*
|
||||||
|
* @param variableName
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createReadVariableExpression(String variableName, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an expression that represents a literal double value.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createDoubleLiteralExpression(double value, SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an expression that represents a literal boolean value.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createBooleanLiteralExpression(boolean value, SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an expression that represents the null value.
|
||||||
|
*
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createNullExpression(SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an expression that represents the self value, evaluating to the
|
||||||
|
* worm that executes the program.
|
||||||
|
*
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createSelfExpression(SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to the addition of the values
|
||||||
|
* obtained by evaluating the given left and second expressions.
|
||||||
|
*
|
||||||
|
* @param left
|
||||||
|
* @param right
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createAdditionExpression(Object left, Object right, SourceLocation location) throws ModelException {
|
||||||
|
|
||||||
|
Expression addition = new BinaryExpression<>(left, right) {
|
||||||
|
@Override
|
||||||
|
public Object execute() {
|
||||||
|
return this.left + this.right;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Program();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to the conjunction of the values
|
||||||
|
* obtained by evaluating the given left and right expressions.
|
||||||
|
*
|
||||||
|
* @param left
|
||||||
|
* @param right
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createAndExpression(Object left, Object right, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to true when the given expression
|
||||||
|
* evaluates to false, and vice versa.
|
||||||
|
*
|
||||||
|
* @param expression
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createNotExpression(Object expression, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to true if the evaluation of the
|
||||||
|
* left expression yields a value that is equal to the value obtained by
|
||||||
|
* evaluating the right expression.
|
||||||
|
*
|
||||||
|
* @param left
|
||||||
|
* @param right
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createEqualityExpression(Object left, Object right, SourceLocation location) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to true if the evaluation of the
|
||||||
|
* left expression yields a value that is less than the value obtained by
|
||||||
|
* evaluating the right expression.
|
||||||
|
*
|
||||||
|
* @param left
|
||||||
|
* @param right
|
||||||
|
* @param location
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createLessThanExpression(Object left, Object right, SourceLocation location) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object createSearchObjectExpression(Object angleDelta, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to a boolean reflecting whether or not
|
||||||
|
* the executing worm belongs to the same team as the worm to which the given
|
||||||
|
* expression evaluates.
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createSameTeamExpression(Object entity, SourceLocation sourceLocation) throws ModelException, MustNotImplementException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an expression that evaluates to the distance between the executing worm
|
||||||
|
* and the game object to which the given expression evaluates.
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createDistanceExpression(Object entity, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a boolean indicating whether or not the object to which the given
|
||||||
|
* expression evaluates is a worm.
|
||||||
|
*
|
||||||
|
* @param entity
|
||||||
|
* @param sourceLocation
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object createIsWormExpression(Object entity, SourceLocation sourceLocation) throws ModelException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user