From 4862e568bbe4fe90ef962c1bcad8ce3d09cdb0b0 Mon Sep 17 00:00:00 2001
From: Eskelinen Roy <roy.eskelinen@gmail.com>
Date: Thu, 6 Jan 2022 15:27:08 +0200
Subject: [PATCH] ht3

---
 .../.vs/Eskape/DesignTimeBuild/.dtbcache.v2   | Bin 64714 -> 64714 bytes
 Eskape/.vs/Eskape/v16/.suo                    | Bin 32256 -> 37376 bytes
 Eskape/Eskape/Content/kentta1.txt             |   2 +-
 Eskape/Eskape/Content/tahti.png               | Bin 1458 -> 0 bytes
 Eskape/Eskape/Eskape.cs                       | 319 ++++++++++------
 .../bin/Debug/net5.0/Content/kentta1.txt      |   2 +-
 .../Eskape/bin/Debug/net5.0/Content/tahti.png | Bin 1458 -> 0 bytes
 Eskape/Eskape/bin/Debug/net5.0/Eskape.dll     | Bin 12800 -> 13312 bytes
 Eskape/Eskape/bin/Debug/net5.0/Eskape.pdb     | Bin 12436 -> 12436 bytes
 Eskape/Eskape/bin/Debug/net5.0/ref/Eskape.dll | Bin 5632 -> 5632 bytes
 .../net5.0/Eskape.csproj.FileListAbsolute.txt |   1 -
 Eskape/Eskape/obj/Debug/net5.0/Eskape.dll     | Bin 12800 -> 13312 bytes
 Eskape/Eskape/obj/Debug/net5.0/Eskape.pdb     | Bin 12436 -> 12436 bytes
 Eskape/Eskape/obj/Debug/net5.0/ref/Eskape.dll | Bin 5632 -> 5632 bytes
 README.md                                     |  11 +
 Suunnitelma/README.md                         |   1 +
 gitignore                                     | 350 ++++++++++++++++++
 17 files changed, 572 insertions(+), 114 deletions(-)
 delete mode 100644 Eskape/Eskape/Content/tahti.png
 delete mode 100644 Eskape/Eskape/bin/Debug/net5.0/Content/tahti.png
 create mode 100644 README.md
 create mode 100644 Suunnitelma/README.md
 create mode 100644 gitignore

