Skip to content
Snippets Groups Projects
AngryLego.cs 4.18 KiB
Newer Older
Vesa Lappalainen's avatar
Vesa Lappalainen committed
using Jypeli;

namespace AngryLego;

/// @author vesal
/// @version 16.10.2023
/// <summary>
/// 
/// </summary>
public class AngryLego : PhysicsGame
{
    
    private static readonly string[] lines = {
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "/                       ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "                        ",
        "        =======         ",
        "        Y  Y  Y         ",
        "        X* X  X         ",
        "   *    X  X  X     *   ",
        "        X  X  X         ",
        "        X *X *X         ",
    };
    
    private static readonly int tileWidth = 800 / lines[0].Length;
    private static readonly int tileHeight = 480 / lines.Length;
    
    public override void Begin()
    {
        ClearGameObjects();
        ClearControls();
        Gravity = new Vector(0, -500);
        
        Level.Background.CreateGradient(Color.Blue, Color.White);
        
        TileMap tiles = TileMap.FromStringArray(lines);
        tiles.SetTileMethod('Y', LuoYlaSeina, Color.Wheat); // Aliohjelmien pitää itse lisätä, enemmän param
        tiles.SetTileMethod('X', LuoSeina, Color.Wheat); // Aliohjelmien pitää itse lisätä, enemmän param
        tiles.SetTileMethod('=', LuoKatto, Color.Red);
        tiles.SetTileMethod('/', LuoMaila, Color.Black);
        tiles.SetTileMethod('*', LuoVihollinen, Color.Pink);

        tiles.Execute(tileWidth, tileHeight);

        Level.CreateBorders();
        Camera.ZoomToLevel();
        
        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
    }
    
    
   /// <summary>
    /// Luodaan seinäelementti
    /// </summary>
    private void LuoSeina(Vector paikka, double leveys, double korkeus, Color vari)
    {
        PhysicsObject seina = new PhysicsObject(leveys-1, korkeus-1);
        seina.Position = paikka;
        seina.Color = Color.Wheat;
        seina.Tag = "rakenne";
        // seina.Image = LoadImage("tiili");
        Add(seina);
    }


    /// <summary>
    /// Luodaan isompi yläseinäelementti
    /// </summary>
    private void LuoYlaSeina(Vector paikka, double leveys, double korkeus, Color vari)
    {
        PhysicsObject seina = new PhysicsObject(leveys*1.8, korkeus-1);
        seina.Position = paikka;
        
        seina.Color = Color.Wheat;
        seina.Tag = "rakenne";
        // seina.Image = LoadImage("tiili");
        Add(seina);
    }


    /// <summary>
    /// Luodaan kattoelementti.  Luodaan hieman ylisuureksi, jolloin liimautuu
    /// naapuriin kiinni.
    /// </summary>
    private void LuoKatto(Vector paikka, double leveys, double korkeus, Color vari)
    {
        PhysicsObject katto = new PhysicsObject(leveys-1, korkeus-1);
        katto.Position = paikka;
        katto.Color = vari;
        katto.Tag = "rakenne";
        Add(katto);
    }


    /// <summary>
    /// Luodaan maila, jolla palloja lyödään
    /// </summary>
    private void LuoMaila(Vector paikka, double leveys, double korkeus, Color vari)
    {
        PhysicsObject maila = PhysicsObject.CreateStaticObject(leveys * 6, korkeus);
        maila.Position = paikka;
        maila.Color = vari;
        // maila.Image = LoadImage("maila3");
        Add(maila);
    }


    /// <summary>
    /// Luodaan vihollinen, joka hajoaa osuessaan rekenteeseen
    /// </summary>
    private void LuoVihollinen(Vector paikka, double leveys, double korkeus, Color vari)
    {
        PhysicsObject vihu = new PhysicsObject(leveys / 2, leveys / 2, Shape.Circle);
        vihu.Position = paikka;
        vihu.Color = vari;
        // vihu.Collided += new NewCollisionHandler(VihuunOsui);
        vihu.Tag = "vihu";
        // vihu.Image = LoadImage("Baby");
        Add(vihu);
    }


}