Commit 90315b7f authored by 9731301's avatar 9731301

complete client networkPlaying

parent 3df333c1
...@@ -7,17 +7,11 @@ ...@@ -7,17 +7,11 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="0b3d586d-9f0f-4ca4-b09d-03a200e1e684" name="Default Changelist" comment=""> <list default="true" id="0b3d586d-9f0f-4ca4-b09d-03a200e1e684" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/.idea/artifacts/JTankTrouble_jar.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/Server_Client/NetWorkGame/Client1.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGFrame.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGLoop.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGRendering.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/JTankTrouble/UI/LogIn/MainPanel$1.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/Server_Client/NetWorkGame/Client1.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Server_Client/NetWorkGame/Client1.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/JTankTrouble/UI/LogIn/MainPanel$2.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/UI/GameState/WallState.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UI/GameState/WallState.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/JTankTrouble/UI/LogIn/MainPanel$3.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGLoop.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGLoop.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/JTankTrouble/UI/LogIn/MainPanel.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGRendering.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UI/LogIn/NetWorkGame/NWGRendering.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/UI/LogIn/MainPanel.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UI/LogIn/MainPanel.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -156,6 +150,8 @@ ...@@ -156,6 +150,8 @@
<workItem from="1596559015419" duration="8215000" /> <workItem from="1596559015419" duration="8215000" />
<workItem from="1596589736833" duration="13294000" /> <workItem from="1596589736833" duration="13294000" />
<workItem from="1596613090214" duration="8123000" /> <workItem from="1596613090214" duration="8123000" />
<workItem from="1596634146159" duration="2212000" />
<workItem from="1596700092093" duration="11265000" />
</task> </task>
<servers /> <servers />
</component> </component>
...@@ -167,10 +163,10 @@ ...@@ -167,10 +163,10 @@
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="517" y="216" key="#com.intellij.fileTypes.FileTypeChooser/0.0.1536.824@0.0.1536.824" timestamp="1596402386433" /> <state x="517" y="216" key="#com.intellij.fileTypes.FileTypeChooser/0.0.1536.824@0.0.1536.824" timestamp="1596402386433" />
<state x="574" y="122" key="#com.intellij.ide.util.MemberChooser" timestamp="1596620195172"> <state x="574" y="122" key="#com.intellij.ide.util.MemberChooser" timestamp="1596713317284">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="574" y="122" key="#com.intellij.ide.util.MemberChooser/0.0.1536.824@0.0.1536.824" timestamp="1596620195172" /> <state x="574" y="122" key="#com.intellij.ide.util.MemberChooser/0.0.1536.824@0.0.1536.824" timestamp="1596713317284" />
<state x="499" y="197" key="#com.intellij.ide.util.TreeClassChooserDialog" timestamp="1596591250036"> <state x="499" y="197" key="#com.intellij.ide.util.TreeClassChooserDialog" timestamp="1596591250036">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
......
package Server_Client.NetWorkGame; package Server_Client.NetWorkGame;
import UI.GameState.BulletState; import UI.GameState.*;
import UI.GameState.EnemyTank;
import UI.GameState.TankState;
import UI.GameState.WallState;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -16,32 +13,21 @@ public class Client1 { ...@@ -16,32 +13,21 @@ public class Client1 {
private Socket socket = null; private Socket socket = null;
private String host; private String host;
private int port; private int port;
private int enemyX; private int myX, myY, myRotate;
private int enemyY; private ArrayList<BulletState> myBullets;
private int enemyRotate;
private int enemyBulletX;
private int enemyBulletY;
private boolean enemyHasLaser;
private boolean enemyHasShield;
private boolean enemyHasMoreLife;
private WallState wallState; private WallState wallState;
private ArrayList<EnemyTank> enemyTanks;
private ArrayList<BulletState> eachTankBullets;
private String serverAns; private String serverAns;
private String[] enemyComponents;
private int numOfEnemies;
private String wallMap;
public Client1(String address , int port) { public Client1(String address , int port) {
this.host = address; this.host = address;
this.port = port; this.port = port;
numOfEnemies = 0;
} }
private String tankStateToString (TankState tank) throws IOException {
String tankComponent , bulletComponent = "";
tankComponent = tank.locX +" "+ tank.locY+" " +tank.rotate +" "+tank.hasShield() +" "+tank.hasLaser() +" "+tank.isHasMoreLife();
for (BulletState bullet : tank.getBullets()){
bulletComponent +=" " + bullet.locX + " " + bullet.locY + " " ;
}
return tankComponent + bulletComponent;
}
public void run(TankState tankState) { public void run(TankState tankState) {
try{ try{
...@@ -50,15 +36,13 @@ public class Client1 { ...@@ -50,15 +36,13 @@ public class Client1 {
InputStream in = socket.getInputStream(); InputStream in = socket.getInputStream();
out.write("Client1".getBytes()); out.write("Client1".getBytes());
String text = ""; String clientText = "";
boolean running = true; boolean running = true;
do { do {
//ToDo update the tank and enemy tank x , y , ... clientText = myTankComponents();
text = tankStateToString(tankState); running = !clientText.equalsIgnoreCase("over");
running = !text.equalsIgnoreCase("over"); out.write(clientText.getBytes());
out.write(text.getBytes());
byte[] buffer = new byte[2048]; byte[] buffer = new byte[2048];
int read = in.read(buffer); int read = in.read(buffer);
...@@ -74,44 +58,55 @@ public class Client1 { ...@@ -74,44 +58,55 @@ public class Client1 {
} }
} }
private ArrayList<EnemyTank> createEnemyTanks(String s){ private int getNumOfEnemies(){
String[] s = serverAns.split(" ");
numOfEnemies = s.length/6;
return numOfEnemies;
}
public ArrayList<EnemyTank> createEnemyTanks(){
ArrayList<EnemyTank> enemyTanks = new ArrayList<>(); ArrayList<EnemyTank> enemyTanks = new ArrayList<>();
int numOfEnemies = findNumOfEnemies(s); for (int i = 0 ; i < getNumOfEnemies() ; i ++){
for (int i = 0 ; i < numOfEnemies ; i ++){
EnemyTank enemyTank = new EnemyTank(wallState); EnemyTank enemyTank = new EnemyTank(wallState);
enemyTanks.add(enemyTank); enemyTanks.add(enemyTank);
} }
return enemyTanks; return enemyTanks;
} }
//ToDo
private int findNumOfEnemies(String s){
public void updateEnemyComponents(ArrayList<EnemyTank> enemyTanks){//ToDO separate tanks and each tank bullets
int j = 0;
enemyComponents = serverAns.split(" ");
wallMap = enemyComponents[0];
for (int i = 1 ; i < getNumOfEnemies() ; i++){
enemyTanks.get(i).locX = Integer.parseInt(enemyComponents[j]);j++;
enemyTanks.get(i).locY = Integer.parseInt(enemyComponents[j]);j++;
enemyTanks.get(i).rotate = Integer.parseInt(enemyComponents[j]);j++;
for (BulletState bullet : enemyTanks.get(i).getBullets()){
bullet.locX = Integer.parseInt(enemyComponents[j]);j++;
bullet.locY = Integer.parseInt(enemyComponents[j]);j++;
}
}
} }
private void parser(){//ToDO separate tanks and each tank bullets
public void updateMyTank (TankState myTank) throws IOException {
myX = myTank.locX;
myY = myTank.locY;
myRotate = myTank.rotate;
myBullets = myTank.getBullets();
} }
public void updateEnemyComponents(){ private String myTankComponents(){
for (EnemyTank enemyTank : enemyTanks){ String tankComponent , bulletComponent = "";
enemyTank.locX = enemyX; tankComponent = myX +" "+ myY +" " + myRotate ;
enemyTank.locY = enemyY; for (BulletState bullet : myBullets){
enemyTank.rotate =enemyRotate; bulletComponent +=" " + bullet.locX + " " + bullet.locY ;
enemyTank.setHasShield(enemyHasShield);
enemyTank.setHasLaser(enemyHasLaser);
enemyTank.setHasMoreLife(enemyHasMoreLife);
for (BulletState bullet : enemyTank.getBullets()){
bullet.locX = enemyBulletX;
bullet.locY = enemyBulletY;
}
} }
} return tankComponent+bulletComponent;
public ArrayList<EnemyTank> getEnemyTanks() {
return enemyTanks = createEnemyTanks(serverAns);
} }
public WallState getWallState() { public WallState getWallState() {
wallState.setSource(wallMap);
return wallState; return wallState;
} }
} }
...@@ -137,6 +137,10 @@ public class WallState { ...@@ -137,6 +137,10 @@ public class WallState {
return false; return false;
} }
public void setSource(String source) {
this.source = source;
}
public ArrayList<WallData> getWalls() { public ArrayList<WallData> getWalls() {
return walls; return walls;
} }
......
...@@ -5,6 +5,7 @@ import UI.GameState.EnemyTank; ...@@ -5,6 +5,7 @@ import UI.GameState.EnemyTank;
import UI.GameState.MyTank; import UI.GameState.MyTank;
import UI.LogIn.Game.GameFrame; import UI.LogIn.Game.GameFrame;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
/*** In The Name of Allah ***/ /*** In The Name of Allah ***/
...@@ -48,7 +49,7 @@ import java.util.ArrayList; ...@@ -48,7 +49,7 @@ import java.util.ArrayList;
// Perform all initializations ... // Perform all initializations ...
myTank = new MyTank(canvas.wallState); myTank = new MyTank(canvas.wallState);
client1.run(myTank); client1.run(myTank);
enemyTanks = client1.getEnemyTanks(); enemyTanks = client1.createEnemyTanks();
canvas.addKeyListener(myTank.getMyListener()); canvas.addKeyListener(myTank.getMyListener());
canvas.addMouseListener(myTank.getMouseListener()); canvas.addMouseListener(myTank.getMouseListener());
canvas.addMouseMotionListener(myTank.getMouseMotionListener()); canvas.addMouseMotionListener(myTank.getMouseMotionListener());
...@@ -62,12 +63,13 @@ import java.util.ArrayList; ...@@ -62,12 +63,13 @@ import java.util.ArrayList;
try { try {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
myTank.update(); myTank.update();
client1.updateEnemyComponents(); client1.updateEnemyComponents(enemyTanks);
client1.updateMyTank(myTank);
canvas.render(myTank , enemyTanks , client1.getWallState()); canvas.render(myTank , enemyTanks , client1.getWallState());
long delay = (1000 / FPS) - (System.currentTimeMillis() - start); long delay = (1000 / FPS) - (System.currentTimeMillis() - start);
if (delay > 0) if (delay > 0)
Thread.sleep(delay); Thread.sleep(delay);
} catch (InterruptedException ex) { } catch (InterruptedException | IOException ex) {
} }
} }
} }
......
...@@ -152,7 +152,7 @@ public class NWGRendering { ...@@ -152,7 +152,7 @@ public class NWGRendering {
if ((bullet.locX > myTank.locX - 20 && bullet.locX < myTank.locX + 20 && bullet.locY > myTank.locY - 10 && bullet.locY < myTank.locY + 10) && !myTank.hasShield() && System.currentTimeMillis() - bullet.getCreateTime() > 100 && !myTank.isHasMoreLife()) { if ((bullet.locX > myTank.locX - 20 && bullet.locX < myTank.locX + 20 && bullet.locY > myTank.locY - 10 && bullet.locY < myTank.locY + 10) && !myTank.hasShield() && System.currentTimeMillis() - bullet.getCreateTime() > 100 && !myTank.isHasMoreLife()) {
startExploding = System.currentTimeMillis(); startExploding = System.currentTimeMillis();
if (System.currentTimeMillis() - startExploding < 1000) { if (System.currentTimeMillis() - startExploding < 1000) {
g2d.drawImage(op2.filter((BufferedImage) explosionImg, null), myTank.locX, myTank.locY, null); g2d.drawImage(op.filter((BufferedImage) explosionImg, null), myTank.locX, myTank.locY, null);//????????
myTank.setTankLife(0); myTank.setTankLife(0);
myTank.gameOver = true; myTank.gameOver = true;
} }
...@@ -172,6 +172,12 @@ public class NWGRendering { ...@@ -172,6 +172,12 @@ public class NWGRendering {
if (enemyTank.getTankLife() <= 0) { if (enemyTank.getTankLife() <= 0) {
startExploding = System.currentTimeMillis(); startExploding = System.currentTimeMillis();
if (System.currentTimeMillis() - startExploding < 1000) { if (System.currentTimeMillis() - startExploding < 1000) {
double rotationEnemy = Math.toRadians(enemyTank.rotate);
BufferedImage image22 = (BufferedImage) image2;
double locationX2 = image22.getWidth() / 2;
double locationY2 = image22.getHeight() / 2;
AffineTransform tx2 = AffineTransform.getRotateInstance(rotationEnemy, locationX2, locationY2);
AffineTransformOp op2 = new AffineTransformOp(tx2, AffineTransformOp.TYPE_BILINEAR);
g2d.drawImage(op2.filter((BufferedImage) explosionImg, null), enemyTank.locX, enemyTank.locY, null); g2d.drawImage(op2.filter((BufferedImage) explosionImg, null), enemyTank.locX, enemyTank.locY, null);
enemyTank.setTankLife(0); enemyTank.setTankLife(0);
enemyTank.gameOver = true; enemyTank.gameOver = true;
...@@ -186,32 +192,6 @@ public class NWGRendering { ...@@ -186,32 +192,6 @@ public class NWGRendering {
} }
} }
//Draw rewards
boolean newReward = (System.currentTimeMillis() - GameLoop.startTime >= 7000);
if (newReward) {
GameLoop.startTime = System.currentTimeMillis();
RewardState reward = new RewardState(myTank.getWalls());
reward.setVisible(true);
rewards.add(reward);
}
if (rewards.size() != 0) {
Iterator<RewardState> it = rewards.iterator();
while (it.hasNext()) {
RewardState reward = it.next();
if (reward.isVisible() && reward.isRewardForTank(myTank.locX, myTank.locY)) {
reward.runReward(myTank);
reward.setVisible(false);
it.remove();
} else if (reward.isVisible() && reward.isRewardForTank(enemyTank.locX, enemyTank.locY)) {
reward.runReward(enemyTank);
reward.setVisible(false);
it.remove();
} else if (reward.isVisible()) {
g2d.drawImage(reward.getRewardImage(), reward.locX, reward.locY, null);
}
}
}
// Print FPS info // Print FPS info
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment