Skip to content
Snippets Groups Projects
Commit f6860d8a authored by BAUER Oscar's avatar BAUER Oscar
Browse files

working snake game

parent 44eeb5a1
Branches Minesweeper
No related tags found
No related merge requests found
Showing
with 318 additions and 25 deletions
public class TestTd16 {
public static void main(String[] args) {
int num = td16.expoFor(3,3);
System.out.println(num);
double numRec = td16.expoRec(3,3);
System.out.println(numRec);
System.out.println(td16.fiboRec(6));
}
}
package td14.exo6;
public class Addition extends BinaryOperation {
public Addition(Expression ex1, Expression ex2) {
super(ex1, ex2);
}
@Override
public double value(double x) {
return left.value(x) + right.value(x);
}
}
package td14.exo6;
public abstract class BinaryOperation implements Expression {
protected Expression left;
protected Expression right;
public BinaryOperation(Expression left, Expression right) {
this.left = left;
this.right = right;
}
@Override
public abstract double value(double x);
}
package td14.exo6;
public class Constant implements Expression {
private double value;
public Constant(double value) {
this.value = value;
}
@Override
public double value(double x) {
return this.value;
}
}
package td14.exo6;
public class Cos extends UnaryOperation {
public Cos(Expression ex) {
super(ex);
}
@Override
public double value(double x) {
return Math.cos(expression.value(x));
}
}
package td14.exo6;
public class Division extends BinaryOperation {
public Division(Expression ex1, Expression ex2) {
super(ex1, ex2);
}
@Override
public double value(double x) {
if(right.value(x) == 0)
return Integer.MIN_VALUE;
return left.value(x) / right.value(x);
}
}
package td14.exo6;
public class Exp extends UnaryOperation {
public Exp(Expression ex) {
super(ex);
}
@Override
public double value(double x) {
return Math.pow(expression.value(x), expression.value(x));
}
}
package td14.exo6;
public interface Expression {
public double value(double x);
}
package td14.exo6;
public class Log extends UnaryOperation {
public Log(Expression ex) {
super(ex);
}
@Override
public double value(double x) {
return Math.log(expression.value(x));
}
}
package td14.exo6;
public class Multiplication extends BinaryOperation{
public Multiplication(Expression ex1, Expression ex2) {
super(ex1, ex2);
}
@Override
public double value(double x) {
return left.value(x) * right.value(x);
}
}
package td14.exo6;
public class Sin extends UnaryOperation {
public Sin(Expression ex) {
super(ex);
}
@Override
public double value(double x) {
return Math.sin(expression.value(x));
}
}
package td14.exo6;
public class Subtraction extends BinaryOperation {
public Subtraction(Expression ex1, Expression ex2) {
super(ex1, ex2);
}
@Override
public double value(double x) {
return left.value(x) - right.value(x);
}
}
package td14.exo6;
public class Testing {
public static void main(String[] args) {
// Représentation de la fonction f(x) = 2 * sin(x) + 3 * cos(x)
Expression f = new Addition(new Multiplication(new Constant(2), new Sin(new Variable())),
new Multiplication(new Constant(3), new Cos(new Variable())));
// Calcul de la valeur de f(x) pour plusieurs valeurs de x
double[] values = { 0, 0.5, 1, 1.5, 2, 2.5 };
for (double x : values) {
System.out.println("f(" + x + ") = " + f.value(x));
}
}
}
package td14.exo6;
public abstract class UnaryOperation implements Expression {
protected Expression expression;
public UnaryOperation(Expression expression) {
this.expression = expression;
}
@Override
public abstract double value(double x);
}
package td14.exo6;
public class Variable implements Expression {
@Override
public double value(double x) {
return x;
}
}
public class td16 {
public static int expoFor(int x, int n) {
int res = 1;
for (int i = 0; i < n; i++)
res *= x;
return res;
}
public static double expoRec(double x, int n) {
double res = x;
if (n == 0)
return 1;
return res * expoRec(x, n - 1);
// return (n == 0) ? 1 : res * expoRec(x, n - 1);
}
public static double fiboRec(double n) {
// if (n == 0 || n == 1)
// return n;
// return fibuRec(n-1) + fibuRec(n - 2);
return (n == 0 || n == 1) ? n : fiboRec(n-1) + fiboRec(n - 2);
}
public static double divi(int n) {
if (n == 1)
return 1;
return (1.0 / n) + divi(n-1) ;
}
}
...@@ -3,3 +3,6 @@ package version3; ...@@ -3,3 +3,6 @@ package version3;
public enum Direction { public enum Direction {
NORTH, SOUTH, EAST, WEST NORTH, SOUTH, EAST, WEST
} }
...@@ -9,17 +9,28 @@ public class Position { ...@@ -9,17 +9,28 @@ public class Position {
this.column = column; this.column = column;
} }
public boolean isSamePosition(Position pos) { // public boolean isSamePosition(Position pos) {
// if (isLine(pos.line) && isColumn(pos.column))
// return true;
// return false;
// }
public boolean isSamePosition(Object obj) {
try {
if (obj.getClass() == this.getClass()) {
Position pos = (Position) obj;
if (isLine(pos.line) && isColumn(pos.column)) if (isLine(pos.line) && isColumn(pos.column))
return true; return true;
}
} catch (NullPointerException e) {
return false; return false;
} }
public boolean equals(Object obj) {
if (obj.getClass() == this.getClass())
return isSamePosition((Position) obj);
return false; return false;
}
public boolean isSame(Object obj) {
return obj.equals(this);
// return true;
} }
public boolean isColumn(int col) { public boolean isColumn(int col) {
......
package version3; package version3;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
public class SnakeGame { public class SnakeGame {
public static final int GRID_LINES = 12; public static final int GRID_LINES = 12;
public static final int GRID_COLUMNS = 12; public static final int GRID_COLUMNS = 12;
private List<Position> segments; private LinkedList<Position> segments;
private Direction direction; private Direction direction;
private boolean gameOver; private boolean gameOver;
private Position apple; private Position apple;
private Random rand = new Random();
public SnakeGame() { public SnakeGame() {
initialize(); initialize();
...@@ -20,33 +22,78 @@ public class SnakeGame { ...@@ -20,33 +22,78 @@ public class SnakeGame {
direction = Direction.EAST; direction = Direction.EAST;
int startL = GRID_LINES / 2; int startL = GRID_LINES / 2;
int startC = GRID_COLUMNS / 2; int startC = GRID_COLUMNS / 2;
gameOver = false; segments = new LinkedList<Position>();
setApple();
segments = new ArrayList<Position>();
segments.add(new Position(startL, startC)); segments.add(new Position(startL, startC));
segments.add(new Position(startL, startC - 1)); segments.add(new Position(startL, startC - 1));
segments.add(new Position(startL, startC - 2)); segments.add(new Position(startL, startC - 2));
gameOver = false;
setApple();
} }
public void setApple() { public void setApple() {
Random rand = new Random(); apple = new Position(this.rand.nextInt(GRID_LINES), this.rand.nextInt(GRID_COLUMNS));
apple = new Position(rand.nextInt(GRID_LINES + 1), rand.nextInt(GRID_LINES + 1)); if (isSnakeAt(apple)) {
setApple();
}
} }
public void advance() { public void advance() {
if (!isGameOver()) {
if (isSnakeAt(apple)) {
setApple();
} else {
segments.removeLast();
}
segments.addFirst(segments.peek().getNext(direction));
}
} }
public boolean isGameOver() { public boolean isGameOver() {
if (isOutOfBounds(segments.peekFirst()))
gameOver = true;
if (snakeBite())
gameOver = true;
return gameOver; return gameOver;
} }
public void changeDirection(Direction direction) { private boolean snakeBite() {
Position peek = segments.peekFirst();
for (Position seg : segments)
if (!peek.isSame(seg) && peek.isSamePosition(seg))
return true;
return false;
}
public boolean isOutOfBounds(Position pos) {
boolean condLine = pos.line < GRID_LINES && pos.line >= 0;
boolean condCol = pos.column < GRID_COLUMNS && pos.column >= 0;
if (condLine && condCol)
return false;
return true;
}
public void changeDirection(Direction newDirection) {
if (newDirection != getOpposite(direction))
direction = newDirection;
}
private Direction getOpposite(Direction dir) {
if (dir == Direction.NORTH)
return Direction.SOUTH;
if (dir == Direction.EAST)
return Direction.WEST;
if (dir == Direction.SOUTH)
return Direction.NORTH;
return Direction.EAST;
} }
public boolean isSnakeAt(Position position) { public boolean isSnakeAt(Position position) {
for (Position pos : segments) for (Position pos : segments)
if (position.isSamePosition(pos)) if (pos.isSamePosition(position))
return true; return true;
return false; return false;
} }
...@@ -70,12 +117,4 @@ public class SnakeGame { ...@@ -70,12 +117,4 @@ public class SnakeGame {
} }
} }
// public void printLine() {
// String line = "";
// for (int c =0; c<GRID_COLUMNS;c++) {
// if(apple.isColumn(c) && apple.isLine(c))
// }
//
// }
} }
...@@ -5,6 +5,8 @@ public class TestPosition { ...@@ -5,6 +5,8 @@ public class TestPosition {
public static void main(String[] args) { public static void main(String[] args) {
Position pos1 = new Position(3, 4); Position pos1 = new Position(3, 4);
Position pos2 = new Position(3, 4);
pos1.equals(pos2);
System.out.println(pos1); System.out.println(pos1);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment