'Java Socket Programming MultiPlayer Kart Racing Game Shows Blank Screen
Basically I am developing a multiplayer kart racing game using TCP. There will be two clients and one server. The clients connected will be passed as a thread running. The first connected client will be assigned as player 1 and the later to be player 2.
The protocol that I have developed is: Player 1 sends its kart's information to server and server forwards it to Player 2. Player 2 then sends its kart's information to server and server forwards it to Player 1.
I am sending String like "KART1:X:200" over the network. However, when entire project runs, the two clients are successfully connected, but the jFrame shows nothing.
Below is my code for
Server:-
try
{
service = new ServerSocket(8888);
System.out.println("Server has started.");
}
catch (IOException e)
{
System.out.println(e);
}
try
{
while (connectedClient < 2)
{
server = service.accept();
connectedClient++;
BufferedReader reader = new BufferedReader(new InputStreamReader(server.getInputStream()));
DataOutputStream writer = new DataOutputStream(server.getOutputStream());
ClientThread clientThread = new ClientThread(server, String.valueOf(connectedClient), reader, writer);
System.out.println("Player " + connectedClient + " connected. IP Address: " + server.getInetAddress());
Thread thread = new Thread(clientThread);
thread.start();
System.out.println("Player: " + connectedClient + " thread running.");
}
System.out.println("Server is full.");
}
catch (IOException e)
{
System.out.println(e);
}
ClientThread:-
@Override
public void run()
{
try
{
while (keepRunning == true)
{
if (reader.readLine() != null)
{
String[] message = reader.readLine().split(":");
if (message[0].equalsIgnoreCase("KART1"))
{
kartNum = message[0];
if (message[1] == "INDEX")
{
kartNumIndex = message[2];
broadcastToPlayer2(kartNumIndex);
}
else if (message[1] == "X")
{
x = message[2];
broadcastToPlayer2(x);
}
else if (message[1] == "Y")
{
y = message[2];
broadcastToPlayer2(y);
}
else if (message[1] == "SPEED")
{
speed = message[2];
broadcastToPlayer2(speed);
}
}
else if (message[0].equalsIgnoreCase("KART2"))
{
kartNum = message[0];
if (message[1] == "INDEX")
{
kartNumIndex = message[2];
broadcastToPlayer1(kartNumIndex);
}
else if (message[1] == "X")
{
x = message[2];
broadcastToPlayer1(x);
}
else if (message[1] == "Y")
{
y = message[2];
broadcastToPlayer1(y);
}
else if (message[1] == "SPEED")
{
speed = message[2];
broadcastToPlayer1(speed);
}
}
}
}
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
}
public void broadcastToPlayer1(String value)
{
try
{
clients.get(0).writer.writeBytes(value);
clients.get(0).writer.writeBytes("\n");
clients.get(0).writer.flush();
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
}
public void broadcastToPlayer2(String value)
{
try
{
clients.get(1).writer.writeBytes(value);
clients.get(1).writer.writeBytes("\n");
clients.get(1).writer.flush();
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
}
RacingTrack (JPanel) that will get and send karts' information:-
if (playerNum == 1)
{
// send kart1 information
try
{
writer.writeBytes("KART1:INDEX:" + kart1.getKartImageIndex());
writer.writeBytes("\n");
writer.writeBytes("KART1:X:" + kart1.getXCoordinate());
writer.writeBytes("\n");
writer.writeBytes("KART1:Y:" + kart1.getYCoordinate());
writer.writeBytes("\n");
writer.writeBytes("KART1:SPEED:" + kart1.getSpeed());
writer.writeBytes("\n");
writer.flush();
kart1.draw(g, this);
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
}
if (playerNum == 2)
{
// get kart1 information
try
{
kartImageIndex = Integer.parseInt(reader.readLine());
x = Integer.parseInt(reader.readLine());
y = Integer.parseInt(reader.readLine());
speed = Integer.parseInt(reader.readLine());
kart1.setKartImageIndex(kartImageIndex);
kart1.setXCoordinate(x);
kart1.setYCoordinate(y);
kart1.setSpeed(speed);
kart1.draw(g, this);
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
// send kart2 information
try
{
writer.writeBytes("KART2:INDEX:" + kart2.getKartImageIndex());
writer.writeBytes("\n");
writer.writeBytes("KART2:X:" + kart2.getXCoordinate());
writer.writeBytes("\n");
writer.writeBytes("KART2:Y:" + kart2.getYCoordinate());
writer.writeBytes("\n");
writer.writeBytes("KART2:SPEED:" + kart2.getSpeed());
writer.writeBytes("\n");
writer.flush();
kart2.draw(g, this);
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
}
if (playerNum == 1)
{
// get kart2 information
try
{
kartImageIndex = Integer.parseInt(reader.readLine());
x = Integer.parseInt(reader.readLine());
y = Integer.parseInt(reader.readLine());
speed = Integer.parseInt(reader.readLine());
kart2.setKartImageIndex(kartImageIndex);
kart2.setXCoordinate(x);
kart2.setYCoordinate(y);
kart2.setSpeed(speed);
kart2.draw(g, this);
}
catch (IOException iOe)
{
iOe.printStackTrace();
}
}
Please help :(
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
