diff --git a/.gitignore b/.gitignore
index 50ae2cd..bcde78b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
*.classpath
*.idea
-*.project
*.eml
*.iml
-*TestLogs
*bin
diff --git a/GameFromAaron.zip b/GameFromAaron.zip
new file mode 100644
index 0000000..77f5342
Binary files /dev/null and b/GameFromAaron.zip differ
diff --git a/MineSweeper/ReadMe.txt b/MineSweeper/ReadMe.txt
deleted file mode 100644
index 2243464..0000000
--- a/MineSweeper/ReadMe.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-Team: CodingDreamTeam
-
-Names: Aaron Clark
- James Ralston
- Kevin Chumbley
-
-Course: CSCD350 - Software Engineering
-
-Assignment: Assignment 2 - Team Coding Exercise
-
-Title: MineSweeper
-
-Description:
- reads field dimensions from standard input
- reads each line of field as String of . (no mine) or * (mine)
- stores field
- store a padded array of zeros and increment hints surrounding mines
- print all stored hints fields
-
-Setup:
- Unzip the submitted MineSweeper.zip, you get
- a folder named MineSweeper. Compile from
- source files and run.
-
- Terminal:
- Open Terminal and Change directory into MineSweeper/bin
- Clean, compile and run (See below for commands).
- To Clean from Terminal:
- cd bin
- rm -rd ./*.class
- To Compile from Terminal:
- cd bin
- javac -d ./ ../src/*.java ../src/*.java
- To Run:
- cd bin
- java MineSweeper < ../input.txt
-
- Eclipse:
- Open Eclipse and Drag all files in MineSweeper/src into an
- existing project source folder then compile and run as a Java Application
-
-Developed for:
- Terminal (for Darwin)
- Version: 2.6.1 (361.1)
- Eclipse IDE for Java Developers
- Version: Mars.2 Release (4.5.2)
-
-Note:
- input file is redirected to standard input
-
- input file is of the form:
- 3 3
- ...
- .*.
- ...
-
-
-
-
-
diff --git a/MineSweeper/input.txt b/MineSweeper/input.txt
deleted file mode 100644
index 9dfb3dd..0000000
--- a/MineSweeper/input.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-4 4
-*...
-....
-.*..
-....
-3 5
-**...
-.....
-.*...
-3 3
-...
-.*.
-...
-1 1
-.
-1 1
-*
-100 100
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-100 100
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-0 0
\ No newline at end of file
diff --git a/MineSweeperkev/ReadMe.txt b/MineSweeperkev/ReadMe.txt
deleted file mode 100755
index 2243464..0000000
--- a/MineSweeperkev/ReadMe.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-Team: CodingDreamTeam
-
-Names: Aaron Clark
- James Ralston
- Kevin Chumbley
-
-Course: CSCD350 - Software Engineering
-
-Assignment: Assignment 2 - Team Coding Exercise
-
-Title: MineSweeper
-
-Description:
- reads field dimensions from standard input
- reads each line of field as String of . (no mine) or * (mine)
- stores field
- store a padded array of zeros and increment hints surrounding mines
- print all stored hints fields
-
-Setup:
- Unzip the submitted MineSweeper.zip, you get
- a folder named MineSweeper. Compile from
- source files and run.
-
- Terminal:
- Open Terminal and Change directory into MineSweeper/bin
- Clean, compile and run (See below for commands).
- To Clean from Terminal:
- cd bin
- rm -rd ./*.class
- To Compile from Terminal:
- cd bin
- javac -d ./ ../src/*.java ../src/*.java
- To Run:
- cd bin
- java MineSweeper < ../input.txt
-
- Eclipse:
- Open Eclipse and Drag all files in MineSweeper/src into an
- existing project source folder then compile and run as a Java Application
-
-Developed for:
- Terminal (for Darwin)
- Version: 2.6.1 (361.1)
- Eclipse IDE for Java Developers
- Version: Mars.2 Release (4.5.2)
-
-Note:
- input file is redirected to standard input
-
- input file is of the form:
- 3 3
- ...
- .*.
- ...
-
-
-
-
-
diff --git a/MineSweeperkev/input.txt b/MineSweeperkev/input.txt
deleted file mode 100755
index 9dfb3dd..0000000
--- a/MineSweeperkev/input.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-4 4
-*...
-....
-.*..
-....
-3 5
-**...
-.....
-.*...
-3 3
-...
-.*.
-...
-1 1
-.
-1 1
-*
-100 100
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-....................................................................................................
-100 100
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-****************************************************************************************************
-0 0
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/.project b/SoftwareEngineeringGame/.project
new file mode 100644
index 0000000..e3d9a35
--- /dev/null
+++ b/SoftwareEngineeringGame/.project
@@ -0,0 +1,17 @@
+
+
+ SoftwareEngineeringGame
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/SoftwareEngineeringGame/Backgrounds/DefaultPlayerAscii b/SoftwareEngineeringGame/Backgrounds/DefaultPlayerAscii
new file mode 100644
index 0000000..51f5893
--- /dev/null
+++ b/SoftwareEngineeringGame/Backgrounds/DefaultPlayerAscii
@@ -0,0 +1,25 @@
+
+ ND
+ MMMMMM
+ NMMMMMMN
+ NMMMMMM
+ NMMMMMMMMMMMMMN
+ MMMM8I,. MMMMN
+ MMM: 8MMMMMN
+ IMM: NMMZ MM
+ MMM MMND?
+ MMM +DDNNND
+ NMM
+ MMM
+ MMM
+ DD MMMMMM$
+ $MMMZ ,MMO NMMMN
+ .MMMM~ 8MM MMM
+ .MMMMM MMM
+ :D MM8
+ MM
+ 8MM
+ ZMMMD
+ DMMM
+
+
diff --git a/SoftwareEngineeringGame/Backgrounds/WorldMapAscii b/SoftwareEngineeringGame/Backgrounds/WorldMapAscii
new file mode 100644
index 0000000..bae7360
--- /dev/null
+++ b/SoftwareEngineeringGame/Backgrounds/WorldMapAscii
@@ -0,0 +1,34 @@
+
+ . ... .......... ... .
+ .. . . .. ....... . ......... .
+ ............ . . . ... ..... ....... ..... ..........................
+ ................... . .. .. ........................................
+ . ........... .. . . . . ............................... .
+ ..................... . ......................... ....... .
+ ................ ..........................................
+ .......... . ..... .... .... .... .. .......................
+ ............... ... . ... . ... .......................
+ .............. . .. ...... ..................... . ..
+ ............ ........ . ...........................
+ .... ................... .......................
+ ... ................ ...... ................
+ ... . . ................. ...... ..... ....
+ ... ................... ... .. ...
+ ................... . . ..
+ ....... .................... . .
+ ......... ............ .. ..
+ ............ ....... ... . .. . .
+ ............... ......... . ...
+ .............. ......... . .
+ ............ ......... .. .
+ .......... ........ .. .......
+ .......... ...... . ...........
+ ...... ...... .............
+ ....... .... ............
+ .... . ....
+ ... .
+ ... .
+ ..
+ .
+
+
diff --git a/SoftwareEngineeringGame/ColorOutput.java b/SoftwareEngineeringGame/ColorOutput.java
new file mode 100644
index 0000000..353ad5e
--- /dev/null
+++ b/SoftwareEngineeringGame/ColorOutput.java
@@ -0,0 +1,206 @@
+/*
+ * by: Kevin Chumbley and Richard Norman
+*/
+package ACTBS;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+enum ColorOutput {
+
+ ANSI_RESET(0),
+ ANSI_BLACK(30),
+ ANSI_RED(31),
+ ANSI_GREEN(32),
+ ANSI_YELLOW(33),
+ ANSI_BLUE(34),
+ ANSI_PURPLE(35),
+ ANSI_CYAN(36),
+ ANSI_WHITE(37),
+ ANSI_BRIGHT_BLACK(38),
+ ANSI_BRIGHT_RED(39),
+ ANSI_BRIGHT_GREEN(40),
+ ANSI_BRIGHT_YELLOW(41),
+ ANSI_BRIGHT_BLUE(42),
+ ANSI_BRIGHT_PURPLE(43),
+ ANSI_BRIGHT_CYAN(44),
+ ANSI_BRIGHT_WHITE(45);
+
+
+
+ private int color = 1;
+
+ private ColorOutput(final int color){
+ this.color = color;
+ }
+
+ public String toString(){
+ String res = "";
+ if(System.console()!=null) {
+ res+=this.toCode();
+ }
+ switch(this){
+ case ANSI_RESET:
+ res += "RESET";
+ break;
+ case ANSI_BLACK:
+ res += "BLACK";
+ break;
+ case ANSI_RED:
+ res += "RED";
+ break;
+ case ANSI_GREEN:
+ res += "GREEN";
+ break;
+ case ANSI_YELLOW:
+ res += "YELLOW";
+ break;
+ case ANSI_BLUE:
+ res += "BLUE";
+ break;
+ case ANSI_PURPLE:
+ res += "PURPLE";
+ break;
+ case ANSI_CYAN:
+ res += "CYAN";
+ break;
+ case ANSI_WHITE:
+ res += "WHITE";
+ break;
+ case ANSI_BRIGHT_BLACK:
+ res += "BRIGHT_BLACK";
+ break;
+ case ANSI_BRIGHT_RED:
+ res += "BRIGHT_RED";
+ break;
+ case ANSI_BRIGHT_GREEN:
+ res += "BRIGHT_GREEN";
+ break;
+ case ANSI_BRIGHT_YELLOW:
+ res += "BRIGHT_YELLOW";
+ break;
+ case ANSI_BRIGHT_BLUE:
+ res += "BRIGHT_BLUE";
+ break;
+ case ANSI_BRIGHT_PURPLE:
+ res += "BRIGHT_PURPLE";
+ break;
+ case ANSI_BRIGHT_CYAN:
+ res += "BRIGHT_CYAN";
+ break;
+ case ANSI_BRIGHT_WHITE:
+ res += "BRIGHT_WHITE";
+ break;
+ default:
+ return " Color not Found ";
+ }
+ return res+= ANSI_RESET.toCode();
+ }
+
+ protected String toCode(){
+ String res = "";
+ if(System.console()==null) {
+ //System.out.println(System.console());
+ return res;
+ }
+ res += (char)27+"\u001B[";
+ switch(this){
+ case ANSI_RESET:
+ res += "0";//(char)27+"\u001B[0m";
+ break;
+ case ANSI_BLACK:
+ res += "30";//(char)27+"\u001B[30m";
+ break;
+ case ANSI_RED:
+ res += "31";//"(char)27+\u001B[31m";
+ break;
+ case ANSI_GREEN:
+ res += "32";//"(char)27+\u001B[32m";
+ break;
+ case ANSI_YELLOW:
+ res += "33";//"(char)27+\u001B[33m";
+ break;
+ case ANSI_BLUE:
+ res += "34";//"(char)27+\u001B[34m";
+ break;
+ case ANSI_PURPLE:
+ res += "35";//"(char)27+\u001B[35m";
+ break;
+ case ANSI_CYAN:
+ res += "36";//"(char)27+\u001B[36m";
+ break;
+ case ANSI_WHITE:
+ res += "37";//"(char)27+\u001B[37m";
+ break;
+ case ANSI_BRIGHT_BLACK:
+ res += "1;30";//(char)27+"\u001B[30m";
+ break;
+ case ANSI_BRIGHT_RED:
+ res += "1;31";//"(char)27+\u001B[31m";
+ break;
+ case ANSI_BRIGHT_GREEN:
+ res += "1;32";//"(char)27+\u001B[32m";
+ break;
+ case ANSI_BRIGHT_YELLOW:
+ res += "1;33";//"(char)27+\u001B[33m";
+ break;
+ case ANSI_BRIGHT_BLUE:
+ res += "1;34";//"(char)27+\u001B[34m";
+ break;
+ case ANSI_BRIGHT_PURPLE:
+ res += "1;35";//"(char)27+\u001B[35m";
+ break;
+ case ANSI_BRIGHT_CYAN:
+ res += "1;36";//"(char)27+\u001B[36m";
+ break;
+ case ANSI_BRIGHT_WHITE:
+ res += "1;37";//"(char)27+\u001B[37m";
+ break;
+ default:
+ return " Color not Found ";
+ }
+ return res+"m";
+ }
+
+ protected int getColor() {
+ return color;
+ }
+
+ protected void setColor(int color) {
+ this.color = color;
+ }
+
+ protected static ArrayList getMyColors() {
+ ArrayList colors = new ArrayList<>();
+ for(ColorOutput c: ColorOutput.values())
+ if(!c.toString().contains("RESET")
+ && !c.toString().contains("BLACK")
+ && !c.toString().contains("BRIGHT"))
+ colors.add(c);
+ return colors;
+ }
+
+ protected static ArrayList getBrightColors() {
+ ArrayList colors = new ArrayList<>();
+ for(ColorOutput c: ColorOutput.values())
+ if(c.toString().contains("BRIGHT")
+ && !c.toString().contains("BLACK")
+ && !c.toString().contains("RESET"))
+ colors.add(c);
+ return colors;
+ }
+
+ private static Iterator colorItr = ColorOutput.getMyColors().iterator();
+
+ protected static String colorString(String str){
+ if(System.console()==null)
+ return str;
+ if(!colorItr.hasNext())
+ colorItr = ColorOutput.getMyColors().iterator();
+ return colorItr.next().toCode() + str;
+ }
+
+}
+
+
+
diff --git a/SoftwareEngineeringGame/gameProfiles.db b/SoftwareEngineeringGame/gameProfiles.db
new file mode 100644
index 0000000..e8ee544
Binary files /dev/null and b/SoftwareEngineeringGame/gameProfiles.db differ
diff --git a/SoftwareEngineeringGame/image/Dragon0.png b/SoftwareEngineeringGame/image/Dragon0.png
new file mode 100644
index 0000000..3f82f84
Binary files /dev/null and b/SoftwareEngineeringGame/image/Dragon0.png differ
diff --git a/SoftwareEngineeringGame/image/Dragon1.png b/SoftwareEngineeringGame/image/Dragon1.png
new file mode 100644
index 0000000..08f076c
Binary files /dev/null and b/SoftwareEngineeringGame/image/Dragon1.png differ
diff --git a/SoftwareEngineeringGame/image/Dragon2.png b/SoftwareEngineeringGame/image/Dragon2.png
new file mode 100644
index 0000000..0dab1ee
Binary files /dev/null and b/SoftwareEngineeringGame/image/Dragon2.png differ
diff --git a/SoftwareEngineeringGame/image/Dragon3.png b/SoftwareEngineeringGame/image/Dragon3.png
new file mode 100644
index 0000000..b962714
Binary files /dev/null and b/SoftwareEngineeringGame/image/Dragon3.png differ
diff --git a/SoftwareEngineeringGame/image/Genesis 32X SCD - Aladdin - Snake.gif b/SoftwareEngineeringGame/image/Genesis 32X SCD - Aladdin - Snake.gif
new file mode 100644
index 0000000..9036234
Binary files /dev/null and b/SoftwareEngineeringGame/image/Genesis 32X SCD - Aladdin - Snake.gif differ
diff --git a/SoftwareEngineeringGame/image/Troll0.png b/SoftwareEngineeringGame/image/Troll0.png
new file mode 100644
index 0000000..87aad62
Binary files /dev/null and b/SoftwareEngineeringGame/image/Troll0.png differ
diff --git a/SoftwareEngineeringGame/image/Troll1.png b/SoftwareEngineeringGame/image/Troll1.png
new file mode 100644
index 0000000..c466a64
Binary files /dev/null and b/SoftwareEngineeringGame/image/Troll1.png differ
diff --git a/SoftwareEngineeringGame/image/Troll2.png b/SoftwareEngineeringGame/image/Troll2.png
new file mode 100644
index 0000000..7c3ddee
Binary files /dev/null and b/SoftwareEngineeringGame/image/Troll2.png differ
diff --git a/SoftwareEngineeringGame/image/eliwood_knightlord_lance.gif b/SoftwareEngineeringGame/image/eliwood_knightlord_lance.gif
new file mode 100644
index 0000000..860ab6b
Binary files /dev/null and b/SoftwareEngineeringGame/image/eliwood_knightlord_lance.gif differ
diff --git a/SoftwareEngineeringGame/image/gameMap.jpg b/SoftwareEngineeringGame/image/gameMap.jpg
new file mode 100644
index 0000000..a308ec7
Binary files /dev/null and b/SoftwareEngineeringGame/image/gameMap.jpg differ
diff --git a/SoftwareEngineeringGame/image/knightAttacking.gif b/SoftwareEngineeringGame/image/knightAttacking.gif
new file mode 100644
index 0000000..3819755
Binary files /dev/null and b/SoftwareEngineeringGame/image/knightAttacking.gif differ
diff --git a/SoftwareEngineeringGame/image/knightMoving.gif b/SoftwareEngineeringGame/image/knightMoving.gif
new file mode 100644
index 0000000..59ecf2c
Binary files /dev/null and b/SoftwareEngineeringGame/image/knightMoving.gif differ
diff --git a/SoftwareEngineeringGame/image/knightStopped.gif b/SoftwareEngineeringGame/image/knightStopped.gif
new file mode 100644
index 0000000..209cc00
Binary files /dev/null and b/SoftwareEngineeringGame/image/knightStopped.gif differ
diff --git a/SoftwareEngineeringGame/image/snake0.png b/SoftwareEngineeringGame/image/snake0.png
new file mode 100644
index 0000000..2225b83
Binary files /dev/null and b/SoftwareEngineeringGame/image/snake0.png differ
diff --git a/SoftwareEngineeringGame/image/snake1.png b/SoftwareEngineeringGame/image/snake1.png
new file mode 100644
index 0000000..56110af
Binary files /dev/null and b/SoftwareEngineeringGame/image/snake1.png differ
diff --git a/SoftwareEngineeringGame/image/snake1test.jpg b/SoftwareEngineeringGame/image/snake1test.jpg
new file mode 100644
index 0000000..a890e4c
Binary files /dev/null and b/SoftwareEngineeringGame/image/snake1test.jpg differ
diff --git a/SoftwareEngineeringGame/image/snake2.png b/SoftwareEngineeringGame/image/snake2.png
new file mode 100644
index 0000000..440a7c3
Binary files /dev/null and b/SoftwareEngineeringGame/image/snake2.png differ
diff --git a/SoftwareEngineeringGame/image/snowMap.png b/SoftwareEngineeringGame/image/snowMap.png
new file mode 100644
index 0000000..a8b76da
Binary files /dev/null and b/SoftwareEngineeringGame/image/snowMap.png differ
diff --git a/SoftwareEngineeringGame/image/townMap.jpg b/SoftwareEngineeringGame/image/townMap.jpg
new file mode 100644
index 0000000..ae9151f
Binary files /dev/null and b/SoftwareEngineeringGame/image/townMap.jpg differ
diff --git a/SoftwareEngineeringGame/image/volcanoMap.jpg b/SoftwareEngineeringGame/image/volcanoMap.jpg
new file mode 100644
index 0000000..1332231
Binary files /dev/null and b/SoftwareEngineeringGame/image/volcanoMap.jpg differ
diff --git a/SoftwareEngineeringGame/image/worldmap.gif b/SoftwareEngineeringGame/image/worldmap.gif
new file mode 100644
index 0000000..192d563
Binary files /dev/null and b/SoftwareEngineeringGame/image/worldmap.gif differ
diff --git a/SoftwareEngineeringGame/knight b/SoftwareEngineeringGame/knight
new file mode 100644
index 0000000..d0165c7
--- /dev/null
+++ b/SoftwareEngineeringGame/knight
@@ -0,0 +1,21 @@
+
+ {}
+ .--.
+ /.--.\
+ |====|
+ |`::`|
+ .-;`\..../`;-.
+ / |...::...| \
+ | /'''::'''\ |
+ ;--'\ :: /\--;
+ <__>,>._::_.<,<__>
+ | |/ ^^ \| |
+ \::/| |\::/
+ |||\| |/|||
+ ''' |___/\___| '''
+ \_ || _/
+ <_ >< _>
+ | || |
+ | || |
+ _\.:||:./_
+ /____/\____\
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/softwareEngineering b/SoftwareEngineeringGame/softwareEngineering
new file mode 100644
index 0000000..e78c3b3
--- /dev/null
+++ b/SoftwareEngineeringGame/softwareEngineering
@@ -0,0 +1,6 @@
+tree f948e8b72b39c5828e514dffeab772efae1eed5a
+parent f7006b079d2d260c1ba2ce48ee073cdbe4f3aa80
+author kchumbley 1461102210 -0700
+committer kchumbley 1461102210 -0700
+
+added SoftwareEngineeringGame.zip
diff --git a/SoftwareEngineeringGame/sqlite-jdbc-3.8.11.2.jar b/SoftwareEngineeringGame/sqlite-jdbc-3.8.11.2.jar
new file mode 100644
index 0000000..70be427
Binary files /dev/null and b/SoftwareEngineeringGame/sqlite-jdbc-3.8.11.2.jar differ
diff --git a/SoftwareEngineeringGame/sqlite-tools-osx-x86-3120200.zip b/SoftwareEngineeringGame/sqlite-tools-osx-x86-3120200.zip
new file mode 100644
index 0000000..d08ba84
Binary files /dev/null and b/SoftwareEngineeringGame/sqlite-tools-osx-x86-3120200.zip differ
diff --git a/SoftwareEngineeringGame/src/DemoClient.java b/SoftwareEngineeringGame/src/DemoClient.java
new file mode 100644
index 0000000..13c6a5f
--- /dev/null
+++ b/SoftwareEngineeringGame/src/DemoClient.java
@@ -0,0 +1,14 @@
+
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+
+public class DemoClient {
+ public static void main(String[] args) {
+
+ GameStateContext gameStateContext = GameStateContext.getGameStateContext();
+ MainWindow.updateTextArea("DemoClient\n");
+ gameStateContext.run();
+
+ }
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/GameEntity.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/GameEntity.java
index 195b495..0e8147d 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/GameEntity.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/GameEntity.java
@@ -1,6 +1,6 @@
package gamePack.gameEntityPack;
-public interface GameEntity {
+public interface GameEntity extends Comparable{
public String toString();
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/ConcreteArtifact.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/ConcreteArtifact.java
new file mode 100644
index 0000000..cb46d71
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/ConcreteArtifact.java
@@ -0,0 +1,87 @@
+package gamePack.gameEntityPack.gameArtifactPack;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+
+public class ConcreteArtifact implements GameArtifact
+{
+
+ public void use(ConcreteCharacter c)
+ {
+ //return 0;
+ }
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getView()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setView(String view)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateView()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void spawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void kill()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void save()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void load()
+ {
+ // TODO Auto-generated method stub
+
+ }
+ @Override
+ public void restore()
+ {
+ // TODO Auto-generated method stub
+
+ }
+ @Override
+ public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/DefensePotion.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/DefensePotion.java
new file mode 100644
index 0000000..df8679a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/DefensePotion.java
@@ -0,0 +1,115 @@
+package gamePack.gameEntityPack.gameArtifactPack;
+
+import java.util.Random;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class DefensePotion implements GameArtifact
+{
+ private int numUses;
+ private String name;
+
+ public DefensePotion(int n, String name)
+ {
+ this.numUses = n;
+ this.name = name;
+ }//end StrengthPotion
+
+ @Override
+ public void use(ConcreteCharacter c)
+ {
+ if(this.numUses > 0)
+ {
+ Random r = new Random();
+ int high = 10;
+ int low = 1;
+
+ //return r.nextInt(high - low) + low;
+ }//end if
+
+ else
+ {
+ MainWindow.updateTextArea("Potion is empty!\n");
+ //return 0;
+ }//end else
+ }//end use
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getView()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setView(String view)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateView()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void spawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void kill()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void save()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void load()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public void restore()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/GameArtifact.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/GameArtifact.java
index b86245b..8ce5567 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/GameArtifact.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/GameArtifact.java
@@ -1,7 +1,10 @@
package gamePack.gameEntityPack.gameArtifactPack;
import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
-public interface GameArtifact extends GameEntity {
-
+public interface GameArtifact extends GameEntity
+{
+ public void use(ConcreteCharacter character);
+ public void restore();
}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/NullArtifact.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/NullArtifact.java
new file mode 100644
index 0000000..ce1f748
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/NullArtifact.java
@@ -0,0 +1,92 @@
+package gamePack.gameEntityPack.gameArtifactPack;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+
+public class NullArtifact implements GameArtifact
+{
+
+
+@Override
+public String getName()
+{
+ // TODO Auto-generated method stub
+ return null;
+}
+
+@Override
+public void setName(String name)
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public String getView()
+{
+ // TODO Auto-generated method stub
+ return null;
+}
+
+@Override
+public void setView(String view)
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public void updateView()
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public void spawn()
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public void kill()
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public void save()
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public void load()
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public void use(ConcreteCharacter character)
+{
+ // TODO Auto-generated method stub
+ //return 0;
+}
+
+@Override
+public void restore()
+{
+ // TODO Auto-generated method stub
+
+}
+
+@Override
+public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/Potion.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/Potion.java
new file mode 100644
index 0000000..8eb15b4
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/Potion.java
@@ -0,0 +1,126 @@
+package gamePack.gameEntityPack.gameArtifactPack;
+
+import java.util.Random;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+
+public class Potion implements GameArtifact
+{
+ private int numUses, maxUses;
+ private String name;
+
+ public Potion(int n, String name)
+ {
+ this.numUses = this.maxUses = n;
+ this.name = name;
+ }//end Potion
+
+ public void use(ConcreteCharacter character)
+ {
+ int val;
+
+ if(this.numUses > 0)
+ {
+ Random r = new Random();
+ int high = character.getMaxHealth() - character.getHealth();
+ int low = 10;
+
+ if(high - low == 0)
+ return;
+
+
+ val = r.nextInt(Math.abs(high - low) ) + low;
+ character.setHealth( character.getHealth() + Math.abs(val));
+ numUses--;
+ }//end if
+
+ else
+ {
+ MainWindow.updateTextArea("Potion is empty.\n");
+ //return 0;
+ }//end else
+
+ }//end use
+
+ public int getNumUses()
+ {
+ return this.numUses;
+ }//end getNumUses
+
+ public String getName()
+ {
+ return this.name;
+ }//end getName
+
+ @Override
+ public void setName(String name)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getView()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setView(String view)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateView()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void spawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void kill()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void save()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void load()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void restore()
+ {
+ this.numUses = this.maxUses;
+
+ }
+
+ @Override
+ public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/SpeedPotion.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/SpeedPotion.java
new file mode 100644
index 0000000..327b274
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/SpeedPotion.java
@@ -0,0 +1,114 @@
+package gamePack.gameEntityPack.gameArtifactPack;
+
+import java.util.Random;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class SpeedPotion implements GameArtifact
+{
+ private int numUses;
+ private String name;
+
+ public SpeedPotion(int n, String name)
+ {
+ this.numUses = n;
+ this.name = name;
+ }//end StrengthPotion
+
+ @Override
+ public void use(ConcreteCharacter c)
+ {
+ if(this.numUses > 0)
+ {
+ Random r = new Random();
+ int high = 10;
+ int low = 1;
+
+ //return r.nextInt(high - low) + low;
+ }//end if
+
+ else
+ {
+ MainWindow.updateTextArea("Potion is empty!\n");
+ //return 0;
+ }//end else
+ }//end use
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getView()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setView(String view)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateView()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void spawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void kill()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void save()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void load()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+
+ @Override
+ public void restore() {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/StrengthPotion.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/StrengthPotion.java
new file mode 100644
index 0000000..8c84be4
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameArtifactPack/StrengthPotion.java
@@ -0,0 +1,112 @@
+package gamePack.gameEntityPack.gameArtifactPack;
+
+import java.util.Random;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class StrengthPotion implements GameArtifact
+{
+ private int numUses;
+ private String name;
+
+ public StrengthPotion(int n, String name)
+ {
+ this.numUses = n;
+ this.name = name;
+ }//end StrengthPotion
+
+ public void use(ConcreteCharacter c)
+ {
+ if(this.numUses > 0)
+ {
+ Random r = new Random();
+ int high = 10;
+ int low = 1;
+
+ //return r.nextInt(high - low) + low;
+ }//end if
+
+ else
+ {
+ MainWindow.updateTextArea("Potion is empty!\n");
+ //return 0;
+ }//end else
+ }//end use
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getView()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setView(String view)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateView()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void spawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void kill()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void save()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void load()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void restore() {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/GameBehavior.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/GameBehavior.java
index 87ec5a6..aa752e7 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/GameBehavior.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/GameBehavior.java
@@ -6,5 +6,6 @@ public interface GameBehavior extends GameEntity{
public String getBehavior();
void setBehavior(GameBehavior behavior);
- void executeBehavior();
+ public void executeBehavior();
+ public void executeBehavior(GameEntity ge1, GameEntity ge2);
}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/KnightAttackBehavior.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/KnightAttackBehavior.java
new file mode 100644
index 0000000..9c1ae48
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameBehaviorPack/KnightAttackBehavior.java
@@ -0,0 +1,102 @@
+//package gamePack.gameEntityPack.gameBehaviorPack;
+//
+//import gamePack.gameEntityPack.GameEntity;
+//import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+//
+//public class KnightAttackBehavior implements GameBehavior
+//{
+// @Override
+// public void executeBehavior(GameEntity attacker, GameEntity defender)
+// {
+// GameCharacter atk, def;
+// atk = (GameCharacter) attacker;
+// def = (GameCharacter) defender;
+//
+// //def.setHealth( def.getHealth() - atk.getStrength() );
+// }
+//
+// @Override
+// public String getName()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+//
+// @Override
+// public void setName(String name)
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public String getView()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+//
+// @Override
+// public void setView(String view)
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public void updateView()
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public void spawn()
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public void kill()
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public void save()
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public void load()
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public String getBehavior()
+// {
+// // TODO Auto-generated method stub
+// return null;
+// }
+//
+// @Override
+// public void setBehavior(GameBehavior behavior)
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// @Override
+// public void executeBehavior()
+// {
+// // TODO Auto-generated method stub
+//
+// }
+//
+//}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Attack.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Attack.java
new file mode 100644
index 0000000..4867de8
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Attack.java
@@ -0,0 +1,9 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+
+public interface Attack
+{
+ public void attack(GameCharacter me, GameCharacter you);
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/AxeAttack.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/AxeAttack.java
new file mode 100644
index 0000000..b591a7a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/AxeAttack.java
@@ -0,0 +1,23 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class AxeAttack implements Attack
+{
+
+ @Override
+ public void attack(GameCharacter me, GameCharacter you)
+ {
+ if(you.isDead())
+ {
+ MainWindow.updateTextArea(you.getName() + " is dead. You give him a disrespectful kick in the head\n");
+ return;
+ }
+ MainWindow.updateTextArea(me.getName() + " is hitting " + you.getName() + " with his axe!\n");
+ you.takeDamage( me.getStrength() );
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/AxeDefend.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/AxeDefend.java
new file mode 100644
index 0000000..f57a39b
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/AxeDefend.java
@@ -0,0 +1,20 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.Defend;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class AxeDefend implements Defend
+{
+
+ @Override
+ public void defend(ConcreteCharacter me)
+ {
+ if(!me.isDead())
+ MainWindow.updateTextArea(me.getName() + " is defending with axe\n");
+
+ me.setDefending(true);
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/DragonAttack.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/DragonAttack.java
new file mode 100644
index 0000000..35a3735
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/DragonAttack.java
@@ -0,0 +1,16 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class DragonAttack implements Attack
+{
+
+ @Override
+ public void attack(GameCharacter me, GameCharacter you)
+ {
+ MainWindow.updateTextArea(me.getName() + " blows " + me.getAttackWeapon().getName() + " and burns " + you.getName() +"\n");
+ you.takeDamage(me.getStrength());
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/GameBehavior.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/GameBehavior.java
new file mode 100644
index 0000000..285fe7a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/GameBehavior.java
@@ -0,0 +1,12 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+
+public interface GameBehavior
+{
+ public String getName();
+ public void initCombatState(ConcreteCharacter me, ArrayList enemies);
+ public void execute();
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Heal.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Heal.java
new file mode 100644
index 0000000..0c9ae6a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Heal.java
@@ -0,0 +1,84 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameCombatState.CombatShenanigans;
+import gamePack.gameStatePack.gameCombatState.InitialCombatState;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.GameTextInputState;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public class Heal implements Special
+{
+ private GameCharacter actor;
+ private ArrayList enemies;
+ private CombatShenanigans theCombat;
+ private int healPoints = 100;
+
+ public Heal(GameCharacter actor, ArrayList enemies2)
+ {
+ this.actor = actor;
+ this.enemies = enemies2;
+ }
+
+ public void useSpecial(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ me.setHealth(me.getHealth() + healPoints);
+
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return "heal power";
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ for(GameCharacter c : me.getTargets() )
+ c.setHealth(c.getHealth() + healPoints);;
+
+ theCombat.printStatus();
+
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ this.theCombat = theCombat;
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ int i = 1;
+ int choice;
+
+ ArrayList everyone = new ArrayList<>();
+ ArrayList target = new ArrayList<>();
+
+ everyone.addAll(friends);
+ everyone.addAll(foes);
+
+ for(GameCharacter c : everyone)
+ {
+ MainWindow.updateTextArea(i + ". " + c.getName()+"\n" );
+ }
+
+ choice = TextInputState.readInt();
+
+// Scanner in = new Scanner(System.in);
+// choice = in.nextInt();
+// in.close();
+
+ //choice = ConcreteCharacter.user.nextInt();
+ target.add( everyone.get(choice - 1));
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/HealAll.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/HealAll.java
new file mode 100644
index 0000000..4948336
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/HealAll.java
@@ -0,0 +1,47 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameCombatState.CombatShenanigans;
+
+public class HealAll implements Special
+{
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void useSpecial(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/NullAttack.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/NullAttack.java
new file mode 100644
index 0000000..bd92705
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/NullAttack.java
@@ -0,0 +1,23 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class NullAttack implements Attack
+{
+
+ @Override
+ public void attack(GameCharacter me, GameCharacter you)
+ {
+ if(you.isDead())
+ {
+ MainWindow.updateTextArea(you.getName() + " is dead. You give him a disrespectful kick in the head\n");
+ return;
+ }
+ MainWindow.updateTextArea(me.getName() + " is hitting " + you.getName() + " with his " + me.getAttackWeapon().getName()+"\n");
+ you.takeDamage( me.getStrength() );
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/ShieldDefend.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/ShieldDefend.java
new file mode 100644
index 0000000..01b689d
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/ShieldDefend.java
@@ -0,0 +1,17 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.Defend;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class ShieldDefend implements Defend
+{
+
+ @Override
+ public void defend(ConcreteCharacter me)
+ {
+ MainWindow.updateTextArea(me.getName() + " is defending!\n");
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Special.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Special.java
new file mode 100644
index 0000000..0b2c873
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/Special.java
@@ -0,0 +1,10 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameStatePack.gameCombatState.CombatState;
+
+public interface Special extends CombatState
+{
+ public void useSpecial(ConcreteCharacter me, ConcreteCharacter you);
+ public String getName();
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/TrollAttack.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/TrollAttack.java
new file mode 100644
index 0000000..10e996a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterBehavior/TrollAttack.java
@@ -0,0 +1,16 @@
+package gamePack.gameEntityPack.gameCharacterBehavior;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class TrollAttack implements Attack
+{
+
+ @Override
+ public void attack(GameCharacter me, GameCharacter you)
+ {
+ MainWindow.updateTextArea(me.getName() + " wildly thrashes his " + me.getAttackWeapon().getName() + " and hits " + you.getName() +"\n");
+ you.takeDamage(me.getStrength());
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/ConcreteCharacter.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/ConcreteCharacter.java
new file mode 100644
index 0000000..e4bfdb3
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/ConcreteCharacter.java
@@ -0,0 +1,445 @@
+package gamePack.gameEntityPack.gameCharacterPack;
+
+import java.util.ArrayList;
+import java.util.Random;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameArtifactPack.GameArtifact;
+import gamePack.gameEntityPack.gameArtifactPack.NullArtifact;
+import gamePack.gameEntityPack.gameCharacterBehavior.Attack;
+import gamePack.gameEntityPack.gameWeaponPack.GameWeapon;
+import gamePack.gameEntityPack.gameWeaponPack.NullWeapon;
+import gamePack.gameStatePack.gameCombatState.CombatState;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public abstract class ConcreteCharacter implements GameCharacter, Dead, GameEntity
+{
+ //public static final Scanner user = new Scanner(System.in);
+ public static final Random random = new Random();
+ private CombatState currentState;
+ private GameArtifact currentItem;
+ private String name;
+ private GameWeapon myAttackWeapon, myDefendWeapon;
+ private Attack myAttack;
+ private Defend myDefend;
+ private ArrayList myCombatStates;
+ private int health;
+ private int maxHealth;
+ private int strength;
+ private int defense = 10;
+ private int speed;
+ private boolean isDead;
+ private boolean isDefending = false;
+ private ArrayList myWeapons;
+ private ArrayList myStates;
+ private ArrayList items;
+ private ArrayList targets;
+ //private EntityCanvas blah;
+
+ public ConcreteCharacter()
+ {
+ items = new ArrayList<>();
+ myCombatStates = new ArrayList<>();
+ myWeapons = new ArrayList<>();
+ targets = new ArrayList<>();
+ this.setAttackWeapon(new NullWeapon() );
+ }
+
+ @Override
+ public String getName()
+ {
+ return this.name;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ this.name = name;
+
+ }
+
+ public void setHealth(int health)
+ {
+ if(health <= 0)
+ {
+ this.health = 0;
+ this.setDead(true);
+ return;
+ }
+
+ this.health = health;
+ if(this.health > this.getMaxHealth())
+ this.health = this.getMaxHealth();
+ }
+
+ @Override
+ public void takeDamage(int damage)
+ {
+ int damageTaken = damage;
+
+ if( this.isDefending() )
+ {
+ damageTaken -= defense;
+ if(damageTaken < 0)
+ damageTaken = 0;
+ }
+
+ this.setHealth(this.getHealth() - damageTaken);
+
+ if(this.isDead())
+ MainWindow.updateTextArea(this.getName() + " has fallen\n");
+ }
+
+ @Override
+ public int getHealth()
+ {
+ return this.health;
+ }
+
+ @Override
+ public void attack(GameCharacter you)
+ {
+ //MainWindow.updateTextArea("attacking " + you.getName() );
+ if(this.isDead())
+ return;
+ myAttack.attack(this, you);
+ }
+
+ @Override
+ public void defend()
+ {
+ this.isDefending = true;
+ MainWindow.updateTextArea(this.getName() + " is defending!\n");
+ myDefendWeapon.weaponDefend(this);
+ }
+
+ public int getStrength()
+ {
+ int totalStrength = this.strength;
+
+ if(this.getAttackWeapon() != null)
+ totalStrength += this.getAttackWeapon().getPower();
+ return totalStrength;
+ }
+
+ public void setStrength(int strength)
+ {
+ this.strength = strength;
+ }
+
+ public int getDefense()
+ {
+ return this.defense;
+ }
+
+ public void setDefense(int defense)
+ {
+ this.defense = defense;
+ }
+
+ @Override
+ public void setDead(boolean dead)
+ {
+ this.isDead = dead;
+
+ }
+
+ @Override
+ public boolean isDead()
+ {
+ return this.isDead;
+ }
+
+ @Override
+ public void checkDead()
+ {
+ if(this.getHealth() <= 0)
+ this.setDead(true);
+ }
+
+
+ public void setAttackWeapon(GameWeapon w)
+ {
+ this.myAttackWeapon = w;
+ }
+
+ public void setDefendWeapon(GameWeapon w)
+ {
+ this.myDefendWeapon = w;
+ }
+
+ public GameWeapon getAttackWeapon()
+ {
+ return myAttackWeapon;
+ }
+
+ public void setDefending(boolean defending)
+ {
+ this.isDefending = defending;
+ }
+
+ public boolean isDefending()
+ {
+ return this.isDefending;
+ }
+
+ public void setAttack(Attack attack)
+ {
+ this.myAttack = attack;
+ }
+
+ public void setDefend(Defend defend)
+ {
+ this.myDefend = defend;
+ }
+
+ public Attack getAttack()
+ {
+ return myAttack;
+ }
+
+ public Defend getDefend()
+ {
+ return myDefend;
+ }
+
+
+ public void setSpeed(int speed)
+ {
+ this.speed = speed;
+ }
+
+ public int getSpeed()
+ {
+ return this.speed;
+ }
+
+ public int compareSpeed(GameCharacter other)
+ {
+ if(this.getSpeed() < other.getSpeed() )
+ return -1;
+
+ return 1;
+ }
+
+
+ public int getMaxHealth()
+ {
+ return this.maxHealth;
+ }
+
+
+ public void setMaxHealth(int maxHealth)
+ {
+ this.maxHealth = maxHealth;
+
+ }
+
+ public ArrayList getWeapons()
+ {
+ return myWeapons;
+ }
+
+ public void addWeapon(GameWeapon w)
+ {
+ myWeapons.add(w);
+ }
+
+ public void changeWeapon()
+ {
+ GameWeapon newWeapon = getWeaponChoice();
+ this.setAttackWeapon(newWeapon);
+
+ }
+
+ public abstract GameWeapon getWeaponChoice();
+
+ public void addCombatState(CombatState combatState)
+ {
+ myCombatStates.add(combatState);
+ }
+
+
+ public void setCurrentCombatBehavior()
+ {
+ //currentState = getCombatChoice();
+ }
+
+
+ public void setState(CombatState newState)
+ {
+ currentState = newState;
+ }
+
+ public CombatState getCurrentState()
+ {
+ return currentState;
+ }
+
+ public ArrayList getCombatStates()
+ {
+ return this.myCombatStates;
+ }
+
+ public void runState()
+ {
+ if(this.isDead() )
+ return;
+ currentState.run(this);
+ }
+
+ public void addItem(GameArtifact item)
+ {
+ if(items == null)
+ items = new ArrayList<>();
+ else
+ {
+ items.add(item);
+ }
+ }
+
+ public void useItem(GameArtifact item)
+ {
+ if(item != null)
+ {
+ MainWindow.updateTextArea("using " + item.getName() +"\n");
+ item.use(this);
+ }
+ }
+
+ public GameArtifact chooseItem()
+ {
+ int i = 1;
+ int choice;
+
+
+ if(items.size() < 1)
+ {
+ MainWindow.updateTextArea("No items"+ "\n");
+ return null;
+ }
+
+ for(GameArtifact item : items)
+ MainWindow.updateTextArea(i++ + ". " + item.getName()+ "\n");
+
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = user.nextInt();
+
+ if(choice < 1 || choice > items.size() + 1)
+ return null;
+
+ return items.get(choice - 1);
+ }
+
+ @Override
+ public String getView()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setView(String view)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateView()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void spawn()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void kill()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void save()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void load()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void enemyCombat(ConcreteCharacter target)
+ {
+ this.attack(target);
+
+ }
+
+ public void restore()
+ {
+ this.setHealth(maxHealth);
+ for(GameArtifact artifact : items)
+ artifact.restore();
+ }
+
+ public ArrayList getItems()
+ {
+ return items;
+ }
+
+ public int compareTo(GameEntity other)
+ {
+ return ((GameCharacter)this).getSpeed() - ((GameCharacter)other).getSpeed();
+ }
+
+ public ArrayList getTargets()
+ {
+ return targets;
+ }
+
+ public void setTargets(ArrayList targets)
+ {
+ this.targets = new ArrayList<>();
+ this.targets.addAll(targets);
+ }
+
+ public void chooseTarget(ArrayList friends, ArrayList foes)
+ {
+ this.currentState.setTargets(this, friends, foes);
+ }
+
+ public GameArtifact getCurrentItem()
+ {
+ return currentItem;
+ }
+
+ public void setCurrentItem(GameArtifact item)
+ {
+ currentItem = item;
+ }
+
+ @Override
+ public void clearTargets()
+ {
+ this.getTargets().clear();
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Dead.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Dead.java
new file mode 100644
index 0000000..5ec8493
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Dead.java
@@ -0,0 +1,8 @@
+package gamePack.gameEntityPack.gameCharacterPack;
+
+public interface Dead
+{
+ public void setDead(boolean dead);
+ public boolean isDead();
+ public void checkDead();
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Defend.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Defend.java
new file mode 100644
index 0000000..62801f1
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Defend.java
@@ -0,0 +1,6 @@
+package gamePack.gameEntityPack.gameCharacterPack;
+
+public interface Defend
+{
+ public void defend(ConcreteCharacter me);
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/GameCharacter.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/GameCharacter.java
index c1ca602..ec9a6b0 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/GameCharacter.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/GameCharacter.java
@@ -4,33 +4,49 @@
import gamePack.gameEntityPack.GameEntity;
import gamePack.gameEntityPack.gameArtifactPack.GameArtifact;
-import gamePack.gameEntityPack.gameBehaviorPack.GameBehavior;
+import gamePack.gameEntityPack.gameCharacterBehavior.Attack;
+import gamePack.gameEntityPack.gameWeaponPack.GameWeapon;
+import gamePack.gameStatePack.gameCombatState.CombatState;
-public interface GameCharacter extends GameEntity {
+public interface GameCharacter extends GameEntity
+{
+ public String getName();
+ public void setName(String name);
+ public void attack(GameCharacter enemy);
+ public void defend();
+ public void takeDamage(int damage);
+ public int getStrength();
+ public void setStrength(int strength);
+ public int getDefense();
+ public void setDefense(int defense);
+ public void setAttackWeapon(GameWeapon weapon);
+ public GameWeapon getAttackWeapon();
+ public void setAttack(Attack theAttack);
+ public Attack getAttack();
+ public void setSpeed(int speed);
+ public int getSpeed();
+ public ArrayList getWeapons();
+ public void addWeapon(GameWeapon weapon);
+ public void addCombatState(CombatState combatState);
+ public int getHealth();
+ public void setHealth(int health);
+ public boolean isDead();
+ public void addItem(GameArtifact item);
+ public void changeWeapon();
+ public int getMaxHealth();
+ public ArrayList getCombatStates();
+ public GameArtifact chooseItem();
+ public void useItem(GameArtifact theItem);
+ public void setState(CombatState theState);
+ public void restore();
+ public void runState();
+ public void getCombatChoice();
+ public void chooseTarget(ArrayList friends, ArrayList foes);
+ public void setTargets(ArrayList targets);
+ public ArrayList getTargets();
+ public void setCurrentItem(GameArtifact item);
+ public GameArtifact getCurrentItem();
+ public CombatState getCurrentState();
+ public void clearTargets();
- public double getAccel();
- void setAccel(double accel);
-
- public double getMaxSpeed();
- void setMaxSpeed(double maxSpeed);
-
- public double getStrength();
- void setStrength(double strength);
-
- public double getWeight();
- void setWeight();
-
- public double getHealth();
- void setHealth(double health);
-
- public ArrayList getBehaviors();
- void setBehaviors(ArrayList behaviors);
-
- public ArrayList getArtifacts();
- void setArtifacts(ArrayList artifacts);
-
-
-
-
-
}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Health.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Health.java
new file mode 100644
index 0000000..18332a4
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/Health.java
@@ -0,0 +1,9 @@
+package gamePack.gameEntityPack.gameCharacterPack;
+
+public interface Health
+{
+ public void setHealth(int health);
+ public int getHealth();
+ public int getMaxHealth();
+ public void setMaxHealth(int maxHealth);
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/State.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/State.java
new file mode 100644
index 0000000..e30f4a5
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/State.java
@@ -0,0 +1,6 @@
+package gamePack.gameEntityPack.gameCharacterPack;
+
+public interface State
+{
+ public void run();
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/AISingleTarget.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/AISingleTarget.java
new file mode 100644
index 0000000..14a2584
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/AISingleTarget.java
@@ -0,0 +1,29 @@
+package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameCombatState.SingleTargetCombat;
+
+public class AISingleTarget extends SingleTargetCombat
+{
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ int choice;
+ ArrayList target = new ArrayList<>();
+
+ choice = ConcreteCharacter.random.nextInt(foes.size());
+ target.add(foes.get( Math.abs(choice) ) );
+
+ me.setTargets(target);
+ //System.out.println(me.getName() + " has chosen " + choice + " as a target");
+
+ }
+
+ public String getName()
+ {
+ return "AI single target";
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/ConcreteGameEnemy.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/ConcreteGameEnemy.java
new file mode 100644
index 0000000..7067fee
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/ConcreteGameEnemy.java
@@ -0,0 +1,38 @@
+package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameWeaponPack.GameWeapon;
+import gamePack.gameStatePack.gameCombatState.CombatState;
+import gamePack.gameStatePack.gameCombatState.SingleTargetCombat;
+
+public class ConcreteGameEnemy extends ConcreteCharacter
+{
+
+ @Override
+ public GameWeapon getWeaponChoice()
+ {
+ int numWeapons;
+ ArrayList weapons = this.getWeapons();
+
+ numWeapons = weapons.size();
+
+ return weapons.get( ConcreteCharacter.random.nextInt(numWeapons) );
+ }
+
+ @Override
+ public void getCombatChoice()
+ {
+ int numStates;
+ ArrayList theStates = this.getCombatStates();
+
+ numStates = theStates.size();
+
+ this.setState(theStates.get(Math.abs( ConcreteCharacter.random.nextInt(numStates) ) ) );
+ //System.out.println("Chosen state is " + this.getCurrentState().getName() );
+ }
+
+
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/ConcreteGameEnemyTest.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/ConcreteGameEnemyTest.java
new file mode 100644
index 0000000..57cce23
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/ConcreteGameEnemyTest.java
@@ -0,0 +1,52 @@
+package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.Scanner;
+
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ConcreteGameEnemyTest
+{
+
+ static ConcreteGameEnemy enemy;
+ static Scanner scanner;
+ static PrintStream printStream;
+ static PrintStream errorLog;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ InputStream in = System.in;
+ OutputStream out = System.out;
+ scanner = new Scanner(in);
+ printStream = new PrintStream(out);
+ try {
+ errorLog = new PrintStream(new File("TestLogs/TestProfileInputErrorLog_"+System.currentTimeMillis()));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ enemy = new ConcreteGameEnemy();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ //scanner.close();
+ }
+
+// @Test
+// public void testDifficulty()
+// {
+// System.out.println("Enter difficulty value 10");
+// enemy.setDifficulty( scanner.nextInt() );
+//
+// assertEquals( 10, enemy.getDifficulty() );
+// }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/Dragon.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/Dragon.java
new file mode 100644
index 0000000..5ba5919
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/Dragon.java
@@ -0,0 +1,27 @@
+package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.*;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameWeaponPack.*;
+
+public class Dragon extends ConcreteGameEnemy
+{
+
+ private int difficulty;
+
+ public Dragon()
+ {
+ super();
+ this.setName("Dragon");
+ this.setMaxHealth(50);
+ this.setHealth(50);
+ this.setStrength(5);
+ this.setAttackWeapon(new FireBreath() );
+ this.setAttack( new DragonAttack() );
+ this.addCombatState(new AISingleTarget() );
+
+ }
+
+
+
+}//end class
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/GameEnemy.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/GameEnemy.java
index 1615f28..134c172 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/GameEnemy.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/GameEnemy.java
@@ -1,7 +1,8 @@
package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
-import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
-public interface GameEnemy extends GameEntity {
- public double getDifficulty();
+public interface GameEnemy extends GameCharacter
+{
+ public int getDifficulty();
}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/Snake.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/Snake.java
new file mode 100644
index 0000000..327b213
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/Snake.java
@@ -0,0 +1,21 @@
+package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.NullAttack;
+import gamePack.gameEntityPack.gameCharacterBehavior.TrollAttack;
+import gamePack.gameEntityPack.gameWeaponPack.BigStick;
+import gamePack.gameEntityPack.gameWeaponPack.NullWeapon;
+
+public class Snake extends ConcreteGameEnemy
+{
+ public Snake()
+ {
+ super();
+ this.setName("Snake");
+ this.setMaxHealth(20);
+ this.setHealth(20);
+ this.setStrength(5);
+ this.setAttackWeapon(new NullWeapon() );
+ this.setAttack( new NullAttack() );
+ this.addCombatState(new AISingleTarget() );
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/TrollEnemy.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/TrollEnemy.java
new file mode 100644
index 0000000..9ec4735
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gameEnemyPack/TrollEnemy.java
@@ -0,0 +1,27 @@
+package gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.*;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameWeaponPack.*;
+
+public class TrollEnemy extends ConcreteGameEnemy
+{
+
+ private int difficulty;
+
+ public TrollEnemy()
+ {
+ super();
+ this.setName("Troll");
+ this.setMaxHealth(50);
+ this.setHealth(50);
+ this.setStrength(5);
+ this.setAttackWeapon(new BigStick() );
+ this.setAttack( new TrollAttack() );
+ this.addCombatState(new AISingleTarget() );
+
+ }
+
+
+
+}//end class
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ClericPlayer.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ClericPlayer.java
new file mode 100644
index 0000000..d426231
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ClericPlayer.java
@@ -0,0 +1,26 @@
+package gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack;
+
+import gamePack.gameEntityPack.gameArtifactPack.Potion;
+import gamePack.gameEntityPack.gameCharacterBehavior.Heal;
+import gamePack.gameEntityPack.gameCharacterBehavior.NullAttack;
+import gamePack.gameEntityPack.gameWeaponPack.NullWeapon;
+
+public class ClericPlayer extends ConcretePlayer
+{
+
+ public ClericPlayer()
+ {
+ super();
+ this.setMaxHealth(300);
+ this.setHealth(200);
+ this.setStrength(15);
+ this.setAttackWeapon(new NullWeapon() );
+ this.setDefendWeapon( this.getAttackWeapon() );
+ this.setAttack(new NullAttack() );
+ this.setName("Cleric");
+ this.addWeapon( new NullWeapon() );
+ //this.addCombatState( new Heal() );
+ this.addItem( new Potion(5, "Potion") );
+ }
+
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ConcretePlayer.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ConcretePlayer.java
new file mode 100644
index 0000000..6f837b1
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ConcretePlayer.java
@@ -0,0 +1,128 @@
+package gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameArtifactPack.GameArtifact;
+import gamePack.gameEntityPack.gameArtifactPack.NullArtifact;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameWeaponPack.GameWeapon;
+import gamePack.gameStatePack.gameCombatState.CombatState;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public class ConcretePlayer extends ConcreteCharacter implements GamePlayer
+{
+ private int experience = 0;
+ private String profileInfo;
+
+ public GameWeapon getWeaponChoice()
+ {
+ int choice;
+ int i = 1;
+ MainWindow.updateTextArea("Pick your weapon:"+ "\n");
+
+ for(GameWeapon w : this.getWeapons())
+ MainWindow.updateTextArea(i++ + ". " + w.getName()+ "\n");
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = user.nextInt();
+
+ return this.getWeapons().get(choice - 1);
+ }
+
+ public void getCombatChoice()
+ {
+ int choice, i = 1;
+ MainWindow.updateTextArea(this.getName() + " combat choice:"+ "\n");
+
+ for(CombatState combatState : this.getCombatStates())
+ {
+ MainWindow.updateTextArea(i++ + ". " + combatState.getName() + "\n");
+ }
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = user.nextInt();
+ this.setState( this.getCombatStates().get(choice - 1) );
+ }
+
+ public GameArtifact chooseItem()
+ {
+ int i = 1;
+ int choice;
+
+ for(GameArtifact item : this.getItems())
+ MainWindow.updateTextArea(i++ + ". " + item.getName()+ "\n");
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = user.nextInt();
+
+ if(choice < 1 || choice > this.getItems().size() + 1)
+ return new NullArtifact();
+
+ return this.getItems().get(choice - 1);
+ }
+
+ @Override
+ public int compareTo(GameEntity o) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public String getProfileInfo() {
+ // TODO Auto-generated method stub
+ return this.profileInfo;
+ }
+
+ @Override
+ public void setProfileInfo(String info) {
+ this.profileInfo = info;
+
+ }
+
+ @Override
+ public String getStats() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setStats(String stats) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setExperience(int experienceInt) {
+ this.experience = experienceInt;
+
+ }
+
+ @Override
+ public int getExperience() {
+ return experience;
+ }
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ConcretePlayerTest.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ConcretePlayerTest.java
new file mode 100644
index 0000000..40862dd
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/ConcretePlayerTest.java
@@ -0,0 +1,34 @@
+package gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack;
+
+import static org.junit.Assert.*;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+public class ConcretePlayerTest
+{
+ ConcretePlayer player = new ConcretePlayer();
+
+ @BeforeClass
+ public static void setupBeforeTest() throws Exception
+ {
+
+ }
+
+
+ @Test
+ public void testProfile()
+ {
+ player.setProfileInfo("Profile info");
+ assertEquals(player.getProfileInfo(), "Profile info");
+ }
+
+ @Test
+ public void testStats()
+ {
+ player.setStats("Profile Stats");
+ assertEquals(player.getStats(), "Profile Stats");
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/GamePlayer.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/GamePlayer.java
index 9127c31..b0232b0 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/GamePlayer.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/GamePlayer.java
@@ -1,12 +1,15 @@
package gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack;
-import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
-public interface GamePlayer extends GameEntity {
+public interface GamePlayer extends GameCharacter {
public String getProfileInfo();
public void setProfileInfo(String info); //name, config, lastSavedateTime...
public String getStats();
public void setStats(String stats); //survivability, experience, narrative completion, difficulty, handicap...
+ //public void attack(GameCharacter target);
+ public void setExperience(int experienceInt);
+ public int getExperience();
}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/KnightPlayer.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/KnightPlayer.java
new file mode 100644
index 0000000..107c258
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameCharacterPack/gamePlayerPack/KnightPlayer.java
@@ -0,0 +1,50 @@
+package gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack;
+
+import gamePack.gameEntityPack.gameArtifactPack.Potion;
+import gamePack.gameEntityPack.gameCharacterBehavior.Heal;
+import gamePack.gameEntityPack.gameCharacterBehavior.NullAttack;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameWeaponPack.BattleAxe;
+import gamePack.gameEntityPack.gameWeaponPack.BigStick;
+import gamePack.gameEntityPack.gameWeaponPack.GreatHammer;
+import gamePack.gameEntityPack.gameWeaponPack.NullWeapon;
+import gamePack.gameEntityPack.gameWeaponPack.WeaponOfTheGods;
+import gamePack.gameStatePack.gameCombatState.AllTargetCombat;
+import gamePack.gameStatePack.gameCombatState.ChangeWeapon;
+import gamePack.gameStatePack.gameCombatState.SingleTargetCombat;
+import gamePack.gameStatePack.gameCombatState.UseItemState;
+
+public class KnightPlayer extends ConcretePlayer
+{
+ public KnightPlayer()
+ {
+ this.setDefault();
+ }
+
+
+ public void setDefault()
+ {
+ this.setName("KnightPlayer");
+ this.setAttack(new NullAttack());
+ this.setMaxHealth(300);
+ this.restore();
+ this.setStrength(40);
+
+
+
+ this.addWeapon(new BigStick());
+ this.addWeapon(new GreatHammer());
+ this.addWeapon(new BattleAxe() );
+ this.addWeapon(new WeaponOfTheGods());
+ this.setAttackWeapon(new NullWeapon() );
+
+ this.addCombatState(new AllTargetCombat() );
+ this.addCombatState(new SingleTargetCombat() );
+ this.addCombatState(new ChangeWeapon() );
+ this.addCombatState(new UseItemState() );
+
+ this.addItem(new Potion(5, "Potion") );
+ }
+
+ public String toString() {return this.getName();}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/BattleAxe.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/BattleAxe.java
new file mode 100644
index 0000000..74791a7
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/BattleAxe.java
@@ -0,0 +1,48 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.Attack;
+import gamePack.gameEntityPack.gameCharacterBehavior.AxeAttack;
+import gamePack.gameEntityPack.gameCharacterBehavior.AxeDefend;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.Defend;
+
+public class BattleAxe implements GameWeapon
+{
+ private int power = 10;
+ private int durability = 20;
+ private int absorbtion = 5;
+ private Attack axeAttack;
+ private Defend axeDefend;
+ private String name = "BattleAxe";
+
+ public BattleAxe()
+ {
+ axeAttack = new AxeAttack();
+ axeDefend = new AxeDefend();
+ }
+
+ public int getPower()
+ {
+ return power;
+ }
+ @Override
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ axeAttack.attack(me, you);
+ }
+ @Override
+ public void weaponDefend(ConcreteCharacter me)
+ {
+ axeDefend.defend(me);
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return name;
+ }
+
+public String toString() {return this.getName();}
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/BigStick.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/BigStick.java
new file mode 100644
index 0000000..ee3e4be
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/BigStick.java
@@ -0,0 +1,43 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.Attack;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.Defend;
+
+public class BigStick implements GameWeapon
+{
+
+ private int power = 5;
+ private int durability = 20;
+ private int absorbtion = 5;
+ private Attack axeAttack;
+ private Defend axeDefend;
+ private String name = "BigStick";
+
+ @Override
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void weaponDefend(ConcreteCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getPower()
+ {
+ // TODO Auto-generated method stub
+ return this.power;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public String toString() {return this.getName();}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/FireBreath.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/FireBreath.java
new file mode 100644
index 0000000..9a0311c
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/FireBreath.java
@@ -0,0 +1,43 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.Attack;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.Defend;
+
+public class FireBreath implements GameWeapon
+{
+
+ private int power = 5;
+ private int durability = 20;
+ private int absorbtion = 5;
+ private Attack axeAttack;
+ private Defend axeDefend;
+ private String name = "FireBreath";
+
+ @Override
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void weaponDefend(ConcreteCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getPower()
+ {
+ // TODO Auto-generated method stub
+ return this.power;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+ public String toString() {return this.getName();}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/GameWeapon.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/GameWeapon.java
new file mode 100644
index 0000000..905f24d
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/GameWeapon.java
@@ -0,0 +1,11 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+
+public interface GameWeapon
+{
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you);
+ public void weaponDefend(ConcreteCharacter me);
+ public int getPower();
+ public String getName();
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/GreatHammer.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/GreatHammer.java
new file mode 100644
index 0000000..cba13fb
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/GreatHammer.java
@@ -0,0 +1,45 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterBehavior.Attack;
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.Defend;
+
+public class GreatHammer implements GameWeapon
+{
+
+ private int power = 35;
+ private int durability = 20;
+ private int absorbtion = 5;
+ private Attack axeAttack;
+ private Defend axeDefend;
+ private String name = "GreatHammer";
+
+ @Override
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void weaponDefend(ConcreteCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getPower()
+ {
+ // TODO Auto-generated method stub
+ return 35;
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return name;
+ }
+ public String toString() {return this.getName();}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/NullWeapon.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/NullWeapon.java
new file mode 100644
index 0000000..db06603
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/NullWeapon.java
@@ -0,0 +1,34 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+
+public class NullWeapon implements GameWeapon
+{
+
+ @Override
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void weaponDefend(ConcreteCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getPower()
+ {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public String getName()
+ {
+ return "barehands";
+ }
+ public String toString() {return this.getName();}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/WeaponOfTheGods.java b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/WeaponOfTheGods.java
new file mode 100644
index 0000000..10a7792
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameEntityPack/gameWeaponPack/WeaponOfTheGods.java
@@ -0,0 +1,34 @@
+package gamePack.gameEntityPack.gameWeaponPack;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+
+public class WeaponOfTheGods implements GameWeapon
+{
+ private int power = 1000000;
+ @Override
+ public void weaponAttack(ConcreteCharacter me, ConcreteCharacter you)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void weaponDefend(ConcreteCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getPower()
+ {
+ // TODO Auto-generated method stub
+ return this.power;
+ }
+
+ public String getName()
+ {
+ return "WeaponOfTheGods";
+ }
+ public String toString() {return this.getName();}
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/CombatStateInterface.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/CombatStateInterface.java
new file mode 100644
index 0000000..1191dec
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/CombatStateInterface.java
@@ -0,0 +1,5 @@
+package gamePack.gameStatePack;
+
+public interface CombatStateInterface extends GameState {
+ void combat();
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/EndGame.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/EndGame.java
new file mode 100644
index 0000000..9771d19
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/EndGame.java
@@ -0,0 +1,114 @@
+package gamePack.gameStatePack;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.SQLiteJDBC;
+
+public class EndGame implements FinalStateInterface {
+
+ private GamePlayer player;
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public synchronized void run(GameStateContext gameStateContext) {
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName() + "\n"
+ + "\nThank you for playing the game\nPROGRAM TERMINATING\n");
+ if (player!=null) {
+ GamePlayer oldPlayer = SQLiteJDBC.selectProfile(player.getProfileInfo());
+ int oldXP = oldPlayer.getExperience(), newXP = player.getExperience();
+ if (newXP > oldXP)
+ SQLiteJDBC.updateProfile(player.getProfileInfo(), "EXPERIENCE",
+ Integer.toString(player.getExperience()));
+ SQLiteJDBC.selectProfile(player.getProfileInfo());
+ MainWindow.updateTextArea(
+ "oldXP=" + oldXP + " newXP=" + newXP + " profileName" + player.getProfileInfo() + "\n");
+ }
+ try {
+ wait(10000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ System.exit(0);
+ }
+
+ @Override
+ public void gameSave() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void gameShutdown() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setPlayer(GamePlayer gamePlayer) {
+ this.player = gamePlayer;
+
+ }
+
+ @Override
+ public GamePlayer getPlayer()
+ {
+ return this.player;
+ }
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameFinalState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/FinalStateInterface.java
similarity index 57%
rename from SoftwareEngineeringGame/src/gamePack/gameStatePack/GameFinalState.java
rename to SoftwareEngineeringGame/src/gamePack/gameStatePack/FinalStateInterface.java
index 9d8415f..7b22ccd 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameFinalState.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/FinalStateInterface.java
@@ -1,6 +1,6 @@
package gamePack.gameStatePack;
-public interface GameFinalState extends GameState {
+public interface FinalStateInterface extends GameState {
void gameSave();
void gameShutdown();
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameCombatState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameCombatState.java
deleted file mode 100644
index c5d4d93..0000000
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameCombatState.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package gamePack.gameStatePack;
-
-public interface GameCombatState extends GameState {
- void combat();
-}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameMapState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameMapState.java
deleted file mode 100644
index 5037979..0000000
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameMapState.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package gamePack.gameStatePack;
-
-public interface GameMapState extends GameState {
- public void display();
- void updateDisplay();
- void enterMap();
- void exitMap();
-}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameState.java
index 701ba88..cbe8259 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameState.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameState.java
@@ -1,6 +1,7 @@
package gamePack.gameStatePack;
import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack.GameEnemy;
import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
public interface GameState {
@@ -12,4 +13,8 @@ public interface GameState {
void exitGame();
void exitGame(GamePlayer player);
void enterState(GameState state);
+ void run(GameStateContext gameStateContext);
+ void setPlayer(GamePlayer gamePlayer);
+ GamePlayer getPlayer();
+ void addEnemy(GameCharacter enemy);
}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameStateContext.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameStateContext.java
new file mode 100644
index 0000000..5499ad8
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameStateContext.java
@@ -0,0 +1,42 @@
+package gamePack.gameStatePack;
+
+import java.util.Scanner;
+
+public class GameStateContext {
+ private static GameState gameState;
+ private static GameStateContext gameStateContext;
+ private static int difficulty;
+ private GameStateContext() {
+ gameState = new StartGame();
+ GameStateContext.gameStateContext = this;
+ }
+
+ public static void setState(final GameState newState) {
+ if(GameStateContext.getGameStateContext()==null)
+ GameStateContext.gameStateContext = new GameStateContext();
+ GameStateContext.gameState = newState;
+ }
+
+ public static GameState getState() {
+ if(GameStateContext.gameState==null) {
+ GameStateContext.gameStateContext = new GameStateContext();
+ }
+ return GameStateContext.gameState;
+ }
+
+ public void run() {
+ gameState.run(this);
+ }
+
+ public static GameStateContext getGameStateContext() {
+ if(GameStateContext.gameStateContext==null) {
+ GameStateContext.gameStateContext = new GameStateContext();
+ }
+ return GameStateContext.gameStateContext;
+ }
+
+ public static void setDifficulty(int difficultyInt) {
+ GameStateContext.difficulty = difficultyInt;
+
+ }
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameTextInputState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameTextInputState.java
deleted file mode 100644
index 1920465..0000000
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameTextInputState.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package gamePack.gameStatePack;
-
-
-
-public interface GameTextInputState extends GameState {
- String readWord();
- String readLine();
- int readInt();
- char readChar();
- void openMenu();
- void closeMenu();
- //etc
-
-}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameInitialState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/InitialStateInterface.java
similarity index 57%
rename from SoftwareEngineeringGame/src/gamePack/gameStatePack/GameInitialState.java
rename to SoftwareEngineeringGame/src/gamePack/gameStatePack/InitialStateInterface.java
index fca1205..9e57768 100644
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/GameInitialState.java
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/InitialStateInterface.java
@@ -1,6 +1,6 @@
package gamePack.gameStatePack;
-public interface GameInitialState extends GameState {
+public interface InitialStateInterface extends GameState {
public void gameBuild();
void gameRun();
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/ProfileInput.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/ProfileInput.java
deleted file mode 100644
index 5799ad7..0000000
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/ProfileInput.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package gamePack.gameStatePack;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.Scanner;
-
-import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
-import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
-
-public class ProfileInput implements GameTextInputState {
- private Scanner scanner = new Scanner(System.in);
- private PrintStream printStream = new PrintStream(System.out);
- private PrintStream gameErrorLog;
-
- public ProfileInput(Scanner scanner, OutputStream printStream) {
- this.scanner = scanner;
- this.printStream = new PrintStream(printStream);
- try {
- this.gameErrorLog = new PrintStream(new File("GameData/ProfileInputErrorLog_"+System.currentTimeMillis()));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
-
- public ProfileInput(Scanner scanner, OutputStream printStream, PrintStream gameErrorLog) {
- this.scanner = scanner;
- this.printStream = new PrintStream(printStream);
- this.gameErrorLog = gameErrorLog;
- }
-
- @Override
- public String readWord() {
- printStream.println("ProfileInput.readWord()");
- String res = scanner.next().trim();
- return res;
- }
-
- @Override
- public String readLine() {
- printStream.println("ProfileInput.readLine()");
- String res = scanner.nextLine().trim();
- return res;
- }
-
- @Override
- public int readInt() {
- int num=0;
- boolean parsedInt = true;
- String something = scanner.nextLine();
- try {
- num = Integer.parseInt(something);
- } catch(NumberFormatException nfe) {
- System.out.println("something didn't parse to an int");
- parsedInt = false;
- }
- while(! parsedInt){
- something = scanner.nextLine();
- try {
- num = Integer.parseInt(something);
-
- parsedInt = true; /*nfe skips this*/
- } catch(NumberFormatException nfe) {
- System.out.println("something didn't parse to an int");
- parsedInt = false;
- }
- }
- return num;
- }
-
- @Override
- public char readChar() {
- char res = '?';
- try {
- res = scanner.nextLine().trim().charAt(0);
- } catch (IndexOutOfBoundsException e) {
- e.printStackTrace(gameErrorLog);
- }
- return res;
- }
-
- @Override
- public void openMenu() {
- System.out.println("\n\t\t\t\t_____-----Game-----_____\t\t\t\t\n");
- int option = 999;
- do{
- System.out.println("\nWelcome, choose an option:\n"
- + "1) readLine() --> Log\n"
- + "0) EXIT");
- option = readInt();
- switch(option){
- case 1:
- gameErrorLog.println(readLine());
- break;
- case 0:
- System.out.println("\nThank you for playing the game\n\n");
- break;
- default:
- }
- }
- while(option != 0);
- }
-
- public Scanner getScanner() {
- return scanner;
- }
-
- public void setScanner(Scanner scanner) {
- this.scanner = scanner;
- }
-
- public PrintStream getPrintStreamOut() {
- return printStream;
- }
-
- public void setPrintStream(PrintStream printStream) {
- this.printStream = printStream;
- }
-
- public PrintStream getGameErrorLog() {
- return gameErrorLog;
- }
-
- public void setGameErrorLog(PrintStream gameErrorLog) {
- this.gameErrorLog = gameErrorLog;
- }
-
- @Override
- public void nextTurn() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void executeTurn(GameCharacter character) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void prelude() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void interlude() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void cutScene() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void exitGame() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void exitGame(GamePlayer player) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void enterState(GameState state) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void closeMenu() {
- // TODO Auto-generated method stub
-
- }
-
-}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/ProfileInputTest.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/ProfileInputTest.java
deleted file mode 100644
index 9fd4b42..0000000
--- a/SoftwareEngineeringGame/src/gamePack/gameStatePack/ProfileInputTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package gamePack.gameStatePack;
-
-import static org.junit.Assert.*;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.Scanner;
-
-import org.junit.After;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class ProfileInputTest {
- static GameState gameState;
- static Scanner scanner;
- static PrintStream printStream;
- static PrintStream errorLog;
-
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- InputStream in = System.in;
- OutputStream out = System.out;
- scanner = new Scanner(in);
- printStream = new PrintStream(out);
- try {
- errorLog = new PrintStream(new File("TestLogs/TestProfileInputErrorLog_"+System.currentTimeMillis()));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- gameState = new ProfileInput(scanner, printStream, errorLog);
- }
-
- @After
- public void tearDown() throws Exception {
- //scanner.close();
- }
-
- @Test
- public void testReadWord() {
- System.out.println("type \"word\" with a single trailing space and press enter");
- String res = ((ProfileInput) gameState).readWord();
- assertEquals("word",res);
- scanner.nextLine();
-
- System.out.println("type \"word\" with a single trailing space and press enter");
- res = ((ProfileInput) gameState).readWord();
- scanner.nextLine();
- assertEquals("word",res);
- }
-
- @Test
- public void testReadLine() {
- System.out.println("type \"word\" with no trailing space and press enter");
- String res = ((ProfileInput) gameState).readLine();
- assertEquals("word",res);
-
- }
-
- @Test
- public void testReadInt() {
- System.out.println("type \"2\" followed by any garbage and press enter");
- String res = Integer.toString(((ProfileInput) gameState).readInt());
- assertEquals("2",res);
-
- }
-
- @Test
- public void testReadChar() {
- System.out.println("type \"a\" followed by any garbage and press enter");
- String res = Character.toString(((ProfileInput) gameState).readChar());
- assertEquals("a",res);
-
- }
-
- @Test
- public void testOpenMenu() {
- ((ProfileInput) gameState).openMenu();
-
- }
-}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/StartGame.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/StartGame.java
new file mode 100644
index 0000000..aee1974
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/StartGame.java
@@ -0,0 +1,107 @@
+package gamePack.gameStatePack;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.ProfileInputState;
+
+public class StartGame implements InitialStateInterface {
+
+ GameStateContext gameStateContext;
+ @Override
+ public void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(this.gameStateContext.getState().getClass().getSimpleName()+"\n");
+ this.gameStateContext = gameStateContext;
+ GameState gameState = new ProfileInputState();
+ this.gameStateContext.setState(gameState);
+ this.gameStateContext.run();
+ }
+
+
+ @Override
+ public void gameRun() {
+
+ }
+
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void gameBuild() {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public void setPlayer(GamePlayer gamePlayer) {
+
+
+ }
+
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public GamePlayer getPlayer() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/AllTargetCombat.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/AllTargetCombat.java
new file mode 100644
index 0000000..eb72b69
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/AllTargetCombat.java
@@ -0,0 +1,59 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+
+public class AllTargetCombat implements CombatState
+{
+
+ Scanner user;
+ private GameCharacter actor;
+ private ArrayList characters;
+ private CombatShenanigans theCombat;
+
+ public AllTargetCombat(){}
+
+ public AllTargetCombat(GameCharacter player, ArrayList enemies)
+ {
+ this.actor = player;
+ this.characters = enemies;
+
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ for(GameCharacter c : me.getTargets() )
+ me.attack(c);
+
+ //actor.setState( new EnemyCombat(actor, characters));
+ //theCombat.printStatus();
+
+ }
+
+
+
+ public String getName()
+ {
+ return "All target ";
+ }
+
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ this.theCombat = theCombat;
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ me.setTargets(foes);
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/BattleLostState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/BattleLostState.java
new file mode 100644
index 0000000..d12319a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/BattleLostState.java
@@ -0,0 +1,45 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class BattleLostState implements CombatState
+{
+
+ private GameCharacter actor;
+
+ public BattleLostState(GameCharacter thePlayer)
+ {
+ this.actor = thePlayer;
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ MainWindow.updateTextArea(actor.getName() + " has fallen!\n");
+ actor.setState(new EndCombatState(actor) );
+
+ }
+
+ @Override
+ public String getName()
+ {
+ return "Battle Lost State";
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/BattleWonState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/BattleWonState.java
new file mode 100644
index 0000000..a3c9d98
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/BattleWonState.java
@@ -0,0 +1,45 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class BattleWonState implements CombatState
+{
+
+ private GameCharacter actor;
+
+ public BattleWonState(GameCharacter thePlayer)
+ {
+ this.actor = thePlayer;
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ MainWindow.updateTextArea(actor.getName() + " has defeated all opponents!\n");
+ actor.setState(new EndCombatState(actor) );
+
+ }
+
+ @Override
+ public String getName()
+ {
+ return "Battle won state";
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+
+ }
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/ChangeWeapon.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/ChangeWeapon.java
new file mode 100644
index 0000000..8117c97
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/ChangeWeapon.java
@@ -0,0 +1,50 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+
+public class ChangeWeapon implements CombatState
+{
+
+ private GameCharacter actor;
+ private ArrayList enemies;
+ private CombatShenanigans theCombat;
+
+ public ChangeWeapon(){}
+
+ public ChangeWeapon(GameCharacter player, ArrayList enemies2)
+ {
+ this.actor = player;
+ this.enemies = enemies2;
+ }
+
+ @Override
+ public String getName()
+ {
+ return "change weapon";
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ ;
+
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ this.theCombat = theCombat;
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ me.changeWeapon();
+ }
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/Combat.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/Combat.java
new file mode 100644
index 0000000..c4d7465
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/Combat.java
@@ -0,0 +1,72 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameArtifactPack.Potion;
+import gamePack.gameEntityPack.gameCharacterBehavior.Heal;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack.Snake;
+import gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack.TrollEnemy;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.KnightPlayer;
+import gamePack.gameEntityPack.gameWeaponPack.BattleAxe;
+import gamePack.gameEntityPack.gameWeaponPack.BigStick;
+import gamePack.gameEntityPack.gameWeaponPack.GreatHammer;
+import gamePack.gameEntityPack.gameWeaponPack.WeaponOfTheGods;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public class Combat
+{
+ public static void main(String[] args)
+ {
+ int numAliveEnemies;
+ GameCharacter current;
+ ArrayList enemies, players, everyone;
+ //Scanner user = new Scanner(System.in);
+ String again = "y";
+ CombatShenanigans theCombat;
+
+
+ while( again.compareTo("y") == 0 )
+ {
+ players = new ArrayList<>();
+ players.add(new KnightPlayer() );
+ players.add(new KnightPlayer() );
+ players.add(new KnightPlayer() );
+ players.get(0).setSpeed(1001);
+
+ enemies = new ArrayList<>();
+
+ enemies.add( new TrollEnemy() );
+ enemies.add( new TrollEnemy() );
+ enemies.add( new Snake() );
+
+ enemies.get(0).setSpeed(1000);
+
+ numAliveEnemies = enemies.size();
+
+
+ //player.addCombatState(new SingleTargetCombat(player, enemies));
+ //player.addCombatState(new AllTargetCombat(player, enemies));
+ //player.addCombatState(new ChangeWeapon(player, enemies));
+ //player.addCombatState(new Heal(player, enemies));
+ //player.addCombatState(new UseItemState(player, enemies) );
+
+
+
+ theCombat = new CombatShenanigans(players, enemies);
+
+
+ theCombat.doCombat();
+ MainWindow.updateTextArea("===============================\n");
+
+ MainWindow.updateTextArea("Play again? (y/n): \n");
+ again = TextInputState.readLine();
+ //again = user.next();
+ }
+
+ //user.close();
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/CombatShenanigans.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/CombatShenanigans.java
new file mode 100644
index 0000000..a65eba3
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/CombatShenanigans.java
@@ -0,0 +1,252 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.EndGame;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameMapStatePack.MapCanvas;
+import gamePack.gameStatePack.gameTextStatePack.GameTextInputState;
+import gamePack.gameStatePack.gameTextStatePack.StartMenu;
+
+public class CombatShenanigans implements GameTextInputState
+{
+ private ArrayList thePlayers;
+ private ArrayList theEnemies;
+ GameStateContext gameStateContext;
+
+
+ @Override
+ public void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName()+"\n");
+
+ MainWindow.updateTextArea(" XP="+((GamePlayer) thePlayers.get(0)).getExperience()+" profileName="+((GamePlayer) thePlayers.get(0)).getProfileInfo()+"\n");
+
+ doCombat();
+ /*GameTextInputState newState = new StartMenu();
+ newState.setScanner(new Scanner(System.in));
+ newState.setPlayer((GamePlayer)getThePlayers().get(0));
+ gameStateContext.setState(newState);*/
+ gameStateContext.run();
+ }
+
+ public CombatShenanigans()
+ {
+ setThePlayers(new ArrayList<>());
+ setTheEnemies(new ArrayList<>());
+ }
+
+ public CombatShenanigans(ArrayList thePlayers, ArrayList enemies)
+ {
+ this.setThePlayers(thePlayers);
+ setTheEnemies(enemies);
+ }
+
+ public void printStatus()
+ {
+ MainWindow.updateTextArea("-------------------------------------------\n");
+ for(GameCharacter c : getThePlayers())
+ MainWindow.updateTextArea(c.getName() + " HP: " + c.getHealth() + "/" + c.getMaxHealth() + "\n");
+
+ MainWindow.updateTextArea("-------------------------------------------\n");
+
+ for(GameCharacter c : getTheEnemies())
+ MainWindow.updateTextArea(c.getName() + " HP:" + c.getHealth() + "/" + c.getMaxHealth()+ "\n");
+ MainWindow.updateTextArea("-------------------------------------------\n");
+
+ }
+
+ public void doCombat()
+ {
+ ArrayList everyone = new ArrayList<>();
+ GamePlayer thePlayer;
+ while(true)
+ {
+ if(checkDeath(getTheEnemies()) )
+ {
+ MainWindow.updateTextArea("Players are successful!\n");
+ for(GameCharacter character : getThePlayers())
+ {
+ thePlayer = (GamePlayer) character;
+ thePlayer.setExperience(thePlayer.getExperience() + getTheEnemies().size());
+ }
+ //String stateStr = GameStateContext.getState().getClass().getSimpleName();
+ GameState newState;
+ //MainWindow.updateTextArea("\"" + stateStr + "\"\n");
+
+ if(MapCanvas.mapState == MapCanvas.volcanoMap)
+ newState = new EndGame();
+ else
+ newState = new StartMenu();
+ //newState.setScanner(new Scanner(System.in));
+ newState.setPlayer((GamePlayer)getThePlayers().get(0));
+ GameStateContext.setState(newState);
+ break;
+ }
+
+ if( checkDeath(getThePlayers()))
+ {
+ MainWindow.updateTextArea("Players have fallen :-(\n");
+ GameStateContext.setState(new EndGame());
+ break;
+ }
+
+ printStatus();
+
+ for(GameCharacter c : getTheEnemies())
+ {
+ c.getCombatChoice();
+ c.chooseTarget(getTheEnemies(), getThePlayers());
+ }
+
+
+ for(GameCharacter c : getThePlayers())
+ {
+ c.getCombatChoice();
+ c.chooseTarget(getThePlayers(), getTheEnemies());
+ }
+
+
+ everyone.addAll(getThePlayers());
+ everyone.addAll(getTheEnemies());
+
+ Collections.sort(everyone);
+
+ for(GameCharacter c : everyone)
+ {
+ if(!c.isDead())
+ c.runState();
+ c.clearTargets();
+ }
+ }
+ GameStateContext.getState().setPlayer((GamePlayer) thePlayers.get(0));
+
+
+ }
+
+ public boolean checkDeath(ArrayList theCharacters)
+ {
+ int numCharacters = theCharacters.size();
+ int count = 0;
+ for(GameCharacter c : theCharacters)
+ if(c.isDead() )
+ count++;
+ return count >= numCharacters;
+ }
+
+ @Override
+ public void nextTurn() {
+
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+
+
+ }
+
+ @Override
+ public void prelude() {
+
+
+ }
+
+ @Override
+ public void interlude() {
+
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void openMenu() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void closeMenu() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setScanner(Scanner scanner) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setPlayer(GamePlayer player) {
+ this.getThePlayers().add(player);
+
+ }
+
+
+
+ public ArrayList getThePlayers() {
+ return thePlayers;
+ }
+
+ public void setThePlayers(ArrayList thePlayers) {
+ this.thePlayers = thePlayers;
+ }
+
+ public ArrayList getTheEnemies() {
+ return theEnemies;
+ }
+
+ public void setTheEnemies(ArrayList theEnemies) {
+ this.theEnemies = theEnemies;
+ }
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ this.getTheEnemies().add(enemy);
+
+ }
+
+ @Override
+ public GamePlayer getPlayer() {
+ // TODO Auto-generated method stub
+ return (GamePlayer) thePlayers.get(0);
+ }
+
+
+}
+
+
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/CombatState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/CombatState.java
new file mode 100644
index 0000000..4a4f4a4
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/CombatState.java
@@ -0,0 +1,13 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+
+public interface CombatState
+{
+ public void run(GameCharacter me);
+ public String getName();
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes);
+ public void setCombat(CombatShenanigans theCombat);
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/EndCombatState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/EndCombatState.java
new file mode 100644
index 0000000..faa519a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/EndCombatState.java
@@ -0,0 +1,44 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class EndCombatState implements CombatState
+{
+ private GameCharacter player;
+
+ public EndCombatState(GameCharacter actor)
+ {
+ this.player = actor;
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ player.restore();
+ MainWindow.updateTextArea("Battle has ended\n");
+
+ }
+
+ @Override
+ public String getName()
+ {
+ return "End combat state";
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/EnemyCombat.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/EnemyCombat.java
new file mode 100644
index 0000000..f80829b
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/EnemyCombat.java
@@ -0,0 +1,65 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+
+public class EnemyCombat implements CombatState
+{
+
+ private ConcreteCharacter thePlayer;
+ private ArrayList theEnemies;
+ private CombatShenanigans theCombat;
+
+ public EnemyCombat(){}
+
+ public EnemyCombat(ConcreteCharacter player, ArrayList enemies)
+ {
+ thePlayer = player;
+ theEnemies = enemies;
+ this.run();
+ }
+
+ //@Override
+ public void run()
+ {
+ for(ConcreteCharacter c : theEnemies)
+ c.attack(thePlayer);
+
+ //thePlayer.setState(new InitialCombatState(thePlayer, theEnemies) );
+ //thePlayer.runState();
+
+
+
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ this.theCombat = theCombat;
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/InitialCombatState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/InitialCombatState.java
new file mode 100644
index 0000000..9c56476
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/InitialCombatState.java
@@ -0,0 +1,72 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public class InitialCombatState implements CombatState
+{
+
+ private GameCharacter actor;
+ private ArrayList enemies;
+ private CombatShenanigans theCombat;
+
+ public InitialCombatState(){}
+
+ public InitialCombatState(GameCharacter thePlayer, ArrayList theEnemies)
+ {
+ this.actor = thePlayer;
+ this.enemies = theEnemies;
+ run(actor);
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+
+ int choice, i = 1;
+
+ for(CombatState combatState : actor.getCombatStates())
+ {
+ //behavior.initCombatState(this, enemies);
+ MainWindow.updateTextArea(i++ + ". " + combatState.getName() + "\n");
+ }
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = ConcreteCharacter.user.nextInt();
+ //MainWindow.updateTextArea("Chosen state is " + actor.getCombatStates().get(choice-1).getName());
+ actor.setState( actor.getCombatStates().get(choice - 1));
+ actor.runState();
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return "Beginning combat";
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ this.theCombat = theCombat;
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/SingleTargetCombat.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/SingleTargetCombat.java
new file mode 100644
index 0000000..bc7643e
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/SingleTargetCombat.java
@@ -0,0 +1,109 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public class SingleTargetCombat implements CombatState
+{
+ Scanner user;
+ private GameCharacter actor;
+ private ArrayList characters;
+ private CombatShenanigans theCombat;
+
+ /*
+ public SingleTargetCombat(GameCharacter actor, ArrayList enemies)
+ {
+ this.actor = actor;
+ this.characters = enemies;
+
+ }
+ */
+
+ private GameCharacter getChoice()
+ {
+ int i = 1;
+ int choice;
+
+ MainWindow.updateTextArea("Choose a target:\n");
+
+ for(GameCharacter c : this.characters)
+ {
+ MainWindow.updateTextArea(i++ + ". " + c.getName()+"\n");
+ if(c.isDead() == true)
+ MainWindow.updateTextArea(" (dead)\n");
+ MainWindow.updateTextArea("\n");
+
+ }
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = ConcreteCharacter.user.nextInt();
+
+ return characters.get(choice - 1);
+
+ }
+
+ public String getName()
+ {
+ return "Single target ";
+ }
+
+ @Override
+ public void run(GameCharacter me)
+ {
+ for(GameCharacter c : me.getTargets() )
+ me.attack(c);
+
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ this.theCombat = theCombat;
+
+ }
+
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+
+ int i = 1;
+ int choice;
+ ArrayList target = new ArrayList<>();
+
+ MainWindow.updateTextArea("Choose a target:\n");
+
+ for(GameCharacter c : foes)
+ {
+ MainWindow.updateTextArea(i++ + ". " + c.getName() + ": " + c.getHealth() + "/" + c.getMaxHealth() + "\n");
+ if(c.isDead() == true)
+ MainWindow.updateTextArea(" (dead)\n");
+ MainWindow.updateTextArea("\n");
+
+ }
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = ConcreteCharacter.user.nextInt();
+ target.add(foes.get(choice - 1) );
+
+ me.setTargets(target);
+
+
+ }
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/UseItemState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/UseItemState.java
new file mode 100644
index 0000000..19992f7
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameCombatState/UseItemState.java
@@ -0,0 +1,84 @@
+package gamePack.gameStatePack.gameCombatState;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.ConcreteCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+import gamePack.gameStatePack.gameTextStatePack.TextInputState;
+
+public class UseItemState implements CombatState
+{
+
+ private GameCharacter player;
+ private ArrayList enemies;
+
+ public UseItemState(){}
+
+ public UseItemState(GameCharacter player2, ArrayList enemies2)
+ {
+ this.player = player2;
+ this.enemies = enemies2;
+ }
+ @Override
+ public void run(GameCharacter me)
+ {
+
+ for(GameCharacter c : me.getTargets() )
+ {
+ MainWindow.updateTextArea("using item on " + c.getName() + "\n");
+ c.useItem(me.getCurrentItem());
+
+ }
+
+ }
+
+ @Override
+ public String getName()
+ {
+ // TODO Auto-generated method stub
+ return "Use item";
+ }
+
+ @Override
+ public void setCombat(CombatShenanigans theCombat)
+ {
+ // TODO Auto-generated method stub
+
+ }
+ @Override
+ public void setTargets(GameCharacter me, ArrayList friends, ArrayList foes)
+ {
+ int i = 1;
+ int choice;
+
+ me.setCurrentItem( me.chooseItem() );
+
+ MainWindow.updateTextArea("Item chosen was " + me.getCurrentItem() + "\n");
+ ArrayList everyone = new ArrayList<>();
+ ArrayList target = new ArrayList<>();
+
+ everyone.addAll(friends);
+ everyone.addAll(foes);
+
+ MainWindow.updateTextArea("Who are you using the item on?"+ "\n");
+
+ for(GameCharacter c : everyone)
+ {
+ MainWindow.updateTextArea(i++ + ". " + c.getName() + ": " + c.getHealth() + "/" + c.getMaxHealth() + "\n");
+ }
+
+ choice = TextInputState.readInt();
+
+ /*Scanner in = new Scanner(System.in);
+ choice = in.nextInt();
+ in.close();*/
+
+ //choice = ConcreteCharacter.user.nextInt();
+ target.add( everyone.get(choice - 1));
+
+ me.setTargets(target);
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/EntityCanvas.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/EntityCanvas.java
new file mode 100644
index 0000000..c94647e
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/EntityCanvas.java
@@ -0,0 +1,651 @@
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.awt.Canvas;
+import java.awt.Image;
+import java.awt.Toolkit;
+import java.awt.geom.AffineTransform;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack.Dragon;
+import gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack.Snake;
+import gamePack.gameEntityPack.gameCharacterPack.gameEnemyPack.TrollEnemy;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.KnightPlayer;
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameCombatState.CombatShenanigans;
+
+public class EntityCanvas {
+
+
+
+
+ int id;
+
+ Boolean isEntityMoving = false;
+ Integer EntityID = 0, entityInitX = 200, entityInitY = 600, entityCurX = entityInitX, entityCurY = entityInitY, entityMoveSleepMillis = 10, entityStepPixels = 2, entityVisibleRadius = 200, entityCollisionRadius = 20;
+ GameCharacter gameCharacter;
+
+
+ public EntityCanvas(int id) {
+ this.id = id;
+ }
+
+
+
+
+ //*********** BEGIN KNIGHT CODE ****************
+ final int knightStopped = 0, knightMoving = 1, knightAttacking = 2;
+ final String knightStoppedPathStr = "image/knightStopped.gif", knightAttackingPathStr = "image/knightAttacking.gif",
+ knightMovingPathStr = "image/knightMoving.gif";
+ synchronized void setKnightState(int s) {
+ while (entityFrozen || this.gameCharacter.isDead())
+ try {
+ entityState = knightStopped;
+ MainWindow.mapCanvas.repaint();
+ this.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ entityState = s;
+ //int tx0 = (int) getEntityAffine().getTranslateX(), ty0 = (int) getEntityAffine().getTranslateY();
+ AffineTransform newAffine = new AffineTransform();
+ int tx = this.getEntityCurX() - entityImgs[entityState].getWidth(null) / 2;
+ int ty = this.getEntityCurY() - entityImgs[entityState].getHeight(null) / 2;
+ newAffine.translate(tx, ty);
+// if((tx-tx0)>0)
+// newAffine.scale(1, -1);
+// else
+// newAffine.scale(-1, -1);
+ double radians = 2.0 * Math.PI * (1.0 - (double) entityAngle / 360);
+ newAffine.rotate(radians);
+ setEntityAffine(newAffine);
+ notifyAll();
+ }
+ static Thread makeKnight(EntityCanvas entity) {
+ entity.gameCharacter = new KnightPlayer();
+ entity.setIsEntityMoving(false);
+ entity.entityInitX = 200;
+ entity.entityInitY = 600;
+ entity.setEntityCurX(entity.entityInitX);
+ entity.setEntityCurY(entity.entityInitY);
+ entity.entityMoveSleepMillis = 10;
+ entity.entityStepPixels = 2;
+ entity.entityVisibleRadius = 200;
+ entity.entityCollisionRadius = 20;
+ return new Thread(new Runnable() {
+ public synchronized void run() {
+ if(entity!=null)
+ while (true) {
+ try {
+ // mapCanvas.entities.get(id).setKnightState(0);
+ // mapCanvas.repaint();
+ // Thread.sleep(100);
+
+ entity.setKnightState(1);
+ MainWindow.mapCanvas.repaint();
+ wait(100);
+
+ entity.setKnightState(2);
+ MainWindow.mapCanvas.repaint();
+ wait(100);
+ } catch (java.lang.InterruptedException e) {
+ }
+ }
+ }
+ });
+ }
+ //*********** END KNIGHT CODE ****************
+
+ //*********** BEGIN SNAKE CODE ****************
+ final int snakeStopped = 3, snakeMoving = 4, snakeAttacking = 5;
+ final String snakeStoppedPathStr = "image/snake0.png", snakeAttackingPathStr = "image/snake1.png",
+ snakeMovingPathStr = "image/snake2.png";
+ synchronized void setSnakeState(int s) {
+ while (entityFrozen || this.gameCharacter.isDead())
+ try {
+ entityState = snakeStopped;
+ MainWindow.mapCanvas.repaint();
+ this.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ entityState = s;
+ AffineTransform newAffine = new AffineTransform();
+ int tx = this.getEntityCurX() - entityImgs[entityState].getWidth(null) / 2;
+ int ty = this.getEntityCurY() - entityImgs[entityState].getHeight(null) / 2;
+ newAffine.translate(tx, ty);
+ double radians = 2.0 * Math.PI * (1.0 - (double) entityAngle / 360);
+ newAffine.rotate(radians);
+ setEntityAffine(newAffine);
+ notifyAll();
+ }
+ static Thread makeSnake(EntityCanvas entity) {
+ entity.gameCharacter = new Snake();
+ entity.setIsEntityMoving(false);
+ entity.entityInitX = 200;
+ entity.entityInitY = 200;
+ entity.setEntityCurX(entity.entityInitX);
+ entity.setEntityCurY(entity.entityInitY);
+ entity.entityMoveSleepMillis = 30;
+ entity.entityStepPixels = 2;
+ entity.entityVisibleRadius = 200;
+ entity.entityCollisionRadius = 10;
+ return new Thread(new Runnable() {
+ public synchronized void run() {
+ if(entity!=null)
+ while (!entity.gameCharacter.isDead()) {
+ try {
+ // mapCanvas.entities.get(id).setSnakeState(3);
+ // mapCanvas.repaint();
+ // Thread.sleep(100);
+
+ entity.setSnakeState(4);
+ MainWindow.mapCanvas.repaint();
+ wait(100);
+
+ entity.setSnakeState(5);
+ MainWindow.mapCanvas.repaint();
+ wait(100);
+ } catch (java.lang.InterruptedException e) {
+ }
+ }
+ }
+ });
+ }
+ static void makeSnakes(ArrayList entityCanvases, ArrayList entityThreads) {
+ for(int i=0; i entityCanvases, ArrayList entityThreads) {
+ for(int i=0; i entityCanvases, ArrayList entityThreads) {
+ for(int i=0; i entityStates = new ArrayList<>(Arrays.asList(knightStopped, knightMoving, knightAttacking,
+ // snakeStopped, snakeMoving, snakeAttacking, dragonStopped, dragonMoving0, dragonMoving1, dragonAttacking,
+ // trollStopped, trollMoving, trollAttacking));
+
+ final ArrayList entityImgPaths = new ArrayList<>(Arrays.asList(knightStoppedPathStr, knightMovingPathStr,
+ knightAttackingPathStr, snakeStoppedPathStr, snakeAttackingPathStr, snakeMovingPathStr,
+ dragonStoppedPathStr, dragonAttackingPathStr, dragonMovingUpFlapPathStr, dragonMovingDownFlapPathStr,
+ trollStoppedPathStr, trollAttackingPathStr, trollMovingPathStr));
+
+ int entityAngle = 0;
+ Image[] entityImgs = new Image[entityImgPaths.size()];
+ AffineTransform entityAffine;
+
+ int entityState;
+ boolean entityFrozen = true;
+
+ void initEntity() {
+
+ int i = 0;
+ for (String path : entityImgPaths) {
+ if (Files.exists(Paths.get(path), LinkOption.NOFOLLOW_LINKS)) {
+ entityImgs[i] = Toolkit.getDefaultToolkit().createImage(path);
+ } else {
+ MainWindow.updateTextArea(path + " was not found\n");
+ System.exit(-1);
+ }
+ i++;
+ }
+
+ AffineTransform newAffine = new AffineTransform();
+ int tx = this.getEntityCurX() - entityImgs[entityState].getWidth(null) / 2;
+ int ty = this.getEntityCurY() - entityImgs[entityState].getHeight(null) / 2;
+ newAffine.translate(tx, ty);
+ double radians = 2.0 * Math.PI * (1.0 - (double) entityAngle / 360);
+ newAffine.rotate(radians);
+ setEntityAffine(newAffine);
+ }
+
+ void entityPaint() {
+ /*String state = GameStateContext.getState().getClass().getSimpleName();
+ if(!this.gameCharacter.isDead() && state.contains("MapState"))*/
+ MapCanvas.offGraphics.drawImage(entityImgs[entityState], getEntityAffine(), null);
+ }
+
+ public synchronized void freezeEntity() {
+ this.entityFrozen = true;
+ }
+
+ public synchronized void thawEntity() {
+ entityFrozen = false;
+ notifyAll();
+ }
+
+ synchronized AffineTransform getEntityAffine() {
+ return this.entityAffine;
+ }
+
+ synchronized void setEntityAffine(AffineTransform entityAffine) {
+ this.entityAffine = entityAffine;
+ }
+
+
+
+
+ void moveEntity(int x, int y) {
+ EntityCanvas entity = this;
+ final Thread mover = new Thread(new Runnable() {
+ public void run() {
+ setIsEntityMoving(true);
+ int x0 = getEntityCurX();
+ int y0 = entity.getEntityCurY();
+
+ double dx = MainWindow.getXClicked() - x0;
+ double dy = MainWindow.getYClicked() - y0;
+ double ds = Math.sqrt(dx * dx + dy * dy);
+ double m = dy / dx;
+ double b = MainWindow.getYClicked() - m * MainWindow.getXClicked();
+ int xr = (int) Math.round(x0 + entity.entityStepPixels * (dx / ds)),
+ yr = (int) Math.round(y0 + entity.entityStepPixels * (dy / ds));
+ while (ds > entity.entityStepPixels && !MainWindow.isGamePaused()) {
+ entity.thawEntity();
+ setEntityCurX(xr);
+ setEntityCurY(yr);
+ x0 = entity.getEntityCurX();
+ y0 = entity.getEntityCurY();
+ dx = MainWindow.getXClicked() - x0;
+ dy = MainWindow.getYClicked() - y0;
+ ds = Math.sqrt(dx * dx + dy * dy);
+ m = dy / dx;
+ b = MainWindow.getYClicked() - m * MainWindow.getXClicked();
+ xr = (int) Math.round((x0 + entity.entityStepPixels * (dx / ds)));
+ yr = (int) Math.round((y0 + entity.entityStepPixels * (dy / ds)));
+ try {
+ Thread.sleep(entity.entityMoveSleepMillis);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ entity.setIsEntityMoving(false);
+ entity.freezeEntity();
+ }
+ });
+ if (!entity.getIsEntityMoving() && !MainWindow.isGamePaused())
+ mover.start();
+ }
+
+
+
+ void pursueEntity(EntityCanvas srcEntity, EntityCanvas dstEntity) {
+ Thread pursuer = new Thread(new Runnable() {
+ public void run() {
+ while (!MainWindow.isGamePaused() && !srcEntity.gameCharacter.isDead()) {
+ if (distance(srcEntity.getEntityCurX(), srcEntity.getEntityCurY(), dstEntity.getEntityCurX(),
+ dstEntity.getEntityCurY()) < srcEntity.entityVisibleRadius) {
+ setIsEntityMoving(true);
+ double ds;
+ int x0 = srcEntity.getEntityCurX();
+ int y0 = srcEntity.getEntityCurY();
+ double dx = dstEntity.getEntityCurX() - x0;
+ double dy = dstEntity.getEntityCurY() - y0;
+ ds = Math.sqrt(dx * dx + dy * dy);
+ double m = dy / dx;
+ double b = dstEntity.getEntityCurY() - m * dstEntity.getEntityCurX();
+ int xr = (int) Math.round(x0 + srcEntity.entityStepPixels * (dx / ds)),
+ yr = (int) Math.round(y0 + srcEntity.entityStepPixels * (dy / ds));
+ while (ds < srcEntity.entityVisibleRadius
+ && ds > (srcEntity.entityCollisionRadius + dstEntity.entityCollisionRadius)
+ && srcEntity.getIsEntityMoving() && !MainWindow.isGamePaused()) {
+ srcEntity.thawEntity();
+ setEntityCurX(xr);
+ setEntityCurY(yr);
+ x0 = srcEntity.getEntityCurX();
+ y0 = srcEntity.getEntityCurY();
+ dx = dstEntity.getEntityCurX() - x0;
+ dy = dstEntity.getEntityCurY() - y0;
+ ds = Math.sqrt(dx * dx + dy * dy);
+ m = dy / dx;
+ b = dstEntity.getEntityCurY() - m * dstEntity.getEntityCurX();
+ xr = (int) Math.round((x0 + srcEntity.entityStepPixels * (dx / ds)));
+ yr = (int) Math.round((y0 + srcEntity.entityStepPixels * (dy / ds)));
+ try {
+ Thread.sleep(srcEntity.entityMoveSleepMillis);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (ds <= (srcEntity.entityCollisionRadius + dstEntity.entityCollisionRadius)) {
+ synchronized (srcEntity.isEntityMoving) {
+ if (srcEntity.isEntityMoving == true)
+ MainWindow.txtrTextarea_1.append("entity" + srcEntity.id +", "+srcEntity.gameCharacter.getName()+" engaged you.\n");
+ srcEntity.setIsEntityMoving(false);
+ srcEntity.freezeEntity();
+ }
+ setEntityCurX(dstEntity.entityInitX);
+ setEntityCurY(dstEntity.entityInitY);
+ MainWindow.setGamePaused(true);
+
+
+
+
+ MainWindow.btnPause.getAction().putValue("NAME", "PLAY");
+ MainWindow.btnPause.getAction().putValue("SHORT_DESCRIPTION", "PLAY GAME");
+ MainWindow.btnPause.setText("PLAY");
+
+ MainWindow.updateTextArea(" XP="+((GamePlayer) dstEntity.gameCharacter).getExperience()+" profileName="+((GamePlayer) dstEntity.gameCharacter).getProfileInfo()+"\n");
+ ArrayList players= new ArrayList<>(Arrays.asList(dstEntity.gameCharacter)),
+ enemies= new ArrayList<>(Arrays.asList(srcEntity.gameCharacter));
+ CombatShenanigans combatShenanigans = new CombatShenanigans(players, enemies);
+ /*combatShenanigans.addPlayer((GamePlayer) (dstEntity.gameCharacter));
+ combatShenanigans.addEnemy(srcEntity.gameCharacter);*/
+ GameStateContext.setState(combatShenanigans);
+ GameStateContext.getGameStateContext().run();
+
+
+
+
+ MainWindow.setMapIsVisible(false);
+ }
+
+ dstEntity.setIsEntityMoving(false);
+ dstEntity.freezeEntity();
+ }
+ }
+ }
+ });
+ if (!getIsEntityMoving() && !MainWindow.isGamePaused() && !srcEntity.gameCharacter.isDead())
+ pursuer.start();
+ }
+
+ private Boolean getIsEntityMoving() {
+ synchronized (isEntityMoving) {
+ return isEntityMoving;
+ }
+ }
+
+ private void setIsEntityMoving(Boolean isEntityMoving) {
+ synchronized (this.isEntityMoving) {
+ this.isEntityMoving =isEntityMoving;
+ }
+ }
+
+ Integer getEntityCurX() {
+ synchronized (entityCurX) {
+ return entityCurX;
+ }
+ }
+
+ void setEntityCurX(int curX) {
+ synchronized (entityCurX) {
+ entityCurX = curX;
+ }
+ }
+
+ Integer getEntityCurY() {
+ synchronized (entityCurY) {
+ return entityCurY;
+ }
+ }
+
+ void setEntityCurY(int curY) {
+ synchronized (entityCurY) {
+ entityCurY = curY;
+ }
+ }
+
+ protected int distance(int enemyCurX, int enemyCurY, int playerCurX, int playerCurY) {
+ return (int) Math.sqrt(Math.pow(playerCurX - enemyCurX, 2) + Math.pow(playerCurY - enemyCurY, 2));
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+ //************************
+
+
+
+
+
+
+ // static Boolean isPlayer0_Moving = false;
+ // static Integer player0_ID = 0,
+ // player0_InitX = 200, player0_InitY = 600,
+ // player0_CurX = player0_InitX, player0_CurY = player0_InitY,
+ // player0_MoveSleepMillis = 10, player0_StepPixels = 2,
+ // player0_VisibleRadius = 200, player0_CollisionRadius = 20;
+ //
+ //
+ //
+ //
+ // static Boolean isSnake0_Moving = false;
+ // static Integer snake0_ID = 1,
+ // snake0_InitX = 200, snake0_InitY = 200,
+ // snake0_CurX = snake0_InitX, snake0_CurY = snake0_InitY,
+ // snake0_MoveSleepMillis = 30, snake0_StepPixels = 2,
+ // snake0_VisibleRadius = 200, snake0_CollisionRadius = 10;
+ //
+ //
+ //
+ //
+ // static Boolean isDragon0_Moving = false;
+ // static Integer dragon0_ID = 2,
+ // dragon0_InitX = 500, dragon0_InitY = 500,
+ // dragon0_CurX = dragon0_InitX, dragon0_CurY = dragon0_InitY,
+ // dragon0_MoveSleepMillis = 30,dragon0_StepPixels = 2,
+ // dragon0_VisibleRadius = 400, dragon0_CollisionRadius = 30;
+ //
+ //
+ // static Boolean istroll0_Moving = false;
+ // static Integer troll0_ID = 3, troll0_InitX = 100, troll0_InitY = 100,
+ // troll0_CurX = troll0_InitX, troll0_CurY = troll0_InitY,
+ // troll0_MoveSleepMillis = 30, troll0_StepPixels = 2,
+ // troll0_VisibleRadius = 200, troll0_CollisionRadius = 20;
+
+
+
+
+
+ /* private static ArrayList entityID = new ArrayList<>(
+ Arrays.asList(player0_ID, snake0_ID, dragon0_ID, troll0_ID));
+ private static ArrayList entityCurX = new ArrayList<>(
+ Arrays.asList(player0_CurX, snake0_CurX, dragon0_CurX, troll0_CurX));
+ private static ArrayList entityCurY = new ArrayList<>(
+ Arrays.asList(player0_CurY, snake0_CurY, dragon0_CurY, troll0_CurY));
+ private static ArrayList entityMoving = new ArrayList<>(
+ Arrays.asList(isPlayer0_Moving, isSnake0_Moving, isDragon0_Moving, istroll0_Moving));
+ private static ArrayList entityStepPixels = new ArrayList<>(
+ Arrays.asList(player0_StepPixels, snake0_StepPixels, dragon0_StepPixels, troll0_StepPixels));
+ private static ArrayList entityMoveSleepMillis = new ArrayList<>(Arrays.asList(player0_MoveSleepMillis,
+ snake0_MoveSleepMillis, dragon0_MoveSleepMillis, troll0_MoveSleepMillis));
+ private static ArrayList entityVisibleRadius = new ArrayList<>(
+ Arrays.asList(player0_VisibleRadius, snake0_VisibleRadius, dragon0_VisibleRadius, troll0_VisibleRadius));
+ private static ArrayList entityCollisionRadius = new ArrayList<>(Arrays.asList(player0_CollisionRadius,
+ snake0_CollisionRadius, dragon0_CollisionRadius, troll0_CollisionRadius));*/
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/GameMapState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/GameMapState.java
new file mode 100644
index 0000000..650fc84
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/GameMapState.java
@@ -0,0 +1,153 @@
+
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.io.IOException;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+
+public class GameMapState implements GameMapStateInterface {
+ GameStateContext gameStateContext;
+
+
+ private GamePlayer player;
+ @Override
+ public synchronized void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName()+"\n");
+ MainWindow.updateTextArea(" XP="+player.getExperience()+" profileName="+player.getProfileInfo()+"\n");
+ MainWindow.knight0_Canvas.gameCharacter = player;
+
+ MapCanvas.mapState = MapCanvas.gameMap;
+ MainWindow.setMapIsVisible(true);
+
+
+
+ while(MainWindow.mapIsVisible())
+ try {
+ wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ System.in.close();//if text was entered during map state this will clear the input stream
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ /*
+ Scanner sc = new Scanner(System.in);
+ if(sc.hasNextLine())
+ sc.nextLine();
+ sc.close();
+ */
+ /* GameTextInputState newState = new StartMenu();
+ newState.setScanner(new Scanner(System.in));
+ newState.setPlayer(player);
+ gameStateContext.setState(newState);*/
+
+ GameStateContext.getState().setPlayer(player);
+ gameStateContext.run();
+ }
+
+
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void display() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDisplay() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setPlayer(GamePlayer player) {
+ this.player = player;
+ }
+
+
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public GamePlayer getPlayer() {
+ // TODO Auto-generated method stub
+ return this.player;
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/GameMapStateInterface.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/GameMapStateInterface.java
new file mode 100644
index 0000000..4dbfe93
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/GameMapStateInterface.java
@@ -0,0 +1,12 @@
+package gamePack.gameStatePack.gameMapStatePack;
+
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+
+public interface GameMapStateInterface extends GameState {
+ public void display();
+ void updateDisplay();
+ void enterMap();
+ void exitMap();
+ public void setPlayer(GamePlayer player);
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/MainWindow.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/MainWindow.java
new file mode 100644
index 0000000..1f9abba
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/MainWindow.java
@@ -0,0 +1,518 @@
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.applet.Applet;
+import java.awt.BorderLayout;
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.EventQueue;
+import java.awt.Image;
+import java.awt.MediaTracker;
+import java.awt.Toolkit;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.image.ImageProducer;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.swing.JFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.text.DefaultCaret;
+
+import gamePack.gameEntityPack.GameEntity;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+import sun.awt.image.ToolkitImage;
+import javax.swing.JButton;
+import javax.swing.AbstractAction;
+import java.awt.event.ActionEvent;
+import javax.swing.Action;
+
+public class MainWindow {
+ public static MainWindow window;
+
+ private static JFrame frame;
+ private static JTextField txtTextfield;
+ private static TextFieldStreamer textFieldStreamer;
+ private static JTextArea txtrTextarea;
+ static JTextArea txtrTextarea_1;
+ private static JScrollPane scrollPane;
+ private static JScrollPane scrollPane_1;
+ private static JLayeredPane layeredPane;
+ static Thread
+ knight0_Thread, knight1_Thread, knight2_Thread,
+ snake0_Thread, snake1_Thread, snake2_Thread,
+ troll0_Thread, troll1_Thread, troll2_Thread,
+ dragon0_Thread, dragon1_Thread, dragon2_Thread,
+ portal0_Thread, portal1_Thread, portal2_Thread;
+ static ArrayList entityThreads = new ArrayList();
+
+
+ static EntityCanvas knight0_Canvas, knight1_Canvas, knight2_Canvas;
+ static EntityCanvas snake0_Canvas, snake1_Canvas, snake2_Canvas;
+ static EntityCanvas dragon0_Canvas, dragon1_Canvas, dragon2_Canvas; // 3 dragons for crazy mode
+ static EntityCanvas troll0_Canvas, troll1_Canvas, troll2_Canvas;
+
+
+ static ArrayList entityCanvasList = new ArrayList<>(
+ Arrays.asList(knight0_Canvas, snake0_Canvas));
+
+ static MapCanvas mapCanvas;
+
+
+ private static Integer xClicked = 0;
+ private static Integer yClicked = 0;
+
+ private static Boolean isGamePaused = true;
+ static JButton btnPause;
+ Action pauseAction = new PauseButtonSwingAction();
+
+ public static Boolean mapIsVisible = new Boolean(false);
+
+ private static Integer entityIDCount = 0;
+
+ private static Boolean mapIsNew = true;
+
+ //static GameStateContext gameStateContext;
+
+
+
+
+ public MainWindow() {
+
+
+
+
+
+
+
+
+ //knight0_Canvas = new EntityCanvas(MainWindow.getNewEntityID());
+
+
+
+ // snake0_Canvas = new EntityCanvas(snake0_ID);
+ // dragon0_Canvas = new EntityCanvas(dragon0_ID);
+ // troll0_Canvas = new EntityCanvas(goblin0_ID);
+
+ mapCanvas = new MapCanvas(/*knight0_Canvas, snake0_Canvas, dragon0_Canvas, troll0_Canvas*/);
+
+ // for(int id: entityID) {
+ // entityThreads.add(makeKnight(id));
+ // entityThreads.get(id).start();
+ // }
+
+// entityThreads.add(knight0_Thread = EntityCanvas.makeKnight(knight0_Canvas));
+// knight0_Thread.start();
+
+
+
+ if (knight0_Canvas == null) {
+ knight0_Canvas = new EntityCanvas(getNewEntityID());
+ mapCanvas.entities.add(knight0_Canvas);
+ knight0_Canvas.initEntity();
+ for (Image entityImage : knight0_Canvas.entityImgs)
+ mapCanvas.mt.addImage(entityImage, mapCanvas.mtCount++);
+ knight0_Thread = EntityCanvas.makeKnight(knight0_Canvas);
+ entityThreads.add(knight0_Thread);
+ knight0_Thread.start();
+ }
+ knight0_Canvas.setEntityCurX(knight0_Canvas.entityInitX);
+ knight0_Canvas.setEntityCurY(knight0_Canvas.entityInitY);
+
+ entityThreads.add(portal0_Thread = this.makeGameMap2TownMapPortal(knight0_Canvas, 200, 200, MapCanvas.townMap));
+ portal0_Thread.start();
+
+ entityThreads.add(portal1_Thread = this.makeGameMap2SnowMapPortal(knight0_Canvas, 800, 200, MapCanvas.snowMap));
+ portal1_Thread.start();
+
+ entityThreads.add(portal2_Thread = this.makeGameMap2VolcanoMapPortal(knight0_Canvas, 800, 700, MapCanvas.volcanoMap));
+ portal2_Thread.start();
+
+
+ initialize();
+
+ frame.setVisible(true);
+
+
+
+
+ }
+
+ private void initialize() {
+ frame = new JFrame();
+ frame.getContentPane().setForeground(Color.GRAY);
+ frame.setBounds(0, 0, 1000, 1000);
+ frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ txtrTextarea = new JTextArea();
+ txtrTextarea.setEditable(false);
+ txtrTextarea.setText("textArea_0 ");
+ frame.getContentPane().add(txtrTextarea, BorderLayout.NORTH);
+ txtrTextarea.setColumns(10);
+ txtrTextarea.setRows(1);
+
+ txtTextfield = new JTextField();
+
+ textFieldStreamer = new TextFieldStreamer(txtTextfield);
+
+ txtTextfield.addActionListener(textFieldStreamer);
+ DefaultCaret caret1 = (DefaultCaret) txtTextfield.getCaret();
+ caret1.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+ System.setIn(textFieldStreamer);
+
+ txtTextfield.setText("textField_0");
+ frame.getContentPane().add(txtTextfield, BorderLayout.SOUTH);
+ txtTextfield.setColumns(10);
+
+ scrollPane = new JScrollPane();
+ frame.getContentPane().add(scrollPane, BorderLayout.EAST);
+
+ txtrTextarea_1 = new JTextArea();
+ scrollPane.setViewportView(txtrTextarea_1);
+ txtrTextarea_1.setEditable(false);
+ txtrTextarea_1.setText("textArea_1\n");
+ txtrTextarea_1.setRows(3);
+ txtrTextarea_1.setColumns(20);
+
+ btnPause = new JButton("Pause");
+ btnPause.setAction(pauseAction);
+ scrollPane.setColumnHeaderView(btnPause);
+
+ scrollPane_1 = new JScrollPane();
+ frame.getContentPane().add(scrollPane_1, BorderLayout.CENTER);
+
+ layeredPane = new JLayeredPane();
+ scrollPane_1.setViewportView(layeredPane);
+ layeredPane.setLayout(null);
+
+
+
+
+ layeredPane.setLayer(mapCanvas, 0);
+ mapCanvas.setBounds(0, 0, 1115, 715);
+
+
+ // mapCanvas.setBounds(0, 0,
+ // MapCanvas.mapImgs[mapCanvas.mapState].getWidth(null),
+ // MapCanvas.mapImgs[mapCanvas.mapState].getHeight(null));
+ layeredPane.add(mapCanvas);
+
+ mapCanvas.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (!isGamePaused()) {
+ int x = e.getX(), y = e.getY();
+ MainWindow.setXClicked(x);
+ MainWindow.setYClicked(y);
+ txtrTextarea.setText("textArea_0 " + x + ", " + y);
+ txtrTextarea_1.append(x + ", " + y + '\n');
+ knight0_Canvas.moveEntity(x, y);
+ // pursueEntity(1, player0_ID);
+ }
+ }
+ });
+
+ txtTextfield.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN
+ || e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT) {
+ txtrTextarea_1.append(KeyEvent.getKeyText(e.getExtendedKeyCode()) + "\n");
+ txtTextfield.setText("");
+ Integer keyedStepScale = 20;
+ int curX, curY, stepPixels = keyedStepScale * knight0_Canvas.entityStepPixels;
+
+ curX = knight0_Canvas.entityCurX;
+ curY = knight0_Canvas.entityCurY;
+ if (!isGamePaused && curY >= 0 && curY < mapCanvas.getHeight() && curX >= 0
+ && curX < mapCanvas.getWidth()) {
+ switch (e.getKeyCode()) {
+ case KeyEvent.VK_UP:
+ if (curY - stepPixels > 0)
+ curY -= stepPixels;
+ break;
+ case KeyEvent.VK_DOWN:
+ if (curY + stepPixels < mapCanvas.getHeight())
+ curY += stepPixels;
+ break;
+ case KeyEvent.VK_LEFT:
+ if (curX - stepPixels > 0)
+ curX -= stepPixels;
+ break;
+ case KeyEvent.VK_RIGHT:
+ if (curX + stepPixels < mapCanvas.getWidth())
+ curX += stepPixels;
+ break;
+ default:
+ txtrTextarea_1.append(KeyEvent.getKeyText(e.getExtendedKeyCode()) + "\n");
+ }
+ }
+ knight0_Canvas.setEntityCurX(curX);
+ knight0_Canvas.setEntityCurY(curY);
+ knight0_Canvas.thawEntity();
+ mapCanvas.update(mapCanvas.getGraphics());
+ knight0_Canvas.freezeEntity();
+ txtrTextarea.setText(" (" + curX + ", " + curY + ")");
+ }
+ }
+ });
+ }
+
+
+
+ Thread makeGameMap2TownMapPortal(EntityCanvas actorEntity, int x, int y, int newMapState/*, EntityCanvas[] newEntities*/) {
+ return new Thread(new Runnable() {
+ public synchronized void run() {
+ while (true) {
+ try {
+ if (Math.abs(actorEntity.entityCurX - x) < 2*actorEntity.entityCollisionRadius
+ && Math.abs(actorEntity.entityCurY - y) < 2*actorEntity.entityCollisionRadius
+ && MapCanvas.mapState == MapCanvas.gameMap) {
+ GameState newState = new TownMapState();
+ //GameStateContext.getGameStateContext();
+ GameStateContext.setState(newState);
+ GameStateContext.getGameStateContext().run();
+ break;
+ }
+ mapCanvas.repaint();
+ wait(100);
+ } catch (java.lang.InterruptedException e) {
+ }
+ }
+
+ }
+ });
+ }
+
+
+ Thread makeGameMap2SnowMapPortal(EntityCanvas actorEntity, int x, int y, int newMapState) {
+ return new Thread(new Runnable() {
+ public void run() {
+ while (true) {
+ try {
+ if (Math.abs(actorEntity.entityCurX - x) < 2*actorEntity.entityCollisionRadius
+ && Math.abs(actorEntity.entityCurY - y) < 2*actorEntity.entityCollisionRadius
+ && MapCanvas.mapState == MapCanvas.gameMap) {
+ MapCanvas.mapState = newMapState;
+
+ GameState newState = new SnowMapState();
+ GameStateContext.setState(newState);
+ GameStateContext.getGameStateContext().run();
+ break;
+ }
+ mapCanvas.repaint();
+ Thread.sleep(100);
+ } catch (java.lang.InterruptedException e) {
+ }
+ }
+
+ }
+ });
+ }
+
+ Thread makeGameMap2VolcanoMapPortal(EntityCanvas actorEntity, int x, int y, int newMapState) {
+ return new Thread(new Runnable() {
+ public void run() {
+ while (true) {
+ try {
+ if (Math.abs(actorEntity.entityCurX - x) < 2*actorEntity.entityCollisionRadius
+ && Math.abs(actorEntity.entityCurY - y) < 2*actorEntity.entityCollisionRadius
+ && MapCanvas.mapState == MapCanvas.gameMap) {
+ MapCanvas.mapState = newMapState;
+
+ GameState newState = new VolcanoMapState();
+ GameStateContext.setState(newState);
+ GameStateContext.getGameStateContext().run();
+ break;
+ }
+ mapCanvas.repaint();
+ Thread.sleep(100);
+ } catch (java.lang.InterruptedException e) {
+ }
+ }
+
+ }
+ });
+ }
+
+
+
+ public static void updateTextArea(final String text) {
+ if (window == null)
+ window = new MainWindow();
+ synchronized (txtrTextarea_1) {
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ // txtrTextarea_1.setText(text);
+ txtrTextarea_1.append(text);
+ txtTextfield.requestFocus();
+ txtrTextarea_1.setCaretPosition(txtrTextarea_1.getDocument().getLength());
+
+ }
+ });
+ }
+ }
+
+ static int getXClicked() {
+ synchronized (xClicked) {
+ return xClicked;
+ }
+ }
+
+ static void setXClicked(int xClicked) {
+ synchronized (MainWindow.xClicked) {
+ MainWindow.xClicked = xClicked;
+ }
+ }
+
+ static int getYClicked() {
+ synchronized (yClicked) {
+ return yClicked;
+ }
+ }
+
+ static void setYClicked(int yClicked) {
+ synchronized (MainWindow.yClicked) {
+ MainWindow.yClicked = yClicked;
+ }
+ }
+
+ static boolean isGamePaused() {
+ synchronized (isGamePaused) {
+ return isGamePaused;
+ }
+ }
+
+ static void setGamePaused(boolean isGamePaused) {
+ synchronized (MainWindow.isGamePaused) {
+ MainWindow.isGamePaused = isGamePaused;
+ }
+ }
+
+ private class PauseButtonSwingAction extends AbstractAction {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6138967167992441528L;
+
+ public PauseButtonSwingAction() {
+ putValue(NAME, "PLAY");
+ putValue(SHORT_DESCRIPTION, "PLAY GAME?");
+ }
+
+ public synchronized void actionPerformed(ActionEvent e) {
+ txtTextfield.requestFocus();
+ txtrTextarea_1.setCaretPosition(txtrTextarea_1.getDocument().getLength());
+ if (!MainWindow.mapIsVisible())
+ return;
+ if (getMapIsNew()) {
+ setMapIsNew(false);
+ /*
+ * player0_InitX =
+ * (int)(Math.random()*(double)canvas.getWidth()); player0_InitY
+ * = (int)(Math.random()*(double)canvas.getHeight());
+ */
+ // player0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getWidth());
+ // player0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getHeight());
+ //
+ // snake0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getWidth());
+ // snake0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getHeight());
+ //
+ // dragon0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getWidth());
+ // dragon0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getHeight());
+ //
+ // goblin0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getWidth());
+ // goblin0_CurX = (int) (Math.random() * (double)
+ // mapCanvas.getHeight());
+
+ /*
+ * setEntityCurX(srcId, snake0_InitX);
+ * setEntityCurY(srcId, snake0_InitY);
+ */
+
+ knight0_Canvas.setEntityCurX(knight0_Canvas.entityInitX);
+ knight0_Canvas.setEntityCurY(knight0_Canvas.entityInitY);
+ }
+ if (isGamePaused()) {
+ setGamePaused(false);
+ btnPause.setText("PAUSE");
+ for (EntityCanvas c : mapCanvas.entities) {
+ if (c.id != knight0_Canvas.id)
+ c.pursueEntity(c, knight0_Canvas);
+ c.thawEntity();
+ }
+ // mapCanvas.entities.get(player0_ID).thawEntity();
+ // mapCanvas.entities.get(snake0_ID).thawEntity();
+ mapCanvas.update(mapCanvas.getGraphics());
+
+ for (EntityCanvas c : mapCanvas.entities) {
+ c.freezeEntity();
+ }
+ // mapCanvas.entities.get(player0_ID).freezeEntity();
+ // mapCanvas.entities.get(snake0_ID).freezeEntity();
+ putValue(NAME, "PAUSE");
+ putValue(SHORT_DESCRIPTION, "PAUSE GAME?");
+ this.notifyAll();
+ } else {
+ setGamePaused(true);
+ btnPause.setText("PLAY");
+ putValue(NAME, "PLAY");
+ putValue(SHORT_DESCRIPTION, "PLAY GAME");
+ this.notifyAll();
+ }
+ }
+ }
+
+
+
+ public static boolean getMapIsNew() {
+ synchronized (MainWindow.mapIsNew) {
+ return mapIsNew;
+ }
+ }
+
+ public static void setMapIsNew(boolean mapIsNew) {
+ synchronized (MainWindow.mapIsNew) {
+ MainWindow.mapIsNew = mapIsNew;
+ }
+ }
+
+ static Integer getNewEntityID() {
+ synchronized (MainWindow.entityIDCount) {
+ return ++entityIDCount;
+ }
+ }
+
+
+ public static boolean mapIsVisible() {
+ synchronized(MainWindow.mapIsVisible) {
+ return MainWindow.mapIsVisible;
+ }
+ }
+
+ public static void setMapIsVisible(boolean mapIsVisible) {
+ synchronized(MainWindow.mapIsVisible) {
+ MainWindow.mapIsVisible = mapIsVisible;
+ }
+
+ }
+}
+
+
+
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/MapCanvas.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/MapCanvas.java
new file mode 100644
index 0000000..2559b1d
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/MapCanvas.java
@@ -0,0 +1,398 @@
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.awt.AlphaComposite;
+import java.awt.Canvas;
+import java.awt.Color;
+
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.MediaTracker;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.swing.JFrame;
+
+
+public class MapCanvas extends Canvas {
+
+ private static final long serialVersionUID = 4487681749374778705L;
+
+ MediaTracker mt = new MediaTracker(this);
+
+ Image offscreen;
+ Dimension offscreenSize;
+
+ static Graphics2D offGraphics;
+
+ ArrayList entities;
+ int mtCount = 0;
+ MapCanvas(EntityCanvas ... entities) {
+
+ super();
+
+ this.entities = new ArrayList<>();
+
+ for(EntityCanvas entity: entities) {
+ this.entities.add(entity);
+ entity.initEntity();
+ for(Image entityImage: entity.entityImgs)
+ mt.addImage(entityImage, mtCount++);
+ }
+
+ initBg();
+
+ try {
+ for(int k = 0; k < mtCount; k++)
+ mt.waitForID(k);
+
+ } catch (java.lang.InterruptedException e) {
+ MainWindow.updateTextArea("Couldn't load one of the images\n");
+ }
+ }
+
+
+// public static void main(String args[]) {
+// JFrame mainFrame = new JFrame("Graphics demo");
+// mainFrame.getContentPane().add(new MapCanvas());
+// mainFrame.pack();
+// mainFrame.setVisible(true);
+// }
+
+
+
+
+ public Dimension getPreferredSize() {
+ return new Dimension(1115, 715);
+ }
+
+ public Dimension getMinimumSize() {
+ return getPreferredSize();
+ }
+
+ public void paint(Graphics g) {
+ update(g);
+ }
+
+ public void update(Graphics g) {
+ Dimension d = getSize();
+ if ((offscreen == null) || (d.width != offscreenSize.width)
+ || (d.height != offscreenSize.height)) {
+
+ int w = this.getWidth(), h = this.getHeight();
+ this.setBounds(0, 0, w, h);
+ d.setSize(w, h);
+
+// offscreen = createImage(d.width, d.height);
+ offscreen = createImage(w, h);
+ offscreenSize = d;
+ offGraphics = (Graphics2D) offscreen.getGraphics();
+ offGraphics.setFont(new Font("Helvetica",Font.BOLD,18));
+
+ }
+ bgPaint();
+
+ for(EntityCanvas c: entities)
+ if(c!=null
+ &&c.gameCharacter!=null
+ &&!c.gameCharacter.isDead())
+ c.entityPaint();
+ bgMaskPaint();
+ /*for(EntityCanvas c: entities)
+ c.entityPaint();*/
+
+
+ g.drawImage(offscreen, 0, 0, null);
+ g.dispose();
+ }
+
+
+
+
+
+ private static final String worldMapPathStr = "image/worldMap.gif", gameMapPathStr = "image/gameMap.jpg",
+ snowMapPathStr = "image/snowMap.png", townMapPathStr = "image/townMap.jpg", volcanoMapPathStr = "image/volcanoMap.jpg";
+ static ArrayList mapPaths = new ArrayList<>(
+ Arrays.asList(worldMapPathStr, gameMapPathStr, snowMapPathStr, townMapPathStr, volcanoMapPathStr));
+ static Image mapImgs[] = new Image[mapPaths.size()];
+
+ static int worldMap = 0, gameMap = 1, snowMap = 2, townMap = 3;
+
+ public static int volcanoMap = 4;
+
+ public static int mapState = gameMap;
+
+ ArrayList mapStates = new ArrayList<>(
+ Arrays.asList(worldMap, gameMap, snowMap, townMap, volcanoMap));
+
+ //private static BufferedImage bgMask = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
+ private static BufferedImage bgMask = new BufferedImage(1400, 800, BufferedImage.TYPE_INT_ARGB);
+ private static final Graphics2D bgMaskG2D = bgMask.createGraphics();
+
+ void initBg() {
+// if(Files.exists(Paths.get(bgPathStr), LinkOption.NOFOLLOW_LINKS)) {
+// bg = Toolkit.getDefaultToolkit().createImage(bgPathStr);
+// mt.addImage(bg, 0);
+// }
+// else {
+// System.out.println(bgPathStr+" was not found");
+// System.exit(-1);
+// }
+
+ int i = 0;
+ for (String path : mapPaths) {
+ if (Files.exists(Paths.get(path), LinkOption.NOFOLLOW_LINKS)) {
+ mapImgs[i] = Toolkit.getDefaultToolkit().createImage(path);
+ mt.addImage(mapImgs[i], mtCount);
+ } else {
+ MainWindow.updateTextArea(path + " was not found\n");
+ System.exit(-1);
+ }
+ i++;
+ mtCount++;
+
+ }
+ }
+
+ void bgPaint() {
+ offGraphics.setColor(getBackground());
+ offGraphics.fill(getBounds());
+ offGraphics.drawImage(mapImgs[mapState], 0, 0, getWidth(), getHeight(), null);
+ }
+
+ private void bgMaskPaint() {
+
+ /* Draw the grey rectangle */
+ bgMaskG2D.setColor(Color.GRAY);
+ bgMaskG2D.fillRect(0, 0, getWidth(), getHeight());
+
+ /* Enable Anti-Alias */
+ bgMaskG2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+ /* Clear the circle away */
+ bgMaskG2D.setComposite(AlphaComposite.Clear);
+ int ovalX = MainWindow.knight0_Canvas.getEntityCurX();
+ int ovalY = MainWindow.knight0_Canvas.getEntityCurY();
+ int ovalRadius = MainWindow.knight0_Canvas.entityVisibleRadius;/*entities.get(0).entityImgs[0].getWidth(this)*2;*/
+ bgMaskG2D.fillOval(ovalX - ovalRadius, ovalY - ovalRadius, 2 * ovalRadius, 2 * ovalRadius);
+ bgMaskG2D.setComposite(AlphaComposite.Src);
+
+ offGraphics.drawImage(bgMask, 0, 0, bgMask.getWidth(this), bgMask.getHeight(this), this);
+ }
+
+
+
+
+
+
+/*
+ static final int PLAYERSTOPPED = 0,
+ PLAYERMOVING = 1,
+ PLAYERATTACKING = 2;
+
+ private static final ArrayList entityStates = new ArrayList<>(Arrays.asList(
+ PLAYERSTOPPED,
+ PLAYERMOVING,
+ PLAYERATTACKING
+ ));
+
+ private static final String playerStoppedPathStr = "image/stopped.gif",
+ playerAttackingPathStr = "image/attacking.gif",
+ playerMovingPathStr = "image/moving.gif";
+
+ private static final ArrayList playerImgPaths = new ArrayList<>(Arrays.asList(
+ playerStoppedPathStr,
+ playerMovingPathStr,
+ playerAttackingPathStr
+ ));
+ private static int playerAngle = 0;
+ private static Image[] playerImgs = new Image[3];
+ private static AffineTransform playerAffine;// = new AffineTransform();
+
+ private static int playerState;
+ private static boolean playerFrozen = true;
+
+ void initPlayer() {
+
+ int i = 0;
+ for(String path: playerImgPaths) {
+ if(Files.exists(Paths.get(path), LinkOption.NOFOLLOW_LINKS)) {
+ playerImgs[i] = Toolkit.getDefaultToolkit().createImage(path);
+ mt.addImage(playerImgs[i], i+1);
+ }
+ else {
+ System.out.println(path+" was not found");
+ System.exit(-1);
+ }
+ i++;
+ }
+
+ AffineTransform newAffine = new AffineTransform();
+ int tx = MainWindow.getPlayerCurX()-playerImgs[playerState].getWidth(this)/2;
+ int ty = MainWindow.getPlayerCurY()-playerImgs[playerState].getHeight(this)/2;
+ newAffine.translate(tx, ty);
+ double radians = 2.0 * Math.PI*(1.0 - (double) playerAngle/360);
+ newAffine.rotate(radians);
+ setPlayerAffine(newAffine);
+ }
+
+ void playerPaint() {
+ offGraphics.drawImage(playerImgs[playerState], getPlayerAffine(), this);
+ }
+
+ synchronized void setPlayerState(int s) {
+ while (playerFrozen)
+ try {
+ playerState = 0;
+ this.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ playerState = s;
+ AffineTransform newAffine = new AffineTransform();
+ int tx = MainWindow.getPlayerCurX()-playerImgs[playerState].getWidth(this)/2;
+ int ty = MainWindow.getPlayerCurY()-playerImgs[playerState].getHeight(this)/2;
+ newAffine.translate(tx, ty);
+ double radians = 2.0 * Math.PI*(1.0 - (double) playerAngle/360);
+ newAffine.rotate(radians);
+ setPlayerAffine(newAffine);
+ repaint();
+ }
+
+ public static synchronized void freezePlayer(){
+ playerFrozen = true;
+ }
+
+ public synchronized void thawPlayer() {
+ playerFrozen = false;
+ notifyAll();
+ }
+
+ synchronized static AffineTransform getPlayerAffine() {
+ return playerAffine;
+ }
+
+ synchronized static void setPlayerAffine(AffineTransform playerAffine) {
+ MapCanvas.playerAffine = playerAffine;
+ }
+
+ static final int ENEMYSTOPPED = 0,
+ ENEMYMOVING = 1,
+ ENEMYATTACKING = 2;
+ //static final int[] ENEMYSTOPPEDBOUNDS = {0,0,75,35};
+
+ private static final ArrayList enemyStates = new ArrayList<>(Arrays.asList(
+ ENEMYSTOPPED,
+ ENEMYMOVING,
+ ENEMYATTACKING
+ ));
+
+ private static final String enemyStoppedPathStr = "image/stopped.gif",
+ enemyAttackingPathStr = "image/attacking.gif",
+ enemyMovingPathStr = "image/moving.gif";
+ //enemyImgsPathStr = "image/Genesis 32X SCD - Aladdin - Snake.gif";
+
+ private static final ArrayList enemyImgPaths = new ArrayList<>(Arrays.asList(
+ enemyStoppedPathStr,
+ enemyMovingPathStr,
+ enemyAttackingPathStr
+ ));
+ private static AffineTransform enemyAffine;// = new AffineTransform();
+ private Image[] enemyImgs = new Image[3];
+ private int enemyState;
+ private static boolean enemyFrozen = true;
+ private double enemyAngle = 0;
+
+ void initEnemy() {
+
+ int j = 0;
+ for(String path: enemyImgPaths) {
+ if(Files.exists(Paths.get(path), LinkOption.NOFOLLOW_LINKS)) {
+ enemyImgs[j] = Toolkit.getDefaultToolkit().createImage(path);
+ mt.addImage(enemyImgs[j], j+3);
+ }
+ else {
+ System.out.println(path+" was not found");
+ System.exit(-1);
+ }
+ j++;
+ }
+
+ AffineTransform newAffine = new AffineTransform();
+ int tx = MainWindow.getEnemyCurX()-enemyImgs[enemyState].getWidth(this)/2;
+ int ty = MainWindow.getEnemyCurY()-enemyImgs[enemyState].getHeight(this)/2;
+ newAffine.translate(tx, ty);
+ double radians = 2.0 * Math.PI*(1.0 - (double) playerAngle/360);
+ newAffine.rotate(radians);
+ setEnemyAffine(newAffine);
+ }
+
+
+ void enemyPaint() {
+ offGraphics.drawImage(enemyImgs[enemyState], getEnemyAffine(), this);
+ }
+
+ synchronized void setEnemyState(int s) {
+ while (enemyFrozen)
+ try {
+ enemyState = 0;
+ this.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ enemyState = s;
+ AffineTransform newAffine = new AffineTransform();
+ int tx = MainWindow.getEnemyCurX()-enemyImgs[enemyState].getWidth(this)/2;
+ int ty = MainWindow.getEnemyCurY()-enemyImgs[enemyState].getHeight(this)/2;
+ newAffine.translate(tx, ty);
+ double radians = 2.0 * Math.PI*(1.0 - (double) enemyAngle/360);
+ newAffine.rotate(radians);
+ setEnemyAffine(newAffine);
+ repaint();
+ }
+
+ public synchronized static void freezeEnemy(){
+ enemyFrozen = true;
+ }
+
+ public synchronized void thawEnemy() {
+ enemyFrozen = false;
+ notifyAll();
+ }
+
+ synchronized static AffineTransform getEnemyAffine() {
+ return enemyAffine = new AffineTransform(); //took awhile to find this for some reason
+ return enemyAffine;
+ }
+
+ synchronized static void setEnemyAffine(AffineTransform enemyAffine) {
+ MapCanvas.enemyAffine = enemyAffine;
+ }
+
+
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/SnowMapState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/SnowMapState.java
new file mode 100644
index 0000000..b441601
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/SnowMapState.java
@@ -0,0 +1,158 @@
+
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+
+public class SnowMapState implements GameMapStateInterface {
+ GameStateContext gameStateContext;
+
+
+ public GamePlayer player;
+
+ @Override
+ public synchronized void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName()+"\n");
+ this.player= (GamePlayer) MainWindow.knight0_Canvas.gameCharacter;
+ MainWindow.updateTextArea(" XP="+player.getExperience()+" profileName="+player.getProfileInfo()+"\n");
+ MapCanvas.mapState = MapCanvas.snowMap;
+
+ ArrayList entityCanvases = new ArrayList<>(Arrays.asList(
+ MainWindow.troll0_Canvas/*,
+ MainWindow.troll1_Canvas,
+ MainWindow.troll2_Canvas*/));
+ ArrayList entityThreads = new ArrayList<>(Arrays.asList(
+ MainWindow.troll0_Thread/*,
+ MainWindow.troll1_Thread,
+ MainWindow.troll2_Thread*/));
+ EntityCanvas.makeTrolls(entityCanvases, entityThreads);
+
+ MainWindow.knight0_Canvas.setEntityCurX(MainWindow.mapCanvas.getWidth()/2);
+ MainWindow.knight0_Canvas.setEntityCurY(MainWindow.mapCanvas.getHeight()/2);
+
+ MainWindow.setGamePaused(true);
+ MainWindow.window.pauseAction.putValue("NAME", "PLAY");
+ MainWindow.window.pauseAction.putValue("SHORT_DESCRIPTION", "PLAY GAME");
+ MainWindow.btnPause.setText("PLAY");
+
+ MainWindow.setMapIsVisible(true);
+
+
+
+ while(MainWindow.mapIsVisible())
+ try {
+ wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ try {
+ System.in.close();//if text was entered during map state this will clear the input stream
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ GameState newState = new GameMapState();
+ GameStateContext.setState(newState);
+ this.gameStateContext.run();
+ }
+
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void display() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDisplay() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setPlayer(GamePlayer player) {
+ this.player = player;
+ }
+
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public GamePlayer getPlayer() {
+ return this.player;
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/TextFieldStreamer.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/TextFieldStreamer.java
new file mode 100644
index 0000000..568b90d
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/TextFieldStreamer.java
@@ -0,0 +1,58 @@
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.InputStream;
+
+import javax.swing.JTextField;
+
+class TextFieldStreamer extends InputStream implements ActionListener {
+
+ private JTextField tf;
+ private String str = null;
+ private int pos = 0;
+
+ public TextFieldStreamer(JTextField jtf) {
+ tf = jtf;
+ }
+
+ //gets triggered everytime that "Enter" is pressed on the textfield
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ str = tf.getText() + "\n";
+ pos = 0;
+ MainWindow.updateTextArea(str);
+ tf.setText("");
+ synchronized (this) {
+ //maybe this should only notify() as multiple threads may
+ //be waiting for input and they would now race for input
+ this.notifyAll();
+ }
+ }
+
+ @Override
+ public int read() {
+ //test if the available input has reached its end
+ //and the EOS should be returned
+ if(str != null && pos == str.length()){
+ str =null;
+ //this is supposed to return -1 on "end of stream"
+ //but I'm having a hard time locating the constant
+ return java.io.StreamTokenizer.TT_EOF;
+ }
+ //no input available, block until more is available because that's
+ //the behavior specified in the Javadocs
+ while (str == null || pos >= str.length()) {
+ try {
+ //according to the docs read() should block until new input is available
+ synchronized (this) {
+ this.wait();
+ }
+ } catch (InterruptedException ex) {
+ ex.printStackTrace();
+ }
+ }
+ //read an additional character, return it and increment the index
+ return str.charAt(pos++);
+ }
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/TownMapState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/TownMapState.java
new file mode 100644
index 0000000..a4e562c
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/TownMapState.java
@@ -0,0 +1,170 @@
+
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.awt.Image;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+
+public class TownMapState implements GameMapStateInterface {
+ GameStateContext gameStateContext;
+
+
+ public static GamePlayer player;
+
+ @Override
+ public synchronized void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName()+"\n");
+
+ MapCanvas.mapState = MapCanvas.townMap;
+
+ ArrayList entityCanvases = new ArrayList<>(Arrays.asList(
+ MainWindow.snake0_Canvas/*,
+ MainWindow.snake1_Canvas,
+ MainWindow.snake2_Canvas*/));
+ ArrayList entityThreads = new ArrayList<>(Arrays.asList(
+ MainWindow.snake0_Thread/*,
+ MainWindow.snake1_Thread,
+ MainWindow.snake2_Thread*/));
+
+
+ EntityCanvas.makeSnakes(entityCanvases, entityThreads);
+
+
+ MainWindow.knight0_Canvas.setEntityCurX(MainWindow.mapCanvas.getWidth()/2);
+ MainWindow.knight0_Canvas.setEntityCurY(MainWindow.mapCanvas.getHeight()/2);
+
+ MainWindow.setGamePaused(true);
+ MainWindow.window.pauseAction.putValue("NAME", "PLAY");
+ MainWindow.window.pauseAction.putValue("SHORT_DESCRIPTION", "PLAY GAME");
+ MainWindow.btnPause.setText("PLAY");
+
+ MainWindow.setMapIsVisible(true);
+
+
+
+ while(MainWindow.mapIsVisible())
+ try {
+ wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ try {
+ System.in.close();//if text was entered during map state this will clear the input stream
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ GameState newState = new GameMapState();
+ GameStateContext.setState(newState);
+ this.gameStateContext.run();
+ }
+
+
+
+
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void display() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDisplay() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setPlayer(GamePlayer player) {
+ TownMapState.player = player;
+ }
+
+
+
+
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+
+
+ @Override
+ public GamePlayer getPlayer() {
+ return this.player;
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/VolcanoMapState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/VolcanoMapState.java
new file mode 100644
index 0000000..b604ad6
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameMapStatePack/VolcanoMapState.java
@@ -0,0 +1,165 @@
+
+package gamePack.gameStatePack.gameMapStatePack;
+
+import java.awt.Image;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameTextStatePack.GameTextInputState;
+import gamePack.gameStatePack.gameTextStatePack.StartMenu;
+
+public class VolcanoMapState implements GameMapStateInterface {
+ GameStateContext gameStateContext;
+
+
+ public GamePlayer player;
+
+ @Override
+ public synchronized void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName()+"\n");
+ this.player= (GamePlayer) MainWindow.knight0_Canvas.gameCharacter;
+ MainWindow.updateTextArea(" XP="+player.getExperience()+" profileName="+player.getProfileInfo()+"\n");
+
+
+ MapCanvas.mapState = MapCanvas.volcanoMap;
+
+ ArrayList entityCanvases = new ArrayList<>(Arrays.asList(
+ MainWindow.dragon0_Canvas/*,
+ MainWindow.dragon1_Canvas,
+ MainWindow.dragon2_Canvas*/));
+ ArrayList entityThreads = new ArrayList<>(Arrays.asList(
+ MainWindow.dragon0_Thread/*,
+ MainWindow.dragon1_Thread,
+ MainWindow.dragon2_Thread*/));
+
+ EntityCanvas.makeDragons(entityCanvases, entityThreads);
+ MainWindow.knight0_Canvas.setEntityCurX(MainWindow.mapCanvas.getWidth()/2);
+ MainWindow.knight0_Canvas.setEntityCurY(MainWindow.mapCanvas.getHeight()/2);
+
+ MainWindow.setGamePaused(true);
+ MainWindow.window.pauseAction.putValue("NAME", "PLAY");
+ MainWindow.window.pauseAction.putValue("SHORT_DESCRIPTION", "PLAY GAME");
+ MainWindow.btnPause.setText("PLAY");
+
+ MainWindow.setMapIsVisible(true);
+
+
+
+ while(MainWindow.mapIsVisible())
+ try {
+ wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ try {
+ System.in.close();//if text was entered during map state this will clear the input stream
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ GameState newState = new GameMapState();
+ GameStateContext.setState(newState);
+ this.gameStateContext.run();
+ }
+
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void display() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDisplay() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitMap() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setPlayer(GamePlayer player) {
+ this.player = player;
+ }
+
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public GamePlayer getPlayer() {
+ return this.player;
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/GameTextInputState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/GameTextInputState.java
new file mode 100644
index 0000000..14d90f1
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/GameTextInputState.java
@@ -0,0 +1,122 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import java.io.File;
+import java.io.PrintStream;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public interface GameTextInputState extends GameState {
+ static PrintStream printStream = new PrintStream(System.out);
+ static Scanner scanner = new Scanner(System.in);
+ static File errorLogFile = new File("GameData/ProfileInputErrorLog_"+System.currentTimeMillis());
+ static PrintStream gameErrorLog = new PrintStream(System.out);
+
+ default String readWord() {
+ MainWindow.updateTextArea("GameTextInputState.readWord()\n");
+ String res = GameTextInputState.scanner.next().trim();
+ return res;
+ }
+
+ default String readWord(Scanner scanner) {
+ MainWindow.updateTextArea("GameTextInputState.readWord(Scanner scanner)\n");
+ String res = scanner.next().trim();
+ return res;
+ }
+
+ default String readLine() {
+ MainWindow.updateTextArea("GameTextInputState.readLine()\n");
+ String res = GameTextInputState.scanner.nextLine().trim();
+ return res;
+ }
+
+ default String readLine(Scanner scanner) {
+ MainWindow.updateTextArea("GameTextInputState.readLine(Scanner scanner)\n");
+ String res = scanner.nextLine().trim();
+ return res;
+ }
+
+ default int readInt()
+ {
+ int num=0;
+ boolean parsedInt = true;
+ String something = GameTextInputState.scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ while(! parsedInt){
+ something = GameTextInputState.scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+
+ parsedInt = true; /*nfe skips this*/
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ }
+ return num;
+ }
+
+ default int readInt(Scanner scanner)
+ {
+ int num=0;
+ boolean parsedInt = true;
+ String something = scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ while(! parsedInt){
+ something = scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+
+ parsedInt = true; /*nfe skips this*/
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ }
+ return num;
+ }
+
+ default char readChar()
+ {
+ char res = '?';
+ try {
+ res = GameTextInputState.scanner.nextLine().trim().charAt(0);
+ } catch (IndexOutOfBoundsException e) {
+ e.printStackTrace(GameTextInputState.gameErrorLog);
+ }
+ return res;
+ }
+
+ default char readChar(Scanner scanner)
+ {
+ char res = '?';
+ try {
+ res = scanner.nextLine().trim().charAt(0);
+ } catch (IndexOutOfBoundsException e) {
+ e.printStackTrace(GameTextInputState.gameErrorLog);
+ }
+ return res;
+ }
+
+ void openMenu();
+ void closeMenu();
+ //etc
+
+ public void setScanner(Scanner scanner);
+
+ public void setPlayer(GamePlayer player);
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileInputState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileInputState.java
new file mode 100644
index 0000000..abf0b37
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileInputState.java
@@ -0,0 +1,368 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Scanner;
+import java.util.function.Consumer;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.ConcretePlayer;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.KnightPlayer;
+import gamePack.gameEntityPack.gameWeaponPack.BattleAxe;
+import gamePack.gameEntityPack.gameWeaponPack.GameWeapon;
+import gamePack.gameEntityPack.gameWeaponPack.GreatHammer;
+import gamePack.gameEntityPack.gameWeaponPack.WeaponOfTheGods;
+import gamePack.gameStatePack.EndGame;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class ProfileInputState implements GameTextInputState {
+ private GamePlayer player = new ConcretePlayer();
+
+ private Scanner scanner;
+ private PrintStream printStream;
+ private PrintStream gameErrorLog;
+ private PrintStream profileOutputStream;
+ private Scanner profileInputStream;
+
+ private GameStateContext gameStateContext;
+
+ /*public ProfileInputState(Scanner scanner, PrintStream printStream) {
+ this.setScanner(scanner);
+ this.setPrintStream(printStream);
+ try {
+ this.gameErrorLog = new PrintStream(new File("GameData/ProfileInputErrorLog_"+System.currentTimeMillis()));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public ProfileInputState(Scanner scanner, PrintStream printStream, PrintStream gameErrorLog) {
+ this.setScanner(scanner);
+ this.setPrintStream(printStream);
+ this.gameErrorLog = gameErrorLog;
+ }*/
+
+ public ProfileInputState() {
+ this.setScanner(new Scanner(System.in));
+ this.setPrintStream(new PrintStream(System.out));
+ /*try {
+ this.gameErrorLog = new PrintStream(new File("GameData/ProfileInputErrorLog_"+System.currentTimeMillis()));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }*/
+ }
+
+ @Override
+ public String readWord() {
+ MainWindow.updateTextArea("ProfileInputState.readWord()\n");
+ String res = getScanner().next().trim();
+ return res;
+ }
+
+ @Override
+ public String readLine() {
+ //MainWindow.updateTextArea("ProfileInputState.readLine()\n");
+ String res = getScanner().nextLine().trim();
+ return res;
+ }
+
+ @Override
+ public int readInt() {
+ int num=0;
+ boolean parsedInt = true;
+ String something = getScanner().nextLine();
+ try {
+ num = Integer.parseInt(something);
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ while(! parsedInt){
+ something = getScanner().nextLine();
+ try {
+ num = Integer.parseInt(something);
+
+ parsedInt = true; /*nfe skips this*/
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ }
+ return num;
+ }
+
+ @Override
+ public char readChar() {
+ char res = '?';
+ try {
+ res = getScanner().nextLine().trim().charAt(0);
+ } catch (IndexOutOfBoundsException e) {
+ e.printStackTrace(gameErrorLog);
+ }
+ return res;
+ }
+
+ public void createProfile() {
+ GamePlayer profile = null;
+ MainWindow.updateTextArea("enter new profileName\n");
+ String profileName = readLine();
+
+ boolean characterFound = false;
+ String characterNameChoiceStr = "";
+ GamePlayer character;
+ ArrayList defaultGameCharactersList = new ArrayList<>(Arrays.asList(new KnightPlayer()));
+ while(!characterFound) {
+ MainWindow.updateTextArea("select a characteer: "+defaultGameCharactersList+"\n");
+ characterNameChoiceStr = readLine();
+ for(GameCharacter cur: defaultGameCharactersList)
+ if(cur.getName().equals(characterNameChoiceStr)) {
+ player = (GamePlayer) cur;
+ characterFound = true;
+ }
+ }
+
+ ArrayList defaultWeaponsList = new ArrayList<>();
+ defaultWeaponsList.addAll(player.getWeapons());
+
+
+ boolean weaponFound = false;
+ String weaponNameChoiceStr = "";
+ GameWeapon weapon;
+ while(!weaponFound) {
+ MainWindow.updateTextArea("select a weapon: "+defaultWeaponsList+"\n");
+ weaponNameChoiceStr= readLine();
+ for(GameWeapon cur: defaultWeaponsList)
+ if(cur.getName().equals(weaponNameChoiceStr)) {
+ player.addWeapon(cur);
+ weaponFound = true;
+ }
+ }
+
+ MainWindow.updateTextArea("enter difficulty\n");
+ int difficulty = readInt();
+ int experience = 0;
+ /*try {
+ this.profileInputStream = new Scanner(new FileInputStream("GameData/ProfileSource_"+profileName));
+
+ profileFound = true; //fnfe skips this line
+ } catch(FileNotFoundException fnfe) {
+ //fnfe.printStackTrace(gameErrorLog);
+ profileFound = false;
+ }
+ finally{
+ if(profileFound)
+ profileInputStream.close();
+ }*/
+
+ while((profile = SQLiteJDBC.selectProfile(profileName))==null){
+ MainWindow.updateTextArea("profile source exists\n"
+ + "enter new profileName\n");
+ //getPrintStream().print("-->");
+ profileName = readLine();
+ /*try {
+ this.profileInputStream = new Scanner(new FileInputStream("GameData/ProfileSource_"+profileName));
+
+ profileFound = true; //fnfe skips this line
+ } catch(FileNotFoundException fnfe) {
+ profileFound = false;
+ }
+ finally{
+ if(profileFound)
+ profileOutputStream.close();
+ }*/
+
+ }
+ /*try {
+ this.profileOutputStream = new PrintStream("GameData/ProfileSource_"+profileName);*/
+
+ //this.profileOutputStream.println("***begin ProfileSource_"+profileName+"***");
+ /*MainWindow.updateTextArea("profileName: "+profileName+"\n"
+ +"characterName: "+player.getName()+"\n"
+ +"weaponName: "+player.getWeapons().get(0)+"\n"
+ +"difficulty: "+difficulty+"\n"
+ +"experience: "+experience+"\n"
+ );*/
+
+ SQLiteJDBC.insertProfile(profileName, characterNameChoiceStr, weaponNameChoiceStr, difficulty, experience);
+ this.player=SQLiteJDBC.selectProfile(profileName);
+
+
+ /*this.profileOutputStream.print("profileName: "+profileName+"\n"
+ +"characterName: "+player.getName()+"\n"
+ +"weaponName: "+player.getWeapons().get(0)+"\n"
+ +"difficulty: "+difficulty+"\n"
+ +"experience: "+experience+"\n"
+ );
+ //this.profileOutputStream.println("***end ProfileSource_"+profileName+"***");
+ this.profileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }*/
+
+
+ }
+
+ public void loadProfile() {
+ MainWindow.updateTextArea("enter profileName to load\n");
+ String profileName = readLine();
+ while((this.player = SQLiteJDBC.selectProfile(profileName))==null){
+ MainWindow.updateTextArea("profile source exists\n"
+ + "enter new profileName\n");
+ profileName = readLine();
+ }
+ MainWindow.updateTextArea(" XP="+player.getExperience()+" profileName="+player.getProfileInfo()+"\n");
+ this.player.setExperience(0);
+ MainWindow.updateTextArea(" XP="+player.getExperience()+" profileName="+player.getProfileInfo()+"\n");
+
+ }
+
+ @Override
+ public void openMenu() {
+ int option = 999;
+ do{
+ MainWindow.updateTextArea("\n_____-----Game-----_____\n"
+ + "Welcome, choose an option:\n"
+ + "1) Create a new profile\n"
+ + "2) Load an existing profile\n"
+ //+ "3) readLine() --> Log\n"
+ + "0) EXIT\n");
+ option = readInt();
+ switch(option){
+ case 1:
+ createProfile();
+ break;
+ case 2:
+ loadProfile();
+ GameTextInputState newState = new StartMenu();
+ newState.setPlayer(player);
+ newState.setScanner(new Scanner(System.in));
+ GameStateContext.setState(newState);
+ break;
+ /*case 3:
+ gameErrorLog.println(readLine());
+ break;*/
+ case 0:
+ GameStateContext.setState(new EndGame());
+ break;
+ default:
+ }
+ }
+ while(option != 0 && getPlayer() == null);
+ }
+
+ public Scanner getScanner() {
+ return scanner;
+ }
+
+ public void setScanner(Scanner scanner) {
+ this.scanner = scanner;
+ }
+
+ public PrintStream getPrintStreamOut() {
+ return getPrintStream();
+ }
+
+ public void setPrintStream(PrintStream printStream) {
+ this.printStream = printStream;
+ }
+
+ public PrintStream getGameErrorLog() {
+ return gameErrorLog;
+ }
+
+ public void setGameErrorLog(PrintStream gameErrorLog) {
+ this.gameErrorLog = gameErrorLog;
+ }
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void closeMenu() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName());
+ this.openMenu();
+ gameStateContext.run();
+
+ }
+
+ private PrintStream getPrintStream() {
+ return printStream;
+ }
+
+ @Override
+ public void setPlayer(GamePlayer player) {
+ this.player = player;
+ }
+
+ public GamePlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileInputTest.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileInputTest.java
new file mode 100644
index 0000000..6ac0980
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileInputTest.java
@@ -0,0 +1,73 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.Scanner;
+
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class ProfileInputTest {
+ static GameState gameState;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ gameState = new ProfileInputState();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ //scanner.close();
+ }
+
+ @Test
+ public void testReadWord() {
+ MainWindow.updateTextArea("type \"word\" with a single trailing space and return\n");
+ String res = ((ProfileInputState) gameState).readWord();
+ assertEquals("word",res);
+ ((ProfileInputState) gameState).readLine();
+
+ MainWindow.updateTextArea("type \"word\" with a single trailing space and return\n");
+ res = ((ProfileInputState) gameState).readWord();
+ ((ProfileInputState) gameState).readLine();
+ assertEquals("word",res);
+ }
+
+ @Test
+ public void testReadLine() {
+ MainWindow.updateTextArea("type \"word\" with or without trailing space and return\n");
+ String res = ((ProfileInputState) gameState).readLine();
+ assertEquals("word",res);
+
+ }
+
+ @Test
+ public void testReadInt() {
+ MainWindow.updateTextArea("type \"2\" followed by any garbage and return\n");
+ String res = Integer.toString(((ProfileInputState) gameState).readInt());
+ assertEquals("2",res);
+
+ }
+
+ @Test
+ public void testReadChar() {
+ MainWindow.updateTextArea("type \"a\" followed by any garbage and return\n");
+ String res = Character.toString(((ProfileInputState) gameState).readChar());
+ assertEquals("a",res);
+
+ }
+
+ @Test
+ public void testOpenMenu() {
+ ((ProfileInputState) gameState).openMenu();
+ }
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileSourceHandler.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileSourceHandler.java
new file mode 100644
index 0000000..0915562
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/ProfileSourceHandler.java
@@ -0,0 +1,149 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.ConcretePlayer;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.KnightPlayer;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+class ProfileSourceHandler {
+
+ /*
+ profileName: kevin
+ characterName: defaultCharacterName
+ weaponName: defaultWeaponName
+ difficulty: 0
+ experience: 0
+ */
+
+
+ private final static String profileNamePatStr = "[a-zA-Z0-9]+";
+ private final static Pattern profileNamePattern = Pattern.compile(profileNamePatStr);
+
+ private final static String characterNamePatStr = "[a-zA-Z0-9]+";
+ private final static Pattern characterNamePattern = Pattern.compile(characterNamePatStr);
+
+ private final static String weaponNamePatStr = "[a-zA-Z0-9]+";
+ private final static Pattern weaponNamePattern = Pattern.compile(weaponNamePatStr);
+
+ private final static String difficultyPatStr = "[0-9]+";
+ private final static Pattern difficultyPattern = Pattern.compile(difficultyPatStr);
+
+ private final static String experiencePatStr = "[0-9]+";
+ private final static Pattern experiencePattern = Pattern.compile(experiencePatStr);
+
+ private final static String profilePatStr = "profileName\\:\\s"+profileNamePatStr+"\\n*"
+ +"characterName\\:\\s"+characterNamePatStr+"\\n*"
+ +"weaponName\\:\\s"+weaponNamePatStr+"\\n*"
+ +"difficulty\\:\\s"+difficultyPatStr+"\\n*"
+ +"experience\\:\\s"+experiencePatStr+"\\n*";
+
+
+
+ private final static Pattern profilePattern = Pattern.compile(profilePatStr);
+
+ private static String profileSourceName = "";
+ private static String configPathA = "GameData/ProfileSource_";
+ private static String configPathB = "."+configPathA;
+
+ private static String getConfigPath() {
+ String filepath = configPathA;
+ if(System.console()==null)
+ filepath = configPathA;
+ else
+ filepath = configPathB;
+ return filepath;
+ }
+
+ private static String configString = "";
+
+ protected static String getConfigString() {
+ String filepath = getConfigPath() + profileSourceName;
+ Scanner sc;
+ int count = 0;
+ try {
+ sc = new Scanner(new File(filepath));
+ while(sc.hasNextLine()) {
+ String cur = sc.nextLine()+"\n";
+ //System.out.println(cur);
+ configString += cur;
+ count++;
+ }
+ } catch (FileNotFoundException e) { e.printStackTrace(); }
+ //System.out.println("numLinesFound: "+count);
+ return configString;
+ }
+
+
+
+ protected static GamePlayer profileSourceParser(String profileName) {
+
+ profileSourceName = profileName;
+ getConfigString();
+
+ Matcher profileMatcher = profilePattern.matcher(configString);
+ profileMatcher.find();
+ String profileString = configString.substring(profileMatcher.start(), profileMatcher.end()); //valid profileString
+ //System.out.println("configString:profileString:\n"+profileString);
+
+ Matcher profileNameMatcher = Pattern.compile("profileName\\:\\s"+profileNamePatStr+"\\n*").matcher(profileString);
+ profileNameMatcher.find();
+ String profileNameString = profileString.substring(profileNameMatcher.start(), profileNameMatcher.end());
+ profileNameString = profileNameString.substring(13, profileNameString.length()-1);
+ //System.out.println("newParsedString:profileName: "+profileNameString);
+
+ Matcher characterNameMatcher = Pattern.compile("characterName\\:\\s"+characterNamePatStr+"\\n*").matcher(profileString);
+ characterNameMatcher.find(profileNameMatcher.end());
+ String characterNameString = profileString.substring(characterNameMatcher.start(), characterNameMatcher.end());
+ characterNameString = characterNameString.substring(15, characterNameString.length()-1);
+ //System.out.println("newParsedString:characterName: "+characterNameString);
+
+ Matcher weaponNameMatcher = Pattern.compile("weaponName\\:\\s"+weaponNamePatStr+"\\n*").matcher(profileString);
+ weaponNameMatcher.find(characterNameMatcher.end());
+ String weaponNameString = profileString.substring(weaponNameMatcher.start(), weaponNameMatcher.end());
+ weaponNameString = weaponNameString.substring(12, weaponNameString.length()-1);
+ //System.out.println("newParsedString:weaponName: "+weaponNameString);
+
+ Matcher difficultyMatcher = Pattern.compile("difficulty\\:\\s"+difficultyPatStr+"\\n*").matcher(profileString);
+ difficultyMatcher.find(weaponNameMatcher.end());
+ String difficultyString = profileString.substring(difficultyMatcher.start(), difficultyMatcher.end());
+ difficultyString = difficultyString.substring(12, difficultyString.length()-1);
+ int difficultyInt = Integer.valueOf(difficultyString);
+ //System.out.println("newParsedInt:difficulty: "+difficultyInt);
+
+ Matcher experienceMatcher = Pattern.compile("experience\\:\\s"+experiencePatStr+"\\n*").matcher(profileString);
+ experienceMatcher.find(difficultyMatcher.end());
+ String experienceString = profileString.substring(experienceMatcher.start(), experienceMatcher.end());
+ experienceString = experienceString.substring(12, experienceString.length()-1);
+ int experienceInt = Integer.valueOf(experienceString);
+ //System.out.println("newParsedInt:experience: "+experienceInt);
+
+
+ GamePlayer player = new KnightPlayer();
+ player.setName(profileName);
+ player.setProfileInfo("Knight: "+ characterNameString +" using "+ weaponNameString+"\ndifficulty: "+difficultyInt+"\nxp: "+experienceInt);
+ //player.setExp(experienceInt);
+ player.setHealth(100);
+ //player.setAccel(100);
+ player.setSpeed(100);
+ player.setStrength(100);
+ //player.setWeight(100);
+ MainWindow.updateTextArea("Loaded: "/*+player.getName()+" "+player.getClass().getSimpleName()*/+"\n");
+
+ MainWindow.updateTextArea("profileName: "+profileName+"\n"
+ +"characterName: "+player.getName()+"\n"
+ +"weaponName: "+player.getWeapons().get(0)+"\n"
+ +"difficulty: "+difficultyInt+"\n"
+ +"experience: "+experienceInt+"\n"
+ );
+ return player;
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/SQLiteJDBC.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/SQLiteJDBC.java
new file mode 100644
index 0000000..00a6926
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/SQLiteJDBC.java
@@ -0,0 +1,232 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import java.sql.*;
+
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.KnightPlayer;
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class SQLiteJDBC
+{
+ public static void main( String args[] )
+ {
+
+ connectGameProfilesTable(); //connect
+ createGameProfilesTable();//create
+
+ String characterNameStr = "KightPlayer", weaponNameStr ="BigStick";
+ int difficultyInt = 10, experienceInt = 0;
+ insertProfile("Kevin", characterNameStr, weaponNameStr, difficultyInt, experienceInt);//insert
+ insertProfile("Aaron", characterNameStr, weaponNameStr, difficultyInt, experienceInt);
+ insertProfile("James", characterNameStr, weaponNameStr, difficultyInt, experienceInt);
+
+
+ selectProfile("Kevin");//select
+ updateProfile("Kevin", "EXPERIENCE", "5");//update
+ deleteProfile("Kevin");//delete
+ deleteProfile("Aaron");
+ deleteProfile("James");
+ }
+
+
+ public static void connectGameProfilesTable()
+ {
+ Connection c = null;
+ try {
+ Class.forName("org.sqlite.JDBC");
+ c = DriverManager.getConnection("jdbc:sqlite:gameProfiles.db");
+ } catch ( Exception e ) {
+ MainWindow.updateTextArea( e.getClass().getName() + ": " + e.getMessage()+"\n" );
+ System.exit(0);
+ }
+ MainWindow.updateTextArea("Opened database successfully\n\n");
+ }
+
+ public static void createGameProfilesTable()
+ {
+ Connection c = null;
+ Statement stmt = null;
+ try {
+ Class.forName("org.sqlite.JDBC");
+ c = DriverManager.getConnection("jdbc:sqlite:gameProfiles.db");
+ MainWindow.updateTextArea("Opened database successfully\n");
+
+ stmt = c.createStatement();
+ String sql = "CREATE TABLE GAMEPROFILES " +
+ "(PROFILENAME TEXT PRIMARY KEY NOT NULL, " +
+ " CHARACTERNAME TEXT NOT NULL, " +
+ " WEAPONNAME TEXT NOT NULL, " +
+ " DIFFICULTY INT, " +
+ " EXPERIENCE INT)";
+ stmt.executeUpdate(sql);
+ stmt.close();
+ c.close();
+ } catch ( Exception e ) {
+ MainWindow.updateTextArea( e.getClass().getName() + ": " + e.getMessage() +"\n");
+ //System.exit(0);
+ }
+ MainWindow.updateTextArea("Table created successfully\n\n");
+ }
+
+
+ public static Boolean insertProfile(String profileNameStr, String characterNameStr, String weaponNameStr, int difficultyInt, int experienceInt)
+ {
+ Connection c = null;
+ Statement stmt = null;
+ try {
+ Class.forName("org.sqlite.JDBC");
+ c = DriverManager.getConnection("jdbc:sqlite:gameProfiles.db");
+ c.setAutoCommit(false);
+ MainWindow.updateTextArea("Opened database successfully\n");
+
+ stmt = c.createStatement();
+ String sql = "INSERT INTO GAMEPROFILES (PROFILENAME,CHARACTERNAME,WEAPONNAME,DIFFICULTY,EXPERIENCE) " +
+ "VALUES ('"+profileNameStr+"', '"+characterNameStr+"', '"+weaponNameStr+"', "+difficultyInt+","+experienceInt+" );";
+ stmt.executeUpdate(sql);
+
+ stmt.close();
+ c.commit();
+ c.close();
+ } catch ( Exception e ) {
+ MainWindow.updateTextArea( e.getClass().getName() + ": " + e.getMessage() +"\n");
+ return false;
+ //System.exit(0);
+ }
+ MainWindow.updateTextArea("Records inserted successfully\n\n");
+ return true;
+ }
+
+ public static GamePlayer selectProfile(String profileNameStr)
+ {
+ GamePlayer player = null;
+ Connection c = null;
+ Statement stmt = null;
+ String profileNameStr1 = "";
+ String characterNameStr = "";
+ String weaponNameStr = "";
+ int difficultyInt = 0;
+ int experienceInt = 0;
+ try {
+ Class.forName("org.sqlite.JDBC");
+ c = DriverManager.getConnection("jdbc:sqlite:gameProfiles.db");
+ c.setAutoCommit(false);
+ MainWindow.updateTextArea("Opened database successfully\n");
+
+ stmt = c.createStatement();
+ ResultSet rs = stmt.executeQuery( "SELECT * FROM GAMEPROFILES where PROFILENAME='"+profileNameStr+"';" );
+ while ( rs.next() ) {
+ profileNameStr1 = rs.getString("profilename");
+ characterNameStr = rs.getString("charactername");
+ weaponNameStr = rs.getString("weaponname");
+ difficultyInt = rs.getInt("difficulty");
+ experienceInt = rs.getInt("experience");
+
+ MainWindow.updateTextArea(
+ "PROFILENAME = " + profileNameStr1 + "\n" +
+ "CHARACTERNAME = " + characterNameStr +"\n" +
+ "WEAPONNAME = " + weaponNameStr +"\n"+
+ "DIFFICULTY = " + difficultyInt+"\n" +
+ "EXPERIENCE = " + experienceInt+"\n\n");
+ }
+ rs.close();
+ stmt.close();
+ c.close();
+ } catch ( Exception e ) {
+ MainWindow.updateTextArea( e.getClass().getName() + ": " + e.getMessage() +"\n");
+ return player;
+ //System.exit(0);
+ }
+ MainWindow.updateTextArea("Select profile operation done successfully\n\n");
+ player = new KnightPlayer();
+ player.setProfileInfo(profileNameStr1);
+ GameStateContext.setDifficulty(difficultyInt);
+ player.setExperience(experienceInt);
+
+ return player;
+ }
+
+ public static Boolean updateProfile(String profileNameStr, String attributeKeyStr, String newValueStr)
+ {
+ Connection c = null;
+ Statement stmt = null;
+ try {
+ Class.forName("org.sqlite.JDBC");
+ c = DriverManager.getConnection("jdbc:sqlite:gameProfiles.db");
+ c.setAutoCommit(false);
+ MainWindow.updateTextArea("Opened database successfully\n");
+
+ stmt = c.createStatement();
+ String sql = "UPDATE GAMEPROFILES set '"+attributeKeyStr+"' = '"+newValueStr+"' where PROFILENAME='"+profileNameStr+"';";
+ stmt.executeUpdate(sql);
+ c.commit();
+
+ ResultSet rs = stmt.executeQuery( "SELECT * FROM GAMEPROFILES where PROFILENAME='"+profileNameStr+"';");
+ while ( rs.next() ) {
+ String profileNameResStr = rs.getString("profilename");
+ String characterNameResStr = rs.getString("charactername");
+ String weaponNameResStr = rs.getString("weaponname");
+ int difficultyResInt = rs.getInt("difficulty");
+ int experienceResInt = rs.getInt("experience");
+
+ MainWindow.updateTextArea(
+ "PROFILENAME = " + profileNameResStr + "\n" +
+ "CHARACTERNAME = " + characterNameResStr +"\n" +
+ "WEAPONNAME = " + weaponNameResStr +"\n"+
+ "DIFFICULTY = " + difficultyResInt+"\n" +
+ "EXPERIENCE = " + experienceResInt+"\n\n");
+ }
+ rs.close();
+ stmt.close();
+ c.close();
+ } catch ( Exception e ) {
+ MainWindow.updateTextArea( e.getClass().getName() + ": " + e.getMessage() +"\n");
+ return false;
+ //System.exit(0);
+ }
+ MainWindow.updateTextArea("Update operation done successfully\n\n");
+ return true;
+ }
+
+ public static Boolean deleteProfile(String profileNameStr)
+ {
+ Connection c = null;
+ Statement stmt = null;
+ try {
+ Class.forName("org.sqlite.JDBC");
+ c = DriverManager.getConnection("jdbc:sqlite:gameProfiles.db");
+ c.setAutoCommit(false);
+ MainWindow.updateTextArea("Opened database successfully\n");
+
+ stmt = c.createStatement();
+ String sql = "DELETE from GAMEPROFILES where PROFILENAME='"+profileNameStr+"';";
+ stmt.executeUpdate(sql);
+ c.commit();
+
+ ResultSet rs = stmt.executeQuery( "SELECT * FROM GAMEPROFILES;" );
+ while ( rs.next() ) {
+ String profileNameResStr = rs.getString("profilename");
+ String characterNameResStr = rs.getString("charactername");
+ String weaponNameResStr = rs.getString("weaponname");
+ int difficultyResInt = rs.getInt("difficulty");
+ int experienceResInt = rs.getInt("experience");
+
+ MainWindow.updateTextArea(
+ "PROFILENAME = " + profileNameResStr + "\n" +
+ "CHARACTERNAME = " + characterNameResStr +"\n" +
+ "WEAPONNAME = " + weaponNameResStr +"\n"+
+ "DIFFICULTY = " + difficultyResInt+"\n" +
+ "EXPERIENCE = " + experienceResInt+"\n\n");
+ }
+ rs.close();
+ stmt.close();
+ c.close();
+ } catch ( Exception e ) {
+ MainWindow.updateTextArea( e.getClass().getName() + ": " + e.getMessage()+"\n" );
+ return false;
+ //System.exit(0);
+ }
+ MainWindow.updateTextArea("Delete operation done successfully\n\n");
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/StartMenu.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/StartMenu.java
new file mode 100644
index 0000000..d985425
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/StartMenu.java
@@ -0,0 +1,275 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Scanner;
+
+import gamePack.gameEntityPack.gameCharacterPack.GameCharacter;
+import gamePack.gameEntityPack.gameCharacterPack.gamePlayerPack.GamePlayer;
+import gamePack.gameStatePack.EndGame;
+import gamePack.gameStatePack.GameState;
+import gamePack.gameStatePack.GameStateContext;
+import gamePack.gameStatePack.gameMapStatePack.GameMapState;
+import gamePack.gameStatePack.gameMapStatePack.GameMapStateInterface;
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class StartMenu implements GameTextInputState {
+ private GamePlayer player;
+ private Scanner scanner;
+ private PrintStream printStream;
+ private PrintStream gameErrorLog;
+ private PrintStream profileOutputStream;
+ private Scanner profileInputStream;
+ private GameStateContext gameStateContext;
+
+ public StartMenu() {
+ this.setScanner(new Scanner(System.in));
+ this.setPrintStream(new PrintStream(System.out));
+ /*try {
+ this.setGameErrorLog(new PrintStream(new File("GameData/StartMenuErrorLog_"+System.currentTimeMillis())));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }*/
+ }
+/*
+ public StartMenu(Scanner scanner, OutputStream printStream) {
+ this.setScanner(scanner);
+ this.setPrintStream(new PrintStream(printStream));
+ try {
+ this.setGameErrorLog(new PrintStream(new File("GameData/StartMenuErrorLog_"+System.currentTimeMillis())));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public StartMenu(Scanner scanner, OutputStream printStream, PrintStream gameErrorLog, GamePlayer player) {
+ this.setScanner(scanner);
+ this.setPrintStream(new PrintStream(printStream));
+ this.setGameErrorLog(gameErrorLog);
+ this.setPlayer(player);
+ }*/
+
+
+
+ @Override
+ public void run(GameStateContext gameStateContext) {
+ this.gameStateContext = gameStateContext;
+ MainWindow.updateTextArea(GameStateContext.getState().getClass().getSimpleName()+"\n");
+ MainWindow.updateTextArea(" XP="+player.getExperience()+" profileName="+player.getProfileInfo()+"\n");
+ this.openMenu();
+ //gameStateContext.setState(new EndGame());
+ gameStateContext.run();
+ }
+
+ @Override
+ public String readWord() {
+ //getPrintStream().println("ProfileInputState.readWord()");
+ String res = getScanner().next().trim();
+ return res;
+ }
+
+ @Override
+ public String readLine() {
+ //printStream.println("ProfileInputState.readLine()");
+ String res = getScanner().nextLine().trim();
+ return res;
+ }
+
+ @Override
+ public int readInt() {
+ int num=0;
+ boolean parsedInt = true;
+ String something = getScanner().nextLine();
+ try {
+ num = Integer.parseInt(something);
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int");
+ parsedInt = false;
+ }
+ while(! parsedInt){
+ something = getScanner().nextLine();
+ try {
+ num = Integer.parseInt(something);
+
+ parsedInt = true; /*nfe skips this*/
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int");
+ parsedInt = false;
+ }
+ }
+ return num;
+ }
+
+ @Override
+ public char readChar() {
+ char res = '?';
+ try {
+ res = getScanner().nextLine().trim().charAt(0);
+ } catch (IndexOutOfBoundsException e) {
+ e.printStackTrace(getGameErrorLog());
+ }
+ return res;
+ }
+
+
+
+
+
+ @Override
+ public void openMenu() {
+ int option = 999;
+ do{
+ MainWindow.updateTextArea("\n_____-----Game-----_____\n"
+ + "\nchoose an option:\n"
+ + "1) play game\n"
+ + "2) back\n"
+ + "0) EXIT\n");
+ option = readInt();
+ switch(option){
+ case 1:
+ GameMapStateInterface mapState = new GameMapState();
+ mapState.setPlayer(player);
+ GameStateContext.setState(mapState);
+ //gameStateContext.run();
+ //gamePack.gameEntityPack.gameLocalMapPack.DefaultWindow.main(null);
+
+ break;
+ case 2:
+ GameTextInputState profileInput = new ProfileInputState();
+ profileInput.setScanner(new Scanner(System.in));
+ profileInput.setPlayer(player);
+ GameStateContext.setState(profileInput);
+ //gameStateContext.run();
+ break;
+ case 0:
+ GameStateContext.setState(new EndGame());
+ //System.out.println("\nThank you for playing the game\n\n");
+ break;
+ default:
+ }
+ }
+ while(option != 0 && GameStateContext.getState().getClass().getSimpleName().equals("StartMenu"));
+ }
+
+ public Scanner getScanner() {
+ return scanner;
+ }
+
+ public void setScanner(Scanner scanner) {
+ this.scanner = scanner;
+ }
+
+ public PrintStream getPrintStreamOut() {
+ return getPrintStream();
+ }
+
+ public void setPrintStream(PrintStream printStream) {
+ this.printStream = printStream;
+ }
+
+ public PrintStream getGameErrorLog() {
+ return gameErrorLog;
+ }
+
+ public void setGameErrorLog(PrintStream gameErrorLog) {
+ this.gameErrorLog = gameErrorLog;
+ }
+
+ @Override
+ public void nextTurn() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void executeTurn(GameCharacter character) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void prelude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void interlude() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void cutScene() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void exitGame(GamePlayer player) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void enterState(GameState state) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void closeMenu() {
+ // TODO Auto-generated method stub
+
+ }
+
+ private PrintStream getPrintStream() {
+ return printStream;
+ }
+
+ private PrintStream getProfileOutputStream() {
+ return profileOutputStream;
+ }
+
+ private void setProfileOutputStream(PrintStream profileOutputStream) {
+ this.profileOutputStream = profileOutputStream;
+ }
+
+ private Scanner getProfileInputStream() {
+ return profileInputStream;
+ }
+
+ private void setProfileInputStream(Scanner profileInputStream) {
+ this.profileInputStream = profileInputStream;
+ }
+
+ public GamePlayer getPlayer() {
+ return player;
+ }
+
+ public void setPlayer(GamePlayer player) {
+ this.player = player;
+ }
+
+
+
+ @Override
+ public void addEnemy(GameCharacter enemy) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/StartMenuTest.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/StartMenuTest.java
new file mode 100644
index 0000000..3d6ac4c
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/StartMenuTest.java
@@ -0,0 +1,50 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.Scanner;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import gamePack.gameStatePack.GameStateContext;
+
+public class StartMenuTest {
+
+ static GameStateContext gameStateContext;
+ static Scanner scanner;
+ static PrintStream printStream;
+ static PrintStream errorLog;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ InputStream in = System.in;
+ OutputStream out = System.out;
+ scanner = new Scanner(in);
+ printStream = new PrintStream(out);
+ try {
+ errorLog = new PrintStream(new File("TestLogs/TestProfileInputErrorLog_"+System.currentTimeMillis()));
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ //gameStateContext = new GameStateContext();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ //scanner.close();
+ }
+
+ @Test
+ public void testRun() {
+ gameStateContext.run();
+ }
+
+}
diff --git a/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/TextInputState.java b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/TextInputState.java
new file mode 100644
index 0000000..03e865a
--- /dev/null
+++ b/SoftwareEngineeringGame/src/gamePack/gameStatePack/gameTextStatePack/TextInputState.java
@@ -0,0 +1,95 @@
+package gamePack.gameStatePack.gameTextStatePack;
+
+import java.io.PrintStream;
+import java.util.Scanner;
+
+import gamePack.gameStatePack.gameMapStatePack.MainWindow;
+
+public class TextInputState {
+ static PrintStream printStream = new PrintStream(System.out);
+ static Scanner scanner = new Scanner(System.in);
+ public static String readWord() {
+ String res = TextInputState.scanner.next().trim();
+ return res;
+ }
+ public static String readWord(Scanner scanner) {
+ String res = scanner.next().trim();
+ return res;
+ }
+ public static String readLine() {
+ String res = TextInputState.scanner.nextLine().trim();
+ return res;
+ }
+ public static String readLine(Scanner scanner) {
+ String res = scanner.nextLine().trim();
+ return res;
+ }
+ public static int readInt()
+ {
+ int num=0;
+ boolean parsedInt = true;
+ String something = TextInputState.scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ while(! parsedInt){
+ something = TextInputState.scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+
+ parsedInt = true; /*nfe skips this*/
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ }
+ return num;
+ }
+ public static int readInt(Scanner scanner)
+ {
+ int num=0;
+ boolean parsedInt = true;
+ String something = scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ while(! parsedInt){
+ something = scanner.nextLine();
+ try {
+ num = Integer.parseInt(something);
+
+ parsedInt = true; /*nfe skips this*/
+ } catch(NumberFormatException nfe) {
+ MainWindow.updateTextArea("something didn't parse to an int\n");
+ parsedInt = false;
+ }
+ }
+ return num;
+ }
+ public static char readChar()
+ {
+ char res = '?';
+ try {
+ res = TextInputState.scanner.nextLine().trim().charAt(0);
+ } catch (IndexOutOfBoundsException e) {
+ printStream.println(e.getMessage());
+ }
+ return res;
+ }
+ public static char readChar(Scanner scanner)
+ {
+ char res = '?';
+ try {
+ res = scanner.nextLine().trim().charAt(0);
+ } catch (IndexOutOfBoundsException e) {
+ printStream.println(e.getMessage());
+ }
+ return res;
+ }
+}
diff --git a/minesweeperAaron/source/out.txt b/minesweeperAaron/source/out.txt
new file mode 100644
index 0000000..79f3eed
--- /dev/null
+++ b/minesweeperAaron/source/out.txt
@@ -0,0 +1,102 @@
+100 100
+.*.*.**..*...*....*.*...........*...***..*...**..*.**.......***...*.*.*...***..*..*...*..**....*....
+.*....*...*...*.*.............***.....*..*..*.....*......*.*.**....*.............*....*..*......**.*
+..**...**...**.....***..*........*....*....*...***.*...........**....*...*...**..*..*..*.*..****.*..
+.....**.**.*.......**.*...*..*.*.*...........***.*...*..*.*.*...***...**......*..*...*.*..**.*......
+..*...*......*..***...*****......*.****....**......*....***...**......*.*.*....*.*......*...*..*...*
+..***......*....*.*.....*...***.*..*........**.........**.*............*...**.**.*.*...**.*.*.**..*.
+...*.**...*.*..........**......**..*.*.*........**.**...*.......*..*....*.....*........**..**.*..*..
+.**.***.*.........**.................*........*.......**..***......*..**.**.............**.***.**.*.
+........*.*.*......*..*......*...*....**.....*......**.**.*.**.....*........*..............*....*...
+.*..........*........*..*.....................*....**.*....*.*.........*.*.....*...*..*.......*.....
+**...**..........*.....*...*............*.....*..*.*....*........*...**.....*.....*...*..*....**..**
+.*..*.*..*..***...*..........*.*..*...*.*..*...........*.*...**......*........*.*.......*......*....
+..******...*.*.*.*.....*.**...**.......*..**.*..**..**.*...*.**..*.......*.**....*....*..*.*.....**.
+..**.**.*....*......*...***...**...*......****.**.................**..*.**.**..*....**.**....**..**.
+*...*.*.*.....*..**....*.............*.*...**.*.**..***....*....*.*.**..........*.*.....*....*....*.
+**.......**..****....*.*..**.*........**...*..*..*.**..*.....*..*....**.....*..*............*.....*.
+...***..*...*..*.*.....**.***.*...*.*....*.........*....*...*.**....*....*..*.*...**......*.*..**..*
+.***.*.**..*......*........**......**.*.***..*...***.....******..***...***....*..*.........*..**.*.*
+.......**...**...*....**...*.....*.*.*......*........***.*.**..*.....*..........***.......**..**.*..
+........***....*....*..*..**.........*.*.........*....**..**.*...*.*....*....*.*....*.**.*..*.....*.
+...*..*.......*.....*...**.........*...............*....****......*..**.*..*.......*......*......*..
+..*....**.**..*....*.*.*.......**..*..*......*.........*......**........*.*..**.............*.**..**
+***..***......*...**.....*.*....*.*......*.....*..*..****...**.*.....*.**...*.*..***..*...***.......
+**....*.***...*.**.**.*..*..***...*....*...*....***..*.*..**...*.........*....*...******..**....*.**
+*..*..**..**..***..**....**....*....*...*..*...........*....*..........*..*..*......**.*.**...*.**.*
+...........*.*...*.*....**....*.*****......**..*..*.*.*........*.........*...*..*..***.*.*..*.......
+*..***............*....*.*...**.**.**.*......*.*.***......**.*.*....*..*..*.........**.*...*....*.**
+**.*.*.*....***.....*.**.....*........*.*..**....**.*....*..*....***.*.....*..***....*..*....**.*...
+.....*.*...**.*.**..........*...*..*...*...**...*.....**................**.....**.**..*..*.*..*.*..*
+..**....*......**.*........*.****.*....***.**.*...*..***.*.*......*......*****.......*.*.....*****..
+....*..*..*.*....*.**.*.*...**.....**.....*.....*..*.*..*.......*......*...*....*...*..*....*...*.*.
+...*.....**........**..........*.**....*.**.*..*.*......*.....**....*.......*.....*.....*..*.*..*...
+.*..*......*.***...*....*.*...........*..*.**..*..*.....*......*...*...*.........**..**........*....
+......*...***.*..***.*.***..**.*..**...*......*......*.....*.......***.*........*....*...*.*...*...*
+........*.*.*.......*.....*.**.*..*...**.....**..*.*.......*.*..............**...*.*...****..**.....
+*.*......*.*.**...*..*.*.***.............*.*.*....*...*.*....***..*..**.*.*...*.....*..*...*.*..**..
+.*.....*..*...........*.*.*.*....*..*..**...**.....**....*..*.*....*......*...**.*......*......**...
+.*...**...*....*........*.*.....*..*.....**..*..*....*...**.*.*..*.*.....*...*.....*.*..**.*...*.*..
+**.*.**..*..............**.*........*.*..*....*....*..*...**..*.....**..*.*.....***.......*.......*.
+...*.*....*.....***.....*....***...*......*.**...*...*.**.*.*..*....*....**......*.**.......*..*....
+.**...*..**..*.**...........*....*.*.......**.*..............**...**........**........*..*****......
+....**..*.......*..*..*.*.*...........*......*..*..*...*....**....*.*...**.....*.**.**.........**..*
+....*...*......***......*.**.......*....*.........*.***......*....****.*.*.....*...*.*.....*..*.**..
+..**.*...*...*..*...........*..*.....*.***........***.***..*.**.*..**.....*.**........*.........****
+*.*..*..**..*............*....**.*...**..*..*..**........*.....*.........**.*....*......**.*.*......
+.*...*.*.....*...****..**...*.*.****.....*....*....**.*......*..*..***...*..*.*...**.....*..*.*...*.
+.*.....*...*.*..*...*...*........*.****.*..*.**......**.*...**....*..**...**...****.....**....*.*.*.
+...*......**....*...***.....**......*.*.*.....*.*.**..*.....*..****.*.......**.***..*...........*.*.
+....*.......*...**......**......*.......*..**......*.*.........*.*..*.*.*...**.*...*......*****....*
+*.**..*.***..***....**.*.*..**........*..*............**..*.**.*.......*.**......*...........*.....*
+...*******.*.*..........***...*....*.*..*.......*......*..**..*.......**....*..........*...*.*...**.
+..........*.....*..........**..**..........*.*...*....*.*.....*....*....**....**.......**..**.**.**.
+..*..**..**.**......*...........*...*......*.....*...*..*..****.*.....*..*..*....***.*......*.*.*...
+..****.......*.....**..*..........*..*.**...*..*..*.....**......**....*...*......*.*.*......*.....*.
+*...*....*...**..*.**.*..*.*...*...**....*.........*****.*.*....*.........*.*...***....*..*..*.**...
+...*..*.*..*..*****..*..*......*.*......**....****......*.**...*.*......***...*.....*..*.*.*..*...*.
+.....**..*....*.*..*..*...*...*.*..****.......**.*****...*..*.........*....*....**........**...*....
+....*.*...*..*..*..*.*........*.*.**..*.*...*.*..........***.....*..*.*.*..*.*......................
+**.*..**.*...*...**..***.*......**.......*..*.........*...*.*..........*..*.*.***.....*.*.*.......*.
+.*..*....*.....**.*..*.**.**..**..*.*..*.....*.*.*............*.....*....*..**.*......*....*.**.....
+.*......*.*....*.*....**...*...*......*..**....*...*.**........*.....*...*.....*..*.*.*..*......*..*
+...*...*...*...***.*.*....*....***............*****..*..*...***...**.*.**...*****...*...**..*.......
+**.*.**....*.......****.***.....*.....*...*....*......*...***...**.****.*..*.*..*...*....*..*....*..
+**...*....*....*......*...*.....*...*..*.....***...*..**.*.....*........*.........*....***..****..*.
+....*...**...*.....*.*..*..*...***.*.**.*.........****...*..*...***.*....*.....*..**.*...*..*......*
+...***..*.....*....**...*........****.......*.***..*.*.**...*..........*...**...*.......**..*.*.....
+.....*...*...*..***.*..**..*..*....*.......**......*........*.....*.*.*..**..**.*....****..**.*.....
+...*.*...*...*.**....**.*...........*.............*..*......*..****.*.*..**......*...*..*.***.*.**.*
+*.......**.........*.*.**.....*...*.*..***...*.......****...*..*.....*.**......*.***.**.*..........*
+.......**....***..*..*.*.......**.*.*.*......**.*.*.......*.....*....**.....*.***..*..*.**..*.**.**.
+........**.*.**..*...*.*.*.*..*...***....*...*...*...**.......**..*..*..........*.....**.**.***.....
+*.****..................***......***...*.*........*..*****....**.**..*...*.*...*.***........**.....*
+...***..*..*........*.**.*.*.......*..**..***.......*......*...****..*....*...*..**...***...***..*.*
+.*.....**..........*..*.*.......*.*.**....**....**...**..**......*...**...**.*..*...*....*.*....***.
+*.**...*.**..*....*.*...**...*.*....*..*.....*...*........*.**......*..*..........**..**.*..*...*...
+....*..**...*.....*.....**....*.....*..*.......*......*.*.*..*.**......**.*......*...*..**..........
+..*.**..*...*........*...*.***....*....*..............***.*...*.........*.***..*.....**....**...*...
+.....**..**......*.*...*.*.*...**.*..........*..*.............*.*.*.*...*...........**.*..*..**...*.
+...........**.....**...........*.....*..*..*.*.*...*...*..*.*.*...*...**.*...*.*..*...*...*.....*...
+.*......*..*..*....*......*.........*....*......**..*.**.**.*.*......**.*.....**...**.....*.*..*.*..
+.....*..*...*.**..*..*..***.**.*..*.*...........*....*.......**.**....*....*...*..**...*....*.......
+......**.*.**.*.*.........*...*...*......*..**....*..*.........*......*.*.....*........*.*.....*.*.*
+..*.*......*.**.....**........**.**..*..**.***....*.*...**..*.*..*.*..*....**...**.....**.*..*....*.
+.....****.*..*.....*...*.....*............*.*....***...............*...*....*.*..*.*..****.....*....
+*.....*...*.........*.......*.......*.*..*.........*.......*..***.**...*..***........*...***.....*.*
+.**...**........*.*.......*.*.........*.....**..**..*..*....*..**.*..**.*....*.*...*..**.......*....
+..*..*.........*.*.***.*.*....*....*........*.*..*..*.*.*........***.................**.*.*.........
+***..*..........**.....***...*..*..**.*.........*.*....*....***....**........*..*.*.**....*.....*.*.
+*.*.**.*.*...*.........*.....*......*..*.*.*.......**..........**......***.*.*..***..*...**..*.*.*..
+......*...*.**.***...*..........*.***...*...*.**.*......*.**...*............*.....****.*.......*..*.
+.*...*......*.**....*..*...*..*.*.....*..*..*.**.*..*........*.....*..*...***..*...**.*...*.........
+.*..*.*.**...*.*.......*.*...*....*...*...***.***...*.*...*....**..**.**..*..*.*..*.......*..*.....*
+**..........*.............*.....*.***.**.......**..**..*...*.*.*.*.*.*.**....**..**..*...*.*...**..*
+***...**.*......*.*..*.*..**...***.*...**.*.........**.*.******.*...**.***.*..*....*...**.....**..*.
+...********...****.*.*....*...*...*.......*.**...*.*.*.....**..*..**.*...**.*...**.*.****.**...*..*.
+..*..*..*..*..*...*.*.*.**...****.......*..*....*.*.*.*..*.****......**.*..*.**..**.*...*....*****.*
+..*...****......*****...**....*.*..**.**..**...*......*.**.*.*...*..***...........*....***..*..*****
+....*..**...*...*...*..............*....**.*..**.***..............*...**.*....***...............*...
+.*..*..**....*...*.....*.*....*..........**....*.......**..*.....*.*.*..**...*..*....**......*.*..**
+.***..*.....*.*....**.........*.........*.*.*..*.*....*.*..*.*.*..*.*...**....*.....*.***..***..*...
+0 0
diff --git a/minesweeperAaron/testFiles/testFile1.txt b/minesweeperAaron/testFiles/testFile1.txt
deleted file mode 100644
index 5832c98..0000000
--- a/minesweeperAaron/testFiles/testFile1.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-5 6
-..*.*.
-.***..
-..*.**
-..*...
-*.*.*.
-4 4
-...*
-***.
-...*
-...*
-1 1
-*
-
-100 100
-..*....*..*....**......*...*....***.*.....***.**.*****......**....*...*....*...*.........**.*.......
-*.....**.......*..*...*...*.**....*.*.**..*..*...****...*......*.........*..*..*...****..*.**.*...*.
-..*......*.......*.*..*....***...*..**.......*****....*****.****..*..*......**..*.*.*..**...**....**
-......*.....*.*.**....*..*.**..............*.**.**...**.*...*..*..****.*....*....***..**............
-...**..*..........**...*.**.*.......***.**.*..*....*...*..*...*...**..**......*.*..*..*.*......*....
-.*........*...*....*.*......*.*...*........................*...*.*...**.........*....*.**..*..*..**.
-.....*...*......***..*......*.**.*.*.....*.....*...*.*.*.*..***......**.*..*..*....*...........*...*
-*.**.......*.****.*.*.**..*.*...****.*...*.*...*..*.***...**.*.**..*..*.*......*...*..*.*..*..*...**
-...*...*...........*.........*......*..*...*..**...**...**.*....*.*....**..***.*...*.*....*****...**
-.**.......*..*..........*....*..*.......*..*.*.....*.......*...**...*......*.*...***....**......*.**
-*..*.......*.*..*...*.....**.*.......**..**...*.**...*......**.*....**....*....*.*.*..*..*..**.*..**
-**.*....*.*..*....*..*....**....*.......***...*.**..*...*.***.*.*....**.....*.*.*.*..**......*..**..
-*..**..*......*...***....*.*..*...*.*.***..*.......**.**..**..**.***.*..*..**..*.*..*..*......*.**.*
-.*..**.....*.*.......*....*.*................*..*...*.**..*..*.*...**..*...**...**.........*........
-.**....****...*.......**.*..*....*...*......*...*...*.*....*..*............*........**.***..*.*.....
-..*.****..****.*...*..***....*......*.*.*.*..*..*.*.**....**..*...***.....**.**..........*...*......
-.*...*....*.******.**.....*....*..*.*.............***........*.*..*.*.......**...............***.**.
-.*......**...*...*.......*..*****..*..*......**..*.*..*.*.**....*....*.*.*.........*....**..*..*.*..
-..*....*...*..**..*...........*.*.*...*.**.*..*..*.**....*.....**.**.*.......**...*....*...**..**...
-.**.*.....***.**.*...........**....**......*......*.....*...............**...*..........*.*.***.*...
-.*.*........*.*....*...*.*...*...**..*..*..*..**.**.*.**........*....*...........*...*..*..**.......
-.*......*...*.*.******...*....*..*****..*......*.....*.*.....*..*...**...*..**........*....*...**...
-.**....*...*...**......**.**........*.*..*..............**.*.**...***..*.*....*.*.....*.*.*..*..*.*.
-**.****...*...**.....*..*.............**.*..*.*...*........*.***...*..*.*.*..*.*.*.....*.....*.*..*.
-..*...*....**......**.*.*..........*..**.......*..........*....***.***...*.....*..*.*.*.*.......****
-..*..*.......**.**..**..*.**....**..**....*...**.....................*.....*..******.*.......*......
-..*..*..*..*.***.***...........*..**....*.*..*.***...*.....*...*.....*.*..*..***......*...*.........
-.......*..*....**.**..***..**.**.........*..*...**...*..........*........*...*...**...*.....**..**.*
-.*....*.......**....*...*..*..*....*..*.*.....*...**.....**.*..*.*.........*....*......*..*..*.*..**
-*.*.....**..*..*......*.*.**.....*....**........*.*...*....***...*..*...........*..*.*.*........*.*.
-......*....***.*.*..*.....*..*........*.**.*....*....****...*....**..*.......*.*..*.*...**..**......
-.*.*.....*.**......*.................*.*.*.***....**....**...........*.***..*....*..*...............
-***...*..*...*..*.**.....****...*....*..*......*...**.......**.**.*.****.*..***.....*.....*..*..*..*
-...*..*.*...**.*..**...*..*...*.*.**......*.*.*......*.***.***...**....*..*..*.***......**..**.*.**.
-**...**....**.****.**...........*..**...*..***....**..*.*..*.......***..****...*.*...*.*...**..**...
-..............*.*..*.*......******..**....*..*..*.**.*....*...*.*.......**...***...**.*.....*.*...*.
-.**..*....***.**....*.*...*.*.*.....*.**.**.*.......****..**.*.......*..............*...*.*..*.....*
-.*..*.......*.*......*..*......*.**..*..........**....*..**.*.*..*......*.......*.***......*.....**.
-**.*......**....*....*.*.......**..**...*.*....*.....**....*.*.*...**.*..........***.......*...*....
-.**..**...*...**..*.....*....*.**..*.*........**.....*.*..*****.*..*.........*...*..*.**.....*......
-****...*..*.**.**..**...**..*.*..*...*...**..*.*.*.........*......*...*....*.*.*.....*...*..*...*..*
-.*.*.........***.....**.*....*....*.**.*.......**...*....*.*....*.............**......*...*****.....
-****..*.*.........*.*..*......**..*.****...*.......*.....***......***............*.*.**........*..*.
-....*....*...*...........**.....*..**..*...**...**.*..*...**....*......**........*....***.*....*.**.
-.........*.*.***....*****........**..**.....*.........**.**...*.*.*.*.**...*.*.*..*..............*..
-....*..**..*...*****.*.*...*....*..*...**.*..*....*.....*.*..........*.........**..*.*....*...*...*.
-*.*.**.***..***...*.*...*..**.....*.*..*....*............*..*...**.*..*.*.......*...**...***...*...*
-...*..*...*..................*.*.*..*.***..**......*....**...*.....*...*...*.*..**...*...*.*.**..*..
-*..**....*..**.*..**.**..**.*..*.**....**..**.*.*..*.......*...*.*..*....*....*....*.*........*.....
-.*.*....*....*...*......*.***.....**...*.............*.***...**.**.**....*..*..*.*.*...***.**.*..*.*
-...***.**........*...*...*..*.....*.*........................*.....**.*...*..***....**....*.*..***..
-....*.......*..*..**.*....**.*......*...*....*..***...*....*.****............*...*......***..***..*.
-.*.*.....*...***...*.**.........**.*.*..*.***.*.****.....***........*....*.****.*..*.....*....**..*.
-...*....*..*.*...*.*.*....*...**..*..*...*...*....*.........*..*..*........**.*...*..******..*.*....
-..*******...*..**.*......*....*.......***.*........**..........*..*....*.**..*.*..**....*..*.**....*
-..*..****...*....****....**..*........*.*...*.*.......*.*..**.*..*....**.*.....*.*.*......*..*.****.
-.*...*....*....*..**...*..........**.....*.*....***..........****.*....*.*..*..*****...*....**.*..**
-......*..*...**...............*.....*.*...*.........*.*.....*....*..*.........*..*....*....***..*.*.
-..*.**...*...**.......*...*.*.**..****.*...*..**..**.........*....*...**.........*.***..*......*..**
-.*.*........**.....*......*..**...**.*.*......*..*.....*....*.*...*.....**.......*..*.......*.*.*.**
-...*......***..**..*....****.......***.....*..........*.*..*..*.*..**....**..........*.....******.**
-...*.*....**........**..*...***..**..**......**.*......**.*.*.......**..*....*...**..**...*.......*.
-...**.....**...*....*........*....*.*.*.**..***..*.....**..*....**..*...**.*...**.*..***..*...***...
-..*..**.....*...*...*.*...*...*..**.........*.*.*.*..**.....**...*........*..**.***.*****....**.....
-*....*.*..*.*..*.......*..*.*.***.*.**.*..*.*.*..**.****.****...*.*..*...**...*.....*.........*.*...
-.*.....**...*..*..*.*...***..*......*........*.*.***.......*..*.***..*....*....*..*....****....*...*
-..*.*..**....*......*..*........**.....**..*..*.....*..*............*....*...*.***...*.**.**.*...**.
-***.***..***.**.*.*.*..*......*...*..*......*..*.....**...*.*.......*..**.*.*...*...*.*.............
-....*...*.**.*.*..*..**...**....**..*..*...**...*.*.......*...***.*...**....*.**.......*...*...***..
-..*..........***...*.***..*.....**.*.*.*...*..*..*..**.*.**....*.*...*....*...*..*...*..**.*.*.*..*.
-.**.....**..*......*.*.....*.*...**.**...**.*.....*.*..**.........*.....*..*...*...**..*.*...*.*....
-..**.*..*....*..*....*...**.*...........*..*...**...*.*.*....*..****...**...*...*..*..*.....*...*..*
-***..*.***.***..*...*.*....*..*..**.*.*.....*........*......*.**..***....*......**......**.**.*..*..
-*.*......**.....*.*...*...**....*..*.*..*....***......*..**............**..*.....**.....*..**..*....
-....*........*....*.....***....*...*.*.**.*....*.....*..*........*.*..**....**..*.....*.***...*...*.
-*.*.....**..*.*.****...*..**.........*..****.*....*...**.....*....*..**.*.*....*..**..*......*.*..**
-............*...**.*.*......*...*.*.*...*...*....*.****..**...*.....*.*.**..*.*.*.......**.......*..
-**.*.**..**..*.**..*..*.....*.***.*.*...*..*.*.....**.*......***..*.*..........*..*.***......*....*.
-...*...**.............**.**.*..*..****...*...*....*..*..*.*.*.....**.**.......**.....*..**...*...*.*
-.*.*..**...*..***.....*.*..*.....*....*.*...*....*.**.......*.*..**..*...**...**.........*.*.*....*.
-.*.*.......*.*.*.....*..*..*....*.......*.*....*....*.........*...*.........*....*.*..*...**........
-....*.*..**......**...*...*****....*....*....*..**...*.*..*....*.........*...*...***....*..*......*.
-.*...*..*.*..*.***.*..*...*..*.***..*.*.............**.*.*.....*.....*.*.**..*.*.*...**..*.*****....
-.*......*.*.......*..*....*...**.***......*..**.....*.**......*.**..*...........*..*.*.....*..**..*.
-*.*.......*.*.....**..*.*...*...*..**...*..*..*...**..*..*.**...**.*...*.***.**..*............*.....
-........*..*.*......***.*..*...****......*..*.*.*.*..*.*..*.....***...***.*..***..*.*.*.*.**.***....
-..*..*.*...*....*..........**....**....*.*..*.*...*.**..*......*......*........**.*.*..**.*.*.*....*
-*.*..*......*.*.......*.**..*.***...*...****........*.***.*......*..*..**.**.***..**...*.*....**..*.
-....**..*...**..***.*...........*..*..*.**.*.*.........*.*...*............****...*..*...***....*.*..
-*...............*...*.........**....**....*......*......*...*...*..*.**........**....**...*.......*.
-...*..*..*.......**........*...**...**.*......**.......*.***....*...***.....**.*..*..*....**.*.*.*..
-...*..**............**..*..*....**..*.***......*.*.**.*.***..................*..**.*......*...*.*...
-..***...***.*.**.....*.**.*..**.***..*....*..**.....*.......**.**.......*.*.*.***.*....**.*....*.*..
-....*........*....*....*....*...*...........*......*...*****.**.*................*....*..*..**....**
-.**..*...*.............*......*.*....*.....**..**..*.*........**......*.*...*..*.***..*.....*....***
-....*...**...*..*...*..**........*..............*.....*.........**......*.*........*...*...*....**..
-*.*..*..........*.....**.*.*.*..*....**....*..*****..**......*..*..*..***.*.*.*.*...****.......****.
-...*...*...*......**.*..*.***..*....*.*..***...*.*...*.*.*.*..***...*.*.***.....*..*.*.....***....**
-..*......*....*..*.***....*.........**.**..***...*....**...*....*.......*..*.*...*....*.........***.
-...*.*...**..*.**...*...*..*..***...**..***...*.*..***.*....*.*......*..**.*.....*.*...**..**..*..*.
-0 0
diff --git a/newFile.txt b/newFile.txt
deleted file mode 100644
index e69de29..0000000