Advertisement
Guest User

Untitled

a guest
Jul 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.06 KB | None | 0 0
  1. package de.sirrio.vermillionFighter;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import de.sirrio.framework.AbstractGame;
  7. import de.sirrio.framework.Enemy;
  8. import de.sirrio.framework.KeyCode;
  9. import de.sirrio.framework.Player;
  10. import de.sirrio.framework.Projectile;
  11. import de.sirrio.framework.GameObject;
  12. import de.sirrio.framework.GraphicsTool;
  13. import de.sirrio.framework.TextObject;
  14. import de.sirrio.framework.Tile;
  15. import de.sirrio.framework.Vertex;
  16. import de.sirrio.framework.World;
  17. import de.sirrio.framework.sound.SoundManager;
  18.  
  19. public class VermillionFighter<I> extends AbstractGame<I> {
  20.  
  21.  
  22. /*
  23. *
  24. * Simple statemanagement of the game which determine if the game is
  25. * in the menu, game is running or game is lost/won
  26. *
  27. */
  28. private enum STATE {
  29. MENU,
  30. GAME,
  31. WIN,
  32. LOST
  33. }
  34.  
  35. static final int SCREENSIZEX = 800;
  36. static final int SCREENSIZEY = 600;
  37.  
  38. static final int TILESIZEX = 32;
  39. static final int TILESIZEY = 32;
  40.  
  41. static int WORLDSIZEX = 0;
  42. static int WORLDSIZEY = 0;
  43.  
  44. static int enemiesLeft = 0;
  45.  
  46. static final double MAXGRAVITY = 10;
  47.  
  48. STATE state = STATE.MENU;
  49.  
  50. List<Tile<I>> tiles = new ArrayList<>();
  51. List<Enemy<I>> enemies = new ArrayList<>();
  52. List<Projectile<I>> projectiles = new ArrayList<>();
  53. List<TextObject<I>> uiTexts = new ArrayList<>();
  54.  
  55. TextObject<I> textPlayerHealth;
  56. TextObject<I> textEnemiesLeft;
  57. TextObject<I> textDebug;
  58. TextObject<I> newGame;
  59. TextObject<I> nextLevel;
  60.  
  61. public VermillionFighter() {
  62. super(new Player<>("playerRight.png", new Vertex(0, 0), new Vertex(0, 0)), SCREENSIZEX, SCREENSIZEY);
  63.  
  64. SoundManager.loopSound("background.wav");
  65.  
  66. player.getPos().moveTo(new Vertex(30, 50));
  67. TextObject<I> gameTitle = new TextObject<>(new Vertex(90, 125), "vermillionFIGHTER", "ARIAL", 80, 227, 66, 52 );
  68.  
  69. uiTexts.add(gameTitle);
  70. uiTexts.add(newGame = new TextObject<>(new Vertex(SCREENSIZEX/2, SCREENSIZEY/2), "newGAME", "ARIAL", 75, 227, 66, 52 ));
  71.  
  72. getUIOss().add(uiTexts);
  73.  
  74. }
  75.  
  76.  
  77. /*
  78. * this method loads a new level and resets the old variables of the logic
  79. */
  80. public void loadLevel(String levelName) {
  81. state = STATE.GAME;
  82.  
  83. tiles.clear();
  84. enemies.clear();
  85. projectiles.clear();
  86. uiTexts.clear();
  87. getGOss().clear();
  88. getUIOss().clear();
  89.  
  90. World<I> world = new World<>(levelName, TILESIZEX, TILESIZEY);
  91.  
  92. WORLDSIZEX = world.getWorldsizeX();
  93. WORLDSIZEY = world.getWorldsizeY();
  94.  
  95. getPlayer().getPos().moveTo(world.getSpawnPoint());
  96.  
  97. enemies = world.getEnemies();
  98. tiles = world.getTiles();
  99.  
  100. enemiesLeft = enemies.size();
  101.  
  102. uiTexts.add(textPlayerHealth = new TextObject<>(new Vertex(5, 40), "Health: " + player.getHealth(), "ARIAL", 35, 227, 66, 52 ));
  103. uiTexts.add(textEnemiesLeft = new TextObject<>(new Vertex(5, 60), "Enemies left: " + enemiesLeft, "ARIAL", 15, 227, 66, 52));
  104. //uiTexts.add(textDebug = new TextObject<>(new Vertex(300,300), "DEBUGTEXT", "Arial", 100));
  105.  
  106. getUIOss().add(uiTexts);
  107. getGOss().add(enemies);
  108. getGOss().add(tiles);
  109. getGOss().add(projectiles);
  110. }
  111.  
  112. /*
  113. * camX and camY an the offsets are used to move the position all gameobjects from
  114. * the worldspace to the corresponding screenspace.
  115. * camera "follows" the middle of the player.
  116. */
  117. @Override
  118. public void render(GraphicsTool<I> g) {
  119. double maxOffsetX = WORLDSIZEX - SCREENSIZEX;
  120. double maxOffsetY = WORLDSIZEY - SCREENSIZEY;
  121. double minOffsetX = 0;
  122. double minOffsetY = 0;
  123.  
  124. double camX = player.getPos().x + player.getWidth()/2 - SCREENSIZEX/2;
  125. double camY = player.getPos().y + player.getHeight()/2 - SCREENSIZEY/2;
  126.  
  127. if (camX > maxOffsetX) camX = maxOffsetX;
  128. if (camX < minOffsetX) camX = minOffsetX;
  129.  
  130. if (camY > maxOffsetY) camY = maxOffsetY;
  131. if (camY < minOffsetY) camY = minOffsetY;
  132.  
  133. getPlayer().paintTo(g, camX, camY);
  134.  
  135. for (List<? extends GameObject<I>> gos : getGOss())
  136. for (GameObject<I> go : gos) {
  137. go.paintTo(g, camX, camY);
  138. }
  139.  
  140. for (List<? extends GameObject<I>> uos : getUIOss())
  141. for (GameObject<I> uo : uos) {
  142. uo.paintTo(g);
  143. }
  144.  
  145. }
  146.  
  147.  
  148. /*
  149. * every collision and movement happens here
  150. */
  151. @Override
  152. public void tick() {
  153. if (!isStopped()) {
  154. // Apply gravity to player
  155. if (getPlayer().getMotion().y < MAXGRAVITY) getPlayer().getMotion().move(new Vertex(0, 0.2));
  156.  
  157. // Projectile collision checks
  158. for (Projectile<I> pr : projectiles) {
  159. if (!pr.hasCollision()) continue;
  160.  
  161. for (Enemy<I> en : enemies) {
  162. if (pr.touches(en) && en.hasCollision()) {
  163. en.getDamaged(pr.getDmg());
  164. if (en.getHealth() <= 0) {
  165. enemiesLeft--;
  166. textEnemiesLeft.text = "Enemies left: " + enemiesLeft;
  167. en.dispose();
  168. }
  169. pr.dispose();
  170. }
  171. }
  172.  
  173. for (Tile<I> tile : tiles) {
  174. if (pr.touches(tile) && tile.hasCollision()) {
  175. pr.dispose();
  176. }
  177. }
  178.  
  179. pr.move();
  180. }
  181.  
  182. // Enemy collision checks
  183. for (Enemy<I> en : enemies) {
  184. if (!en.hasCollision()) continue;
  185.  
  186. if (en.getMotion().y < MAXGRAVITY) en.getMotion().move(new Vertex(0, 0.2));
  187. en.calcMove(getPlayer());
  188.  
  189. for (Tile<I> tile : tiles) {
  190. if (!tile.hasCollision()) continue;
  191.  
  192. if (en.touchTop(tile) && en.getMotion().y > 0) {
  193. en.setMotion(new Vertex(en.getMotion().x, 0));
  194.  
  195. // The next line fixes a issue when the enemy falls "too fast" and
  196. // gets stuck in the floor - its dirty and i don't like but its there and it kind of works
  197. en.getPos().moveTo(new Vertex(en.getPos().x, tile.getPos().y - en.getHeight()));
  198. }
  199.  
  200. if (en.touchBottom(tile) && en.getMotion().y < 0)
  201. en.setMotion(new Vertex(en.getMotion().x, 0));
  202.  
  203. if (en.touchRight(tile) && en.getMotion().x < 0)
  204. en.setMotion(new Vertex(0, en.getMotion().y));
  205.  
  206. if (en.touchLeft(tile) && en.getMotion().x > 0)
  207. en.setMotion(new Vertex(0, en.getMotion().y));
  208. }
  209.  
  210. en.move();
  211. if (getPlayer().touchLeft(en)) {
  212. getPlayer().getPos().move(new Vertex(-10, -1));
  213. getPlayer().getDamaged(en.getDmg());;
  214. textPlayerHealth.text = "Health: " + getPlayer().getHealth();
  215. }
  216. if (getPlayer().touchRight(en)) {
  217. getPlayer().getPos().move(new Vertex(10, -1));
  218. getPlayer().getDamaged(en.getDmg());;
  219. textPlayerHealth.text = "Health: " + getPlayer().getHealth();
  220. }
  221. if (getPlayer().touchTop(en)) {
  222. en.getDamaged(en.getHealth());
  223. en.dispose();
  224. enemiesLeft--;
  225. textEnemiesLeft.text = "Enemies left: " + enemiesLeft;
  226. }
  227. }
  228.  
  229. // Tile collision checks
  230. for (Tile<I> tile : tiles) {
  231. if (!tile.hasCollision()) continue;
  232.  
  233. if (getPlayer().touchTop(tile) && getPlayer().getMotion().y > 0) {
  234. getPlayer().setMotion(new Vertex(getPlayer().getMotion().x, 0));
  235. getPlayer().canJump = true;
  236.  
  237. // The next line fixes a issue when the player falls "too fast" (like enemies) and
  238. // gets stuck in the floor - its dirty and i don't like but its there and it kind of works
  239. getPlayer().getPos().moveTo(new Vertex(getPlayer().getPos().x, tile.getPos().y - getPlayer().getHeight() + 3));
  240. }
  241.  
  242. if (getPlayer().touchBottom(tile) && getPlayer().getMotion().y < 0)
  243. getPlayer().setMotion(new Vertex(getPlayer().getMotion().x, 0));
  244.  
  245. if (getPlayer().touchRight(tile) && getPlayer().getMotion().x < 0)
  246. getPlayer().setMotion(new Vertex(0, getPlayer().getMotion().y));
  247.  
  248. if (getPlayer().touchLeft(tile) && getPlayer().getMotion().x > 0)
  249. getPlayer().setMotion(new Vertex(0, getPlayer().getMotion().y));
  250. }
  251.  
  252. // Move player at last
  253. getPlayer().move();
  254.  
  255. }
  256. }
  257.  
  258.  
  259. /*
  260. * isStopped is extended to clacluate the win or lose conition (playerhealt < 0 or enemies < 0) and
  261. * hanndle all the gamestates to actually stop the game
  262. *
  263. */
  264. @Override
  265. public boolean isStopped() {
  266. if (state == STATE.MENU || state == STATE.WIN || state == STATE.LOST ) return true;
  267.  
  268. if (getPlayer().getHealth() <= 0) {
  269. TextObject<I> lost = new TextObject<>(new Vertex(SCREENSIZEX/2, SCREENSIZEY/2), "YOU LOST", "ARIAL", 75, 227, 66, 52 );
  270. uiTexts.add(lost);
  271. uiTexts.add(newGame = new TextObject<>(new Vertex(SCREENSIZEX/2 + 100, SCREENSIZEY/2 + 85), "restartGame", "ARIAL", 50, 227, 66, 52 ));
  272.  
  273. state = STATE.LOST;
  274.  
  275. return true;
  276. }
  277.  
  278. if (enemiesLeft <= 0) {
  279. TextObject<I> win = new TextObject<>(new Vertex(SCREENSIZEX/2, SCREENSIZEY/2), "YOU WIN", "ARIAL", 75, 227, 66, 52 );
  280. nextLevel = new TextObject<>(new Vertex(SCREENSIZEX/2 + 100, SCREENSIZEY/2 + 85), "nextLEVEL", "ARIAL", 50, 227, 66, 52 );
  281.  
  282. uiTexts.add(win);
  283. uiTexts.add(nextLevel);
  284.  
  285. state = STATE.WIN;
  286. }
  287.  
  288. return false;
  289. }
  290.  
  291. public void keyPressed(KeyCode keycode) {
  292. if (keycode != null && !isStopped()) {
  293. switch (keycode) {
  294. case RIGHT_ARROW:
  295. getPlayer().walkRight();
  296. break;
  297. case LEFT_ARROW:
  298. getPlayer().walkLeft();
  299. break;
  300. case UP_ARROW:
  301. getPlayer().jump();
  302. break;
  303. case VK_SPACE:
  304. Projectile<I> p = getPlayer().shot();
  305. if (p != null) projectiles.add(getPlayer().shot());
  306. }
  307. }
  308. }
  309.  
  310. public void keyReleased(KeyCode keycode) {
  311. if (keycode != null && !isStopped()) {
  312. switch (keycode) {
  313. case RIGHT_ARROW:
  314. if (player.getMotion().x > 0)
  315. player.stopWalking();
  316. break;
  317. case LEFT_ARROW:
  318. if (player.getMotion().x < 0)
  319. player.stopWalking();;
  320. break;
  321. }
  322. }
  323. }
  324.  
  325. public void mousePressed(int x, int y) {
  326. if (state == STATE.MENU ) {
  327. if (y > newGame.getPos().y - newGame.getHeight() && y < newGame.getPos().y && x > newGame.getPos().x) {
  328. getPlayer().resetHealth();
  329. loadLevel("map1.xml");
  330. }
  331. }
  332. if (state == STATE.WIN) {
  333. if (y > nextLevel.getPos().y - nextLevel.getHeight() && y < nextLevel.getPos().y && x > nextLevel.getPos().x) {
  334. loadLevel("map2.xml");
  335. }
  336. }
  337. if (state == STATE.LOST) {
  338. if (y > newGame.getPos().y - newGame.getHeight() && y < newGame.getPos().y && x > newGame.getPos().x) {
  339. getPlayer().resetHealth();
  340. loadLevel("map1.xml");
  341. }
  342. }
  343. }
  344.  
  345. public void mouseMoved(int x, int y) {
  346. if (state == STATE.MENU) {
  347. if (y > newGame.getPos().y - newGame.getHeight() && y < newGame.getPos().y && x > newGame.getPos().x) {
  348. newGame.fontSize = 77;
  349. newGame.changeColor(150, 30, 20);
  350. } else {
  351. newGame.fontSize = 75;
  352. newGame.changeColor(227, 66, 52);
  353.  
  354. }
  355. }
  356. if (state == STATE.WIN ) {
  357. if (y > nextLevel.getPos().y - nextLevel.getHeight() && y < nextLevel.getPos().y && x > nextLevel.getPos().x) {
  358. nextLevel.fontSize = 52;
  359. nextLevel.changeColor(150, 30, 20);
  360. } else {
  361. nextLevel.fontSize = 50;
  362. nextLevel.changeColor(227, 66, 52);
  363.  
  364. }
  365. }
  366. if (state == STATE.LOST) {
  367. if (y > newGame.getPos().y - newGame.getHeight() && y < newGame.getPos().y && x > newGame.getPos().x) {
  368. newGame.fontSize = 51;
  369. newGame.changeColor(150, 30, 20);
  370. } else {
  371. newGame.fontSize = 50;
  372. newGame.changeColor(227, 66, 52);
  373.  
  374. }
  375. }
  376. }
  377. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement