소스 검색

Random moves sometimes and doc

master
Pierre-Antoine 'ZHAJOR' Tible 7 년 전
부모
커밋
e7ccb55d19
3개의 변경된 파일59개의 추가작업 그리고 33개의 파일을 삭제
  1. 13
    12
      src/com/rthoni/uqac/pigeon/Game.java
  2. 1
    4
      src/com/rthoni/uqac/pigeon/Main.java
  3. 45
    17
      src/com/rthoni/uqac/pigeon/Pigeon.java

+ 13
- 12
src/com/rthoni/uqac/pigeon/Game.java 파일 보기

2
 
2
 
3
 import javax.swing.*;
3
 import javax.swing.*;
4
 import javax.swing.Timer;
4
 import javax.swing.Timer;
5
-import javax.swing.event.MouseInputListener;
6
 import java.awt.*;
5
 import java.awt.*;
7
-import java.awt.event.ActionEvent;
8
-import java.awt.event.ActionListener;
9
-import java.awt.event.MouseEvent;
10
-import java.awt.event.MouseListener;
6
+import java.awt.event.*;
11
 import java.util.*;
7
 import java.util.*;
12
 import java.util.List;
8
 import java.util.List;
13
 
9
 
14
 /**
10
 /**
15
  * Created by ZHAJOR on 30/10/2016.
11
  * Created by ZHAJOR on 30/10/2016.
16
  */
12
  */
