From 8d0fedf836cfd418f9c05d5c21b3c6cc1875e5c9 Mon Sep 17 00:00:00 2001 From: cirakg Date: Mon, 2 Jan 2023 15:32:29 +0100 Subject: Omoguceno igranje igre. Prikaz rezultata po zavrsetku igre. Postavljanje korisnika da budu dostupni za nove zahteve.TODO(Popraviti progress bar,upisivanje rezultata igre u bazu, povratak korisnika da biranje protivnika,provera unosa web i client, ispit istorije meceva web) --- src/main/java/models/GameStatus.java | 3 +- src/main/java/pokemon/Game.java | 124 +++++++++++++++++++++++++++++++++++ src/main/java/pokemon/Server.java | 45 ++++++++++++- src/main/java/ui/GamePanel.java | 95 +++++++++++++++++++++++---- 4 files changed, 252 insertions(+), 15 deletions(-) diff --git a/src/main/java/models/GameStatus.java b/src/main/java/models/GameStatus.java index 6bfc792..34672ff 100644 --- a/src/main/java/models/GameStatus.java +++ b/src/main/java/models/GameStatus.java @@ -5,7 +5,8 @@ import java.io.Serializable; public enum GameStatus implements Serializable { WAITING_FOR_SECOND_PLAYER, PLAYING, - FINISHED, + PLAYER1WIN, + PLAYER2WIN, NOT_IN_GAME, RECEIVING_GAME_REQUEST } diff --git a/src/main/java/pokemon/Game.java b/src/main/java/pokemon/Game.java index 57af464..a4a121e 100644 --- a/src/main/java/pokemon/Game.java +++ b/src/main/java/pokemon/Game.java @@ -7,6 +7,8 @@ import java.io.Serializable; import java.nio.channels.SocketChannel; import java.util.ArrayList; +import models.Ability; +import models.AbilityType; import models.GameStatus; import models.MonsterViewModel; @@ -26,6 +28,128 @@ public class Game implements Runnable, Serializable { public Game() { super(); } + public void player1Move(long abilityId) { + Ability a=null; + player1Turn=false; + double rand=Math.random(); + for(Ability temp :monster1.abilities) { + if(temp.id==abilityId) { + a=temp; + break; + } + } + int abilityResult=(int)(a.power*rand); + if(a.getType()==AbilityType.ATTACK) { + if(shield2>0) { + if(shield20) { + if(shield2=monster1.hp) { + currentHp1=monster1.hp; + } + else { + currentHp1=currentHp1+abilityResult; + } + + }else if(a.getType()==AbilityType.SHIELD) { + shield1=shield1+abilityResult; + + } + + } + public void player2Move(long abilityId) { + Ability a=null; + player1Turn=true; + double rand=Math.random(); + for(Ability temp :monster2.abilities) { + if(temp.id==abilityId) { + a=temp; + break; + } + } + int abilityResult=(int)(a.power*rand); + if(a.getType()==AbilityType.ATTACK) { + if(shield1>0) { + if(shield10) { + if(shield1=monster2.hp) { + currentHp2=monster2.hp; + } + else { + currentHp2=currentHp2+abilityResult; + } + + }else if(a.getType()==AbilityType.SHIELD) { + shield2=shield2+abilityResult; + + } + + } + public int checkWin() { + int res=0; + if(currentHp1<=0) { + res=1; + status=GameStatus.PLAYER2WIN; + } + else if (currentHp2<=0){ + res=1; + status=GameStatus.PLAYER1WIN; + } + + return res; + + } @Override public void run() { diff --git a/src/main/java/pokemon/Server.java b/src/main/java/pokemon/Server.java index 9d56a27..0c8e31e 100644 --- a/src/main/java/pokemon/Server.java +++ b/src/main/java/pokemon/Server.java @@ -217,9 +217,10 @@ public class Server implements Runnable { System.out.println(opponentId); Game game=null; for(Game tempGame :games) { - if(tempGame.player1Id==opponentId) + if(tempGame.player1Id==opponentId) { game=tempGame; - break; + break; + } } game.status=GameStatus.PLAYING; ByteBuffer buff = ByteBuffer.wrap(game.toString().getBytes()); @@ -285,8 +286,48 @@ public class Server implements Runnable { opponentSocket.write(buff); ByteBuffer buff1 = ByteBuffer.wrap(myMsg.getBytes()); sc.write(buff1); + }else if(msg[0].equals("GAMEPLAY")) { + long myId=players.get(sc); + long moveId=Long.parseLong(msg[1]); + + Game game=null; + for(Game tempGame :games) { + if(tempGame.player1Id==myId || tempGame.player2Id==myId) { + game=tempGame; + break; + } + } + long opponentId=-1; + + if(game.player1Id==myId) { + opponentId=game.player2Id; + game.player1Move(moveId); + }else { + opponentId=game.player1Id; + game.player2Move(moveId); + } + SocketChannel opponentSocket=null; + for(Entry player : players.entrySet()) { + if(player.getValue()==opponentId) { + opponentSocket=player.getKey(); + break; + } + } + int gameRes=game.checkWin(); + ByteBuffer buff = ByteBuffer.wrap(game.toString().getBytes()); + opponentSocket.write(buff); + ByteBuffer buff1 = ByteBuffer.wrap(game.toString().getBytes()); + sc.write(buff1); + + if(gameRes==1) { + inGame.remove(sc); + inGame.remove(opponentSocket); + games.remove(game); + System.out.println("GAME FINISHED"+games.size()); + //add game to database + } } diff --git a/src/main/java/ui/GamePanel.java b/src/main/java/ui/GamePanel.java index 711ed48..b6fa400 100644 --- a/src/main/java/ui/GamePanel.java +++ b/src/main/java/ui/GamePanel.java @@ -13,6 +13,7 @@ import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.JTextField; import javax.swing.JScrollPane; @@ -22,6 +23,7 @@ import javax.swing.SwingUtilities; import models.Ability; import models.AbilityType; +import models.GameStatus; import models.MonsterViewModel; import models.User; @@ -48,6 +50,8 @@ public class GamePanel extends JPanel { public JTextArea txtAreaChat; public long opponentId=-1; public String chat=""; + public MonsterViewModel yourMonster=null; + public MonsterViewModel enemyMonster=null; /** * Create the panel. @@ -58,6 +62,9 @@ public class GamePanel extends JPanel { btnAttack = new JButton("Attack"); btnAttack.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { + sendMove(AbilityType.ATTACK); + + } @@ -68,6 +75,7 @@ public class GamePanel extends JPanel { btnSpecial = new JButton("Special"); btnSpecial.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { + sendMove(AbilityType.SPECIAL); } @@ -78,6 +86,7 @@ public class GamePanel extends JPanel { btnHeal = new JButton("Heal"); btnHeal.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { + sendMove(AbilityType.HEAL); @@ -89,6 +98,7 @@ public class GamePanel extends JPanel { btnShield = new JButton("Shield"); btnShield.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { + sendMove(AbilityType.SHIELD); @@ -177,8 +187,8 @@ public class GamePanel extends JPanel { MainFrame topFrame=(MainFrame) SwingUtilities.getAncestorOfClass(MainFrame.class, GamePanel.this); long you=-1; long enemy=-1; - MonsterViewModel yourMonster=null; - MonsterViewModel enemyMonster=null; + yourMonster=null; + enemyMonster=null; int yourHp=0; int enemyHp=0; int yourShield=0; @@ -186,6 +196,7 @@ public class GamePanel extends JPanel { boolean yourTurn=false; if(topFrame.userId==topFrame.game.player1Id) { + you=topFrame.game.player1Id; enemy=topFrame.game.player2Id; opponentId=enemy; @@ -210,7 +221,34 @@ public class GamePanel extends JPanel { btnShield.setEnabled(false); } + lblPokemonNameMe.setText(yourMonster.name); + lblPokemonNameEnemy.setText(enemyMonster.name); + + lblHpMe.setText(yourHp+"("+yourShield+")"+"/"+yourMonster.hp); + lblHpEnemy.setText(enemyHp+"("+enemyShield+")"+"/"+enemyMonster.hp); + + progressBarHpMe.setValue((yourHp/yourMonster.hp)*100); + progressBarHpMe.update(progressBarHpMe.getGraphics()); + progressBarHpEnemy.setValue((enemyHp/enemyMonster.hp)*100); + progressBarHpEnemy.update(progressBarHpEnemy.getGraphics()); + if(topFrame.game.getStatus()==GameStatus.PLAYER1WIN) { + JOptionPane.showMessageDialog(null,"YOU WIN","Result"+you,1); + btnAttack.setEnabled(false); + btnSpecial.setEnabled(false); + btnHeal.setEnabled(false); + btnShield.setEnabled(false); + + }else if(topFrame.game.getStatus()==GameStatus.PLAYER2WIN) { + JOptionPane.showMessageDialog(null,"YOU LOSE","Result"+you,1); + btnAttack.setEnabled(false); + btnSpecial.setEnabled(false); + btnHeal.setEnabled(false); + btnShield.setEnabled(false); + + } + }else if(topFrame.userId==topFrame.game.player2Id) { + you=topFrame.game.player2Id; enemy=topFrame.game.player1Id; opponentId=enemy; @@ -235,6 +273,31 @@ public class GamePanel extends JPanel { btnShield.setEnabled(true); } + lblPokemonNameMe.setText(yourMonster.name); + lblPokemonNameEnemy.setText(enemyMonster.name); + + lblHpMe.setText(yourHp+"("+yourShield+")"+"/"+yourMonster.hp); + lblHpEnemy.setText(enemyHp+"("+enemyShield+")"+"/"+enemyMonster.hp); + + progressBarHpMe.setValue((yourHp/yourMonster.hp)*100); + progressBarHpMe.update(progressBarHpMe.getGraphics()); + progressBarHpEnemy.setValue((enemyHp/enemyMonster.hp)*100); + progressBarHpEnemy.update(progressBarHpEnemy.getGraphics()); + if(topFrame.game.getStatus()==GameStatus.PLAYER1WIN) { + JOptionPane.showMessageDialog(null,"YOU LOSE","Result"+you,1); + btnAttack.setEnabled(false); + btnSpecial.setEnabled(false); + btnHeal.setEnabled(false); + btnShield.setEnabled(false); + + }else if(topFrame.game.getStatus()==GameStatus.PLAYER2WIN) { + JOptionPane.showMessageDialog(null,"YOU WIN","Result:"+you,1); + btnAttack.setEnabled(false); + btnSpecial.setEnabled(false); + btnHeal.setEnabled(false); + btnShield.setEnabled(false); + + } } for(Ability ability:yourMonster.abilities) { @@ -254,15 +317,6 @@ public class GamePanel extends JPanel { } - lblPokemonNameMe.setText(yourMonster.name); - lblPokemonNameEnemy.setText(enemyMonster.name); - - lblHpMe.setText(yourHp+"("+yourShield+")"+"/"+yourMonster.hp); - lblHpEnemy.setText(enemyHp+"("+enemyShield+")"+"/"+enemyMonster.hp); - - progressBarHpMe.setValue((yourHp/yourMonster.hp)*100); - progressBarHpEnemy.setValue((enemyHp/enemyMonster.hp)*100); - try { Image img=base64toImage(yourMonster.base64Image).getScaledInstance(lblImageMe.getWidth(), lblImageMe.getHeight(), Image.SCALE_SMOOTH); lblImageMe.setIcon(new ImageIcon(img)); @@ -274,11 +328,28 @@ public class GamePanel extends JPanel { } catch (Exception e) { } - //txtAreaChat.setText(null); + } + public void sendMove(AbilityType type) { + long abilityId=-1; + for(Ability a:yourMonster.abilities) { + if(a.type==type) { + abilityId=a.id; + break; + } + } + MainFrame topFrame=(MainFrame) SwingUtilities.getAncestorOfClass(MainFrame.class, GamePanel.this); + String sendMessage="GAMEPLAY:"+abilityId; + ByteBuffer bb=ByteBuffer.wrap(sendMessage.getBytes()); + try { + topFrame.client.write(bb); + } catch (Exception e) { + e.printStackTrace(); + } + } public BufferedImage base64toImage(String imgStr)throws Exception { -- cgit v1.2.3