import java.awt.*; import java.lang.*; import java.util.*; import sfi; import Player; import Player_Hycha; import Player_Multiel; import Player_Pinla; import Player_Tietal; import Map; public class GameEngine { private Vector players = new Vector(); public Player me; public Map map; public sfi comp; private int damage; GameEngine(String mapName, int id, String mode, String name, sfi c) { map = new Map(this); me = newPlayer(mode, id, name); me.spawn(map.spawnNew()); players.addElement(me); comp = c; } public void spawn(Player m) { m.spawn(map.spawnNew()); } public Player getTarget(int id) { Enumeration e = players.elements(); while (e.hasMoreElements ()) { Player p = (Player) e.nextElement(); return p; } return null; } public Player getNextTarget(int id) { boolean next = false; Enumeration e = players.elements(); while (e.hasMoreElements ()) { Player p = (Player) e.nextElement(); if (!next && p.checkID(id)) next = true; else if (next) return p; } return null; } public void update() { Enumeration e = players.elements(); while (e.hasMoreElements()) { Player p = (Player) e.nextElement(); if (p.isAlive()) { p.update(map.checkObject(p.X, p.Y), map.checkPowerUp(p.X, p.Y)); if (p.id != me.id) { if ((damage = me.checkFire(p.X, p.Y)) != 0) { comp.net.sendDamageUpdate(p.id, damage); comp.target = p; p.hurt(damage); if (p.checkKill(damage)) comp.frags += 1; } } } } map.update(); } public void paint(Graphics g) { g.setColor(Color.black); g.fillRect(0,0,400,400); map.paint(g, me.X-200, me.Y-200); Enumeration e = players.elements(); while (e.hasMoreElements()) { Player p = (Player) e.nextElement(); if (p.isAlive()) p.paint(g, p.X - me.X + 200, p.Y - me.Y + 200, 14); } } public void addUser(String name, int id, String type) { Player np = newPlayer(type, id, name); comp.addMessage(name + " joined the battle!"); players.addElement(np); } public void removeUser(String name) { Enumeration e = players.elements(); while (e.hasMoreElements()) { Player p = (Player) e.nextElement(); if (name.compareTo(p.name) == 0) { comp.addMessage(p.name + " left that battle!"); players.removeElement(p); break; } } } public void update_Full(int id, int x, int y, double a, int v, double av, int s) { Enumeration e = players.elements(); while (e.hasMoreElements()) { Player p = (Player) e.nextElement(); if (id == p.id) { p.setFull(x, y, a, v, av, s); break; } } } public void update_Keys(int id, String k) { Enumeration e = players.elements(); while (e.hasMoreElements()) { Player p = (Player) e.nextElement(); if (id == p.id) { p.setKeys(k); break; } } } public void hurtPlayer(int id, int damage) { Enumeration e = players.elements(); while (e.hasMoreElements()) { Player p = (Player) e.nextElement(); if (id == p.id) { p.hurt(damage); break; } } } private Player newPlayer(String type, int id, String name) { if (type.compareTo("ship1") == 0) return new Player_Multiel(id, name); else if (type.compareTo("ship2") == 0) return new Player_Pinla(id, name); else if (type.compareTo("ship3") == 0) return new Player_Tietal(id, name); else return new Player_Hycha(id, name); } }