17
-public class Game extends JPanel implements MouseListener, ActionListener{
13
+public class Game extends JPanel implements MouseListener, ActionListener
14
+{
18
 
15
 
19
-    private int x, y;
20
     private List<Pigeon> pigeons;
16
     private List<Pigeon> pigeons;
21
     private List<Food> foods;
17
     private List<Food> foods;
22
 
18
 
23
-    public Game(){
19
+    /**
20
+     * Initialize the game and create some pigeons
21
+     */
22
+    public Game(int nb){
24
         addMouseListener(this);
23
         addMouseListener(this);
25
         this.pigeons = new ArrayList<Pigeon>();
24
         this.pigeons = new ArrayList<Pigeon>();
26
         this.foods = new ArrayList<Food>();
25
         this.foods = new ArrayList<Food>();
27
-        for(int i = 0; i < 10; ++i){
26
+        for(int i = 0; i < nb; ++i){
28
             Pigeon p = new Pigeon(""+i, this);
27
             Pigeon p = new Pigeon(""+i, this);
29
             this.pigeons.add(p);
28
             this.pigeons.add(p);
30
             p.start();
29
             p.start();
33
         this.setDoubleBuffered(false);
32
         this.setDoubleBuffered(false);
34
     }
33
     }
35
 
34
 
35
+    /**
36
+     * Paint the scene
37
+     * @param g The graphics
38
+     */
36
     @Override
39
     @Override
37
     public void paint(Graphics g) {
40
     public void paint(Graphics g) {
38
         Graphics2D g2d = (Graphics2D) g;
41
         Graphics2D g2d = (Graphics2D) g;
41
         for (Pigeon pigeon : this.pigeons) {
44
         for (Pigeon pigeon : this.pigeons) {
42
             g2d.fillOval(pigeon.getX(), pigeon.getY(), 30, 30);
45
             g2d.fillOval(pigeon.getX(), pigeon.getY(), 30, 30);
43
         }
46
         }
44
-        //g2d.setColor(Color.BLUE);
47
+        g2d.setColor(Color.BLUE);
45
         // Draw foods
48
         // Draw foods
46
         for (Food food : this.foods) {
49
         for (Food food : this.foods) {
47
             g2d.fillRect(food.getX(), food.getY(), 15, 15);
50
             g2d.fillRect(food.getX(), food.getY(), 15, 15);
56
     @Override
59
     @Override
57
     public void mousePressed(MouseEvent e) {
60
     public void mousePressed(MouseEvent e) {
58
         this.foods.add(new Food(e.getX(), e.getY()));
61
         this.foods.add(new Food(e.getX(), e.getY()));
59
-        System.out.print(e.getX() + " ");
60
-        System.out.print(e.getY() + "\n");
61
     }
62
     }
62
 
63
 
63
     @Override
64
     @Override

+ 1
- 4
src/com/rthoni/uqac/pigeon/Main.java 파일 보기

16
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
17
         frame.setSize(800, 800);
17
         frame.setSize(800, 800);
18
         frame.setResizable(false);
18
         frame.setResizable(false);
19
-        //frame.pack();
20
         frame.setVisible(true);
19
         frame.setVisible(true);
21
-
22
-        Game g = new Game();
23
-        frame.add(g);
20
+        frame.add(new Game(10));
24
     }
21
     }
25
 
22
 
26
     public static void main(String... argv)
23
     public static void main(String... argv)

+ 45
- 17
src/com/rthoni/uqac/pigeon/Pigeon.java 파일 보기

14
     private final Game game;
14
     private final Game game;
15
     private static final int speed = 10;
15
     private static final int speed = 10;
16
 
16
 
17
+    /**
18
+     * Create a new pigeon with a random position
19
+     * @param name The pigeon name
20
+     * @param g The pigeon world
21
+     */
17
     public Pigeon(String name, Game g) {
22
     public Pigeon(String name, Game g) {
18
         Random r = new Random();
23
         Random r = new Random();
19
         x = r.nextInt(700);
24
         x = r.nextInt(700);
22
         this.game = g;
27
         this.game = g;
23
     }
28
     }
24
 
29
 
30
+    /**
31
+     * The piegon behavior during his life
32
+     */
25
     @Override
33
     @Override
26
     public void run() {
34
     public void run() {
27
         while (true) {
35
         while (true) {
28
             synchronized (game) {
36
             synchronized (game) {
37
+                // Get the food near the pigeon
29
                 List<Food> foods = game.getFoods();
38
                 List<Food> foods = game.getFoods();
30
                 Food best = new Food();
39
                 Food best = new Food();
31
-                int bestFoodX = 0, bestFoodY = 0, distance = -1, bestIndex = -1, index = 0;
40
+                int distance = -1;
32
                 for (Food food : foods) {
41
                 for (Food food : foods) {
33
                     if (distance == -1) {
42
                     if (distance == -1) {
34
                         distance = computeDistance(food.getX(), food.getY());
43
                         distance = computeDistance(food.getX(), food.getY());
35
-                        bestFoodX = food.getX();
36
-                        bestFoodY = food.getY();
37
-                        bestIndex = index;
38
                         best = food;
44
                         best = food;
39
                     } else if (distance > computeDistance(food.getX(), food.getY())) {
45
                     } else if (distance > computeDistance(food.getX(), food.getY())) {
40
                         distance = computeDistance(food.getX(), food.getY());
46
                         distance = computeDistance(food.getX(), food.getY());
41
-                        bestFoodX = food.getX();
42
-                        bestFoodY = food.getY();
43
-                        bestIndex = index;
47
+
44
                         best = food;
48
                         best = food;
45
                     }
49
                     }
46
-                    index++;
47
                 }
50
                 }
51
+                // Eat or move if there is a food
48
                 if (distance != -1 && distance <= Pigeon.speed) {
52
                 if (distance != -1 && distance <= Pigeon.speed) {
49
                     this.x = best.getX();
53
                     this.x = best.getX();
50
                     this.y = best.getY();
54
                     this.y = best.getY();
55
                 else if (distance != -1){
59
                 else if (distance != -1){
56
                     this.computeNewPosition(best.getX(), best.getY());
60
                     this.computeNewPosition(best.getX(), best.getY());
57
                 }
61
                 }
62
+                // Random move
63
+                else {
64
+                    Random r = new Random();
65
+                    if (r.nextInt(100) > 90 + r.nextInt(8)) {
66
+                        int moveX = r.nextInt(100) -50;
67
+                        int moveY = r.nextInt(100) -50;
68
+                        this.x += moveX;
69
+                        this.y += moveY;
70
+                        if (this.x > game.getWidth())
71
+                            this.x = game.getWidth() - r.nextInt(30);
72
+                        else if (this.x < 0)
73
+                            this.x = r.nextInt(30);
74
+                        if (this.y > game.getHeight())
75
+                            this.y = game.getHeight() - r.nextInt(30);
76
+                        else if (this.y < 0)
77
+                            this.y = r.nextInt(30);
78
+                    }
79
+                }
58
             }
80
             }
59
-
60
-
61
-//            Random r = new Random();
62
-//            int moveX = r.nextInt(10);
63
-//            int moveY = r.nextInt(10);
64
-//            this.x += moveX;
65
-//            this.y += moveY;
66
-
67
             try {
81
             try {
68
                 Thread.sleep(100);
82
                 Thread.sleep(100);
69
             } catch (InterruptedException e) {
83
             } catch (InterruptedException e) {
72
         }
86
         }
73
     }
87
     }
74
 
88
 
89
+    /**
90
+     * Compute the distance between the pigeon and the food
91
+     * @param x the x position of the food
92
+     * @param y the y position of the food
93
+     * @return the distance
94
+     */
75
     private int computeDistance(int x, int y) {
95
     private int computeDistance(int x, int y) {
76
         int diffx = this.x > x ? this.x - x : x - this.x;
96
         int diffx = this.x > x ? this.x - x : x - this.x;
77
         int diffy = this.y > y ? this.y - y : y - this.y;
97
         int diffy = this.y > y ? this.y - y : y - this.y;
78
         return diffx + diffy;
98
         return diffx + diffy;
79
     }
99
     }
80
 
100
 
101
+    /**
102
+     * Move the pigeon
103
+     * @param x the x position of the food
104
+     * @param y the y position of the food
105
+     */
81
     private void computeNewPosition(int x, int y) {
106
     private void computeNewPosition(int x, int y) {
82
         int moves = Pigeon.speed;
107
         int moves = Pigeon.speed;
83
         while (moves > 0 ) {
108
         while (moves > 0 ) {
100
         }
125
         }
101
     }
126
     }
102
 
127
 
128
+    /**
129
+     * Start the thread
130
+     */
103
     public void start () {
131
     public void start () {
104
-        System.out.println("Starting " +  name );
132
+        System.out.println("New pigeon alive : " +  name );
105
         if (t == null) {
133
         if (t == null) {
106
             t = new Thread (this, name);
134
             t = new Thread (this, name);
107
             t.start ();
135
             t.start ();

Loading…
취소
저장