Newer
Older
using System.Net;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
//using Silk.NET.GLFW;
//using Silk.NET.Windowing;
namespace Palikat;
/// @author Atte Tuliainen
/// @version 25.09.2023
/// <summary>
/// Tämä on 2020-luvun versio klassisesta pulmapelistä, jossa erikokoiset palikat siirretään pinosta toiseen pinoon koko järjestykseen.
/// Haastetta tuo sallittujen siirtojen säännöt ja aika.
/// </summary>
public class Palikat : PhysicsGame
{
//Luodaan taulukko jonka pohjalta luodaan kenttä ja oliot peliin
private static readonly String[] kentta = {
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" 3 ",
" 2 ",
" 1 ",
" = = = ",
private static readonly int tileWidth = 1500 / kentta[0].Length;
private static readonly int tileHeight = 1000 / kentta.Length;
// Luodaan pelialue ja määritetään taustan väri
// lisätään pieni paivovoima, jotta palikat asettuvat kivasti paikalleen
Gravity = new Vector(0, -50);
TileMap tiles = TileMap.FromStringArray(kentta);
//Määritetään pelin osien mappaus piirrettyyn kenttään sekä osien väri
tiles.SetTileMethod('1', LuoPalikka1, Color.Yellow); //palikka1
tiles.SetTileMethod('2', LuoPalikka2, Color.Yellow); //palikka2
tiles.SetTileMethod('3', LuoPalikka3, Color.Yellow); //palikka3
tiles.SetTileMethod('=', LuoAlusta, Color.Gray); //alustat
tiles.Execute(tileWidth, tileHeight);
Level.CreateBorders(1,1,2,1,Color.White);
Camera.ZoomToAllObjects();
Kontrollit();
LuoPistelaskuri();
//Ohjaimet pelaamiseen
void Kontrollit()
{
Console.WriteLine("testikontrolli");
///TO-DO pelin hiiren kontrollit tähän
}
//Pelistä poistuminen
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
/// TO-DO: Muuta palikoiden luonti yhteen aliohjelmaa ja siten että palikoita voidaa kutsua muualta esim. kontrolleja varten
private void LuoPalikka1(Vector paikka, double leveys, double korkeus, Color vari)
PhysicsObject palikka1 = new PhysicsObject(leveys*6, korkeus);
palikka1.Position = paikka;
palikka1.Color = vari;
palikka1.Image = LoadImage("palikka1");
palikka1.Tag = "palikka";
AddCollisionHandler(palikka1, "alusta", Palikka1OsuuAlustaan);
Mouse.ListenOn(palikka1, MouseButton.Left, ButtonState.Down, TartuPalikkaan, "Ota kiinni palikasta");
void TartuPalikkaan()
{
//Hiiren käyttö
Mouse.IsCursorVisible = true;
palikka1.Position = Mouse.PositionOnWorld;
}
private void LuoPalikka2(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject palikka2 = new PhysicsObject(leveys*4, korkeus);
palikka2.Position = paikka;
palikka2.Color = vari;
palikka2.Image = LoadImage("palikka2");
palikka2.Tag = "palikka";
AddCollisionHandler(palikka2, "alusta", Palikka2OsuuAlustaan);
Mouse.ListenOn(palikka2, MouseButton.Left, ButtonState.Down, TartuPalikkaan, "Ota kiinni palikasta");
void TartuPalikkaan()
{
//Hiiren käyttö
Mouse.IsCursorVisible = true;
palikka2.Position = Mouse.PositionOnWorld;
}
}
private void LuoPalikka3(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject palikka3 = new PhysicsObject(leveys*2, korkeus);
palikka3.Position = paikka;
palikka3.Color = vari;
palikka3.Image = LoadImage("palikka3");
palikka3.Tag = "palikka";
AddCollisionHandler(palikka3, "palikka", Palikka1OsuuPalikkaan3);
AddCollisionHandler(palikka3, "alusta", Palikka3OsuuAlustaan);
Mouse.ListenOn(palikka3, MouseButton.Left, ButtonState.Down, TartuPalikkaan, "Ota kiinni palikasta");
void TartuPalikkaan()
{
//Hiiren käyttö
Mouse.IsCursorVisible = true;
palikka3.Position = Mouse.PositionOnWorld;
}
}
/// <summary>
/// Luodaan alustat
/// </summary>
public void LuoAlusta(Vector paikka, double leveys, double korkeus, Color vari)
PhysicsObject alusta = new PhysicsObject(leveys*8, korkeus);
alusta.Position = paikka;
alusta.Color = vari;
alusta.Image = LoadImage("platform");
alusta.Tag = "alusta";
///Määritellään säännöt/rajoiteet
private void Palikka1OsuuAlustaan(PhysicsObject palikka1, PhysicsObject alusta)
{
//laskurin arvo kasvaa
Console.WriteLine("Palikka1 osui alustaan");
//siirtolaskuri.Value += 1;
}
private void Palikka2OsuuAlustaan(PhysicsObject palikka2, PhysicsObject alusta)
{
//laskurin arvo kasvaa
Console.WriteLine("Palikka2 osui alustaan");
}
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
private void Palikka3OsuuAlustaan(PhysicsObject palikka3, PhysicsObject alusta)
{
//laskurin arvo kasvaa
Console.WriteLine("Palikka3 osui alustaan");
}
void Palikka1OsuuPalikkaan2(PhysicsObject palikka1, PhysicsObject palikka2)
{
//laskurin arvo kasvaa
//tarkista onko palikat oikeassa järjestyksessä
Console.WriteLine("palikka1 osui palikka2");
}
void Palikka1OsuuPalikkaan3(PhysicsObject palikka1, PhysicsObject palikka3)
{
//laskurin arvo kasvaa
//tarkista onko palikat oikeassa järjestyksessä
Console.WriteLine("palikka1 osui palikka3");
}
void Palikka2OsuuPalikkaan3(PhysicsObject palikka2, PhysicsObject palikka3)
{
//laskurin arvo kasvaa
//tarkista onko palikat oikeassa järjestyksessä
Console.WriteLine("palikka2 osui palikka3");
}
//luodaan laskuri, joka laskee montako siirtoa pelaaja on tehnyt
private IntMeter pistelaskuri;
void LuoPistelaskuri()
{
pistelaskuri = new IntMeter(0);
Label siirtolaskuri = new Label();
siirtolaskuri.X = Screen.Left +55;
siirtolaskuri.Y = Screen.Top -60;
siirtolaskuri.TextColor = Color.BloodRed;
siirtolaskuri.Color = Color.Black;
siirtolaskuri.IntFormatString = "Siirrot: {0:D3}";
siirtolaskuri.BindTo(pistelaskuri);
Add(siirtolaskuri);
}