source: 2015/30/SonjaH/Demo8/lyhyt/lyhyt/lyhyt.cs @ 7085

Revision 7085, 6.3 KB checked in by soonhuot, 4 years ago (diff)

Uusi versio apinapelistä.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9namespace Demo8
10{
11    public class AngryLegoMini2 : PhysicsGame
12    {
13
14        public static void Main(string[] args)
15        {
16            using (AngryLegoMini2 game = new AngryLegoMini2())
17            {
18                game.Run();
19            }
20        }
21
22
23        private static readonly string[] taso0 = {
24                  "                        ",
25                  "     oos                ",
26                  "     ----------         ",
27                  "                        ",
28                  "                        ",
29                  "/                       ",
30                  "                        ",
31                  "                        ",
32                  "                        ",
33                  "                        ",
34                  "                        ",
35                  "                        ",
36                  "                        ",
37                  "                        ",
38                  "       =====            ",
39                  "       X   X            ",
40                  "       X   X            ",
41                  "       X   X            ",
42                  "       X * X            ",
43                  "     * X  *X            ",
44                  };
45
46        private int tileWidth;
47        private int tileHeight;
48
49        private readonly static Image[] tiilenKuvat = null;
50        private readonly static Image[] katonKuvat = null;
51
52        private List<PhysicsObject> pallot = new List<PhysicsObject>();
53        private Image pallonKuva = null;  //LoadImage("Igor");
54        private Image pallonKuva2 = null; //LoadImage("symbian");
55
56
57        /// <summary>
58        /// Aloitus 1. kerralla
59        /// </summary>
60        public override void Begin()
61        {
62            ClearControls();
63            tileWidth = 800 / taso0.Length;
64            tileHeight = 480 / taso0.Length;
65            TileMap tiles = TileMap.FromStringArray(taso0);
66
67
68            tiles['X'] = LuoSeina;
69            tiles['='] = LuoKatto;
70            tiles['o'] = LuoPallo;
71            tiles['s'] = LuoPallo2;
72
73            tiles.Insert(tileWidth, tileHeight);
74
75            Level.CreateBorders();
76            Camera.ZoomToLevel();
77        }
78
79        public delegate void Tehoste(PhysicsObject obj, bool paine, double kerroin);
80
81        /// <summary>
82        /// Luodaan uusi pallo, joka voi rikkoa vihollisen
83        /// </summary>
84        private PhysicsObject LuoPallo()
85        {
86            return LuoTuhoPallo("pallo", pallonKuva, 1.0, 1.0,
87                                Savuta, PalloOsuiRakenteeseen);
88        }
89
90
91        /// <summary>
92        /// Luodaan uusi pallo, joka voi rikkoa vihollisen
93        /// </summary>
94        private PhysicsObject LuoPallo2()
95        {
96            return LuoTuhoPallo("pallo2", pallonKuva2, 2.0, 2.0,
97                    Liekita, Pallo2OsuiRakenteeseen);
98        }
99        private void PalloOsuiRakenteeseen(PhysicsObject pallo, SarkyvaRakenne rakenne)
100        {
101            // TODO: Koodi pallon ja rakenteen törmäykselle
102        }
103
104
105        private void Pallo2OsuiRakenteeseen(PhysicsObject pallo, SarkyvaRakenne rakenne)
106        {
107            // TODO: Koodi pallon ja rakenteen törmäykselle
108        }
109
110
111        private void Savuta(IPhysicsObject olio, bool useShock = false, double kerroin = 10)
112        {
113            // TODO: Luo savun
114        }
115
116        private void Liekita(IPhysicsObject olio, bool useShock = false, double kerroin = 10)
117        {
118            // TODO: Luo liekitysefektin
119        }
120
121
122
123        private PhysicsObject LuoSeina()
124        {
125            SarkyvaRakenne seina = new SarkyvaRakenne(tileWidth, tileHeight);
126            seina.Tag = "rakenne";
127            seina.Kuvat = tiilenKuvat;
128            return seina;
129        }
130
131
132        private PhysicsObject LuoKatto()
133        {
134            SarkyvaRakenne katto = new SarkyvaRakenne(tileWidth * 1.5, tileHeight);
135            katto.Tag = "rakenne";
136            katto.Kuvat = katonKuvat;
137            return katto;
138        }
139
140
141        /// <summary>
142        /// Luodaan pallo, joka voi tuhota vihollisia
143        /// </summary>
144        /// <param name="tag">käytettävä tunniste</param>
145        /// <param name="kuva">pallolle tuleva kuva</param>
146        /// <param name="pudostusaanet">äänet joita soitetaan pallon pudotessa</param>
147        /// <param name="sx">paljonko x-koko on suhteessa y-kokoon</param>
148        /// <param name="kerroin">mahdollisen räjähdyksen koon kerroin</param>
149        /// <param name="tehoste">mitä aliohjelmaa kutsutaan tehosteen tekemiseen</param>
150        /// <param name="tormays">mikä aliohjelma käsittelee törmäyksen rakenteeseen</param>
151        /// <returns>luotu pallo</returns>
152        private PhysicsObject LuoTuhoPallo(string tag, Image kuva, double sx, double kerroin,
153                     Tehoste tehoste, CollisionHandler<PhysicsObject, SarkyvaRakenne> tormays)
154        {
155            PhysicsObject pallo = new PhysicsObject(tileWidth * sx, tileWidth,
156                                                                Shape.Circle);
157            pallo.Image = kuva;
158            Add(pallo);
159            pallo.Tag = tag;
160            pallo.Destroyed += delegate { tehoste(pallo, false, kerroin); };
161            pallot.Add(pallo);
162            AddCollisionHandler<PhysicsObject, SarkyvaRakenne>(pallo, "rakenne", tormays);
163            return pallo;
164        }
165    }
166
167
168    /// @author  Vesa Lappalainen
169    /// @version 19.10.2011
170    /// <summary>
171    /// Rakenne, jolla on kesto ja kuva vaihtuu sen mukaan paljonko kestoa on jäljellä.
172    /// </summary>
173    public class SarkyvaRakenne : PhysicsObject
174    {
175        public Image[] Kuvat
176        {
177            get { return kuvat; }
178            set { kuvat = value; }
179        }
180        private Image[] kuvat;
181
182        /// <summary>
183        /// Alustetaan rakenne
184        /// </summary>
185        /// <param name="width">olion leveys</param>
186        /// <param name="height">olion korkeus</param>
187        public SarkyvaRakenne(double width, double height)
188            : base(width, height)
189        {
190            Color = Color.Red;
191        }
192    }
193}
Note: See TracBrowser for help on using the repository browser.