Advertisement
Guest User

rff

a guest
Apr 1st, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.88 KB | None | 0 0
  1. package snowstorm.games.knightraid;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Random;
  6.  
  7. import android.util.Log;
  8. import android.view.Gravity;
  9. import android.widget.Toast;
  10. import snowstorm.games.knightraid.objects.Enemy;
  11. import snowstorm.games.knightraid.objects.InnerSanctum_LB;
  12. import snowstorm.games.knightraid.objects.InnerSanctum_LT;
  13. import snowstorm.games.knightraid.objects.InnerSanctum_RB;
  14. import snowstorm.games.knightraid.objects.InnerSanctum_RT;
  15. import snowstorm.games.knightraid.objects.Klok;
  16. import snowstorm.games.knightraid.objects.SpawnPoint;
  17. import snowstorm.games.knightraid.objects.Tower;
  18. import snowstorm.games.knightraid.objects.Wave;
  19. import snowstorm.games.playground.model.Game;
  20. import snowstorm.games.playground.model.GameBoard;
  21. import snowstorm.games.playground.model.GameObject;
  22.  
  23. public class KnightRaidGame extends Game {
  24.  
  25.     /** Reference to the main activity, so some labels can be updated. */
  26.     private MainActivity activity;
  27.     private KnightRaidGameBoardView gameView;
  28.     private GameBoard bord;
  29.     private SpawnPoint spawnpoint = new SpawnPoint();
  30.     private Toast toast;
  31.     private static double klokCounter = 20;
  32.     private static boolean enemiesZijnGespawned = false;
  33.     private ArrayList<Enemy> enemies = new ArrayList<Enemy>();;
  34.  
  35.     /**
  36.      * Constructor.
  37.      *
  38.      * @param activity
  39.      *            The main activity
  40.      */
  41.     public KnightRaidGame(MainActivity activity) {
  42.         // Create a new game board and couple it to this game
  43.         super(new KnightRaidGameBoard(activity));
  44.  
  45.         // Store reference to the main activity
  46.         this.activity = activity;
  47.  
  48.         // Reset the game
  49.         initNewGame();
  50.  
  51.         // Tell the game board view which game board to show
  52.         gameView = activity.getGameBoardView();
  53.         GameBoard gameBoard = getGameBoard();
  54.         gameView.setGameBoard(gameBoard);
  55.         Tower.setBoard((KnightRaidGameBoard) gameBoard);
  56.  
  57.         // Set size of the view to that of the game board
  58.         gameView.setFixedGridSize(gameBoard.getWidth(), gameBoard.getHeight());
  59.     }
  60.  
  61.     /**
  62.      * Starts a new game. Resets the score and places all objects in the right
  63.      * place.
  64.      */
  65.     public void initNewGame() {
  66.  
  67.         // Set the score and update the label
  68.         GameBoard board = getGameBoard();
  69.         board.removeAllObjects();
  70.         bord = board;
  71.  
  72.         Klok timer = new Klok(this);
  73.         timer.start();
  74.  
  75.         // Add a player object
  76.         board.addGameObject(new InnerSanctum_LB(100), 17, 10);
  77.         board.addGameObject(new InnerSanctum_RB(100), 18, 10);
  78.         board.addGameObject(new InnerSanctum_LT(100), 17, 9);
  79.         board.addGameObject(new InnerSanctum_RT(100), 18, 9);
  80.  
  81.         // Redraw the game view
  82.         board.updateView();
  83.     }
  84.  
  85.     public GameBoard getBoard() {
  86.         return bord;
  87.     }
  88.  
  89.     private void spawnRandomEnemy(Enemy enemy) {
  90.         if ((int) (Math.random() * 2 + 1) == 2)
  91.             spawnEnemyOnX(enemy);
  92.         else
  93.             spawnEnemyOnY(enemy);
  94.     }
  95.  
  96.     /**
  97.      * Spawns een enemy op X as waar y=0 v y=max
  98.      *
  99.      * @param enemy
  100.      *            de enemy die gespawned moet worden.
  101.      */
  102.     public void spawnEnemyOnX(Enemy enemy) {
  103.         GameBoard board = getGameBoard();
  104.         board.addGameObject(enemy, spawnpoint.getSpawnLocationEnemyOnWX(),
  105.                 spawnpoint.getSpawnLocationEnemyOnWY());
  106.  
  107.         board.updateView();
  108.     }
  109.  
  110.     /**
  111.      * Spawns een enemy op Y as waar x=0 v x=max
  112.      *
  113.      * @param enemy
  114.      *            de enemy die gespawned moet worden.
  115.      */
  116.     public void spawnEnemyOnY(Enemy enemy) {
  117.         GameBoard board = getGameBoard();
  118.         board.addGameObject(enemy, spawnpoint.getSpawnLocationEnemyOnHX(),
  119.                 spawnpoint.getSpawnLocationEnemyOnHY());
  120.  
  121.         board.updateView();
  122.     }
  123.  
  124.     /**
  125.      * Methode ontvangt de ticks van Klok class
  126.      */
  127.     public void step() {
  128.         GameBoard board = getGameBoard();
  129.         klokCounter += 0.125;
  130.  
  131.         // Counter op 20 zetten zodat de Speler 10 seconden de tijd krijgt om
  132.         // bij te bouwen.
  133.         if (checkIfEnemiesAreDead(board)) {
  134.             if (enemiesZijnGespawned) {
  135.                 klokCounter = 20;
  136.                 enemiesZijnGespawned = false;
  137.             }
  138.         }
  139.  
  140.         // De speler krijgt 30 seconden de tijd om de wave te clearen, anders
  141.         // begint er al een nieuwe!
  142.         if (klokCounter % 30 == 20) {
  143.             toast = Toast.makeText(this.activity,
  144.                     "The next wave is starting in 10 seconds!",
  145.                     Toast.LENGTH_LONG);
  146.             toast.setGravity(Gravity.TOP, 0, 300);
  147.             toast.show();
  148.  
  149.         }
  150.  
  151.         if (klokCounter % 30 == 0) {
  152.             Wave wave = new Wave();
  153.             toast = Toast.makeText(this.activity,
  154.                     "Wave " + wave.getWaveCounter() + " has started",
  155.                     Toast.LENGTH_LONG);
  156.             toast.setGravity(Gravity.TOP, 0, 300);
  157.             toast.show();
  158.  
  159.             for (Enemy enemy : wave.getWave()) {
  160.                 spawnRandomEnemy(enemy);
  161.             }
  162.             enemiesZijnGespawned = true;
  163.         }
  164.  
  165.         if (!activity.getTowerList().isEmpty()) {
  166.             for (Tower t : activity.getTowerList()) {
  167.                 t.findTarget(bord.getBoard());
  168.             }
  169.         }
  170.  
  171.         for (int x = 0; x < 37; x++) {
  172.             for (int y = 0; y < 21; y++) {
  173.                 GameObject object = board.getObject(x, y);
  174.                 if (object instanceof Tower) {
  175.                     ((Tower) object).findTarget(bord.getBoard());
  176.                 }
  177.  
  178.             }
  179.         }
  180.  
  181.         // public void moveObject(GameObject obj, int newX, int newY)
  182.         if (klokCounter % 1 == 0) {
  183.             List<GameObject> templist = new ArrayList<GameObject>();
  184.             for (int x = 0; x < 37; x++) {
  185.                 for (int y = 0; y < 21; y++) {
  186.                     GameObject object = board.getObject(x, y);
  187.                     if (object instanceof Enemy && !templist.contains(object)) {
  188.  
  189.                         int objectX = object.getPositionX();
  190.                         int objectY = object.getPositionY();
  191.  
  192.                         // Linksboven
  193.                         if ((objectX >= 0 && objectX < 18) && (objectY >= 0 && objectY < 10)) {
  194.  
  195.                             if (objectX == 17 && objectY != 9) {
  196.                                 try {
  197.                                     bord.moveObject(object, objectX, objectY + 1);
  198.                                 } catch (Exception e) {
  199.                                    
  200.                                 } finally {
  201.                                     bord.updateView();
  202.                                 }
  203.                             } else if (objectY == 9 && objectX != 17) {
  204.                                 try {
  205.                                     bord.moveObject(object, objectX + 1, objectY);
  206.                                 } catch (Exception e) {
  207.                                    
  208.                                 } finally {
  209.                                     bord.updateView();
  210.                                 }
  211.                             } else {
  212.                                 if (randomMovement() == 0) {
  213.                                     try {
  214.                                         bord.moveObject(object, objectX + 1, objectY);
  215.                                     } catch (Exception e) {
  216.                                        
  217.                                     } finally {
  218.                                         bord.updateView();
  219.                                     }
  220.                                 } else {
  221.                                     try {
  222.                                         bord.moveObject(object, objectX, objectY + 1);
  223.                                     } catch (Exception e) {
  224.                                        
  225.                                     } finally {
  226.                                         bord.updateView();
  227.                                     }
  228.                                 }
  229.                             }
  230.                         }
  231.                         // Linksonder
  232.                         else if ((objectX >= 0 && objectX < 18) && (objectY >= 11 && objectY < 21)) {
  233.                            
  234.                             if (objectX == 17 && objectY != 20) {
  235.                                 try {
  236.                                     bord.moveObject(object, objectX, objectY - 1);
  237.                                 } catch (Exception e) {
  238.                                    
  239.                                 } finally {
  240.                                     bord.updateView();
  241.                                 }
  242.                             } else if (objectY == 20 && objectX != 17) {
  243.                                 try {
  244.                                     bord.moveObject(object, objectX + 1, objectY);
  245.                                 } catch (Exception e) {
  246.                                    
  247.                                 } finally {
  248.                                     bord.updateView();
  249.                                 }
  250.                             } else {
  251.                                 if (randomMovement() == 0) {
  252.                                     try {
  253.                                         bord.moveObject(object, objectX + 1, objectY);
  254.                                     } catch (Exception e) {
  255.                                        
  256.                                     } finally {
  257.                                         bord.updateView();
  258.                                     }
  259.                                 } else {
  260.                                     try {
  261.                                         bord.moveObject(object, objectX, objectY - 1);
  262.                                     } catch (Exception e) {
  263.                                        
  264.                                     } finally {
  265.                                         bord.updateView();
  266.                                     }
  267.                                 }
  268.                             }
  269.                            
  270.  
  271.                         }
  272.                         // Rechtsboven
  273.                         else if ((objectX >=19 && objectX < 37) && (objectY >= 0 && objectY < 10)) {
  274.  
  275.                             if (objectX == 36 && objectY != 9) {
  276.                                 try {
  277.                                     bord.moveObject(object, objectX, objectY + 1);
  278.                                 } catch (Exception e) {
  279.                                    
  280.                                 } finally {
  281.                                     bord.updateView();
  282.                                 }
  283.                             } else if (objectY == 9 && objectX != 36) {
  284.                                 try {
  285.                                     bord.moveObject(object, objectX - 1, objectY);
  286.                                 } catch (Exception e) {
  287.                                    
  288.                                 } finally {
  289.                                     bord.updateView();
  290.                                 }
  291.                             } else {
  292.                                 if (randomMovement() == 0) {
  293.                                     try {
  294.                                         bord.moveObject(object, objectX - 1, objectY);
  295.                                     } catch (Exception e) {
  296.                                        
  297.                                     } finally {
  298.                                         bord.updateView();
  299.                                     }
  300.                                 } else {
  301.                                     try {
  302.                                         bord.moveObject(object, objectX, objectY + 1);
  303.                                     } catch (Exception e) {
  304.                                        
  305.                                     } finally {
  306.                                         bord.updateView();
  307.                                     }
  308.                                 }
  309.                             }
  310.                         }
  311.                         // Rechtsonder
  312.                         else {
  313.                             if (objectX == 36 && objectY != 20) {
  314.                                 try {
  315.                                     bord.moveObject(object, objectX, objectY - 1);
  316.                                 } catch (Exception e) {
  317.                                    
  318.                                 } finally {
  319.                                     bord.updateView();
  320.                                 }
  321.                             } else if (objectY == 20 && objectX != 36) {
  322.                                 try {
  323.                                     bord.moveObject(object, objectX - 1, objectY);
  324.                                 } catch (Exception e) {
  325.                                    
  326.                                 } finally {
  327.                                     bord.updateView();
  328.                                 }
  329.                             } else {
  330.                                 if (randomMovement() == 0) {
  331.                                     try {
  332.                                         bord.moveObject(object, objectX - 1, objectY);
  333.                                     } catch (Exception e) {
  334.                                        
  335.                                     } finally {
  336.                                         bord.updateView();
  337.                                     }
  338.                                 } else {
  339.                                     try {
  340.                                         bord.moveObject(object, objectX, objectY - 1);
  341.                                     } catch (Exception e) {
  342.                                        
  343.                                     } finally {
  344.                                         bord.updateView();
  345.                                     }
  346.                                 }
  347.                             }
  348.                             // }
  349.                         }
  350.  
  351.                         templist.add(object);
  352.                     }
  353.                 }
  354.             }
  355.         }
  356.  
  357.         gameView.invalidate();
  358.     }
  359.  
  360.     private int randomMovement() {
  361.         return (int) (Math.random() * 2);
  362.     }
  363.  
  364.     /**
  365.      * Controleert of er nog enemies leven
  366.      *
  367.      * @return True wanneer er geen enemies meer zijn
  368.      */
  369.     private boolean checkIfEnemiesAreDead(GameBoard board) {
  370.         for (int x = 0; x < 37; x++) {
  371.             for (int y = 0; y < 21; y++) {
  372.                 GameObject object = board.getObject(x, y);
  373.                 if (object != null && (object instanceof Enemy)) {
  374.                     return false;
  375.                 }
  376.  
  377.             }
  378.         }
  379.         return true;
  380.     }
  381.  
  382. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement