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

Revision 7085, 6.7 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            Kirjoita tämä "yhdellä rivillä"
97            PhysicsObject pallo = new PhysicsObject(tileWidth * 0.6, tileWidth, Shape.Circle);
98            pallo.Image = pallonKuva2;
99            Add(pallo);
100            pallo.Tag = "pallo2";
101            pallo.Destroyed += delegate { Liekita(pallo, false, 2); };
102            pallot.Add(pallo);
103            AddCollisionHandler<PhysicsObject, SarkyvaRakenne>(pallo, "rakenne", Pallo2OsuiRakenteeseen);
104            return pallo;
105        }
106        private void PalloOsuiRakenteeseen(PhysicsObject pallo, SarkyvaRakenne rakenne)
107        {
108            // TODO: Koodi pallon ja rakenteen törmäykselle
109        }
110
111
112        private void Pallo2OsuiRakenteeseen(PhysicsObject pallo, SarkyvaRakenne rakenne)
113        {
114            // TODO: Koodi pallon ja rakenteen törmäykselle
115        }
116
117
118        private void Savuta(IPhysicsObject olio, bool useShock = false, double kerroin = 10)
119        {
120            // TODO: Luo savun
121        }
122
123        private void Liekita(IPhysicsObject olio, bool useShock = false, double kerroin = 10)
124        {
125            // TODO: Luo liekitysefektin
126        }
127
128
129
130        private PhysicsObject LuoSeina()
131        {
132            SarkyvaRakenne seina = new SarkyvaRakenne(tileWidth, tileHeight);
133            seina.Tag = "rakenne";
134            seina.Kuvat = tiilenKuvat;
135            return seina;
136        }
137
138
139        private PhysicsObject LuoKatto()
140        {
141            SarkyvaRakenne katto = new SarkyvaRakenne(tileWidth * 1.5, tileHeight);
142            katto.Tag = "rakenne";
143            katto.Kuvat = katonKuvat;
144            return katto;
145        }
146
147
148        /// <summary>
149        /// Luodaan pallo, joka voi tuhota vihollisia
150        /// </summary>
151        /// <param name="tag">käytettävä tunniste</param>
152        /// <param name="kuva">pallolle tuleva kuva</param>
153        /// <param name="pudostusaanet">äänet joita soitetaan pallon pudotessa</param>
154        /// <param name="sx">paljonko x-koko on suhteessa y-kokoon</param>
155        /// <param name="kerroin">mahdollisen räjähdyksen koon kerroin</param>
156        /// <param name="tehoste">mitä aliohjelmaa kutsutaan tehosteen tekemiseen</param>
157        /// <param name="tormays">mikä aliohjelma käsittelee törmäyksen rakenteeseen</param>
158        /// <returns>luotu pallo</returns>
159        private PhysicsObject LuoTuhoPallo(string tag, Image kuva, double sx, double kerroin,
160                     Tehoste tehoste, CollisionHandler<PhysicsObject, SarkyvaRakenne> tormays)
161        {
162            PhysicsObject pallo = new PhysicsObject(tileWidth * sx, tileWidth,
163                                                                Shape.Circle);
164            pallo.Image = kuva;
165            Add(pallo);
166            pallo.Tag = tag;
167            pallo.Destroyed += delegate { tehoste(pallo, false, kerroin); };
168            pallot.Add(pallo);
169            AddCollisionHandler<PhysicsObject, SarkyvaRakenne>(pallo, "rakenne", tormays);
170            return pallo;
171        }
172    }
173
174
175    /// @author  Vesa Lappalainen
176    /// @version 19.10.2011
177    /// <summary>
178    /// Rakenne, jolla on kesto ja kuva vaihtuu sen mukaan paljonko kestoa on jäljellä.
179    /// </summary>
180    public class SarkyvaRakenne : PhysicsObject
181    {
182        public Image[] Kuvat
183        {
184            get { return kuvat; }
185            set { kuvat = value; }
186        }
187        private Image[] kuvat;
188
189        /// <summary>
190        /// Alustetaan rakenne
191        /// </summary>
192        /// <param name="width">olion leveys</param>
193        /// <param name="height">olion korkeus</param>
194        public SarkyvaRakenne(double width, double height)
195            : base(width, height)
196        {
197            Color = Color.Red;
198        }
199    }
200}
Note: See TracBrowser for help on using the repository browser.