Skip to content

[Fix/client/map] #27

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

Merged
merged 2 commits into from
Dec 2, 2024
Merged
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
9 changes: 8 additions & 1 deletion client/src/main/java/org/kunp/Client.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.kunp;

import org.kunp.inner.InnerWaitingRoomComponent;
import org.kunp.map.Constants;
import org.kunp.waiting.WaitingRoomCreationPanel;
import org.kunp.waiting.WaitingRoomListPanel;

Expand Down Expand Up @@ -41,8 +42,14 @@ public Client() {
// 프레임 설정
JFrame frame = new JFrame("Tag Game - 대기실");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 500); // 화면 크기
frame.setPreferredSize(new Dimension(500, 500));
frame.setSize(500, 500); // 화면 크기
frame.pack();
frame.setLayout(new BorderLayout());
Insets insets = frame.getInsets();
int width = 500 + insets.left + insets.right;
int height = 500 + insets.top + insets.bottom;
frame.setSize(width, height);

// 화면 등록
registerScreens(sessionId, screenManager, stateManager, serverCommunicator);
Expand Down
2 changes: 1 addition & 1 deletion client/src/main/java/org/kunp/ServerCommunicator.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public ServerCommunicator(BufferedReader in, PrintWriter out) {
try {
String message;
while ((message = in.readLine()) != null) {
System.out.println(message);
//System.out.println(message);
notifyListeners(message);
}
} catch (IOException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ public InnerWaitingRoomComponent(StateManager stateManager, ServerCommunicator s

// 메시지 리스너 등록
ServerCommunicator.ServerMessageListener listener = message -> {
handleServerMessage( message, sessionIds, listPanel, in, out, stateManager, screenManager);
handleServerMessage( message, sessionIds, listPanel, in, out, stateManager, serverCommunicator, screenManager);
};

stateManager.addMessageListener(listener);
}

private void handleServerMessage(String message, Set<String> sessionIds, InnerWaitingRoomListPanel listPanel, BufferedReader in, PrintWriter out, StateManager stateManager, ScreenManager screenManager) {
private void handleServerMessage(String message, Set<String> sessionIds, InnerWaitingRoomListPanel listPanel, BufferedReader in, PrintWriter out, StateManager stateManager, ServerCommunicator serverCommunicator, ScreenManager screenManager) {
String[] tokens = message.split("\\|");
System.out.println(message);
//System.out.println(message);

if (tokens.length > 1) {
String type = tokens[0];
Expand All @@ -64,19 +64,17 @@ private void handleServerMessage(String message, Set<String> sessionIds, InnerWa
System.out.println("Game starting...");
try {
String role = tokens[1].equals("0") ? "tagger" : "normal";
Player player = new Player(
Player player = new Player(stateManager, serverCommunicator, screenManager,
Integer.parseInt(tokens[2]), Integer.parseInt(tokens[3]), role, out, stateManager.getSessionId()
);
screenManager.addScreen("Map", new Map(in, out, player, stateManager.getSessionId()));
screenManager.addScreen("Map", new Map(stateManager, serverCommunicator, screenManager, player, stateManager.getSessionId()));
System.out.println("Map screen added successfully.");
stateManager.sendServerRequest(message, () -> {
stateManager.switchTo("Map");
});
stateManager.switchTo("Map");
} catch (Exception ex) {
ex.printStackTrace(); // 오류 출력
}
});
default -> System.out.println("Unhandled message type: " + type);
//default -> System.out.println("Unhandled message type: " + type);
}
SwingUtilities.invokeLater(() -> listPanel.updateSessionList(sessionIds));
}
Expand Down
77 changes: 39 additions & 38 deletions client/src/main/java/org/kunp/map/Map.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
package org.kunp.map;

import org.kunp.ScreenManager;
import org.kunp.ServerCommunicator;
import org.kunp.StateManager;
import org.kunp.inner.InnerWaitingRoomListPanel;
import org.kunp.waiting.WaitingRoomComponent;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Set;

public class Map extends JPanel {
private MapPanel[][] maps;
private int currentMapX = 1, currentMapY = 1;
private final Player player;
private final boolean[] keysPressed = new boolean[256];
private final Timer moveTimer;
private final BufferedReader in;
private final PrintWriter out;
private final String sessionId;
private final HashMap<String, Location> locations = new HashMap<>();

public Map(BufferedReader in, PrintWriter out, Player player, String sessionId) {
this.in = in;
this.out = out;
public Map(StateManager stateManager, ServerCommunicator serverCommunicator, ScreenManager screenManager, Player player, String sessionId) {
this.player = player;
this.sessionId = sessionId;

Expand Down Expand Up @@ -52,10 +56,36 @@ public void focusGained(FocusEvent e) {

moveTimer = new Timer(50, e -> checkKeyboardInput());
moveTimer.start();
requestFocusInWindow();

LocationSyncThread lst = new LocationSyncThread(in);
lst.start();
serverCommunicator.addMessageListener(message -> {
String[] tokens = message.split("\\|");
String type = tokens[0];
if(type.equals("210") || type.equals("211") || type.equals("212")){
String mover_sessionId = tokens[1];
int x = Integer.parseInt(tokens[2]), y = Integer.parseInt(tokens[3]);
int mapIdx = Integer.parseInt(tokens[4]);
synchronized (locations){
if(!locations.containsKey(mover_sessionId)) locations.put(mover_sessionId, new Location(mapIdx, x, y));
else locations.get(mover_sessionId).setLocation(mapIdx, x, y);
}
repaint();
}
});

// 포커스 요청
SwingUtilities.invokeLater(() -> {
if (!requestFocusInWindow()) {
Timer focusRetryTimer = new Timer(100, evt -> {
if (isFocusOwner() || requestFocusInWindow()) {
((Timer) evt.getSource()).stop(); // 성공하면 타이머 중지
System.out.println("Focus successfully set on Map.");
}
});
focusRetryTimer.start();
} else {
System.out.println("Focus successfully set on Map.");
}
});
}

private void initializeMapPanels() {
Expand Down Expand Up @@ -83,6 +113,7 @@ private void checkKeyboardInput() {
}

private void movePlayer(int keyCode) {
System.out.println("key identified");
int newX = player.getX(), newY = player.getY();
int xx = 0, yy = 0;
switch (keyCode) {
Expand Down Expand Up @@ -133,34 +164,4 @@ private void moveMap(int x, int y, int portal) {
revalidate();
requestFocusInWindow();
}

private class LocationSyncThread extends Thread{
private BufferedReader in = null;
public LocationSyncThread(BufferedReader in){
this.in = in;
}
public void run(){
try {
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
String[] parts = line.split("\\|");
String sessionId = parts[1];
int x = Integer.parseInt(parts[2]);
int y = Integer.parseInt(parts[3]);
int roomNumber = Integer.parseInt(parts[4]);
synchronized (locations){
if(!locations.containsKey(sessionId)) locations.put(sessionId, new Location(roomNumber, x, y));
else locations.get(sessionId).setLocation(roomNumber, x, y);
}
repaint();
}
}catch(Exception ex){
}finally{
try{
if(in != null) in.close();
}catch(Exception ex){}
}
}
}
}
2 changes: 1 addition & 1 deletion client/src/main/java/org/kunp/map/MapPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ private void setObstacles() {
List<Integer> numbers = new ArrayList<>();
for (int i = 20; i <= 470; i += 10) numbers.add(i);

Random random = new Random();
Random random = new Random(3*mapX+mapY);
List<int[]> locs = new ArrayList<>();
while (locs.size() < Constants.NUM_ROCKS) {
int x = numbers.get(random.nextInt(numbers.size()));
Expand Down
19 changes: 11 additions & 8 deletions client/src/main/java/org/kunp/map/Player.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package org.kunp.map;

import org.kunp.ScreenManager;
import org.kunp.ServerCommunicator;
import org.kunp.StateManager;

import java.io.PrintWriter;

public class Player {
Expand All @@ -8,14 +12,16 @@ public class Player {
private String sessionId;
private int mapIdx;
private PrintWriter out;
private ServerCommunicator serverCommunicator;

public Player(int startX, int startY, String role, PrintWriter out, String sessionId) {
public Player(StateManager stateManager, ServerCommunicator serverCommunicator, ScreenManager screenManager, int startX, int startY, String role, PrintWriter out, String sessionId) {
this.x = startX;
this.y = startY;
this.role = role;
this.out = out;
this.sessionId = sessionId;
this.mapIdx = 5;
this.serverCommunicator = serverCommunicator;
}

public int getX() {
Expand All @@ -41,19 +47,16 @@ public void move(int dx, int dy) {
x += dx;
y += dy;
sendLocation();
//System.out.println("("+x+","+y+")");
}

public void sendInteraction(){
String message = String.format("202|%s|%d|%d|%d|1", sessionId, x, y, mapIdx);
out.println(message);
out.flush();
String requestMessage = String.format("202|%s|%s|%d|%d|1", sessionId, x, y, mapIdx);
serverCommunicator.sendRequest(requestMessage);
}

private void sendLocation() {
String message = String.format("201|%s|%d|%d|%d|1", sessionId, x, y, mapIdx);
out.println(message);
out.flush();
String requestMessage = String.format("201|%s|%s|%d|%d|1", sessionId, x, y, mapIdx);
serverCommunicator.sendRequest(requestMessage);
}
}

Loading