aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/models/GameStatus.java3
-rw-r--r--src/main/java/pokemon/Game.java124
-rw-r--r--src/main/java/pokemon/Server.java45
-rw-r--r--src/main/java/ui/GamePanel.java95
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(shield2<abilityResult) {
+ shield2=shield2-abilityResult;
+ }
+ else {
+ currentHp2=currentHp2+shield2-abilityResult;
+ shield2=0;
+ }
+
+ }else {
+ currentHp2=currentHp2-abilityResult;
+ }
+
+ }else if(a.getType()==AbilityType.SPECIAL) {
+ abilityResult=(int)(abilityResult*(1+Math.random()/2));
+ if(shield2>0) {
+ if(shield2<abilityResult) {
+ shield2=shield2-abilityResult;
+ }
+ else {
+ currentHp2=currentHp2+shield2-abilityResult;
+ shield2=0;
+ }
+
+ }else {
+ currentHp2=currentHp2-abilityResult;
+ }
+
+ }else if(a.getType()==AbilityType.HEAL) {
+ if(currentHp1+abilityResult>=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(shield1<abilityResult) {
+ shield1=shield1-abilityResult;
+ }
+ else {
+ currentHp1=currentHp1+shield1-abilityResult;
+ shield1=0;
+ }
+
+ }else {
+ currentHp1=currentHp1-abilityResult;
+ }
+
+ }else if(a.getType()==AbilityType.SPECIAL) {
+ abilityResult=(int)(abilityResult*(1+Math.random()/2));
+ if(shield1>0) {
+ if(shield1<abilityResult) {
+ shield1=shield1-abilityResult;
+ }
+ else {
+ currentHp1=currentHp1+shield1-abilityResult;
+ shield1=0;
+ }
+
+ }else {
+ currentHp1=currentHp1-abilityResult;
+ }
+
+ }else if(a.getType()==AbilityType.HEAL) {
+ if(currentHp2+abilityResult>=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<SocketChannel, Long> 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,12 +328,29 @@ 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 {
BufferedImage image=null;