import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.Random;
import java.util.StringTokenizer;
import java.lang.String;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Skill {
String type;
String name;
String desc;
int cool;
int targets;
public Skill(int typeNo) {
// TODO Auto-generated constructor stub
Random rand;
int n = 0;
switch (typeNo) {
case 0:
/*
* GLOBAL
*/
rand = new Random();
n = rand.nextInt(10);
this.setSkill(this.getSkill(n, "skills_global.txt"));
break;
case 1:
/*
* DAMAGE
*/
rand = new Random();
n = rand.nextInt(5);
this.setSkill(this.getSkill(n, "skills_damage.txt"));
break;
case 2:
/*
* POSITION
*/
rand = new Random();
n = rand.nextInt(6);
this.setSkill(this.getSkill(n, "skills_position.txt"));
break;
case 3:
/*
* PASSIVE
*/
rand = new Random();
n = rand.nextInt(5);
this.setSkill(this.getSkill(n, "skills_passive.txt"));
break;
}
}
public String getSkill(int n, String filename) {
String str = "";
try {
FileInputStream fs = new FileInputStream(filename);
DataInputStream in = new DataInputStream(fs);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
for (int i = 1; i < n; i++) {
br.readLine();
}
str += br.readLine();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
public void setSkill(String str) {
StringTokenizer token = new StringTokenizer(str, ";");
this.type = token.nextToken();
this.name = token.nextToken().substring(1);
this.desc = token.nextToken().substring(1);
this.cool = Integer.parseInt(token.nextToken().substring(1));
this.targets = Integer.parseInt(token.nextToken().substring(1));
/*
* Cooldown -1 For skill Copy = use once 0 For passive skills = use
* always >0 For other skills
*/
}
public void setCooldown(Sheep s, int cd) {
// s.cd = cd;
}
public void effect(Sheep me, Sheep[] targets, int allActions, Board board) {
int r;
int t;
int cnt;
int cntr;
/*
Sheep targets[] = new Sheep[3];
targets[0] = targets[0];
targets[1] = s1;
targets[2] = s2;
*/
// Check for extra action to modify;
System.out.println("Effect ng skill");
switch (name) {
case "Decreased Cost":
// oks na. nakaintegrate na sa pagbabawas.
break;
case "Sure Shot":
// if current tile chance > 0, set chance to 90
// Could be removed. integrated already in fire();
if (me.getLocation().getProperty() == 5) // Set the chance tiles!!!
{
me.chance = 90;
}
break;
case "Immolate":
// UHHHHH
// get current tile and damage any sheep in the surrounding area
for (cnt = 0; cnt < 3; cnt++) {
if (me.r < 6 || me.r > 10) {
if (targets[cnt].r == (me.r + 1)
&& targets[cnt].t == Math.ceil(me.t / 2)) {
targets[cnt].damage(1);
} else if (targets[cnt].r == me.r
&& Math.abs(targets[cnt].t - me.t) == 1) {
targets[cnt].damage(1);
} else if (targets[cnt].r == (me.r - 1)
&& me.t == (int) Math.ceil(targets[cnt].t / 2)) {
targets[cnt].damage(1);
}
} else {
if (me.r == (targets[cnt].r + 1)
&& targets[cnt].t == Math.ceil(me.t / 2)) {
targets[cnt].damage(1);
} else if (targets[cnt].r == me.r
&& Math.abs(targets[cnt].t - me.t) == 1) {
targets[cnt].damage(1);
} else if (me.r == (targets[cnt].r - 1)
&& me.t == (int) Math.ceil(targets[cnt].t / 2)) {
targets[cnt].damage(1);
}
}
}
break;
case "Diagonal Move":
// ???
String horizontal;
String vertical;
do {
horizontal = JOptionPane.showInputDialog("Left / Right?");
} while (!horizontal.toLowerCase().equals("left")
&& !horizontal.toLowerCase().equals("right"));
me.mover(horizontal);
do {
vertical = JOptionPane.showInputDialog("Forward / Backward?");
} while (!horizontal.toLowerCase().equals("forward")
&& !horizontal.toLowerCase().equals("backward"));
me.mover(vertical);
me.move(null, 0);
break;
case "Extra Action":
// implemented sa ibang class
// activate register[4]
break;
case "Tree Cut":
// set a tree tile to normal, or damage a sheep
TreeSkill(board,targets); // OK NA. set or damage! check! :)
break;
case "Gravity Sphere":
// move a sheep with damage (10)
// ???????
// 1 TARGET ONLY
targets[0].damage(10);
String d = "";
do {
d = JOptionPane.showInputDialog("Left / Right?");
} while (!d.toLowerCase().equals("left")
&& !d.toLowerCase().equals("right"));
targets[0].move(d, 1);
break;
case "Volcano":
// ???????????????
// set tiles around the sheep to volcano and damage others
// errorchecking here - add.
for (cnt = 0; cnt < 3; cnt++) {
if (me.r < 6 || me.r > 10) {
board.b[me.r + 1].row[(int) Math.ceil(me.r / 2.0)].setProperty(7);
board.b[me.r].row[me.t - 1].setProperty(7);
board.b[me.r].row[me.t + 1].setProperty(7);
board.b[me.r - 1].row[2 * me.r].setProperty(7);
board.b[me.r - 1].row[(2 * me.r) - 1].setProperty(7);
} else {
board.b[me.r - 1].row[(int) Math.ceil(me.r / 2.0)].setProperty(7);
board.b[me.r].row[me.t - 1].setProperty(7);
board.b[me.r].row[me.t + 1].setProperty(7);
board.b[me.r + 1].row[2 * me.r].setProperty(7);
board.b[me.r + 1].row[(2 * me.r) - 1].setProperty(7);
}
}
break;
case "Mana Flare":
// ALL OTHER PLAYERS = 3
// if other sheep useSkill(), damage them, divide damage equally
for (cntr = 0; cntr < 3; cntr++) {
for (cnt = 0; cnt < allActions; cnt++) {
if (targets[cntr].actions[cnt] == 9) {
targets[cntr].damage(1);
}
}
}
JOptionPane.showMessageDialog(null, "MANA FLAAAAAARE!");
break;
case "Mana Burn":
// 1 TARGET ONLY
targets[0].lastmp = targets[0].mp;
targets[0].mp -= 40;
break;
case "Silence":
// 1 TARGET ONLY
// cannot change an opponents next action; with chances
break;
case "Freeze":
// set other actions to null
// EDIT: NG LAHAT NG PLAYERS = 4 (including me sa targets)
for (cntr = 0; cntr < 4; cntr++) {
for (cnt = 0; cnt < allActions; cnt++) {
targets[cntr].lastactions[cnt] = targets[cntr].actions[cnt];
targets[cntr].actions[cnt] = 10;
}
}
break;
case "Minimize":
// LAHAT NG PLAYERS = 4 (including me sa targets)
// set move actions to move 1, skill to null
for (cnt = 0; cnt < 4; cnt++) {
for (cntr = 0; cntr < allActions; cntr++) {
targets[cnt].lastactions[cntr] = targets[cnt].actions[cntr];
targets[cnt].lastmp = targets[cnt].mp;
switch (targets[cnt].actions[cntr]) {
case 5:
targets[cnt].actions[cntr] = 1;
targets[cnt].mp -= 20;
break;
case 6:
targets[cnt].actions[cntr] = 2;
targets[cnt].mp -= 20;
break;
case 7:
targets[cnt].actions[cntr] = 3;
targets[cnt].mp -= 20;
break;
case 8:
targets[cnt].actions[cntr] = 4;
targets[cnt].mp -= 20;
break;
case 9:
targets[cnt].actions[cntr] = 10;
targets[cnt].mp -= 40;
break;
}
}
}
JOptionPane.showMessageDialog(null, "MINIMIZE!!!");
break;
case "Sleep":
// LAHAT NG PLAYERS = 4 (including me sa targets)
for(cnt = 0; cnt < 4; cnt++)
targets[cnt].sleep = true;
JOptionPane.showMessageDialog(null, "Matulog kayo. zzzzzzzz");
break;
case "Exchange":
// 1 PLAYER ONLY
me.lastskill = me.skill;
targets[0].lastskill = targets[0].skill;
me.skill = targets[0].skill;
targets[0].skill.setSkill("Global Spells; Exchange; Exchange this skill for an opponent's skill; 1");
break;
case "Copy":
// 1 PLAYER ONLY
me.lastskill = me.skill;
me.skill = targets[0].skill;
break;
case "Negate":
// reverse skill effect on the user
break;
case "Undo":
// LAHAT NG PLAYERS = 4 (including me)
for (cnt = 0; cnt < 4; cnt++) {
if (targets[cnt].lastmp == 500
&& targets[cnt].lasthp == 500
&& targets[cnt].lastr == 500
&& targets[cnt].lastt == 500) {
JOptionPane.showMessageDialog(null,
"Nothing to undo. This is the first turn.",
"Undo.", JOptionPane.ERROR_MESSAGE);
break;
}
targets[cnt].mp = targets[cnt].lastmp;
targets[cnt].hp = targets[cnt].lasthp;
targets[cnt].r = targets[cnt].lastr;
targets[cnt].t = targets[cnt].lastt;
for (cntr = 0; cntr < allActions; cntr++) {
targets[cnt].actions[cntr] = targets[cnt].lastactions[cntr];
}
targets[cnt].move(null, 0);
JOptionPane.showMessageDialog(null, "Undo~");
}
// reverse all actions
break;
case "Mirror":
// reflect damage
break;
case "Switch":
// 1 TARGET ONLY
// switch actions with an opponent
int reg;
do {
reg = Integer.parseInt(JOptionPane.showInputDialog("Which register do you want to switch?"));
} while (reg > 3 || reg < 1);
me.lastactions[reg] = me.actions[reg];
targets[0].lastactions[reg] = targets[0].actions[reg];
int temp;
temp = targets[0].actions[reg];
targets[0].actions[reg] = me.actions[reg];
me.actions[reg] = temp;
break;
case "Plant Tree":
// 1 TARGET ONLY (TILE OR SHEEP)
// turn a tile into a tree
do {
r = Integer.parseInt(JOptionPane.showInputDialog("Plant Trees: Row number?"));
} while (r < 1 || r > 16);
do {
t = Integer.parseInt(JOptionPane.showInputDialog("Plant Trees: Tile Number?"));
} while (t < 1 || t >= board.b[r].size);
board.b[r].row[t].setProperty(6);
break;
case "Set Trap":
// TILE TARGET
// turn a tile into a trap
do {
r = Integer.parseInt(JOptionPane.showInputDialog("Set Trap: Row number?"));
} while (r < 1 || r > 16);
do {
t = Integer.parseInt(JOptionPane.showInputDialog("Set Trap: Tile Number?"));
} while (t < 1 || t >= board.b[r].size);
board.b[r].row[t].setProperty(9);
break;
case "Blink":
// move 2 squares
// Manhattan distance
me.lastr = me.r;
me.lastt = me.t;
board.b[me.r].row[me.t].leave();
do {
r = Integer.parseInt(JOptionPane.showInputDialog("Blink! : Row number?"));
t = Integer.parseInt(JOptionPane.showInputDialog("Blink! : Tile number?"));
if (!board.b[r].row[t].occupy()) {
JOptionPane.showMessageDialog(null, "Occupied!",
"Error in Blink.", JOptionPane.ERROR_MESSAGE);
}
} while (((Math.abs(me.r - r) + Math.abs(me.t - t)) > 2)
&& !board.b[r].row[t].occupy());
me.move(null, 0);
break;
case "Magic Tunnel":
// 1 TARGET ONLY
// move a sheep behind you
targets[0].teleport(me.r);
break;
case "Swap":
// 1 TARGET ONLY
me.lastr = me.r;
me.lastt = me.t;
targets[0].lastr = targets[0].r;
targets[0].lastt = targets[0].t;
r = me.r;
me.r = targets[0].r;
targets[0].r = r;
t = me.t;
me.t = targets[0].t;
targets[0].t = t;
me.move(null, 0);
targets[0].move(null, 0);
break;
case "Return to Start":
// 1 TARGET ONLY
targets[0].lastr = targets[0].chance;
targets[0].lastt = targets[0].t;
targets[0].r = 0;
targets[0].t = 4;
targets[0].move(null, 0);
break;
}
}
public JPanel TreeSkill(final Board board, final Sheep[] targets) {
JPanel panel = new JPanel();
JLabel treeCutSkillLabel = new JLabel();
JButton clearTreeButton = new JButton();
JButton damageOpponentButton = new JButton();
panel.setBackground(new Color(204, 255, 204));
panel.setBounds(0, 0, 285, 150);
panel.setLayout(null);
panel.add(treeCutSkillLabel);
treeCutSkillLabel.setText("Tree Cut Skill");
treeCutSkillLabel.setBounds(100, 15, 85, 30);
panel.add(clearTreeButton);
clearTreeButton.setForeground(new Color(255, 255, 153));
clearTreeButton.setBackground(new Color(204, 102, 51));
clearTreeButton.setText("Clear Tree");
clearTreeButton.setBounds(10, 59, 106, 61);
panel.add(damageOpponentButton);
damageOpponentButton.setForeground(new Color(255, 255, 153));
damageOpponentButton.setBackground(new Color(204, 102, 51));
damageOpponentButton.setText("Damage");
damageOpponentButton.setBounds(155, 55, 119, 61);
clearTreeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int rownum = Integer.parseInt(JOptionPane.showInputDialog("Row number?"));
int tilenum = Integer.parseInt(JOptionPane.showInputDialog("Tile Number?"));
board.b[rownum].row[tilenum].setProperty(0);
}
});
damageOpponentButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int cnt;
String whoToDamage = JOptionPane.showInputDialog("Who do you want to damage? :>");
for(cnt = 0; cnt < 4; cnt++) {
if(targets[cnt].sheepName.toLowerCase().equals(whoToDamage.toLowerCase())) {
targets[cnt].damage(1);
}
}
}
});
return panel;
}
}