Skip to content
Snippets Groups Projects
Commit 16d832d7 authored by Luis PARRA's avatar Luis PARRA
Browse files

RockPaperScissor Game

parent 4ca321e0
Branches
No related tags found
No related merge requests found
Pipeline #25904 passed
......@@ -104,13 +104,11 @@ public class Controller {
private void repaintGrid() {
initializeParameters();
Board gameBoard;
if (gamemode == 0) {
gameBoard = new FirefighterBoard(columnCount, rowCount, elementsCountFireFighter);
this.setModel(new FirefighterBoard(columnCount, rowCount, elementsCountFireFighter));
} else {
gameBoard = new RockScissorPaperBoard(columnCount, rowCount, elementsCountRockScissorPaper);
this.setModel(new RockScissorPaperBoard(columnCount, rowCount, elementsCountRockScissorPaper));
}
this.setModel(gameBoard);
int columnCount = board.columnCount();
int rowCount = board.rowCount();
......@@ -144,6 +142,15 @@ public class Controller {
if (squareState.contains(FireFighterModelElement.ROCKERY)) {
return ViewElement.ROCKERY;
}
if (squareState.contains(FireFighterModelElement.ROCK)) {
return ViewElement.ROCK;
}
if (squareState.contains(FireFighterModelElement.SCISSOR)) {
return ViewElement.SCISSOR;
}
if (squareState.contains(FireFighterModelElement.PAPER)) {
return ViewElement.PAPER;
}
return ViewElement.EMPTY;
}
......@@ -214,13 +221,11 @@ public class Controller {
grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
this.columnCount = columnCount;
this.rowCount = rowCount;
Board gameBoard;
if (gamemode == 0) {
gameBoard = new FirefighterBoard(columnCount, rowCount, elementsCountFireFighter);
this.setModel(new FirefighterBoard(columnCount, rowCount, elementsCountFireFighter));
} else {
gameBoard = new RockScissorPaperBoard(columnCount, rowCount, elementsCountRockScissorPaper);
this.setModel(new RockScissorPaperBoard(columnCount, rowCount, elementsCountRockScissorPaper));
}
this.setModel(gameBoard);
repaintGrid();
}
......
......@@ -14,7 +14,7 @@ public abstract class AbstractBoard<F> implements Board<List<FireFighterModelEle
public Elements[] elements = new Elements[]{};
private int step = 0;
public int step = 0;
public AbstractBoard(int columnCount, int rowCount){
this.columnCount = columnCount;
......
......@@ -52,6 +52,7 @@ public abstract class AbstractElements implements Elements {
for (Position neighbor : neighbors(position)) {
boolean isNeighbor = true;
for (Elements element : elements) {
if(element == null) continue;
if (element.getElementsPositions().contains(neighbor)) {
isNeighbor = false;
break;
......
......@@ -5,23 +5,14 @@ import util.Position;
import java.util.*;
public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
private HashMap<String, Integer> elementsCount;
private int step = 0;
public Fire fire;
public FireFighterPerson fireFighters;
public FireTruck fireTrucks;
public Cloud cloud;
public Mountain mountain;
public Road road;
public Rockery rockery;
......@@ -29,7 +20,6 @@ public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
super(columnCount, rowCount);
this.elementsCount = elementsCount;
mountain = new Mountain(columnCount, rowCount);
road = new Road(columnCount, rowCount);
rockery = new Rockery(columnCount, rowCount);
......@@ -53,11 +43,8 @@ public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
rockery.initializeElements(elementsCount.get("rockery_count"));
}
public List<Position> updateToNextGeneration() {
List<Position> modifiedElements = new ArrayList<>();
for (Elements element : elements) {
......@@ -65,7 +52,6 @@ public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
}
fireFighters.nextMove();
//System.out.println(fireFighters.firefighterPositions);
fireTrucks.nextMove();
......@@ -75,7 +61,6 @@ public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
fire.extinguishs(fireTrucks.getElementsPositions());
fire.extinguishs(cloud.getElementsPositions());
if (step % 2 == 0)
fire.nextMove();
......@@ -88,6 +73,4 @@ public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
return modifiedElements;
}
}
\ No newline at end of file
package model;
public enum ModelElements {
FIREFIGHTER, FIRE, CLOUD, FIRETRUCK, MOUNTAIN, ROAD, ROCKERY,
ROCK, SCISSOR, PAPER
}
......@@ -10,21 +10,23 @@ import java.util.HashMap;
import java.util.*;
public class RockScissorPaperBoard extends AbstractBoard<FireFighterModelElement> {
HashMap<String, Integer> elementsCount;
Rock rock;
Scissor scissor;
Paper paper;
HashMap<String, Integer> elementsCount;
public RockScissorPaperBoard(int columnCount, int rowCount, HashMap<String, Integer> elementsCount) {
super(columnCount, rowCount);
this.rock = new Rock(columnCount, rowCount);
this.scissor = new Scissor(columnCount, rowCount, paper);
this.paper = new Paper(columnCount, rowCount);
this.elementsCount = elementsCount;
rock = new Rock(columnCount, rowCount);
scissor = new Scissor(columnCount, rowCount);
paper = new Paper(columnCount, rowCount);
this.elements = new Elements[] { rock, scissor, paper };
this.elementsCount = elementsCount;
rock.setScissorPaper(scissor, paper);
scissor.setPaperRock(paper, rock);
paper.setScissorRock(scissor, rock);
initializeElements();
}
......@@ -45,8 +47,10 @@ public class RockScissorPaperBoard extends AbstractBoard<FireFighterModelElement
modifiedPositions.addAll(element.getElementsPositions());
}
step++;
return modifiedPositions;
}
}
package model.RockScissorPaperElements;
import model.AbstractElements;
import model.fireFighterElements.FireFighterModelElement;
import util.Position;
import java.util.ArrayList;
import java.util.List;
public class Paper extends AbstractElements {
Scissor scissor;
Rock rock;
public Paper(int columnCount, int rowCount) {
super(columnCount, rowCount);
this.rockScissorPaperModelElement = RockScissorPaperModelElement.PAPER;
this.fireFighterModelElement = FireFighterModelElement.PAPER;
}
public void setScissorRock(Scissor scissor, Rock rock) {
this.scissor = scissor;
this.rock = rock;
}
@Override
public void nextMove() {
List<Position> newElementsPositions = new ArrayList<>();
for (Position scissorPosition : elementsPositions) {
List<Position> newScissorPosition = neighborsWithoutSelectedElements(scissorPosition, scissor);
for(Position position : newScissorPosition)
if(rock.getElementsPositions().contains(position))
for (Position elementPosition : elementsPositions) {
List<Position> newElementPosition = neighborsWithoutSelectedElements(elementPosition, scissor);
for (Position position : newElementPosition) {
if (rock.getElementsPositions().contains(position)) {
rock.removeElement(position);
newElementsPositions.addAll(newScissorPosition);
newElementsPositions.add(position);
break;
}
}
if (newElementPosition.size() > 0) {
newElementsPositions.add(newElementPosition.get(randomGenerator.nextInt(newElementPosition.size())));
}
}
for (Position newElementPosition : newElementsPositions) {
if(!elementsPositions.contains(newElementPosition))
elementsPositions.add(newElementPosition);
for (Position elementPos : newElementsPositions) {
if (!elementsPositions.contains(elementPos))
elementsPositions.add(elementPos);
}
}
}
package model.RockScissorPaperElements;
import model.AbstractElements;
import model.fireFighterElements.FireFighterModelElement;
import util.Position;
import java.util.ArrayList;
......@@ -10,26 +11,41 @@ public class Rock extends AbstractElements {
Paper paper;
Scissor scissor;
public Rock(int columnCount, int rowCount) {
super(columnCount, rowCount);
this.rockScissorPaperModelElement = RockScissorPaperModelElement.ROCK;
this.fireFighterModelElement = FireFighterModelElement.ROCK;
}
public void setScissorPaper(Scissor scissor, Paper paper) {
this.scissor = scissor;
this.paper = paper;
}
@Override
public void nextMove() {
List<Position> newElementsPositions = new ArrayList<>();
for (Position scissorPosition : elementsPositions) {
List<Position> newScissorPosition = neighborsWithoutSelectedElements(scissorPosition, paper);
for(Position position : newScissorPosition)
if(scissor.getElementsPositions().contains(position))
for (Position elementPosition : elementsPositions) {
List<Position> newElementPosition = neighborsWithoutSelectedElements(elementPosition, paper);
for (Position position : newElementPosition) {
if (scissor.getElementsPositions().contains(position)) {
scissor.removeElement(position);
newElementsPositions.addAll(newScissorPosition);
newElementsPositions.add(position);
break;
}
}
if (newElementPosition.size() > 0) {
newElementsPositions.add(newElementPosition.get(randomGenerator.nextInt(newElementPosition.size())));
}
}
for (Position newElementPosition : newElementsPositions) {
if(!elementsPositions.contains(newElementPosition))
elementsPositions.add(newElementPosition);
for (Position elementPos : newElementsPositions) {
if (!elementsPositions.contains(elementPos))
elementsPositions.add(elementPos);
}
}
}
package model.RockScissorPaperElements;
import model.AbstractElements;
import model.fireFighterElements.FireFighterModelElement;
import util.Position;
import java.util.ArrayList;
......@@ -10,25 +11,40 @@ public class Scissor extends AbstractElements {
Paper paper;
Rock rock;
public Scissor(int columnCount, int rowCount, Paper paper) {
public Scissor(int columnCount, int rowCount) {
super(columnCount, rowCount);
this.rockScissorPaperModelElement = RockScissorPaperModelElement.SCISSOR;
this.fireFighterModelElement = FireFighterModelElement.SCISSOR;
}
public void setPaperRock(Paper paper, Rock rock) {
this.paper = paper;
this.rock = rock;
}
@Override
public void nextMove() {
List<Position> newElementsPositions = new ArrayList<>();
for (Position scissorPosition : elementsPositions) {
List<Position> newScissorPosition = neighborsWithoutSelectedElements(scissorPosition, rock);
for(Position position : newScissorPosition)
if(paper.getElementsPositions().contains(position))
for (Position elementPosition : elementsPositions) {
List<Position> newElementPosition = neighborsWithoutSelectedElements(elementPosition, rock);
for (Position position : newElementPosition) {
if (paper.getElementsPositions().contains(position)) {
paper.removeElement(position);
newElementsPositions.addAll(newScissorPosition);
newElementsPositions.add(position);
break;
}
}
if (newElementPosition.size() > 0) {
newElementsPositions.add(newElementPosition.get(randomGenerator.nextInt(newElementPosition.size())));
}
}
for (Position newElementPosition : newElementsPositions) {
if(!elementsPositions.contains(newElementPosition))
elementsPositions.add(newElementPosition);
for (Position elementPos : newElementsPositions) {
if (!elementsPositions.contains(elementPos))
elementsPositions.add(elementPos);
}
}
}
package model.fireFighterElements;
public enum FireFighterModelElement {
FIREFIGHTER, FIRE, CLOUD, FIRETRUCK, MOUNTAIN, ROAD, ROCKERY
FIREFIGHTER, FIRE, CLOUD, FIRETRUCK, MOUNTAIN, ROAD, ROCKERY, ROCK, SCISSOR, PAPER
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment