Etusivu | Pong | Omenasoturi
Game of Life - vaihe 2
Tässä vaiheessa täytetään pelikenttä ruuduilla käyttämällä aliohjelmia, silmukoita ja listoja. Jos nämä asiat kuulostavat vierailta tai ohjelmointitaidot ovat ehtineet ruostua, kannattaa lukea nuo linkit läpi ennen aloittamista.
Yhden ruudun luominen
Aloitetaan muokkaamalla Begin
-aliohjelmaa. Varmistetaan aluksi, että hiiren kursori pysyy näkyvissä, jotta ruutuja voi klikkailla. Pienennetään samalla kentän kokoa, jotta se ei peitä koko ruutua ja lisätään kutsu LuoKentta
-aliohjelmaan, joka täyttää kentän ruuduilla.
public override void Begin()
{
Mouse.IsCursorVisible = true;
IsFullScreen = false;
Window.Width = 500;
Window.Height = 500;
LuoKentta();
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
}
Seuraavaksi täytyy kirjoittaa toteutus LuoKentta
-aliohjelmalle. Piirretään kentälle ensin yksi ruutu. Valitaan ensimmäisen ruudun paikaksi pelikentän "pienin" paikka, eli vasen alakulma. Lasketaan tämän paikan koordinaatit alla olevalla tavalla ja annetaan ne parametrina LuoRuutu
-aliohjelmalle.
void LuoKentta()
{
double alkuX = -Window.Width / 2 + RUUDUN_KOKO / 2;
double alkuY = -Window.Height / 2 + RUUDUN_KOKO / 2;
LuoRuutu(alkuX, alkuY);
}
Määritellään ruudun koko yhdessä vakiossa Begin
-aliohjelman yläpuolella, jotta kaikista ruuduista tulee saman kokoisia.
const int RUUDUN_KOKO = 50;
Luodaan ohjelmaan myös lista, johon tallennetaan kaikki ruudut. Tätä tarvitaan myöhemmin. Lisää siis äskeisen rivin jälkeen tämä rivi:
List<GameObject> ruudut = new List<GameObject>();
Jotta lista saadaan käyttöön, on myös lisättävä seuraava rivi aivan ohjelmakoodin alkuun, ensimmäiselle riville. Jos rivi on valmiiksi lisättynä, voit ohittaa tämän vaiheen.
using System.Collections.Generic;
Seuraavaksi toteutetaan LuoRuutu
-aliohjelma, joka luo kentälle yhden ruudun annettuun paikkaan. Tallennetaan ruutu aiemmin luotuun listaan, jotta siihen päästään helposti käsiksi jatkossa.
void LuoRuutu(double x, double y)
{
GameObject ruutu = new GameObject(RUUDUN_KOKO-2, RUUDUN_KOKO-2);
ruutu.Position = new Vector(x, y);
ruudut.Add(ruutu);
Add(ruutu);
}
Tässä vaiheessa voit ajaa ohjelman. Nyt kentälle pitäisi ilmestyä yksi ruutu vasempaan alakulmaan.
Kentän täyttäminen ruuduilla
Seuraavaksi muokataan LuoKentta
-aliohjelmaa niin, että se piirtää yhden ruudun sijasta koko kentän täyteen ruutuja. Kutsutaan LuoRuutu
-aliohjelmaa silmukassa, joka kiertää kentän x
-koordinaatit vasemmalta oikealle.
void LuoKentta()
{
double alkuX = -Window.Width / 2 + RUUDUN_KOKO / 2;
double alkuY = -Window.Height / 2 + RUUDUN_KOKO / 2;
for (double x = alkuX; x < Window.Width / 2; x += RUUDUN_KOKO)
LuoRuutu(x, alkuY);
}
Jos nyt ajat ohjelman, kentän alareunaan pitäisi syntyä kokonainen rivi ruutuja.
Lisätään vielä silmukan sisään toinen, sisäkkäinen silmukka joka kiertää kaikki kentän y
-koordinaatit alhaalta ylös.
void LuoKentta()
{
double alkuX = -Window.Width / 2 + RUUDUN_KOKO / 2;
double alkuY = -Window.Height / 2 + RUUDUN_KOKO / 2;
for (double x = alkuX; x < Window.Width / 2; x += RUUDUN_KOKO)
for (double y = alkuY; y < Window.Height / 2; y += RUUDUN_KOKO)
LuoRuutu(x, y);
}
Jos nyt ajat ohjelman, koko kentän pitäisi täyttyä ruuduista ja voit siirtyä seuraavaan vaiheeseen.
Koko koodin pitäisi näyttää ensimmäisen vaiheen lopuksi suurinpiirtein tältä:
using System.Collections.Generic;
using Jypeli;
using Jypeli.Controls;
public class GameOfLife : Game
{
const int RUUDUN_KOKO = 50;
List<GameObject> ruudut = new List<GameObject>();
public override void Begin()
{
Mouse.IsCursorVisible = true;
IsFullScreen = false;
Window.Width = 500;
Window.Height = 500;
LuoKentta();
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
}
void LuoKentta()
{
double alkuX = -Window.Width / 2 + RUUDUN_KOKO / 2;
double alkuY = -Window.Height / 2 + RUUDUN_KOKO / 2;
for (double x = alkuX; x < Window.Width / 2; x += RUUDUN_KOKO)
for (double y = alkuY; y < Window.Height / 2; y += RUUDUN_KOKO)
LuoRuutu(x, y);
}
void LuoRuutu(double x, double y)
{
GameObject ruutu = new GameObject(RUUDUN_KOKO - 2, RUUDUN_KOKO - 2);
ruutu.Position = new Vector(x, y);
ruudut.Add(ruutu);
Add(ruutu);
}
}
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.