source: esimerkit/2013k/live/live16/LahinPisteHiiresta/LahinPisteHiiresta/LahinPisteHiiresta.cs @ 1392

Revision 652, 6.1 KB checked in by anlakane, 4 years ago (diff)

live16

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9/// @author Antti-Jussi
10/// @version 6.3.2013
11///
12/// <summary>
13/// Peli missä syntyy mustia palloja ja
14/// korostetaan hiiren lähintä.
15/// Vasenta painamalla saa synnytettyä lisää
16/// mustia palloja.
17/// </summary>
18public class LahinPisteHiiresta : PhysicsGame
19{
20    /// <summary>
21    /// Montako palloa pelin alukssa
22    /// </summary>
23    const int PALLOJA_ALUKSI = 10;
24    /// <summary>
25    /// Pikkupallon koko
26    /// </summary>
27    const double PIENEN_PALLON_KOKO = 15.0;
28
29    /// <summary>
30    /// Alustukset
31    /// </summary>
32    public override void Begin()
33    {
34
35        PhysicsObject pelaaja = LuoPelaaja(Vector.Zero);
36        Add(pelaaja);
37        List<PhysicsObject> pallot = new List<PhysicsObject>();
38        LisaaPallot(pallot, PALLOJA_ALUKSI);
39        PhysicsObject lahinPallo = LahinPallo(pallot, pelaaja.Position);
40
41        Mouse.ListenMovement(0.1, delegate { lahinPallo = LiikutaPelaajaa(pelaaja, pallot, lahinPallo); }, "Liikuta pelaajaa");
42        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, delegate { lahinPallo = LisaaPallo(pallot, lahinPallo); }, "Lisää pallo");
43        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
44        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
45
46        Timer poistoAjastin = new Timer();
47        poistoAjastin.Interval = 0.5;
48        poistoAjastin.Timeout += delegate { 
49            PoistaEka(pallot);
50            lahinPallo = KorostaLahinPiste(pallot, lahinPallo, pelaaja.Position);
51        };
52        poistoAjastin.Start();
53    }
54
55    void PoistaEka(List<PhysicsObject> pallot)
56    {
57        if (pallot.Count == 0) return;
58        pallot[0].Destroy();
59        pallot.RemoveAt(0);
60    }
61
62    PhysicsObject LisaaPallo(List<PhysicsObject> pallot, PhysicsObject vanhaLahin)
63    {
64        PhysicsObject pallo = LuoPallo(Mouse.PositionOnWorld, Color.Black);
65        Add(pallo);
66        pallot.Add(pallo);
67        return KorostaLahinPiste(pallot, vanhaLahin, Mouse.PositionOnWorld);
68    }
69
70    /// <summary>
71    /// Lisää annettuun listaan annetun määrän palloja.
72    /// Lisäksi lisää pallon kentälle.
73    /// </summary>
74    /// <param name="pallot">Mihin listaan pallot lisätään</param>
75    /// <param name="montako">montako palloa lisätään</param>
76    void LisaaPallot(List<PhysicsObject> pallot, int montako)
77    {
78        for (int i = 0; i < montako; i++)
79        {
80            PhysicsObject pallo = LuoPallo(
81                RandomGen.NextVector
82                (Level.Left, Level.Bottom,
83                Level.Right, Level.Top),
84                Color.Black
85            );
86            pallot.Add(pallo);
87            Add(pallo);
88        }
89    }
90
91    /// <summary>
92    /// Tekee yhden pallon.
93    /// </summary>
94    /// <param name="paikka">Paikka johon pallo luodaan</param>
95    /// <param name="vari">Luotavan pallon väri</param>
96    /// <returns>Pallo-olio</returns>
97    PhysicsObject LuoPallo(Vector paikka, Color vari)
98    {
99        PhysicsObject pallo = new PhysicsObject(PIENEN_PALLON_KOKO, PIENEN_PALLON_KOKO, Shape.Circle);
100        pallo.Position = paikka;
101        pallo.Color = vari;
102        return pallo;
103    }
104
105    /// <summary>
106    /// Liikuta pelaajaa ja korosta lähin piste samalla.
107    /// </summary>
108    /// <param name="liikuteltavaOlio">Liikuteltava olio</param>
109    /// <param name="pallot"></param>
110    /// <param name="tamanHetkinenLahin">Tämän hetkinen lähin</param>
111    /// <returns>Uusi lähin</returns>
112    PhysicsObject LiikutaPelaajaa(PhysicsObject liikuteltavaOlio, List<PhysicsObject> pallot, PhysicsObject tamanHetkinenLahin)
113    {
114        // liikuteltavaOlio.Position += hiirenTila.MouseMovement;
115        liikuteltavaOlio.Position = Mouse.PositionOnWorld;
116        PhysicsObject lahin = KorostaLahinPiste(pallot, tamanHetkinenLahin, liikuteltavaOlio.Position);
117        return lahin;
118    }
119
120    /// <summary>
121    /// Korostaa lähimmän ja poistaa korostuksen vanhasta lähimmästä
122    /// </summary>
123    /// <param name="pallot">Pallot joista yksi korostetaan</param>
124    /// <param name="vanhaLahin">Vanha lähin josta korostus pitää ottaa pois</param>
125    /// <param name="havaintopiste">Havaintopiste jonka lähin korostetaan</param>
126    /// <returns>Uusi lähin</returns>
127    PhysicsObject KorostaLahinPiste(List<PhysicsObject> pallot, PhysicsObject vanhaLahin, Vector havaintopiste)
128    {
129        if (pallot.Count == 0) return null;
130        PhysicsObject lahinPallo = LahinPallo(pallot, havaintopiste);
131        if (vanhaLahin != null) vanhaLahin.Color = Color.Black;
132        lahinPallo.Color = Color.Red;
133        return lahinPallo;
134    }
135
136    /// <summary>
137    /// Etsii havaintopistettä lähimmän fysiikkaolion
138    /// annetusta listasta
139    /// </summary>
140    /// <param name="pallot">Fysiikkaoliot josta lähintä etsitään</param>
141    /// <param name="havaintopiste">Havaintopistettä johon palloja verrataan</param>
142    /// <returns>Havaintopistettä lähin pallo</returns>
143    PhysicsObject LahinPallo(List<PhysicsObject> pallot, Vector havaintopiste)
144    {
145        if (pallot.Count == 0) return null;
146        PhysicsObject lahinPallo = pallot[0];
147        double lahimmanEtaisyys = Vector.Distance(pallot[0].Position, havaintopiste);
148        for (int i = 1; i < pallot.Count; i++)
149        {
150            double tamanPallonEtaisyys = Vector.Distance(pallot[i].Position, havaintopiste);
151            if (tamanPallonEtaisyys < lahimmanEtaisyys)
152            {
153                lahinPallo = pallot[i];
154                lahimmanEtaisyys = tamanPallonEtaisyys;
155            }
156        }
157        return lahinPallo;
158    }
159
160    /// <summary>
161    /// Luo pelaaja
162    /// </summary>
163    /// <param name="paikka">Paikka johon pelaaja luodaan</param>
164    /// <returns>Pelaaja</returns>
165    PhysicsObject LuoPelaaja(Vector paikka)
166    {
167        PhysicsObject pelaaja = PhysicsObject.CreateStaticObject(40, 40, Shape.Circle);
168        return pelaaja;
169    }
170}
Note: See TracBrowser for help on using the repository browser.