Skip to content
Snippets Groups Projects
Commit 33eabcc8 authored by Vesa Lappalainen's avatar Vesa Lappalainen :bicyclist:
Browse files

live13 loppu

parent a231ccaf
No related branches found
No related tags found
No related merge requests found
......@@ -9,11 +9,181 @@ namespace AngryLego;
/// </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;
private PhysicsObject maila;
public override void Begin()
{
// Kirjoita ohjelmakoodisi tähän
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)
{
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);
AddCollisionHandler(vihu, "rakenne", VihuunOsui);
vihu.Tag = "vihu";
// vihu.Image = LoadImage("Baby");
Add(vihu);
}
/// <summary>
/// Apualiohjlema vihollisen räjäyttämiseksi ja poistamiseksi
/// </summary>
/// <param name="vihu"></param>
/// <summary>
/// Kun vihollinen osuu rakenteeseen
/// </summary>
/// <param name="vihu">vihollinen joka törmäsi</param>
/// <param name="rakenne">rakenne johon osui</param>
private void VihuunOsui(PhysicsObject vihu, PhysicsObject rakenne)
{
}
/// <summary>
/// Tapahtuma kun pallo osuu viholliseen
/// </summary>
/// <param name="pallo">pallo joka osui</param>
/// <param name="vihu">vihollinen johon osuttiin</param>
private void PalloOsui(PhysicsObject pallo, PhysicsObject vihu)
{
}
/// <summary>
/// Käännetään mailaa
/// </summary>
/// <param name="kulma">millä kulmalla käännetään</param>
private void KaannaMailaa(double kulma)
{
maila.Angle += Angle.FromDegrees(kulma);
}
/// <summary>
/// Pudotetaan uusi pallo, joka voi rikkoa vihollisen
/// </summary>
private void PudotaPallo()
{
PhysicsObject pallo = new PhysicsObject(tileWidth, tileWidth, Shape.Circle);
pallo.Color = Color.Yellow;
pallo.Position = maila.Position + new Vector(0, maila.Height + tileWidth);
// pallo.Image = LoadImage("Igor");
Add(pallo);
AddCollisionHandler(pallo, "vihu", PalloOsui);
}
}
\ No newline at end of file
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
/// @author Omanimi
/// @version 16.10.2023
......@@ -15,5 +12,102 @@ public class MjPilkkominen
/// </summary>
public static void Main()
{
char[] erottimet = new char[] { ' ', ';', ',' };
Console.Write("Erotinmerkit ovat: ");
foreach (char merkki in erottimet)
{
Console.Write($"'{merkki}' ");
}
Console.WriteLine();
Console.Write("Kirjoita jono jossa sanoja > ");
string mj = Console.ReadLine();
// Split()-metodin avulla saadaan tehtya merkkijonosta
// merkkijonotaulukko. Split ottaa parametrina merkkitaulukon
// jossa erotinmerkit on ilmoitettu.
// String[] pilkottu = mj.Split(erottimet, StringSplitOptions.RemoveEmptyEntries);
string[] pilkottu = mj.Split(erottimet);
TulostaPalat(pilkottu);
Console.Write("Anna kokonaislukuja > ");
string lukusyote = Console.ReadLine();
int[] luvut = MerkkijonoLuvuiksi(lukusyote, erottimet);
if ( luvut != null )
Console.WriteLine("Antamiesi lukujen summa on : " + Summa(luvut));
else
Console.WriteLine("Annoit jotain muuta kuin lukuja, tai tyhjan merkkijonon");
}
/// <summary>
/// Aliohjelma muuttaa annetun merkkijonon kokonaislukutaulukoksi
/// siten, etta eri luvut erotellaan annetun merkkitaulukon (erotinmerkkien)
/// perusteella. Alkuperäisen syötteen alusta ja lopusta poistetaan välilyönnit.
/// </summary>
/// <param name="lukusyote">Muunnettava merkkijono</param>
/// <param name="erottimet">Sallitut erotinmerkit merkkitaulukossa</param>
/// <returns>Merkkijonosta selvitetty kokonaislukutaulukko. null jos yksikin luku väärin</returns>
/// <example>
/// <pre name="test">
/// int[] t1 = MerkkijonoLuvuiksi("1 2 3", new char[] {' '});
/// String.Join(" ", t1) === "1 2 3";
/// t1 === new int[]{1,2,3};
/// int[] t2 = MerkkijonoLuvuiksi(" ,,1;;3 ;5 ", new char[] {' ', ',', ';'});
/// t2 =J= "0, 0, 1, 0, 3, 0, 0, 5";
/// MerkkijonoLuvuiksi("1;;3 ;5", new char[] {' ', ',', ';'}) =J= "1, 0, 3, 0, 0, 5";
/// MerkkijonoLuvuiksi("1 3k 5", new char[] {' '}) === null;
/// </pre>
/// </example>
public static int[] MerkkijonoLuvuiksi(string lukusyote, char[] erottimet)
{
// Tyhjat pois edesta ja lopusta (Trim())
string[] pilkottu = lukusyote.Trim().Split(erottimet);
int[] luvut = new int[pilkottu.Length]; // luvut[] saa kookseen saman kuin pilkottu[]
for (int i = 0; i < pilkottu.Length; i++)
{
string jono = pilkottu[i];
if (!string.IsNullOrEmpty(jono))
{
if (!int.TryParse(jono, out luvut[i])) return null;
}
}
return luvut;
}
/// <summary>
/// Laskee kokonaislukutaulukon alkiot yhteen ja palauttaa alkioiden summan.
/// </summary>
/// <param name="luvut">Tutkittava kokonaislukutaulukko</param>
/// <returns>Taulukon alkioiden summa</returns>
/// <example>
/// <pre name="test">
/// Summa(new int[]{1,2,3}) === 6;
/// Summa(new int[]{2}) === 2;
/// </pre>
/// </example>
public static int Summa(int[] luvut)
{
int summa = 0;
foreach (int luku in luvut)
summa += luku;
return summa;
}
/// <summary>
/// Tulostetaan merkkijonotaulukon palat
/// </summary>
/// <param name="palat">Tulostettava merkkijonotaulukko</param>
public static void TulostaPalat(string[] palat)
{
foreach (string pala in palat)
Console.WriteLine($"Pala: \"{pala}\"");
Console.WriteLine("-------------------------------");
}
}
\ No newline at end of file
// ReSharper disable all
using System;
using NUnit.Framework;
using static MjPilkkominen;
[TestFixture]
[DefaultFloatingPointTolerance(0.000001)]
public class TestMjPilkkominen
{
[Test]
public void TestMerkkijonoLuvuiksi53()
{
int[] t1 = MerkkijonoLuvuiksi("1 2 3", new char[] {' '});
Assert.AreEqual( "1 2 3", String.Join(" ", t1) , "in method MerkkijonoLuvuiksi, line 55");
Assert.AreEqual( new int[]{1,2,3}, t1 , "in method MerkkijonoLuvuiksi, line 56");
int[] t2 = MerkkijonoLuvuiksi(" ,,1;;3 ;5 ", new char[] {' ', ',', ';'});
Assert.AreEqual(( "0, 0, 1, 0, 3, 0, 0, 5").ToString(), String.Join(", ", t2 ), "in method MerkkijonoLuvuiksi, line 58");
Assert.AreEqual(( "1, 0, 3, 0, 0, 5").ToString(), String.Join(", ", MerkkijonoLuvuiksi("1;;3 ;5", new char[] {' ', ',', ';'}) ), "in method MerkkijonoLuvuiksi, line 59");
Assert.AreEqual( null, MerkkijonoLuvuiksi("1 3k 5", new char[] {' '}) , "in method MerkkijonoLuvuiksi, line 60");
}
[Test]
public void TestSumma87()
{
Assert.AreEqual( 6, Summa(new int[]{1,2,3}) , "in method Summa, line 88");
Assert.AreEqual( 2, Summa(new int[]{2}) , "in method Summa, line 89");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NUnit" Version="3.13.1"/>
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MjPilkkominen\MjPilkkominen.csproj"/>
</ItemGroup>
</Project>

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KentanMuokkaus", "KentanMuokkaus\KentanMuokkaus.csproj", "{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AngryLego", "AngryLego\AngryLego.csproj", "{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}"
......@@ -10,31 +11,37 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Muuttujat", "Muuttujat\Muut
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kertausta2", "Kertausta2\Kertausta2.csproj", "{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MjPilkkominenTest", "MjPilkkominenTest\MjPilkkominenTest.csproj", "{14029E79-BEB2-4C0B-A6E1-DD167DC0A722}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Release|Any CPU.Build.0 = Release|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Release|Any CPU.Build.0 = Release|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Release|Any CPU.Build.0 = Release|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Release|Any CPU.Build.0 = Release|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Release|Any CPU.Build.0 = Release|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Release|Any CPU.Build.0 = Release|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Release|Any CPU.Build.0 = Release|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Release|Any CPU.Build.0 = Release|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Release|Any CPU.Build.0 = Release|Any CPU
{14029E79-BEB2-4C0B-A6E1-DD167DC0A722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{14029E79-BEB2-4C0B-A6E1-DD167DC0A722}.Debug|Any CPU.Build.0 = Debug|Any CPU
{14029E79-BEB2-4C0B-A6E1-DD167DC0A722}.Release|Any CPU.ActiveCfg = Release|Any CPU
{14029E79-BEB2-4C0B-A6E1-DD167DC0A722}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KentanMuokkaus", "KentanMuokkaus\KentanMuokkaus.csproj", "{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AngryLego", "AngryLego\AngryLego.csproj", "{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MjPilkkominen", "MjPilkkominen\MjPilkkominen.csproj", "{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Muuttujat", "Muuttujat\Muuttujat.csproj", "{1250A748-EFC4-403E-8874-039BCB3AD225}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kertausta2", "Kertausta2\Kertausta2.csproj", "{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F14ECAF-1218-40DC-B64F-D3321DBA52FB}.Release|Any CPU.Build.0 = Release|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E80AAAAF-0691-472C-9CEE-A6E5AEEA4F1E}.Release|Any CPU.Build.0 = Release|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3CEE0E5E-6CCD-45AF-8C37-5F63662C65DD}.Release|Any CPU.Build.0 = Release|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1250A748-EFC4-403E-8874-039BCB3AD225}.Release|Any CPU.Build.0 = Release|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD230C5F-C1AB-4A06-8381-2CAD3D5736E9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment