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