You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Game.java 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.rthoni.uqac.pigeon;
  2. import javax.swing.*;
  3. import javax.swing.Timer;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import java.util.*;
  7. import java.util.List;
  8. /**
  9. * Created by ZHAJOR on 30/10/2016.
  10. */
  11. public class Game extends JPanel implements MouseListener, ActionListener
  12. {
  13. private List<Pigeon> pigeons;
  14. private List<Food> foods;
  15. /**
  16. * Initialize the game and create some pigeons
  17. */
  18. public Game(int nb){
  19. addMouseListener(this);
  20. this.pigeons = new ArrayList<Pigeon>();
  21. this.foods = new ArrayList<Food>();
  22. for(int i = 0; i < nb; ++i){
  23. Pigeon p = new Pigeon(""+i, this);
  24. this.pigeons.add(p);
  25. p.start();
  26. }
  27. this.createTimer();
  28. }
  29. /**
  30. * Paint the scene
  31. * @param g The graphics
  32. */
  33. @Override
  34. public void paint(Graphics g) {
  35. Graphics2D g2d = (Graphics2D) g;
  36. g2d.setColor(Color.RED);
  37. // Draw piegons
  38. for (Pigeon pigeon : this.pigeons) {
  39. g2d.fillOval(pigeon.getX(), pigeon.getY(), 30, 30);
  40. }
  41. g2d.setColor(Color.BLUE);
  42. // Draw foods
  43. synchronized (this) {
  44. for (Food food : this.foods) {
  45. g2d.fillRect(food.getX(), food.getY(), 15, 15);
  46. }
  47. }
  48. }
  49. @Override
  50. public void mouseClicked(MouseEvent e) {
  51. }
  52. @Override
  53. public synchronized void mousePressed(MouseEvent e) {
  54. this.foods.add(new Food(e.getX(), e.getY()));
  55. }
  56. @Override
  57. public void mouseReleased(MouseEvent e) {
  58. }
  59. @Override
  60. public void mouseEntered(MouseEvent e) {
  61. }
  62. @Override
  63. public void mouseExited(MouseEvent e) {
  64. }
  65. public List<Food> getFoods(){
  66. return this.foods;
  67. }
  68. public synchronized void removeFood(Food food){
  69. this.foods.remove(food);
  70. }
  71. private void createTimer(){
  72. new Timer(50, this).start();
  73. }
  74. @Override
  75. public void actionPerformed(ActionEvent e) {
  76. repaint();
  77. }
  78. }