Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

РК №4 #4

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main/java/com/gameapi/rha/mechanics/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public class Config {
public static final Double HILL_DEFENCE = 1.0;
public static final Double DESERT_HILL_DEFENCE = 0.8;
public static final Double FOREST_HILL_DEFENCE = 1.3;
public static final Double CITY_DEFENCE = 1.5;
public static final Double MOUNTAIN_DEFENCE = 1.7;
public static final Double CITY_DEFENCE = 1.2;
public static final Double MOUNTAIN_DEFENCE = 1.5;

public static final Integer FIELD_MAX = 7000;
public static final Integer FOREST_MAX = 6000;
Expand Down
17 changes: 9 additions & 8 deletions src/main/java/com/gameapi/rha/mechanics/GameMechanicsImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ public class GameMechanicsImpl implements GameMechanics {
@NotNull
private final RemotePointService remotePointService;

@NotNull
private final ServerTurnService serverTurnService;

@NotNull
private final GameSessionService gameSessionService;

Expand All @@ -57,14 +54,12 @@ public GameMechanicsImpl(@NotNull UserService userService,
@NotNull ClientTurnService clientTurnService,
@NotNull ClientStepService clientStepService,
@NotNull RemotePointService remotePointService,
@NotNull ServerTurnService serverTurnService,
@NotNull GameSessionService gameSessionService,
@NotNull ResourceFactory resourceFactory) {
this.userService = userService;
this.clientStepService = clientStepService;
this.gameInitService = gameInitService;
this.clientTurnService = clientTurnService;
this.serverTurnService = serverTurnService;
this.remotePointService = remotePointService;
this.gameSessionService = gameSessionService;
this.resourceFactory = resourceFactory;
Expand All @@ -79,7 +74,9 @@ public void step(@NotNull String user, @NotNull ClientStep clientStep) {
GameSession session = gameSessionService.getSessionForUser(user);

if (session != null) {
clientStepService.pushClientStep(session, clientStep);
if (session.getPlaying().equals(user)) {
clientStepService.pushClientStep(session, clientStep);
}
} else {
LOGGER.debug(String.format("User %s is not playing", user));
}
Expand Down Expand Up @@ -117,7 +114,6 @@ private boolean isWaiting(@NotNull String user) {

private void tryStartGames(Integer players) {
final List<User> matchedPlayers = new ArrayList<>();

while (waiters.get(players - 2).size() + matchedPlayers.size() >= players) {
final String candidate = waiters.get(players - 2).poll();
// for sure not null, cause we the only one consumer
Expand Down Expand Up @@ -146,7 +142,12 @@ public void reset() {

@Override
public void turn(@NotNull String user, @NotNull ClientTurn clientTurn) {
clientTurnService.turn(gameSessionService.getSessionForUser(user), user);
GameSession session = gameSessionService.getSessionForUser(user);
if (session.getPlaying().equals(user)) {
clientTurnService.turn(session);
// session.getTimerService().interrupt();

}
}


Expand Down
53 changes: 43 additions & 10 deletions src/main/java/com/gameapi/rha/mechanics/GameSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.gameapi.rha.mechanics.game.GameUser;
import com.gameapi.rha.mechanics.game.Hex;
import com.gameapi.rha.mechanics.game.TacticalMap;
import com.gameapi.rha.mechanics.services.ClientTurnService;
import com.gameapi.rha.mechanics.services.GameSessionService;
import com.gameapi.rha.mechanics.services.ResourceFactory;

Expand All @@ -15,6 +16,15 @@
public class GameSession {
private static final AtomicLong ID_GENERATOR = new AtomicLong(0);
private boolean isFinished;
private String playing;




private Long lastTurn;




private @NotNull Long sessionId;
private @NotNull List<GameUser> players;
Expand All @@ -24,12 +34,13 @@ public class GameSession {

private final @NotNull ResourceFactory resourceFactory;

public GameSession(List<GameUser> players, GameSessionService gameSessionService, ResourceFactory resourceFactory) {
public GameSession(List<GameUser> players, GameSessionService gameSessionService,
ResourceFactory resourceFactory, ClientTurnService turnService) {
this.players = players;
this.gameSessionService = gameSessionService;
this.resourceFactory = resourceFactory;
this.sessionId = ID_GENERATOR.getAndIncrement();

this.playing = players.get(0).getUserNickname();
this.map = new TacticalMap(resourceFactory.readMap("maps/trainingMap"));

Random rand = new Random();
Expand All @@ -38,21 +49,21 @@ public GameSession(List<GameUser> players, GameSessionService gameSessionService
this.map = new TacticalMap(
resourceFactory.readMap(
"maps/2players/map"
+ 3));
// + (Math.abs(rand.nextInt() % 2) + 1)));
+ (Math.abs(rand.nextInt() % 5) + 1)));
break;
case 3:
this.map = new TacticalMap(
resourceFactory.readMap(
"maps/3players/map" + 1
));
// + (Math.abs(rand.nextInt() % 2) + 1)
"maps/3players/map"
+ (Math.abs(rand.nextInt() % 2) + 1)
));
break;
default:
this.map = new TacticalMap(resourceFactory.readMap("maps/2players/map" + (rand.nextInt() % 5 + 1)));
break;
}

// timerService = new TurnTimerService(turnService, this);
lastTurn = System.currentTimeMillis();
}


Expand All @@ -68,8 +79,13 @@ public Long getSessionId() {
return sessionId;
}

public Object getEnemy(@org.jetbrains.annotations.NotNull String userN) {
return userN;
public GameUser getPlayer(@org.jetbrains.annotations.NotNull String userN) {
for (GameUser us: players) {
if (us.getUserNickname().equals(userN)) {
return us;
}
}
return null;
}

public TacticalMap getMap() {
Expand Down Expand Up @@ -164,4 +180,21 @@ public void mapTurn() {
}
}
}

public String getPlaying() {
return playing;
}

public void setPlaying(String playing) {
this.playing = playing;
}


public Long getLastTurn() {
return lastTurn;
}

public void updateLastTurn() {
this.lastTurn = System.currentTimeMillis();
}
}
12 changes: 11 additions & 1 deletion src/main/java/com/gameapi/rha/mechanics/game/GameUser.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@

public class GameUser extends GameObject {

private int tag;

private final @NotNull User userProfile;

public GameUser(@NotNull User userProfile, @NotNull MechanicsTimeService timeService) {
public GameUser(@NotNull User userProfile, @NotNull MechanicsTimeService timeService, int it) {
tag = it;
this.userProfile = userProfile;
}

Expand All @@ -30,4 +32,12 @@ public String toString() {
+ "userProfile=" + userProfile
+ '}';
}

public int getTag() {
return tag;
}

public void setTag(int tag) {
this.tag = tag;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public List<List<Integer>> getNeighbours(Hex hex) {
if (coords.getY() + 1 < map.size()) {
neighbours.add(Arrays.asList(coords.getY() + 1, coords.getX()));
}
if (coords.getX() % 2 == 1 && coords.getY() - 1 >= 0) {
if (coords.getX() % 2 == 0 && coords.getY() - 1 >= 0) {
if (coords.getX() - 1 >= 0) {
neighbours.add(Arrays.asList(coords.getY() - 1, coords.getX() - 1));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.gameapi.rha.mechanics.messages.handlers;


import com.gameapi.rha.mechanics.messages.input.Break;
import com.gameapi.rha.websocket.MessageHandler;
import com.gameapi.rha.websocket.MessageHandlerContainer;
import com.gameapi.rha.websocket.RemotePointService;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;

import javax.annotation.PostConstruct;
import javax.validation.constraints.NotNull;

@Component
public class BreakHandler extends MessageHandler<Break> {

private final @NotNull RemotePointService remotePointService;
private final @NotNull MessageHandlerContainer messageHandlerContainer;

public BreakHandler(@NotNull RemotePointService gameSocketHandler, @NotNull MessageHandlerContainer messageHandlerContainer) {
super(Break.class);
this.remotePointService = gameSocketHandler;
this.messageHandlerContainer = messageHandlerContainer;
}

@PostConstruct
private void init() {
messageHandlerContainer.registerHandler(Break.class, this);
}

@Override
public void handle(@NotNull Break message, @NotNull String user) {
remotePointService.cutDownConnection(user, new CloseStatus(400));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.gameapi.rha.mechanics.messages.input;

import com.gameapi.rha.websocket.Message;

public class Break extends Message {
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

@Service
public class ClientStepService {
private static final Logger LOGGER = LoggerFactory.getLogger(ServerTurnService.class);
private static final Logger LOGGER = LoggerFactory.getLogger(ClientTurnService.class);

@NotNull
private final RemotePointService remotePointService;
Expand Down Expand Up @@ -142,18 +142,18 @@ private void attackWin(Hex toHex, Hex fromHex, GameSession gameSession,
for (List<Integer> retreatHex : gameSession.getMap().getNeighbours(toHex)) {
if (gameSession.getMap().get(retreatHex.get(1), retreatHex.get(0))
.getOwner().equals(toHex.getOwner())) {
gameSession.getMap().get(retreatHex.get(0), retreatHex.get(1)).setUnits(
gameSession.getMap().get(retreatHex.get(0), retreatHex.get(1)).getUnits()
gameSession.getMap().get(retreatHex.get(1), retreatHex.get(0)).setUnits(
gameSession.getMap().get(retreatHex.get(1), retreatHex.get(0)).getUnits()
+ (toHex.getUnits() * (rand.nextInt() % Config.RETREATED_LOST_TROOPS_MAX + 10) / 100));
if (gameSession.getMap().get(
retreatHex.get(0), retreatHex.get(1)).getUnits()
retreatHex.get(1), retreatHex.get(0)).getUnits()
> gameSession.getMap().get(
retreatHex.get(0), retreatHex.get(1)).getMax()) {
gameSession.getMap().get(retreatHex.get(0), retreatHex.get(1)).setUnits(
gameSession.getMap().get(retreatHex.get(0), retreatHex.get(1)).getMax()
retreatHex.get(1), retreatHex.get(0)).getMax()) {
gameSession.getMap().get(retreatHex.get(1), retreatHex.get(0)).setUnits(
gameSession.getMap().get(retreatHex.get(1), retreatHex.get(0)).getMax()
);
}
changes.add(gameSession.getMap().get(retreatHex.get(0), retreatHex.get(1)));
changes.add(gameSession.getMap().get(retreatHex.get(1), retreatHex.get(0)));
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,19 @@

@Service
public class ClientTurnService {
private static final Logger LOGGER = LoggerFactory.getLogger(ServerTurnService.class);
private static final Logger LOGGER = LoggerFactory.getLogger(ClientTurnService.class);
@org.jetbrains.annotations.NotNull
private final RemotePointService remotePointService;

public ClientTurnService(@org.jetbrains.annotations.NotNull RemotePointService remotePointService) {
this.remotePointService = remotePointService;
}

public void turn(@org.jetbrains.annotations.NotNull GameSession gameSession, String current) {
public void turn(@org.jetbrains.annotations.NotNull GameSession gameSession) {
gameSession.tryFinishGame();
String next = gameSession.getNext(current).getUserNickname();
gameSession.updateLastTurn();
String next = gameSession.getNext(gameSession.getPlaying()).getUserNickname();
gameSession.setPlaying(next);
final TurnInit.Request turnMessage = new TurnInit.Request(next);
if (next == gameSession.getPlayers().get(0).getUserNickname()) {
turnMessage.setCycle(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

@Service
public class GameInitService {
private static final Logger LOGGER = LoggerFactory.getLogger(ServerTurnService.class);
private static final Logger LOGGER = LoggerFactory.getLogger(ClientTurnService.class);

@NotNull
private final RemotePointService remotePointService;
Expand Down
Loading