diff --git a/Eskape/.vs/Eskape/DesignTimeBuild/.dtbcache.v2 b/Eskape/.vs/Eskape/DesignTimeBuild/.dtbcache.v2
index 7213d370349d2e4b43d4a30e32c551ebf4c62646..14cc012290f3fbe97abb4d14f8c565bce319de85 100644
GIT binary patch
delta 77
zcmWN>u@S%^2mrvsg+viCRYu4Pf-sM(xP}{fmm>M%_X+!i`P_*Mb!bNPm(6|T3Q!3g
b9W<iU(t2?qlc+f%52m5gBch=xuX(*6&~+HF

delta 77
zcmV~$NfE#x3;@6fhH{Vu`l^Il2oUsOr8aQHOds9dC+(Bgb1Q|j4w(bGTaMZ+da1%7
bNC51F!wPb3TnHGWhigdWJi(0YUDx*m)h8Ga

diff --git a/Eskape/.vs/Eskape/v16/.suo b/Eskape/.vs/Eskape/v16/.suo
index ebd0a14ebaa806605da1bfd55697a486cf165cbd..e6cec395b5bf69d482b52df93cbdbec811745e0a 100644
GIT binary patch
delta 2169
zcmdT_S!^3s6rDF7M`>_2r*2|us6!HxIG!*bJC4m#vbb(=)5ZlF@sZ6d&VpPu&SF|A
z4l2qARn^R;LPC@eQz`^Mtw#uu5H-t3C=?Y11VW;eMdSlYT9kei(wO^<-C7|8g!03a
zuI~2k^F8Oj=ZP(o*h%)7a0ioJB@D9(Z5CxEl}gbtfls-zGXp;pVuVU|TVbs9yIMx^
zB{5(w2~qYSd0xK8RuR4i16ZFfRHDZE^r8plE*<77>7la&s!n}oV;kzcjGf(FhyLBG
zVzuaNQA$zrGr0!TJPMrVEQR-?aUaV4D6RBYG+WVXN7;cwk9MNo30LzMB(^hyspOjb
zubA?xh$f4P)^S)zv8>GQEmLk7h=NR4{|yAUAQgnj%9*{-k()-M$ib=T6lwFcahSDL
z%Mmq4h)#}bx>)WwCg9_8i==k^-A0I(%}A~owCpN@3$8x-7nho>_7l2EmRy#jccv6n
z-E~e0@0UIRvAQ|%Oq9V3Hmw|~Kf+3)Lq#tO9Z|L&h=^{LfPu!`;1UMuwCI3u?KB@|
zyNLYTJ$bBT`9P({9K8hDymA{li}Lk7E>cLWXjA0bq#S8HLK1BqB-;>RLvbsc*nWbv
zn?<A9cF5@&84dWbre@!0;DGx;I5;>GsObrZhD<$fJ;sYs=(XN4I_%jW==oDM`bNLU
zC|r6_pD;LBl^Hi|LCOBGGK`KMqDEIC(}bp&lY=GWVe&ad`L29TPI&86)Ip)k9|(HJ
zMk4)@C-&PdR=ZsM*j2^G@tE)?6~ZFE(ccveQ*HM**_te(iMN{le%{h7dU>ztG4p~s
zXtj$bpV{Bkq+p(bRHz-2&I);#^K~NaS!WU-5!GhIP>+)3LtbiBk@%ymWOQr<SE^jD
zq>hW~($&*3z+%U~EpvpDNtZ4;kM?e~9LF<A9)T+l6&J6?G?Y$iVL7aWz+^j|>n+Kn
z^LIeH?n2K+e6sZ1*N(oi0&n&11cBvb&ii%_rDm@$XcvQi-tTX=@fI;?<LzFLz}u}B
zdr<TVev?U9O=-N3TL;O*H<1{UA++f;$wd;LS-(*k8)f4`f)ABE&T_;Am9APit=+^L
zgscgH;oBiL93x#oB2zFGsb8DGlSo8se2l~g{_Tm<xTo*>{AI_>Pk*@3z0~q!w{W(z
zp}*?g;cq{a)IW5qo&E7E2q=AB=#{xq#4ul>Z$RR|Mturj{cVW)U^&AW@#8eDXP7rJ
z-dD*mFQV_PhO^`2de?Gi_4XU@JiFWV)2lxHu_?_bGv_bOpRy+7?{&|GzOljd_+}WK
zD2JB8`j=jrAh#%sBcvg@F3ORd;mXZVo+kxjv(aQt|4qn6hkhkF<g7W9G&zYe5BVPe
zhPvn%;2COzwu%)EbAnzm{N~c{BOL-=;2vs#m^KE}z5G8h1FHUf5Lzo_eTAN^f7~Bz
C+3`vM

delta 1960
zcmcIkZ%k8H6z_d)S%t^{{|LIG&Pv+yUfV}oS5cub1Ojz~Em0O}%PXS%@6*vK<3TVk
z;xgz7$r7_<=}7ivS)|V;`?5%ueK0tZIhJk7zARa`PiS;uL>-|!7pT_AW=yvG^2<Gc
z?!E7vdw%!GGmN}SCb<$uwK+0Ws$>+Yz7~tcs8tQOG}*K5ON5kxUjHKN8VH|R`H^f#
zmkc519GO=BWOk8}LNufy=sr5MDDOsWXt7uh%J~U8wHKhCgwP?f5qXGQL=hq#QH&@-
z>_qHGlp^Bi?Lygv*!<tr8zpc}!)5M3)5{1K;s7FrhCkJQKg=}J1el$v{hus8ok3DU
z2J{c~R1I#Yay*NF%U~O>{hu;m;~6BMoNf7lgg2&Wnp?xt$mm_sDB)=SZbiz{5V9RY
z*%!lE?tgMCq3mWxLo<YLa&6%4uY#&eYZ<TW)MM>$H!m8l92xxSqr*4g+e;kC6Y?_`
zM2m+QvZRD|#ME>uo!4qf1x5wl;cRHjF9gZ(z0UkZnENg>VV9ewwWc+U$FJ=}r3^x@
z`cxvIXi4zFvTK}7L+C)WE-S&T9is|7;2T&2O0*8~(-g^anMBM?*yv`djZ5%>Wc09<
zZj{II4X}(xBN`}|9~mXnIMYPnVfj33Mf=_apOzByj`DzefkY~p;tnz3J<~0nkb3$Z
zoM4v3pcE7(sjIg$7=)vRhACqzyjfVT$d$4>Qp-dgAChvOGYa<ewchTa=)=SIv<AgN
z&tPAmt6SXD)_3w0-{vVpJADnb(vbO15&Z5fLMG=ZIdz|sLwE3@{iVjY*5L@)MNYJt
z9K4M)+5Ar4<m9b>lg}qO{C+1V_;{aMH9_3_IsDF5*=uU8Hr^7o)sd&G6RBrlvZWfT
zTdrhg)C5m^`^C16$?Olp-Imt8T!P`OkF2@ZHf8rT+&yv}`WkfbOT9HC<+Ru<NnYM8
z4N0V^CKxV|!xLuZvw~L%tv)T|b63BC-G|%sh<Jh6bq1_QqEdw$zh-Gy*{Vv7HwkM)
zAFX11Gb~#?>*R>HCi;xv&_N9hS>FwtZ|Gi1Sgb6YSrYO52ZYLR+Ptv@%G4YdDwOof
zdukxZ-pa#@J{p-Q(YEY{&FghS>GAi-8j>Iv4z?yK^Ia88q=Sjp&Z!^s!68@z{s8Ya
zSw&7T*}M+k<mGt5<h2Hz0lQ$Y5G>ple28=te8r@P(GU*w1$*J@#J0y01O|$T2=ajZ
zY=#shFr)!x+U1{Q2;A$u`23lYCLn_&Fgj@1nuIfWOI6VeUZS7<a(TXeu4ZIuJSlWL
z8f88ot?P1q*ZM<c?b(IjUb$MYqOG+o9Rs_Cv6)j<sujHV+t|pzKz$w?{`<@ZS14cb
z^<6)IR)3A_@6p}g@zsgdMbAU)>ddL&_`>zJm9oy3=ILV}|NQIvq0lv)uZ#{G$kypa
nFvMz@>}?0%$jy{B{27kEUP)B!@&ZW~oJL`zCn#xSe~`Zcg0q5N

diff --git a/Eskape/Eskape/Content/kentta1.txt b/Eskape/Eskape/Content/kentta1.txt
index a0fc254..c716981 100644
--- a/Eskape/Eskape/Content/kentta1.txt
+++ b/Eskape/Eskape/Content/kentta1.txt
@@ -15,7 +15,7 @@
          XXXX                        ##      
                     H                 ##     #
                     ##                         
-          H E    F    F        F                  #
+       XX H E    F    F        F                  #
        ############################         ##
    N     *^     F**#                        
   ##     ##     ####                  ##
diff --git a/Eskape/Eskape/Content/tahti.png b/Eskape/Eskape/Content/tahti.png
deleted file mode 100644
index 12f4398771471bc9a704358049b6d6dd07f9b974..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1458
zcmV;j1x@;iP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T700004b3#c}2nYxW
zd<bNS00009a7bBm0006i0006i0k<MKn*aa+8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H11uscNK~z|U#h6`4mS-5pf7hett1)evI$CP=DoOUC7PXezCM*jg
zw_1@KTZ64&2aR>KgMoK<2V=0KMr9vsEBb;MMvb5kcd&zsi5_f56i6RLgKEqbfj0HN
zcJRF7oBDp}`?USx;rY0)`?`Nz*Zn;Abw8r21R-lB6ZjeU))+k%h*KavC`Z6*V7Ul+
zKwyAgP>z620IHN*E6aj%8VI1ZGFgPia2Pxf1-1m?7lMo6T2(?zmqK|tBElwX<)t7T
z2L;#^3gN<GsICT8vVf)_9H$Iut-LJ4s=0IVJP&5ihMXLnNHA#*B7*Bw$(T3KzY&4z
zYCKgITPq7vbshv@)8xsxnKOqUR91or3Vf2P^OOLsl|taniV8fD;pe%z5Dp_Ed}ytN
z{x?8i1K<s%H(HUGB^Owi$^a<=itt`e4z8$ZblaRckd=ia#c$$-0j-r1RbHDve{3I~
z2US&gzzS=nbfV*=vKBW1GFEzrR8<96t{}h{*2*EEFY4$Wx;93i#quGlinWph<N?!0
zoS(ZEAzy@iRi>(vIdv*-+qU>wIC2ENa|elM1E>i7K%a;Ytx7NOo9x)ZFF;+ao}Pz>
zLb&W~Bs&`~I~%gHAUoUtoJ^Y*f8_ptxO2xp4-5<+(f1>-Z`=UqK!mgD_%&P|KwTXa
z75Re?L1bnkKw5$b#8gHGl$9lCJ1_vPtv(!ZSe30qDc&H$kx7%tT)!SKS%*QYw--*H
zMDN{0fE~uDg~%KPuvQj`a26=8uSaTX{yVsy9yoRk*VBVjWs5O-c&JUHOMYu5PlQvd
z)K^qMW22v<7peRA;rMY}Umv}yylsrOMYqeyJ&CoF27Ci-FDyhiZ9=9@c`<M|Z^Dm1
z;+*4wb2J#ET_bHq0Y-s-Ai{T{5a}B?;zbt&L8!eQ&Ywp`xE_JKKbBogzzF1G5zdP6
zN<#y(WJxe^7cauqs~|#~D(j8WC$Vhf0!APUL}*oId1WQ6Sp#Vk{OAl0`k#^O*8%te
z*lLUp#Osp~FantY>;gVrw8)2?h;H42qelVQWsH8FOrNBR1!J@y_)LVpXE9gJ#EM#V
zVy1MY##7BysS+wK9uLy<%E^KJe4GfYlkGDez*>Nkl5ulAr_xe9RTfz*3084m;{mM6
z%)}KGOpq+1Qok}3;H_lrlLi!_uB0UOO;$+>q^IM6Rms>VHK4Upu1a3K`8PNSmo7m|
z3$AO_dN8cCG?+CDPlQ$0N}@V3>4?-o?D_ZT5ga^-yK)5{J>t*SRyc72p2T=p!(mXR
z09Y6lU~PIjZu<1m4ejl)e?RWwLwbSDs=Nw(+1*Y5o;|pZj?sNehj%Cm)11_vM1&PH
zX86B0hV=9)oH>JbcOxSFs>=Ju=<P`JSJp~ve?Q-!JIAuFE_Cf$Brnfz%*%t^T-@Ww
ztOmZ0H+I4ZS}W64DTz++&6}`yFN59PIG|aT+9)^xjL{pa)BxM=-J`dq1$X%}3@uz`
zWq2aIp6D-FG7+o=C@%K*3l}axXD5ho7icm@+hcV!Mjf!*TKUO24z#tg^4c|AV<TQT
z3>_V$1NFd}SU!@OgSDQAdLHcChwJPF;E*Z{<H3ypz1!TZ4Zuea9`NMA0rd88yyMQp
zgvG+no$|ZqF<%u`<!@C!Hbze;12&c-|8sT&?}DF+=4PEaAwX*-7x)W5(rv(IWAu-S
z!j16#jtDKP6at0D=)<w>5~cVb;3}{kSQ!)?fH8Vnm2%*XSa1OU0=7u%)X?vz2mk;8
M07*qoM6N<$f{;^-b^rhX

diff --git a/Eskape/Eskape/Eskape.cs b/Eskape/Eskape/Eskape.cs
index b5f9ada..cea0153 100644
--- a/Eskape/Eskape/Eskape.cs
+++ b/Eskape/Eskape/Eskape.cs
@@ -6,35 +6,24 @@ using System;
 using System.Collections.Generic;
 
 /// @author Roy Eskelinen
-/// @version 21.12.2021
+/// @version 6.1.2022
 /// <summary>
 /// Eskape tasohyppelypeli.
+/// Silmukkatehtävä: https://tim.jyu.fi/view/kurssit/tie/ohj1/2021s/demot/demo5#teht%C3%A4v%C3%A4-4.-rajan-ylitt%C3%A4v%C3%A4t
+/// Taulukkotehtävä: https://tim.jyu.fi/view/kurssit/tie/ohj1/2021s/demot/demo10#v2 
 /// </summary>
 
 
-
-/* class Vihu : PhysicsObject
-{
-    private IntMeter elamalaskuri = new IntMeter(3, 0, 3);
-    public IntMeter Elamalaskuri { get { return elamalaskuri; } }
-
-    public Vihu(double leveys, double korkeus)
-        : base(leveys, korkeus)
-    {
-        elamalaskuri.LowerLimit += delegate { this.Destroy(); };
-    }
-} */
-
 public class Eskape : PhysicsGame
 {
-    private const double NOPEUS = 150;
-    private const double HYPPYNOPEUS = 900;
-    private const int RUUDUN_KOKO = 40;
+    private const double NOPEUS = 150; // hahmon nopeus
+    private const double HYPPYNOPEUS = 900; // kuinka korkealle hahmo hyppää
+    private const int RUUDUN_KOKO = 40; // ruudun zoomaus
 
     private PlatformCharacter pelaaja;
 
-    int healthPoints = 5;
-    IntMeter pistelaskuri = new IntMeter(0);
+    private int healthPoints = 5; // hahmon elämät
+    private IntMeter pistelaskuri = new IntMeter(0);
 
     // kuvat
     private Image pelaajanKuva = LoadImage("PlayerHero1.png");
@@ -59,27 +48,19 @@ public class Eskape : PhysicsGame
     private SoundEffect coinAani = LoadSoundEffect("pickCoin.wav");
     private SoundEffect hpAani = LoadSoundEffect("powerUp.wav");
 
-    
 
+    /// <summary>
+    /// Begin kutsuu aliohjelman AloitaPelin.
+    /// </summary>
     public override void Begin()
     {
-        Gravity = new Vector(300, -2000);
-
-        LuoKentta();
-        LisaaNappaimet();
-        LuoPistelaskuri();
-
-        Camera.Follow(pelaaja);
-        Camera.ZoomFactor = 2;
-        Camera.StayInLevel = true;
-
-        MasterVolume = 0.5;
+        AloitaPeli();
     }
 
+
     /// <summary>
-    /// Tähän alapuolelle tulee kaikki luo ja lisää -tapahtumat.
+    /// Kentän sisältö. Perässä olevat nimet viittaavat kutsuttaviin aliohjelmiin.
     /// </summary>
-
     private void LuoKentta()
     {
         TileMap kentta = TileMap.FromLevelAsset("kentta1.txt");
@@ -90,7 +71,7 @@ public class Eskape : PhysicsGame
         kentta.SetTileMethod('^', LisaaPiste2);
         kentta.SetTileMethod('N', LisaaPelaaja);
         kentta.SetTileMethod('E', LisaaVihollinen);
-        kentta.SetTileMethod('F', LisaaVihollinen2);
+        kentta.SetTileMethod('F', LisaaVihollinen);
         kentta.SetTileMethod('B', LisaaLaatikko);
         kentta.SetTileMethod('S', LisaaPommi);
         kentta.SetTileMethod('H', LisaaHealthPotion);
@@ -100,6 +81,13 @@ public class Eskape : PhysicsGame
         Level.Background.TileToLevel();
     }
 
+
+    /// <summary>
+    /// Health Potion. Sen keräämällä hahmo saa yhden elämäpisteen lisää.
+    /// </summary>
+    /// <param name="paikka">Potionin paikka. Määritellään kentässä.</param>
+    /// <param name="leveys">Koko leveyssuunnassa.</param>
+    /// <param name="korkeus">Koko pituussuunnassa.</param>
     void LisaaHealthPotion(Vector paikka, double leveys, double korkeus)
     {
         PhysicsObject healthPotion = PhysicsObject.CreateStaticObject(leveys, korkeus);
@@ -110,15 +98,29 @@ public class Eskape : PhysicsGame
         Add(healthPotion);
     }
 
+
+    /// <summary>
+    /// Pelin perustaso, jonka päällä kävellään.
+    /// </summary>
+    /// <param name="paikka">Tason paikka. Määritellään kentta1.txt:ssä</param>
+    /// <param name="leveys">Tason leveys.</param>
+    /// <param name="korkeus">Tason korkeus</param>
     private void LisaaTaso(Vector paikka, double leveys, double korkeus)
     {
-        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
+        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys + 1, korkeus + 1);
         taso.Position = paikka;
         taso.Image = floorPic;
         taso.Tag = "floor";
         Add(taso);
     }
 
+
+    /// <summary>
+    /// Näkymätön taso pelissä. Käyttäytyy samalla tavalla kuin "LisaaTaso"-aliohjelma, mutta on näkymätön.
+    /// </summary>
+    /// <param name="paikka">Sijainti kentässä.</param>
+    /// <param name="leveys">Leveys</param>
+    /// <param name="korkeus">Korkeus</param>
     private void LisaaNakymatonTaso(Vector paikka, double leveys, double korkeus)
     {
         PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
@@ -128,6 +130,13 @@ public class Eskape : PhysicsGame
         Add(taso);
     }
 
+
+    /// <summary>
+    /// Pelihahmon tappava taso. Tason päälle tippuessaan peli alkaa välittömästi alusta.
+    /// </summary>
+    /// <param name="paikka">Tappavan tason paikka kentässä.</param>
+    /// <param name="leveys">Tappavan tason leveys.</param>
+    /// <param name="korkeus">Tappavan tason korkeus.</param>
     private void LisaaTappavaTaso(Vector paikka, double leveys, double korkeus)
     {
         PhysicsObject spikes = PhysicsObject.CreateStaticObject(leveys, korkeus);
@@ -137,6 +146,13 @@ public class Eskape : PhysicsGame
         Add(spikes);
     }
 
+
+    /// <summary>
+    /// Pelissä kerättävä kolikko. Antaa yhden pisteen.
+    /// </summary>
+    /// <param name="paikka">Kolikon paikka kentässä.</param>
+    /// <param name="leveys">Kolikon leveys.</param>
+    /// <param name="korkeus">Kolikon korkeus.</param>
     private void LisaaPiste(Vector paikka, double leveys, double korkeus)
     {
         PhysicsObject piste = PhysicsObject.CreateStaticObject(leveys, korkeus);
@@ -147,6 +163,13 @@ public class Eskape : PhysicsGame
         Add(piste);
     }
 
+
+    /// <summary>
+    /// Pelissä kerättävä kolikko. Antaa viisi pistettä.
+    /// </summary>
+    /// <param name="paikka">Kolikon paikka kentässä.</param>
+    /// <param name="leveys">Kolikon leveys.</param>
+    /// <param name="korkeus">Kolikon korkeus.</param>
     private void LisaaPiste2(Vector paikka, double leveys, double korkeus)
     {
         PhysicsObject piste2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
@@ -157,34 +180,43 @@ public class Eskape : PhysicsGame
         Add(piste2);
     }
 
+
+    /// <summary>
+    /// Pelihahmo, jota ohjataan.
+    /// </summary>
+    /// <param name="paikka">Aloituspaikka pelissä.</param>
+    /// <param name="leveys">Hahmon leveys.</param>
+    /// <param name="korkeus">Hahmon korkeus.</param>
     public void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
     {
         pelaaja = new PlatformCharacter(35, 39);
         pelaaja.Position = paikka;
-        // pelaaja.Mass = 1.8;
         pelaaja.Image = pelaajanKuva;
         pelaaja.Weapon = new AssaultRifle(0, 0);
         pelaaja.Weapon.Ammo.Value = 999;
         pelaaja.Weapon.ProjectileCollision = AmmusOsui;
         pelaaja.Tag = "pelaaja";
+
+        // Alla aliohjelmat pelaajan eri reaktioihin kentän kanssa.
         AddCollisionHandler(pelaaja, "piste", TormaaKolikkoon);
         AddCollisionHandler(pelaaja, "piste2", TormaaKolikkoon2);
         AddCollisionHandler(pelaaja, "tappavat", TormaaPommiin);
         AddCollisionHandler(pelaaja, "health", TormaaHealthPotion);
         AddCollisionHandler(pelaaja, "spikes", TormaaTappavaanTasoon);
-        // AddCollisionHandler(pelaaja, "tappavat", CollisionHandler.ExplodeObject(100, true));
 
         Add(pelaaja);
     }
 
+
+    /// <summary>
+    /// Pelissä summittaisesti lentelevä pommi, joka osuessaan pelaajaan satuttaa pelaajaa 1 pisteen verran.
+    /// </summary>
+    /// <param name="paikka">Aloituspaikka pommille. Muuttuu välittömästi pelin alkaessa.</param>
+    /// <param name="leveys">Pommin leveys.</param>
+    /// <param name="korkeus">Pommin korkeus.</param>
     private void LisaaPommi(Vector paikka, double leveys, double korkeus)
     {
-        /// Pommi toimii satunnaisesti. Tuhoamalla sen saa pisteitä.
-        /// Pommi satuttaa osuessaan.
-        /// 
-
-        PhysicsObject paakallo = new PhysicsObject(40, 40);
-
+        PhysicsObject paakallo = new PhysicsObject(30, 30);
 
         RandomMoverBrain satunnaisaivot = new RandomMoverBrain(150); // tekoäly
         satunnaisaivot.ChangeMovementSeconds = 5;
@@ -192,104 +224,75 @@ public class Eskape : PhysicsGame
         satunnaisaivot.WanderRadius = 400;
         paakallo.Position = paikka;
 
-
         paakallo.Image = skull;
         paakallo.Tag = "tappavat";
         Add(paakallo);
     }
 
+
+    /// <summary>
+    /// Pelihahmoon lisättävä vihollinen, joka ampuu pelaajaa. Tuhotessaan pelaaja saa vihollisesta 10 pistettä.
+    /// </summary>
+    /// <param name="paikka">Vihollisen paikka.</param>
+    /// <param name="leveys">Vihollisen leveys.</param>
+    /// <param name="korkeus">Vihollisen korkeus.</param>
     private void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
     {
-        // tähän tulee vihollinen
-        
-
         PlatformCharacter enemy1 = new PlatformCharacter(40, 40);
 
         enemy1.Mass = 8.0;
         enemy1.Position = paikka;
         enemy1.Weapon = new AssaultRifle(0, 0);
         enemy1.Weapon.Ammo.Value = 9999;
-        enemy1.Image = enemyPic;
+        enemy1.Image = RandomGen.SelectOne(enemyPic, enemyPic2);
         enemy1.Tag = "vihu";
         enemy1.CanRotate = false;
         Add(enemy1);
 
-
+        // Vihollisen tekoäly.
         PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
         tasoAivot.Speed = 100;
         tasoAivot.JumpSpeed = 200;
-        tasoAivot.TriesToJump = true;
-
-        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja"); // tekoäly
-
-        // vihollisen tekoäly
-        seuraajanAivot.Active = true;
-        seuraajanAivot.Speed = 0;
-        seuraajanAivot.DistanceFar = 200;
-        seuraajanAivot.DistanceClose = 0;
-        seuraajanAivot.TurnWhileMoving = true;
-        seuraajanAivot.StopWhenTargetClose = true;
-        seuraajanAivot.FarBrain = tasoAivot;
-
-        enemy1.Brain = seuraajanAivot;
-
-        seuraajanAivot.TargetClose += delegate { MessageDisplay.Add("Pam"); };
-    }
-
-    private void LisaaVihollinen2(Vector paikka, double leveys, double korkeus)
-    {
-        // Täysin identtinen aikaisemman vihollisen kanssa. On vain erivärinen.
-
-        ShootingPlatformCharacter enemy2 = new ShootingPlatformCharacter(40, 40);
-
-        enemy2.Mass = 8.0;
-        enemy2.Position = paikka;
-        enemy2.Image = enemyPic2;
-        enemy2.Tag = "vihu";
-        enemy2.CanRotate = false;
-        Add(enemy2);
-
-        RandomMoverBrain satunnaisaivot = new RandomMoverBrain(50);
-        satunnaisaivot.ChangeMovementSeconds = 5;
-        enemy2.Brain = satunnaisaivot;
-
-        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja"); // tekoäly
-
-        // vihollisen tekoäly
+        tasoAivot.TriesToJump = false;
+        enemy1.Brain = tasoAivot;
 
-        seuraajanAivot.Active = true;
-        seuraajanAivot.Speed = 50;
-        seuraajanAivot.DistanceFar = 400;
-        seuraajanAivot.DistanceClose = 200;
-        seuraajanAivot.TurnWhileMoving = true;
-        seuraajanAivot.StopWhenTargetClose = true;
-        // seuraajanAivot.TargetClose += MitaTapahtuuKunOllaanLahella;
-        seuraajanAivot.FarBrain = satunnaisaivot;
-
-        enemy2.Brain = seuraajanAivot;
+        // Alla oleva koodi määrittää vihollisen ampumisen.
+        Timer.CreateAndStart(RandomGen.NextDouble(0.75, 1.75), delegate 
+        {
+            Vector d = pelaaja.Position - enemy1.Position;
+            d.Y = 0;
+            if (d.Magnitude > 200)
+                return;
+            enemy1.Weapon.Angle = d.Angle;
+            AmmuAseella(enemy1, "vihuluoti");
+        });
     }
 
-    /* private void MitaTapahtuuKunOllaanLahella;
-    {
-      AmmuAseella.Play;
-    } */
 
+    /// <summary>
+    /// Pistelaskuri. Pistelaskuri reagoi pelihahmon interaktioon kentän kanssa.
+    /// </summary>
     private void LuoPistelaskuri()
     {
         pistelaskuri = new IntMeter(0);
 
         Label pistenaytto = new Label();
-        
 
         pistenaytto.X = Screen.Left + 100;
         pistenaytto.Y = Screen.Top - 100;
-        pistenaytto.TextColor = Color.Yellow; // korjaa värejä
+        pistenaytto.TextColor = Color.Yellow;
         pistenaytto.Color = Color.Black;
-
         pistenaytto.BindTo(pistelaskuri);
         Add(pistenaytto);
     }
 
+
+    /// <summary>
+    /// Peliin lisättävä objekti, joka ei tuhoudu, mutta jota pelihahmolla voidaan liikutella.
+    /// </summary>
+    /// <param name="paikka">Laatikon sijainti.</param>
+    /// <param name="leveys">Laatikon leveys.</param>
+    /// <param name="korkeus">Laatikon paikka.</param>
     private void LisaaLaatikko(Vector paikka, double leveys, double korkeus)
     {
         PhysicsObject box = new PhysicsObject(leveys, korkeus);
@@ -299,20 +302,28 @@ public class Eskape : PhysicsGame
         Add(box);
     }
 
+
+    /// <summary>
+    /// Pelissä olevat näppäimet.
+    /// </summary>
     private void LisaaNappaimet()
     {
         Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
         Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
-
         Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, -NOPEUS);
         Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, NOPEUS);
         Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, HYPPYNOPEUS);
-        Keyboard.Listen(Key.RightControl, ButtonState.Down, AmmuAseella, "Ammu", pelaaja);
-
+        Keyboard.Listen(Key.RightControl, ButtonState.Down, AmmuAseella, "Ammu", pelaaja, "pelaajaluoti");
         PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
     }
 
-    private void AmmuAseella(PlatformCharacter pelaaja)
+
+    /// <summary>
+    /// Aseella ampumisen aliohjelma.
+    /// </summary>
+    /// <param name="pelaaja">Pelihahmo.</param>
+    /// <param name="tunnus">Ase.</param>
+    private void AmmuAseella(PlatformCharacter pelaaja, string tunnus)
     {
         PhysicsObject ammus = pelaaja.Weapon.Shoot();
 
@@ -323,29 +334,67 @@ public class Eskape : PhysicsGame
 
         if (ammus != null)
         {
+            ammus.Tag = tunnus;
             ammus.Size *= 3;
             ammus.Image = bullet;
             ammus.MaximumLifetime = TimeSpan.FromSeconds(7.0);
         }
     }
 
-    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
+
+    /// <summary>
+    /// Aliohjelma määrittää, mitä tapahtuu kun aseella osutaan.
+    /// </summary>
+    /// <param name="ammus">Luoti</param>
+    /// <param name="kohde">Kohde, johon luoti osuu.</param>
+    private void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
     {
+        if (kohde.Tag.ToString() == "vihu")
+        {
+            kohde.Destroy();
+            pistelaskuri.AddValue(10);
+        }
+
+        if (kohde.Tag.ToString() == "pelaaja")
+        {
+            // MessageDisplay.Add("Osui"); Tällä testattiin, osuiko peli.
+            healthPoints--;
+        }
         osumaAani.Play();
         ammus.Destroy();
     }
 
+
+    /// <summary>
+    /// Pelihahmon liikuttaminen.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo.</param>
+    /// <param name="nopeus">Pelihahmon nopeus.</param>
     private void Liikuta(PlatformCharacter hahmo, double nopeus)
     {
+        if (hahmo == null || hahmo.IsDestroyed)
+            return;
         hahmo.Walk(nopeus);
     }
 
+
+    /// <summary>
+    /// Pelihahmon hyppääminen.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo</param>
+    /// <param name="nopeus">Hyppynopeus.</param>
     private void Hyppaa(PlatformCharacter hahmo, double nopeus)
     {
         hyppyAani.Play();
         hahmo.Jump(nopeus);
     }
 
+
+    /// <summary>
+    /// Reaktio silloin, kun pelihahmo törmää health potioniin. Pelihahmo saa tällöin +1 elämäpistettä lisää.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo</param>
+    /// <param name="healthPotion">Health potion</param>
     private void TormaaHealthPotion(PhysicsObject hahmo, PhysicsObject healthPotion)
     {
         healthPoints++;
@@ -354,6 +403,12 @@ public class Eskape : PhysicsGame
         healthPotion.Destroy();
     }
 
+
+    /// <summary>
+    /// Reaktio, kun pelihahmo osuu 1 pisteen kolikkoon.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo.</param>
+    /// <param name="kolikko">Kolikko</param>
     private void TormaaKolikkoon(PhysicsObject hahmo, PhysicsObject kolikko)
     {
         pistelaskuri.AddValue(1);
@@ -362,31 +417,73 @@ public class Eskape : PhysicsGame
         // pistelaskuri.Value += 1;
     }
 
+
+    /// <summary>
+    /// Reaktio, kun pelihahmo osuu 5 pisteen kolikkoon.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo.</param>
+    /// <param name="kolikko">Kolikko</param>
     private void TormaaKolikkoon2(PhysicsObject hahmo, PhysicsObject kolikko)
     {
         coinAani.Play();
         kolikko.Destroy();
-        pistelaskuri.AddValue (5);
+        pistelaskuri.AddValue(5);
     }
 
+
+    /// <summary>
+    /// Reaktio, kun pelihahmo osuu pommiin.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo</param>
+    /// <param name="skull">Pommi</param>
     private void TormaaPommiin(PhysicsObject hahmo, PhysicsObject skull)
     {
         healthPoints--;
 
         if (healthPoints <= 0)
+        {
             pelaaja.Destroy();
-
+            Timer.SingleShot(3, AloitaPeli);
+        }
         rajahdysAani.Play();
         MessageDisplay.Add("HP -1");
         skull.Destroy();
     }
 
+
+    /// <summary>
+    /// Reaktio, kun pelihahmo osuu tappavaan tasoon.
+    /// </summary>
+    /// <param name="hahmo">Pelihahmo.</param>
+    /// <param name="spikes">Tappava taso.</param>
     private void TormaaTappavaanTasoon(PhysicsObject hahmo, PhysicsObject spikes)
     {
         healthPoints = 0;
         pelaaja.Destroy();
+        Timer.SingleShot(3, AloitaPeli);
         MessageDisplay.Add("Kuolit");
         // lisää tuskanhuuto
     }
+
+
+    /// <summary>
+    /// Aliohjelma, joka aloittaa pelin alusta silloin, kun pelihahmo kuolee.
+    /// </summary>
+    private void AloitaPeli()
+    {
+        ClearAll();
+
+        Gravity = new Vector(300, -2000);
+
+        LuoKentta();
+        LisaaNappaimet();
+        LuoPistelaskuri();
+
+        Camera.Follow(pelaaja);
+        Camera.ZoomFactor = 2;
+        Camera.StayInLevel = true;
+
+        MasterVolume = 0.1;
+    }
 }
 
diff --git a/Eskape/Eskape/bin/Debug/net5.0/Content/kentta1.txt b/Eskape/Eskape/bin/Debug/net5.0/Content/kentta1.txt
index a0fc254..c716981 100644
--- a/Eskape/Eskape/bin/Debug/net5.0/Content/kentta1.txt
+++ b/Eskape/Eskape/bin/Debug/net5.0/Content/kentta1.txt
@@ -15,7 +15,7 @@
          XXXX                        ##      
                     H                 ##     #
                     ##                         
-          H E    F    F        F                  #
+       XX H E    F    F        F                  #
        ############################         ##
    N     *^     F**#                        
   ##     ##     ####                  ##
diff --git a/Eskape/Eskape/bin/Debug/net5.0/Content/tahti.png b/Eskape/Eskape/bin/Debug/net5.0/Content/tahti.png
deleted file mode 100644
index 12f4398771471bc9a704358049b6d6dd07f9b974..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1458
zcmV;j1x@;iP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T700004b3#c}2nYxW
zd<bNS00009a7bBm0006i0006i0k<MKn*aa+8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H11uscNK~z|U#h6`4mS-5pf7hett1)evI$CP=DoOUC7PXezCM*jg
zw_1@KTZ64&2aR>KgMoK<2V=0KMr9vsEBb;MMvb5kcd&zsi5_f56i6RLgKEqbfj0HN
zcJRF7oBDp}`?USx;rY0)`?`Nz*Zn;Abw8r21R-lB6ZjeU))+k%h*KavC`Z6*V7Ul+
zKwyAgP>z620IHN*E6aj%8VI1ZGFgPia2Pxf1-1m?7lMo6T2(?zmqK|tBElwX<)t7T
z2L;#^3gN<GsICT8vVf)_9H$Iut-LJ4s=0IVJP&5ihMXLnNHA#*B7*Bw$(T3KzY&4z
zYCKgITPq7vbshv@)8xsxnKOqUR91or3Vf2P^OOLsl|taniV8fD;pe%z5Dp_Ed}ytN
z{x?8i1K<s%H(HUGB^Owi$^a<=itt`e4z8$ZblaRckd=ia#c$$-0j-r1RbHDve{3I~
z2US&gzzS=nbfV*=vKBW1GFEzrR8<96t{}h{*2*EEFY4$Wx;93i#quGlinWph<N?!0
zoS(ZEAzy@iRi>(vIdv*-+qU>wIC2ENa|elM1E>i7K%a;Ytx7NOo9x)ZFF;+ao}Pz>
zLb&W~Bs&`~I~%gHAUoUtoJ^Y*f8_ptxO2xp4-5<+(f1>-Z`=UqK!mgD_%&P|KwTXa
z75Re?L1bnkKw5$b#8gHGl$9lCJ1_vPtv(!ZSe30qDc&H$kx7%tT)!SKS%*QYw--*H
zMDN{0fE~uDg~%KPuvQj`a26=8uSaTX{yVsy9yoRk*VBVjWs5O-c&JUHOMYu5PlQvd
z)K^qMW22v<7peRA;rMY}Umv}yylsrOMYqeyJ&CoF27Ci-FDyhiZ9=9@c`<M|Z^Dm1
z;+*4wb2J#ET_bHq0Y-s-Ai{T{5a}B?;zbt&L8!eQ&Ywp`xE_JKKbBogzzF1G5zdP6
zN<#y(WJxe^7cauqs~|#~D(j8WC$Vhf0!APUL}*oId1WQ6Sp#Vk{OAl0`k#^O*8%te
z*lLUp#Osp~FantY>;gVrw8)2?h;H42qelVQWsH8FOrNBR1!J@y_)LVpXE9gJ#EM#V
zVy1MY##7BysS+wK9uLy<%E^KJe4GfYlkGDez*>Nkl5ulAr_xe9RTfz*3084m;{mM6
z%)}KGOpq+1Qok}3;H_lrlLi!_uB0UOO;$+>q^IM6Rms>VHK4Upu1a3K`8PNSmo7m|
z3$AO_dN8cCG?+CDPlQ$0N}@V3>4?-o?D_ZT5ga^-yK)5{J>t*SRyc72p2T=p!(mXR
z09Y6lU~PIjZu<1m4ejl)e?RWwLwbSDs=Nw(+1*Y5o;|pZj?sNehj%Cm)11_vM1&PH
zX86B0hV=9)oH>JbcOxSFs>=Ju=<P`JSJp~ve?Q-!JIAuFE_Cf$Brnfz%*%t^T-@Ww
ztOmZ0H+I4ZS}W64DTz++&6}`yFN59PIG|aT+9)^xjL{pa)BxM=-J`dq1$X%}3@uz`
zWq2aIp6D-FG7+o=C@%K*3l}axXD5ho7icm@+hcV!Mjf!*TKUO24z#tg^4c|AV<TQT
z3>_V$1NFd}SU!@OgSDQAdLHcChwJPF;E*Z{<H3ypz1!TZ4Zuea9`NMA0rd88yyMQp
zgvG+no$|ZqF<%u`<!@C!Hbze;12&c-|8sT&?}DF+=4PEaAwX*-7x)W5(rv(IWAu-S
z!j16#jtDKP6at0D=)<w>5~cVb;3}{kSQ!)?fH8Vnm2%*XSa1OU0=7u%)X?vz2mk;8
M07*qoM6N<$f{;^-b^rhX

diff --git a/Eskape/Eskape/bin/Debug/net5.0/Eskape.dll b/Eskape/Eskape/bin/Debug/net5.0/Eskape.dll
index 4ee65e153c6111d63b5a80fc0cc09311fd5a6185..2d11800715d08e3752ee7c26fc52f0173e6af2ed 100644
GIT binary patch
literal 13312
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
E8<Vt9w*UYD

literal 12800
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
A4FCWD

diff --git a/Eskape/Eskape/bin/Debug/net5.0/Eskape.pdb b/Eskape/Eskape/bin/Debug/net5.0/Eskape.pdb
index a9e851f2c3ddba7aed8c9ed8a8d0eeaa6694ad61..64f8dcc94304431aeb326684ee5e869146ca3573 100644
GIT binary patch
delta 1807
zcmZ8iO-x)>6h7zj-pr#8Ff;rO1H;Ue8RqAW!<3>xOBz~8$DfF8NHwW6K!r4|6ih+Q
z)YzF3H}xlKUt@LA*rc%=5;u)e(?+XlA|!2NU1{TjjXPr0m5DC=&g}pb3E%hbch7nE
zo^$SbcP>s}oc<tIoFJmELo>(mpr3)c8t8LGqXtn4x@&yt%*pu^ix|>v%;BH9j*QbP
z22(Q5A9->V&!mZWZRi7Y3$obmA5RrR&;9hom$7SKY}|FP9rS<tO_0d-d`MZfJBS!Q
zdx?7Wg6$9;Kn|D(5CeGt_>l_`XPMK_5ATP4;w<n25>b=GoGShmXFA-?bPl)*tOCCS
zZ3(7P-~w<T*pp;B1AGju0?jF=Q^32xRp2(T4*UxYrJ0Tam(q#?$WMakx0w{45)M%<
zphP>Laf0*CU0x`T!sNl6r{eP(eCnX<D!L!K9=g7wgYa*t(jUR@g>I<Wi_pF*ExG%v
zbPIIjwk}d1CYrV<XeV^@|8z^0J`H<omEI2>sM6=5+p6@_2snt+Zw45FeN!_b+)hk%
z;013bgR{``7toy1e4vWQ^|)KJPxBxc=c32h4dW?2&TB4cKB_sYIjouKUYv_mZ%e-<
z&^38ZAkJ{jFqt&gJq3QfyQKMw=3AQAH4}?<7<?x&1<oX=*hRg`62=S3E84maZb*?b
zX(kl`pHJNa52lA}OzN{s;8{DSLm3&54ecA4oSa*Dae8hsM=zgTT$=5rmuBaemZoXO
znJ|W(6(j1b8J|S<-aEW&B)IYR_czB@zFvDOl51J~$DaG`#@XfTzrK~-x99qs<~#9L
zX?Gqlnd+3~CRT+PP#E6t<ZYX6XVLEE3Fn%fu};I~S!H!N59|=X;rwlf-Ejra(tA!Q
z6X(m$NG8pnJM)=z>RY%bl@+3(bZ1DRt&)nmD59vHdK85ypwN2#F6X;UAYe!btHL0P
z%cTc+b+@ttG-Nn`W&%YqVigb7E3(AR;2=*NmG2X8mHvSHpzP!~(28xcU1Dpe0Yxcl
zlAW}{Bi4N`eEcoaLRi&HowBM}Etd<<>@S#M=JHK<jG32RD&2=Gh|5jbCaf$EMGU;Y
z(?A+g$pr<#oKRFbhq6taa%QvfU5~?kOj!|nMp1;0De9@B<BGCK5k){Y2XPZ|Iq%%a
z#)^%~vdAmTHcO<v3K_u#SAr^-98{$r#@ymPiPgK5h0n7FCbY0u4i4$y!x#5%gSKt$
z%JNaemdz)zVh?@Lrt+xLrA|v0ebp>7N@vx{s%~W|YE%VXaHTwQ6L5JM`}(8^jg_N_
z=;`+{-Jq;`IUx^qNV!`p8^{&R<;!qrla;Zrhy2=R6du}EU_<yaT|`j&oRGwjj_Iq-
zm0P3>Hna8XbC5FWY;nGoT{qKGD)BI~J9r-fyJb&(OzqN(K4PPw?}73!aCk%<q6T$3
zK|8TSZiY~s>86~s(KGE#=9*bKujImyJt{vhWwVwktE?!YK3-{~#;tO7szN}TqE*6j
K@p6Y+KJg#YgwM7B

delta 1908
zcmZWqUu=_A6hHUw>$h*S+uH8`y8dB*`e)r3Yp1wuj^WU;u<7Cg5){%BigaU}Y@M!&
z+1D=2keGn_p$k3`h%7!J4+euzM&g5_Aw;9R$ODKbnwXIIV2JwS@7%Rn)uzAG`#a~{
zbI!f@+}pE>vxzs`%>6{vI&tJMe&~DPcnSD2(U3-TifxnW`PA%73v9mu9lq4Mcam;m
z5a;p8-qBt7?X(dci-13Qe2#;ye-gWN_m*Sadi$NG&z4?4bm!WEAKXOx^B!rG8AJj;
z{X|;{`KS?qk)l8fV4WQ(19X6$StsAR?Q^nYGf)k1H7?60!e(tiP#U-hd;$ChID&%u
zfuq33z#qVBNYGzEG%RR8a0>Va_yzbAaC8Xj0mgw8@E&jt*b<R68WAK>43|T+0>}cl
zJ`$}WX5AKZ<^arg=qvJm58zh;?#T03!7IU?dA=RI3fz_FwV3ZH;-_JEf>#&p;I1NG
z4qm;<O{#;UW>Z1E;I&1(1-$M*yuOG}z}`^A1K^ECd=Cn2D&l+)ZXCr%fhLi^NC98+
z0{r2^h(byZ7RhJTn9CwUYvA)JAZSsIIf9^RNJ%d$O_kEHwV)YR`jae8+NX#|NkO;T
z1?`A%_XN>HBO-`OeI-L=qZ5HR<oQ5W$qPzeSMr{cB-lCx`5+jFTnxp9PRpSz#=nOy
zKz4_(L!J+iw9(h$dys1#ZSfKtC2<odIh&lx^w7(xg>*8y!J;&soK2?_))8%}av`}m
zpGZt4W_PAunM+&mYc19d?Op#;aPi0aW0zO&o<976*}Qbqd;in#hJV_<W31$FxA%U-
zrK`)fH`?tnBoKWzG^RAHweFDq0`^IaS^h{wbXsGPsEAu;q%$xDml0_gR4=i&b=;QK
z68%}uRLD%5#IyzL+lWtB!`G~bk#@0ac{)498EbcEhj|VWLelV16HoSNXugo7R`N@n
zdbcDGHE=U;mpJD>7LT*&XEDg4Lg%X>GkrJ%k-dUwv2vq<26S|Nn6Cu_8PvifH;?Ms
zAGz#Q$<)MDU1Zlp_Ku0`F0!8^LZ5*ME)7!}*(b<(5T=exsh}F3tPFOx4(fPBuyO}S
zb&!X30~)S~N5=?$4s2pU1lZca0^4DbS2H1>R?RIlh8P#QD`Mq<-X`eeFiqpp6WL!;
z(5U{ef)Mn7W%O%>1$#FuFc4i;r7CFUGBzs+Yp_muSz;3mkrBD9Sn>7ZNffzCWc5kI
zPJRu`YteBSh~cJoUOe`~PFpk-;pAMHEyWYCV4l~y*wx+>#O!CJ;iqv)emba8HyxA(
z@tmYE#Wb8OChjcdS-sZ7t~S#l4L8;D+M*Iq3aoexWyU6&WcEwG-6HoC0z0`Zhon+A
zI+c14)YaUE&}=wP6dcixO6^yU`=G9pMkOD<otn9`(77s-8&3-|9D+xqG%7fQom|SO
zW%yq~<c`9IBJ*n1ut?a&|2MgrLgYH$7rX^7cC67d`80)sr3`Ka!@77WrJTdgZBvCO
zTgyx#Q*E=YltR{5-HDJ|U-sv10&k+mZ~9}8OlEN7XSR-|W>1uf^$*4RRdG3H4Q=!N
E11$C4qW}N^

diff --git a/Eskape/Eskape/bin/Debug/net5.0/ref/Eskape.dll b/Eskape/Eskape/bin/Debug/net5.0/ref/Eskape.dll
index d3aa7dbd2156ac4488382fc2acf684d0ae46dee4..3158315594f6e78cad28e5813756240d0c624b95 100644
GIT binary patch
delta 941
zcmZ8gO-NKx6#nj;H?MKVrWyZIG|>br8V1EbN}1HLL|SN=4HEHsj$;mtKfIYBA)5)w
zf`l4gi)a-jfzZO3ZHOckL_~{Rv@i%-wP`O!efRoPbl`mFeCM8X&;8AXa-oO!^vTiu
za(<~se8{iF{5Q`5gP>dmy4?Bt(&8LYEI9{ioO&(fjEX_=sjwnqS|GAsdGT&zS?`0b
z?84%U`SL<g{~<K2I>IP*7aM?JMTawF9M6U{py3wqnD&wMhck9^`dXS(Bjg5j+J=!~
zG|>-8zkg()kG7lqz2v>AnK4=^EElnIpok8(MGGnzpc|yhd1P2x7gesEnpFuhAQORi
zV#gY&6@8k4`wDNMSv!Pr)*Fba$TO@61Ge~1{0)h(6n<71QSl}EUUXtZ_)(^9Fy{*7
zoJ-mkBR^H6EKsW&3obx#hnL9Olz&?Uuqif0519@ZnXK4h2GUwB7jqa#G1M(5c!O_j
zAa>azj-l}{tMs$2zBjhZ<d$36pT}~CJ9A-PD}rAWJT94DMfBo?@|%ePoKo1Ma6sV&
zg`)~Bg>ys$Vfd(Fl%j)J%}s^T0F!tU<HQy`A$H<9vSCE=lH@$rh{I~&GI0TM7U;RX
zi{Uzz$n)XV?@KxQl`qf6yC1EVS4}Sd$=y%~uB%tT!LCT$H2W%&>DiPu7fo5|bW5Ar
zgv4}WYOdLN>gleE&P>fFQwh7DG26-{#(Oe+n`75Ag)g2(5gbZcnTZ*DDmrP|Ry>oi
zow#?x(-mno&CF!ddFwsW{{KIKUMGadRR`gw6AVh~_pF{Vv%yX8X_ryrp`LY0e6J5K
g^Iz@Bn)B6HEmjM^d`VI8`?uZN$9DCl@=XW+0K09NDF6Tf

delta 767
zcmZ9KOK1~O7=_P2nHiHwNE1V&wM82OrPUA{im$2|HClqwR?-lPiVvz16~zZGT$l(&
z3MtabtXp(ZFwliKAmUPjg1dt5T)5Ju`{2TJZ#9aSx!*nKzwdu;JyXvtEtq`|9)58b
z2V}@?Rid9x08?PO2pqE9R3cIbBJ^+AG2o?)j5jM&lJQ$oF=FN1%4Fv0dT}jRxVmuu
zdfktkKg2-L6FXteS%7fHK5yC{u6-3C{RlX10D0DQ>Hgj7t!wwVG!{*OAJXL#mMCIM
zPn3%Vw$JF>${)LV`!ZWqI9(=sfsisC8AFl*${yChKQ&CPD*I}>189mG2-x_>nKnwI
zn8$bN!8WdIV~391z#YcN<rVn>iu0P!HEkWAp?0tx4T<8TG&p9zv8tEf*h9Fn@G=Lu
zUu};zk0pj>S(d|eCZ_Z1DDSbxsq))Bfm*Wbwzk>F6fm-dG?3#V0~j$vX!9y@(ncTY
zU_|R2skT%+s##Q=!5M94H7{vqnVcbHk-%=UACqJn6>=BOkz;6*2eCpPM~gg#*JMe@
z&!XwM!9+pbj(@sada+Y$l>?_6UDqjbc#Xef8yjij7%vpc`*Wdr@jA{GuNv;p{{OOI
z4vGW=gAj`%9#=LRe0k(TE&kaV_uhuzZT`s@`llpMQsv!LQiA?!q$=L1@xqTrJC-rL
KS3gpBbki?{xOnRT

diff --git a/Eskape/Eskape/obj/Debug/net5.0/Eskape.csproj.FileListAbsolute.txt b/Eskape/Eskape/obj/Debug/net5.0/Eskape.csproj.FileListAbsolute.txt
index 1177e62..ed39cf1 100644
--- a/Eskape/Eskape/obj/Debug/net5.0/Eskape.csproj.FileListAbsolute.txt
+++ b/Eskape/Eskape/obj/Debug/net5.0/Eskape.csproj.FileListAbsolute.txt
@@ -1,7 +1,6 @@
 C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Eskape.exe
 C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Content\kentta1.txt
 C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Content\maali.wav
-C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Content\tahti.png
 C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Eskape.deps.json
 C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Eskape.runtimeconfig.json
 C:\Users\royes\ohj1\Peli\Eskape\Eskape\bin\Debug\net5.0\Eskape.runtimeconfig.dev.json
diff --git a/Eskape/Eskape/obj/Debug/net5.0/Eskape.dll b/Eskape/Eskape/obj/Debug/net5.0/Eskape.dll
index 4ee65e153c6111d63b5a80fc0cc09311fd5a6185..2d11800715d08e3752ee7c26fc52f0173e6af2ed 100644
GIT binary patch
literal 13312
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
E8<Vt9w*UYD

literal 12800
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
A4FCWD

diff --git a/Eskape/Eskape/obj/Debug/net5.0/Eskape.pdb b/Eskape/Eskape/obj/Debug/net5.0/Eskape.pdb
index a9e851f2c3ddba7aed8c9ed8a8d0eeaa6694ad61..64f8dcc94304431aeb326684ee5e869146ca3573 100644
GIT binary patch
delta 1807
zcmZ8iO-x)>6h7zj-pr#8Ff;rO1H;Ue8RqAW!<3>xOBz~8$DfF8NHwW6K!r4|6ih+Q
z)YzF3H}xlKUt@LA*rc%=5;u)e(?+XlA|!2NU1{TjjXPr0m5DC=&g}pb3E%hbch7nE
zo^$SbcP>s}oc<tIoFJmELo>(mpr3)c8t8LGqXtn4x@&yt%*pu^ix|>v%;BH9j*QbP
z22(Q5A9->V&!mZWZRi7Y3$obmA5RrR&;9hom$7SKY}|FP9rS<tO_0d-d`MZfJBS!Q
zdx?7Wg6$9;Kn|D(5CeGt_>l_`XPMK_5ATP4;w<n25>b=GoGShmXFA-?bPl)*tOCCS
zZ3(7P-~w<T*pp;B1AGju0?jF=Q^32xRp2(T4*UxYrJ0Tam(q#?$WMakx0w{45)M%<
zphP>Laf0*CU0x`T!sNl6r{eP(eCnX<D!L!K9=g7wgYa*t(jUR@g>I<Wi_pF*ExG%v
zbPIIjwk}d1CYrV<XeV^@|8z^0J`H<omEI2>sM6=5+p6@_2snt+Zw45FeN!_b+)hk%
z;013bgR{``7toy1e4vWQ^|)KJPxBxc=c32h4dW?2&TB4cKB_sYIjouKUYv_mZ%e-<
z&^38ZAkJ{jFqt&gJq3QfyQKMw=3AQAH4}?<7<?x&1<oX=*hRg`62=S3E84maZb*?b
zX(kl`pHJNa52lA}OzN{s;8{DSLm3&54ecA4oSa*Dae8hsM=zgTT$=5rmuBaemZoXO
znJ|W(6(j1b8J|S<-aEW&B)IYR_czB@zFvDOl51J~$DaG`#@XfTzrK~-x99qs<~#9L
zX?Gqlnd+3~CRT+PP#E6t<ZYX6XVLEE3Fn%fu};I~S!H!N59|=X;rwlf-Ejra(tA!Q
z6X(m$NG8pnJM)=z>RY%bl@+3(bZ1DRt&)nmD59vHdK85ypwN2#F6X;UAYe!btHL0P
z%cTc+b+@ttG-Nn`W&%YqVigb7E3(AR;2=*NmG2X8mHvSHpzP!~(28xcU1Dpe0Yxcl
zlAW}{Bi4N`eEcoaLRi&HowBM}Etd<<>@S#M=JHK<jG32RD&2=Gh|5jbCaf$EMGU;Y
z(?A+g$pr<#oKRFbhq6taa%QvfU5~?kOj!|nMp1;0De9@B<BGCK5k){Y2XPZ|Iq%%a
z#)^%~vdAmTHcO<v3K_u#SAr^-98{$r#@ymPiPgK5h0n7FCbY0u4i4$y!x#5%gSKt$
z%JNaemdz)zVh?@Lrt+xLrA|v0ebp>7N@vx{s%~W|YE%VXaHTwQ6L5JM`}(8^jg_N_
z=;`+{-Jq;`IUx^qNV!`p8^{&R<;!qrla;Zrhy2=R6du}EU_<yaT|`j&oRGwjj_Iq-
zm0P3>Hna8XbC5FWY;nGoT{qKGD)BI~J9r-fyJb&(OzqN(K4PPw?}73!aCk%<q6T$3
zK|8TSZiY~s>86~s(KGE#=9*bKujImyJt{vhWwVwktE?!YK3-{~#;tO7szN}TqE*6j
K@p6Y+KJg#YgwM7B

delta 1908
zcmZWqUu=_A6hHUw>$h*S+uH8`y8dB*`e)r3Yp1wuj^WU;u<7Cg5){%BigaU}Y@M!&
z+1D=2keGn_p$k3`h%7!J4+euzM&g5_Aw;9R$ODKbnwXIIV2JwS@7%Rn)uzAG`#a~{
zbI!f@+}pE>vxzs`%>6{vI&tJMe&~DPcnSD2(U3-TifxnW`PA%73v9mu9lq4Mcam;m
z5a;p8-qBt7?X(dci-13Qe2#;ye-gWN_m*Sadi$NG&z4?4bm!WEAKXOx^B!rG8AJj;
z{X|;{`KS?qk)l8fV4WQ(19X6$StsAR?Q^nYGf)k1H7?60!e(tiP#U-hd;$ChID&%u
zfuq33z#qVBNYGzEG%RR8a0>Va_yzbAaC8Xj0mgw8@E&jt*b<R68WAK>43|T+0>}cl
zJ`$}WX5AKZ<^arg=qvJm58zh;?#T03!7IU?dA=RI3fz_FwV3ZH;-_JEf>#&p;I1NG
z4qm;<O{#;UW>Z1E;I&1(1-$M*yuOG}z}`^A1K^ECd=Cn2D&l+)ZXCr%fhLi^NC98+
z0{r2^h(byZ7RhJTn9CwUYvA)JAZSsIIf9^RNJ%d$O_kEHwV)YR`jae8+NX#|NkO;T
z1?`A%_XN>HBO-`OeI-L=qZ5HR<oQ5W$qPzeSMr{cB-lCx`5+jFTnxp9PRpSz#=nOy
zKz4_(L!J+iw9(h$dys1#ZSfKtC2<odIh&lx^w7(xg>*8y!J;&soK2?_))8%}av`}m
zpGZt4W_PAunM+&mYc19d?Op#;aPi0aW0zO&o<976*}Qbqd;in#hJV_<W31$FxA%U-
zrK`)fH`?tnBoKWzG^RAHweFDq0`^IaS^h{wbXsGPsEAu;q%$xDml0_gR4=i&b=;QK
z68%}uRLD%5#IyzL+lWtB!`G~bk#@0ac{)498EbcEhj|VWLelV16HoSNXugo7R`N@n
zdbcDGHE=U;mpJD>7LT*&XEDg4Lg%X>GkrJ%k-dUwv2vq<26S|Nn6Cu_8PvifH;?Ms
zAGz#Q$<)MDU1Zlp_Ku0`F0!8^LZ5*ME)7!}*(b<(5T=exsh}F3tPFOx4(fPBuyO}S
zb&!X30~)S~N5=?$4s2pU1lZca0^4DbS2H1>R?RIlh8P#QD`Mq<-X`eeFiqpp6WL!;
z(5U{ef)Mn7W%O%>1$#FuFc4i;r7CFUGBzs+Yp_muSz;3mkrBD9Sn>7ZNffzCWc5kI
zPJRu`YteBSh~cJoUOe`~PFpk-;pAMHEyWYCV4l~y*wx+>#O!CJ;iqv)emba8HyxA(
z@tmYE#Wb8OChjcdS-sZ7t~S#l4L8;D+M*Iq3aoexWyU6&WcEwG-6HoC0z0`Zhon+A
zI+c14)YaUE&}=wP6dcixO6^yU`=G9pMkOD<otn9`(77s-8&3-|9D+xqG%7fQom|SO
zW%yq~<c`9IBJ*n1ut?a&|2MgrLgYH$7rX^7cC67d`80)sr3`Ka!@77WrJTdgZBvCO
zTgyx#Q*E=YltR{5-HDJ|U-sv10&k+mZ~9}8OlEN7XSR-|W>1uf^$*4RRdG3H4Q=!N
E11$C4qW}N^

diff --git a/Eskape/Eskape/obj/Debug/net5.0/ref/Eskape.dll b/Eskape/Eskape/obj/Debug/net5.0/ref/Eskape.dll
index d3aa7dbd2156ac4488382fc2acf684d0ae46dee4..3158315594f6e78cad28e5813756240d0c624b95 100644
GIT binary patch
delta 941
zcmZ8gO-NKx6#nj;H?MKVrWyZIG|>br8V1EbN}1HLL|SN=4HEHsj$;mtKfIYBA)5)w
zf`l4gi)a-jfzZO3ZHOckL_~{Rv@i%-wP`O!efRoPbl`mFeCM8X&;8AXa-oO!^vTiu
za(<~se8{iF{5Q`5gP>dmy4?Bt(&8LYEI9{ioO&(fjEX_=sjwnqS|GAsdGT&zS?`0b
z?84%U`SL<g{~<K2I>IP*7aM?JMTawF9M6U{py3wqnD&wMhck9^`dXS(Bjg5j+J=!~
zG|>-8zkg()kG7lqz2v>AnK4=^EElnIpok8(MGGnzpc|yhd1P2x7gesEnpFuhAQORi
zV#gY&6@8k4`wDNMSv!Pr)*Fba$TO@61Ge~1{0)h(6n<71QSl}EUUXtZ_)(^9Fy{*7
zoJ-mkBR^H6EKsW&3obx#hnL9Olz&?Uuqif0519@ZnXK4h2GUwB7jqa#G1M(5c!O_j
zAa>azj-l}{tMs$2zBjhZ<d$36pT}~CJ9A-PD}rAWJT94DMfBo?@|%ePoKo1Ma6sV&
zg`)~Bg>ys$Vfd(Fl%j)J%}s^T0F!tU<HQy`A$H<9vSCE=lH@$rh{I~&GI0TM7U;RX
zi{Uzz$n)XV?@KxQl`qf6yC1EVS4}Sd$=y%~uB%tT!LCT$H2W%&>DiPu7fo5|bW5Ar
zgv4}WYOdLN>gleE&P>fFQwh7DG26-{#(Oe+n`75Ag)g2(5gbZcnTZ*DDmrP|Ry>oi
zow#?x(-mno&CF!ddFwsW{{KIKUMGadRR`gw6AVh~_pF{Vv%yX8X_ryrp`LY0e6J5K
g^Iz@Bn)B6HEmjM^d`VI8`?uZN$9DCl@=XW+0K09NDF6Tf

delta 767
zcmZ9KOK1~O7=_P2nHiHwNE1V&wM82OrPUA{im$2|HClqwR?-lPiVvz16~zZGT$l(&
z3MtabtXp(ZFwliKAmUPjg1dt5T)5Ju`{2TJZ#9aSx!*nKzwdu;JyXvtEtq`|9)58b
z2V}@?Rid9x08?PO2pqE9R3cIbBJ^+AG2o?)j5jM&lJQ$oF=FN1%4Fv0dT}jRxVmuu
zdfktkKg2-L6FXteS%7fHK5yC{u6-3C{RlX10D0DQ>Hgj7t!wwVG!{*OAJXL#mMCIM
zPn3%Vw$JF>${)LV`!ZWqI9(=sfsisC8AFl*${yChKQ&CPD*I}>189mG2-x_>nKnwI
zn8$bN!8WdIV~391z#YcN<rVn>iu0P!HEkWAp?0tx4T<8TG&p9zv8tEf*h9Fn@G=Lu
zUu};zk0pj>S(d|eCZ_Z1DDSbxsq))Bfm*Wbwzk>F6fm-dG?3#V0~j$vX!9y@(ncTY
zU_|R2skT%+s##Q=!5M94H7{vqnVcbHk-%=UACqJn6>=BOkz;6*2eCpPM~gg#*JMe@
z&!XwM!9+pbj(@sada+Y$l>?_6UDqjbc#Xef8yjij7%vpc`*Wdr@jA{GuNv;p{{OOI
z4vGW=gAj`%9#=LRe0k(TE&kaV_uhuzZT`s@`llpMQsv!LQiA?!q$=L1@xqTrJC-rL
KS3gpBbki?{xOnRT

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..01252d5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,11 @@
+# Pohja Ohjelmointi 1 -kurssin harjoitustöiden GIT-repoille.
+
+Tämä on pohja Ohjelmointi 1 -kurssin harjoitustöiden Git-repoille. 
+Opiskelija forkkaa tämän repon omaa harjoitustyötään varten. 
+`fork`-toiminto löytyy sivun yläreunasta.
+
+Muokkaa gitlab.jyu.fi-palvelussa oman projektisi asetuksia, kuten projektin nimeä
+ja projektin kuvausta kohdasta Settings. 
+
+Lue Git-versiohallinnan tarkemmat käyttöohjeet TIMistä: <https://tim.jyu.fi/view/kurssit/tie/ohj1/harjoitustyo/git>
+
diff --git a/Suunnitelma/README.md b/Suunnitelma/README.md
new file mode 100644
index 0000000..ab9998f
--- /dev/null
+++ b/Suunnitelma/README.md
@@ -0,0 +1 @@
+# Pohja Ohjelmointi 1 -kurssin harjoitustöiden GIT-repoille.
diff --git a/gitignore b/gitignore
new file mode 100644
index 0000000..dfcfd56
--- /dev/null
+++ b/gitignore
@@ -0,0 +1,350 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
-- 
GitLab