Dueling Robots Example
<< Mouse Motion Listener Application | Applications | Button Application >>
Here is some starter code for dueling robots.

Robot.java
public class Robot
{
//Probability to defend, hit, and heal
private double defense, offense, healing;
private int health;
private String name;
//other ideas for instance fields:
// color, teamAffiliation
public Robot(String n, double d, double o, double h){
name=n;
defense=d;
offense=o;
healing=h;
health=100;
}
public Robot(){
this("Bot",.1, .75, .1);
}
public Robot(String n){
this(n,.5, .5, .5);
}
public String toString(){
return name+": "+health+"%";
}
public int health(){
return health;
}
public String name(){
return name;
}
public boolean heal(int amt){
boolean result=false;
if (Math.random()<healing){
health+=amt;
result=true;
}
return result;
}
public boolean attack(Robot other){
boolean result=false;
if ( Math.random()<offense){
result=other.hit(5);
}
return result;
}
private boolean hit(int amt) {
boolean result=false;
if (Math.random()>defense){
health-=amt;
result=true;
}
return result;
}
}
DuelingRobots.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DuelingRobots extends JPanel implements KeyListener
{
public static int WIDTH=900;
public static int HEIGHT=300;
private Font titleFont, regularFont;
private Robot[] contestant;
private String message;
private int roundNo;
public DuelingRobots()
{
//initialize variables here...
titleFont = new Font("Roman", Font.BOLD, 18);
regularFont = new Font("Sans", Font.PLAIN, 12);
contestant = new Robot[2];
contestant[0]=new Robot("bot 0");
contestant[1]=new Robot("bot 1");
message="New Game";
roundNo=0;
}
public static void main(String[] args) {
DuelingRobots app= new DuelingRobots();
JFrame window = new JFrame("Dueling Robots");
window.setSize(WIDTH, HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(app);
window.addKeyListener(app);
window.setVisible(true);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(),getHeight());
g.setColor(Color.BLUE);
g.setFont(titleFont);
g.drawString("Dueling Robots", 20, 20);
g.drawString(contestant[0].toString(), 50, 100);
g.fillRect(50, 60, contestant[0].health(), 20);
g.setColor(Color.RED);
g.drawString(contestant[1].toString(), 250, 100);
g.fillRect(250, 60, contestant[1].health(), 20);
g.setColor(Color.BLACK);
g.drawString("Press a key for next turn", 20, 200);
g.drawRect(50, 60, 100, 20);
g.drawRect(250, 60, 100, 20);
g.setColor(Color.BLUE);
g.drawString("Round "+roundNo, 20, 130);
g.drawString(message, 20, 150);
g.setFont(regularFont);
g.drawString("Version 1.0", 20, 40);
g.setColor(Color.MAGENTA);
}
// update is a workaround to cure Windows screen flicker problem
public void update(Graphics g){
paint(g);
}
// These 3 methods need to be declares to implement the KeyListener Interface
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
if(contestant[0].health()>=0 && contestant[1].health()>=0){
message=doTurn();
roundNo++;
}else message="Game Over";
repaint();
}
private String doTurn() {
String result=contestant[0].name()+"'s attack is ";
if (!contestant[0].attack(contestant[1]) ){
result+="not ";
}
result+="sucessful; "+contestant[1].name()+"'s attack is ";
if (!contestant[1].attack(contestant[0]) ){
result+="not ";
}
result+="sucessful. ";
for (Robot bot:contestant)
if (bot.heal(1))
result+=bot.name()+" heals. ";
return result;
}
@Override
public void keyReleased(KeyEvent e) {}
}
