You are on page 1of 4

package _100304;

public class AssassinManager {


AssassinNode killingRing ;
AssassinNode curr ;
AssassinNode graveyard;
AssassinNode prev;
AssassinNode lastKilled;

//Constructor
public AssassinManager(String[] names){
if(names.length == 0){
throw new IllegalArgumentException();
}
killingRing = new AssassinNode(names[0]);
curr = killingRing;
// System.out.println("names.length" + names.length);
for(int i = 1; i < names.length; i++){
curr.next = new AssassinNode(names[i]);
// curr.killer = curr.next.name;
curr = curr.next;
}
curr.next = killingRing;
// curr.killer = killingRing.name;
curr = killingRing;
//initialize the prev
while(curr.next != killingRing){
curr = curr.next;
}
prev = curr;
curr = killingRing;

//initialize killers
while(curr.next != killingRing){
curr.killer = prev.name;
curr = curr.next;
prev = prev.next;
}
curr.killer = killingRing.name;
curr = killingRing;
}

//printKillRing
public void printKillRing(){
if(curr == null){
return;
}
while(curr.next != killingRing){
System.out.println(curr.name + " is stalking " +
curr.next.name);
curr = curr.next;
}
System.out.println(curr.name + " is stalking " +
killingRing.name);
curr = killingRing;
}
//printGraveyard()
AssassinNode graveyardCurr;
public void printGraveyard(){
graveyardCurr = graveyard;
if(graveyard == null){
return;
}
while(graveyardCurr.next != null){
System.out.println(graveyardCurr.name + " was killed by " +
graveyardCurr.killer);
graveyardCurr = graveyardCurr.next;
}
System.out.println(graveyardCurr.name + " was killed by " +
graveyardCurr.killer);
}
//killRingContains(String name)
public boolean killRingContains(String name){
while(curr.next != killingRing){
//System.out.println(curr.name.toLowerCase()+" == " +
name.toLowerCase());
if(curr.name.toLowerCase().equals(name.toLowerCase())){
curr = killingRing;
return true;
}else{
curr = curr.next;
}
}
if(curr.name.toLowerCase().equals(name.toLowerCase())){
curr = killingRing;
return true;
}
curr = killingRing;
return false;
}

//graveyardContains(String name)
public boolean graveyardContains(String name){
while(graveyardCurr.next != null){

if(graveyardCurr.name.toLowerCase().equals(name.toLowerCase())){
return true;
}
}
return false;
}

//gameOver()
public boolean gameOver(){
return (killingRing.next == killingRing);
}

//winner()
public String winner(){
if(!gameOver()){
return null;
}else{
return killingRing.name;
}
}

//kill
// public void kill(String name){
// if(!killRingContains(name)){
// throw new IllegalArgumentException();
// }
// if(gameOver()){
// throw new IllegalStateException();
// }
// //kill the 1st
// if(killingRing.name.toLowerCase().equals(name.toLowerCase())){
// curr = curr.next;
// killingRing.next = null;
// if(graveyard == null){
// graveyard = killingRing;
// graveyardCurr = graveyard;
// }else{
// graveyardCurr.next = killingRing;
// }
// prev.next = curr;
// killingRing = curr;
// return;
// }
// while(curr.next != killingRing){
// //find the matching name
// if(curr.name.toLowerCase().equals(name.toLowerCase())){
// //update graveyard list
// if(graveyard == null){
// graveyard = curr;
// graveyardCurr = graveyard;
// }else{
// graveyardCurr.next = curr;
// }
//
// prev.next = curr.next;
// curr = killingRing;
// graveyardCurr.next = null;
// System.out.println("killingRing " + killingRing.name);
// return;
// }else{
// prev = prev.next;
// curr = curr.next;
// }
// }
// //kill the last one
// if(curr.name.toLowerCase().equals(name.toLowerCase())){
// prev.next = curr.next;
// if(graveyard == null){
// graveyard = curr;
// graveyardCurr = graveyard;
// }else{
// graveyardCurr.next = curr;
// }
//
// graveyardCurr.next = null;
// curr = killingRing;
// return;
// }
// }

//update graveyard
public void graveyardUpdate(AssassinNode curr){
if(graveyard == null){
graveyard = curr;
lastKilled = curr;
}else{
lastKilled.next = curr;
lastKilled = lastKilled.next;
}
}
//killing
public void kill(String name){
//kill the 1st person in the ring
if(killingRing.name.toLowerCase().equals(name.toLowerCase())){
graveyardUpdate(killingRing);
killingRing = killingRing.next;
prev = prev.next;
curr = killingRing;
System.out.println("prev " + prev.name);
prev.next = killingRing;
lastKilled.next = null;
return;
}
//kill the middle one
curr = killingRing.next;
prev = prev.next;
System.out.print("prev name" + prev.name);
while(curr.next != killingRing){
if(curr.name.toLowerCase().equals(name.toLowerCase())){
graveyardUpdate(curr);
prev.next = curr.next;
lastKilled.next = null;
curr = killingRing;
return;
}else{
curr = curr.next;
prev = prev.next;
}
}

//kill the last one


graveyardUpdate(curr);
prev.next = killingRing;
lastKilled.next = null;
curr = killingRing;
return;
}
}

You might also like