-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNumberGuessingClient.java
More file actions
81 lines (71 loc) · 3.92 KB
/
NumberGuessingClient.java
File metadata and controls
81 lines (71 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class NumberGuessingClient {
private static final int MIN_NUMBER = 1;
private static final int MAX_NUMBER = 100;
public static void main(String[] args) {
// Get the server address from the environment variable "SERVER_ADDRESS"
String serverAddress = System.getenv("SERVER_ADDRESS");
if (serverAddress == null || serverAddress.isEmpty()) {
serverAddress = "guess-server"; // Use the Docker Compose service name instead of localhost
}
int port = 12347;
try (Socket socket = new Socket(serverAddress, port);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Scanner scanner = new Scanner(System.in)) {
System.out.println("Connected to Number Guessing Game Server at " + serverAddress + ":" + port);
System.out.println("Game Rules:");
System.out.println("- Enter a number between 1 and 100");
System.out.println("- The server will transform your number based on special rules:");
System.out.println(" * Odd numbers: A random prime number less than 17 will be added");
System.out.println(" * Even numbers: The digits will be reversed");
System.out.println(" * Then: If result ≥ 100, it's divided by 2; if < 50, it's multiplied by 2");
System.out.println("- Try to guess a number that will transform to the target!");
// Read initial player assignment info from the server
String initialMessage = in.readLine();
System.out.println("\n" + initialMessage);
// Main game loop
String response;
while ((response = in.readLine()) != null) {
System.out.println(response);
if (response.contains("Enter your guess")) {
while (true) {
System.out.print("Your guess (" + MIN_NUMBER + "-" + MAX_NUMBER + "): ");
String guess = scanner.nextLine().trim();
try {
int number = Integer.parseInt(guess);
if (number >= MIN_NUMBER && number <= MAX_NUMBER) {
out.println(guess);
break;
} else {
System.out.println("Please enter a number between " + MIN_NUMBER + " and " + MAX_NUMBER);
}
} catch (NumberFormatException e) {
System.out.println("Please enter a valid number");
}
}
} else if (response.contains("Do you want to play again")) {
while (true) {
System.out.print("Play again? (y/n): ");
String answer = scanner.nextLine().trim().toLowerCase();
if (answer.equals("y") || answer.equals("n")) {
out.println(answer);
break;
} else {
System.out.println("Please enter 'y' for yes or 'n' for no");
}
}
} else if (response.contains("Goodbye!")) {
System.out.println("Thanks for playing!");
break;
}
}
} catch (ConnectException e) {
System.err.println("Could not connect to the server at " + serverAddress + ". Make sure it's running.");
} catch (IOException e) {
System.err.println("Lost connection to the server: " + e.getMessage());
}
}
}