source: 2010/24/ramipasa/ALTKTileEngine/Peli.cs @ 838

Revision 838, 11.5 KB checked in by ramipasa, 10 years ago (diff)

Lisätty grafiikoita, päivitetty ALTK-kirjastoja (BaseRules?.dll, ALTKCore.dll), lisätty moottoriin koodia kaupungin tekemiselle ja kaikenlaisia muita muutoksia.

Line 
1using System;                        // Tämän tarpeellisuus pitäisi olla itsestäänselvyys
2using Jypeli;                        // Jypeli
3using Jypeli.ScreenObjects;          // Jypeli.ScreenObjects
4using Jypeli.Assets;                 // Jypeli.Assets
5using System.Collections.Generic;    // Jypelin tutoriaali
6using System.IO;                     // Streamreader vaatii tämän
7using System.Windows.Forms;          // jotta voin näyttää msgboxeja
8using ALTKTechs;
9using ALTKUnits;
10using ALTKCiv;
11using ALTKPromotions;
12using BaseRules;
13
14namespace ALTKTileEngine
15{
16    public class Peli : Game
17    {
18        //int[,] MapObjectCoords;
19        int[,] TerrainMap;
20        int[,] DTerrainMap;
21        int[,] OwnershipMap;
22
23        // !!!!!!!!!!!!!!!!!!!!!!!!!!!
24        // Pitänee tehdä vielä yksi ALTKSUnit-namespace ALTKCoreen.
25        // Tämä sisältäisi tiedot yksiköiden omistajasta, yksikön perusyksiköstä ym. sekä myös karttakoordinaatit
26        // (karttakoordinaatit säilyttää myös UnitMap, josta on helppo tarkastaa esim. liikuttaessa yksiköitä, onko ruudussa jo esim. vihollisyksiköitä.
27
28        int kartanLeveys;
29        int kartanKorkeus;
30
31        // perusmaastotyypit
32        const int Aavikko = 2, Tundra = 3, Vuoristo = 1, Lehtimetsa = 0;
33
34        // erikoismaastotyypit
35        const int Havumetsa = 2, Tyhja = 0, Kuusimetsa = 3;
36
37        // Pelissä on kaksi eri tasoa, toisella perusmaasto ja toisella tarkempaa tietoa (esim. onko ruutu metsää ym.)
38        PhysicsObject[,] tile;
39        PhysicsObject[,] DTile;
40        //Vector tileVector;
41
42        Vector CamSpeedEast = new Vector(20.0, .0);
43        Vector CamSpeedWest = new Vector(-20.0, .0);
44        Vector CamSpeedNorth = new Vector(.0, 20.0);
45        Vector CamSpeedSouth = new Vector(.0, -20.0);
46
47        protected override void Begin()
48        {
49            InitControls();
50            InitRules();
51            InitMap();
52        }
53        # region Kartan luominen
54        void InitMap()
55        {
56            //tileVector = new Vector();
57            Int32 num;
58            Int32 i;
59            Int32 j;
60            string mLine;
61            //string chars;
62            num = RandomGen.NextInt(1, 6);
63            //chars = " VAT";
64            TextReader bReader;
65            bReader = new StreamReader("Content\\Maps\\1\\base.txt");
66            //try
67            //{
68
69            // Yleensä kartan kaksi ensimmäistä riviä ovat kommentteja
70            bReader.ReadLine();
71            bReader.ReadLine();
72
73            kartanLeveys = Convert.ToInt32(bReader.ReadLine().Substring(9, 2));
74            kartanKorkeus = Convert.ToInt32(bReader.ReadLine().Substring(10, 2));
75
76            Int32 mapWidthJ = (kartanLeveys * 48) / 2;
77            Int32 mapHeightJ = (kartanKorkeus * 48) / 2;
78
79            bReader.ReadLine();
80            // Ladataan TerrainMapit muistiin myöhempää käyttöä varten
81
82            TerrainMap = new int[kartanKorkeus, kartanLeveys];
83            DTerrainMap = new int[kartanKorkeus, kartanLeveys];
84            OwnershipMap = new int[kartanKorkeus, kartanLeveys];
85            InitTerrain(0);
86            InitTerrain(1);
87            InitTerrain(2);
88
89            tile = new PhysicsObject[kartanKorkeus, kartanLeveys];
90            DTile = new PhysicsObject[kartanKorkeus, kartanLeveys];
91            InitTerrainGraphics(0);
92            InitTerrainGraphics(1);
93
94            // Koodi käännetty RGE:n VB.netistä
95            // Asettaa ja piirtää pohjamaaston
96
97            for (i = 0; i <= (kartanKorkeus - 1); i++)
98            {
99                mLine = bReader.ReadLine();
100                for (j = 0; j <= (kartanLeveys - 1); j++)
101                {
102                    // MessageBox.Show(mLine + " " + j + " " + i);
103                    TerrainMap[i, j] = getTerrainType(mLine.Substring(j, 1), 0, i, j);
104                    tile[i, j].Shape = Shapes.Rectangle;
105                    tile[i, j].X = (j * 48) - mapWidthJ;
106                    tile[i, j].Y = (i * 48) - mapHeightJ;
107                    tile[i, j].Restitution = 0.0;
108                    tile[i, j].Image = LoadImage(getTexture_fromTerrainType(TerrainMap[i, j], 0));
109                    Add(tile[i, j]);
110                    // MessageBox.Show(Convert.ToString(TerrainMap[i, j]));
111                }
112            }
113
114            // Luetaan karttatiedoston rivivälit
115            bReader.ReadLine();
116            bReader.ReadLine();
117
118            // Asettaa ja piirtää erikoismaaston
119
120            for (i = 0; i <= (kartanKorkeus - 1); i++)
121            {
122                mLine = bReader.ReadLine();
123                for (j = 0; j <= (kartanLeveys - 1); j++)
124                {
125                    // MessageBox.Show(mLine + " " + j + " " + i);
126                    DTerrainMap[i, j] = getTerrainType(mLine.Substring(j, 1), 1, i, j);
127                    DTile[i, j].Shape = Shapes.Rectangle;
128                    DTile[i, j].X = (j * 48) - mapWidthJ;
129                    DTile[i, j].Y = (i * 48) - mapHeightJ;
130                    DTile[i, j].Restitution = 0.0;
131                    DTile[i, j].Image = LoadImage(getTexture_fromTerrainType(DTerrainMap[i, j], 1));
132                    Add(DTile[i, j]);
133                    // MessageBox.Show(Convert.ToString(TerrainMap[i, j]));
134                }
135            }
136            //catch
137            //{
138            //    MessageBox.Show("Map error!");
139            //    bReader.Close();
140            //    Exit();
141            //}
142            bReader.Close();
143            Level.BackgroundColor = Color.Black;
144        }
145
146        private void InitTerrain(int tlayer)
147        {
148            for (int a = 0; a <= (kartanKorkeus - 1); a++)
149            {
150                for (int b = 0; b <= (kartanLeveys - 1); b++)
151                {
152                    GetTerrainLayer(tlayer)[a, b] = new int();
153                }
154            }
155        }
156
157        int[,] GetTerrainLayer(int tlayer)
158        {
159            if (tlayer == 0) { return TerrainMap; }
160            if (tlayer == 1) { return DTerrainMap; }
161            if (tlayer == 2) { return OwnershipMap; }
162            return TerrainMap;
163        }
164
165        private void InitTerrainGraphics(int tlayer)
166        {
167            for (int a = 0; a <= (kartanKorkeus - 1); a++)
168            {
169                for (int b = 0; b <= (kartanLeveys - 1); b++)
170                {
171                    GetGraphicsLayer(tlayer)[a, b] = new PhysicsObject(48.0, 48.0);
172                }
173            }
174        }
175
176        PhysicsObject[,] GetGraphicsLayer(int tlayer)
177        {
178            if (tlayer == 0) {return tile; }
179            if (tlayer == 1) {return DTile; }
180            return tile;
181        }
182
183        int getTerrainType(string ch, int terrainlayer, int i, int j)
184        {
185            if (terrainlayer == 0)
186            {
187                /*/ Maastotyypit
188                 * 0 = lehtimetsää
189                 * 1 = vuoristoa
190                 * 2 = aavikkoa
191                 * 3 = tundraa
192                /*/
193                if (ch == " ") { return Lehtimetsa; }
194                if (ch == "V") { return Vuoristo; }
195                if (ch == "A") { return Aavikko; }
196                if (ch == "T") { return Tundra; }
197            }
198            else if (terrainlayer == 1)
199            {
200                /*/ Erikoismaastotyypit
201                 * 0 = ei mitään
202                 * 1 = vuoristoa
203                 * 2 = metsää
204                /*/
205                if (ch == " ") { return Tyhja; }
206                if (ch == "M") { return Havumetsa; }
207                if (ch == "V") { return Vuoristo; }
208                if (ch == "K") { return Kuusimetsa; }
209                try
210                {
211                    int Playerstartloc;
212                    Playerstartloc = Convert.ToInt32(ch);
213                    AddStartingCity(Playerstartloc, i, j);
214                }
215                catch
216                {
217                }
218                return Tyhja;
219            }
220            return 0;
221        }
222
223        private void AddStartingCity(int playernumber, int i, int j)
224        {
225            Rules.pCivs[playernumber].Production = Rules.pCivs[playernumber].Production + 10;
226            Rules.pCivs[playernumber].NumberofCities = Rules.pCivs[playernumber].NumberofCities + 1;
227            Rules.pCivs[playernumber].CityCoords[Rules.pCivs[playernumber].NumberofCities, 0] = i;
228            Rules.pCivs[playernumber].CityCoords[Rules.pCivs[playernumber].NumberofCities, 1] = j;
229           
230        }
231
232        string getTexture_fromTerrainType(int terraintype, int terrainlayer)
233        {
234            if (terrainlayer == 0)
235            {
236                if (terraintype == Lehtimetsa) { return Application.StartupPath + "\\Content\\Textures\\grassland"; }
237                if (terraintype == Vuoristo) { return Application.StartupPath + "\\Content\\Textures\\mountain"; }
238                if (terraintype == Aavikko) { return Application.StartupPath + "\\Content\\Textures\\desert"; }
239                if (terraintype == Tundra) { return Application.StartupPath + "\\Content\\Textures\\tundra"; }
240            }
241            else if (terrainlayer == 1)
242            {
243                if (terraintype == Tyhja) { return Application.StartupPath + "\\Content\\Textures\\nothing"; }
244                if (terraintype == Vuoristo) { return Application.StartupPath + "\\Content\\Textures\\mountain"; }
245                if (terraintype == Havumetsa) { return Application.StartupPath + "\\Content\\Textures\\forest"; }
246                if (terraintype == Kuusimetsa) { return Application.StartupPath + "\\Content\\Textures\\spruceforest"; }
247                return Application.StartupPath + "\\Content\\Textures\\nothing";
248            }
249            return Application.StartupPath + "\\Content\\Textures\\grassland.jpg";
250        }
251        # endregion
252
253        private void InitRules()
254        {
255            // Käytetään valmiiksi tehtyjä DLL-tiedostoja
256            BaseRules.Rules.InitTechs();
257            BaseRules.Rules.InitUnits();
258            BaseRules.Rules.InitCivs();
259        }
260
261        private void InitControls()
262        {
263            Mouse.Enabled = true;
264            Mouse.IsCursorVisible = true;
265
266            Keyboard.Listen(Key.Right, Jypeli.ButtonState.Down, MoveCamera, null, 0);
267            Keyboard.Listen(Key.Left, Jypeli.ButtonState.Down, MoveCamera, null, 2);
268            Keyboard.Listen(Key.Up, Jypeli.ButtonState.Down, MoveCamera, null, 1);
269            Keyboard.Listen(Key.Down, Jypeli.ButtonState.Down, MoveCamera, null, 3);
270            // Mouse.ListenMovement(1, Mouse_Move, "");
271        }
272
273        private void Mouse_Move()
274        {
275            // MessageBox.Show(Mouse.PositionOnScreen.X);
276        }
277
278        private void MoveCamera(Int32 dir)
279        {
280            if ((dir == 0) && (Camera.Position.X < (tile[kartanKorkeus - 1, kartanLeveys - 1].X) - (Peli.Screen.Width / 2)))
281            {
282                Camera.Move(CamSpeedEast);
283            }
284            if ((dir == 1) && (Camera.Position.Y < (tile[kartanKorkeus - 1, kartanLeveys - 1].Y) - ((Peli.Screen.Height / 2) - 12)))
285            {
286                Camera.Move(CamSpeedNorth);
287            }
288            if ((dir == 2) && (Camera.Position.X > (tile[0, 0].X) + (Peli.Screen.Width / 2)))
289            {
290                Camera.Move(CamSpeedWest);
291            }
292            if ((dir == 3) && (Camera.Position.Y > (tile[0, 0].Y) + (Peli.Screen.Height / 2)))
293            {
294                Camera.Move(CamSpeedSouth);
295            }
296        }
297    }
298}
Note: See TracBrowser for help on using the repository browser.