Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tie/ohj1/2023s/ohj1ht
  • ojkoykka/ohj1ht
  • lemaline/ohj-1-ht-leo
  • altuoles/ohj1ht
  • ajviitan/ohj1ht
  • esahakki/ohj1ht
  • olieemka/ohj1ht
  • keinkont/ohj1ht
  • jejojuha/ohj1ht
  • parmisee/sidotut-sielut
  • wkoskine/kolikkopeli
  • aimaasko/ohj1ht
  • rapalare/ohj1ht
  • arsepiip/ohj1ht
  • tuliat/ohj1ht
  • khlaine/ohj1ht
  • thesanos/map-harkka
  • taanlaak/ohj1ht
  • avkesti/ohj1ht
  • siniseyt/ohj1ht
  • vesal/ohj1hta
  • anhahyvo/ohj1ht
  • jcvehman/leppakerttu
  • kmjaaske/ohj1ht
  • aapiippu/ohj1ht
  • reelmann/ohj1ht
  • ijkurki/ohj1ht
  • ttkelaw/ohj1ht
  • koallaht/ohj1ht
  • vesal/ohj1ht3
  • pasaikon/ohj-1-ht
  • piipaisa/ohj1ht
  • hkoktany/ohj1ht
  • pamahete/ohj1ht
  • hvriikon/ohj1ht
  • uekolehm/ohj1ht
  • njsaari/ohj1ht
  • lampiemw/rallipeli
  • tkmeskan/ohj1ht
  • aurmirle/ohj1ht
  • grohju/ohj1ht
  • awsorri/ohj1ht
  • jamamokk/ohj1ht
  • sakksama/ohj1ht
  • levalaaa/ohj1ht
  • jpjturtu/ohj1ht
  • vvvkorhv/ohj1ht
  • torkalju/s2023ohj1ht
  • koskelju/ohj1ht
  • eimaki/ohj1ht
  • matuhakk/kauppakassi
  • ollvilhi/ohj1ht
  • nktuorin/ohj1ht
  • elpeviva/ohj1ht
  • kumpuvex/ohj-1-ht
  • mvpalola/ohj1ht
  • pasonnpe/ohj1ht
  • tornhale/ohj1ht
  • iljitesa/ohj1ht
  • ruusii/ohj1ht
  • javirjo/ohj1ht
  • katahe/ohj1ht
  • niktapli/ohj1ht
  • vaalanti/ohj1ht
  • eijuhokk/ohj1ht
  • ricroos/ohj1ht
  • jjmalizy/ohj1ht
  • kirskaxt/ohj1ht
  • haemhaat/ohj1ht
  • korhanjo/ohj1ht
  • runnjuta/ohj1ht
  • jueeasik/ddr-tetris
  • kojalewa/ohj1ht
  • vejokeso/ohj1ht
  • koskeltu/ohj1ht
  • eorhala/ohj1ht
  • kiukklju/ohj1ht
  • oneemasa/ohj1ht
  • kylmsama/ohj1ht
  • mikrkonk/ohj1ht
  • viikarma/ohj1ht
  • jesvilju/ohj1ht
  • viekataj/ohj1ht
  • eerikano/ohj1ht
  • vevejuha/ohj1ht
  • ekpakkal/ohj1ht
  • otjuahos/ohj1ht
  • rajanije/ohj1ht
  • rintahe/ohj1ht
  • mpaavola/ohj1ht
  • lalaajal/ohj1ht
  • tevesiku/ohj1ht
  • malmente/ohj1ht
  • lahdelai/ohj1ht
  • lehtlrvt/syksy-2023-project
  • tuilkark/ohj1ht
  • shurmeri/ohj1ht
  • npura/ohj1ht
  • ljkarna/ohj1ht
  • pejokarj/ohj1ht
  • hytosama/ohj1ht
  • arpevile/ohj1ht
  • tspuhari/ohj1ht
  • meematma/ohj1ht
  • msvekkel/ohj1ht
  • lskumpus/temppelirosvo
  • lskumpus/ohj1ht
  • parikkp/ohj1ht
  • oopummww/sahkonhintalaskuri
  • emjowebe/ohj1ht
  • esolin/ohj1ht
  • anjakinn/ohj1ht
  • eronenve/ohj1ht
  • kautuoee/sijottajat
  • ammarttu/seikkailupeli
  • jhkortww/ohj1ht
  • tiainela/ohj1ht
  • lajoraiv/avaruushyokkaajat
  • vjkoski/ohj1ht
  • limmakyn/ohj1ht
  • kreenk/ohj1ht
  • tynnijtt/ohj1ht
  • jovesaar/ohj1ht
  • jmsutizy/ohj-1-harjoitustyo
  • veijantt/asteroidpossu
  • krseppen/ohj1ht
  • sjlihava/ohj1ht
  • kmpaanan/ohj1ht
  • emelmann/ohj1ht
  • sasavoli/jaatelokesa
  • alarojal/take-them-all
  • huhtjyil/pysakointisimulaattori
  • ttaho/ohj1ht
  • koivulmi/omenat
  • tosajaas/ohj1ht
  • sievanee/ohj1ht
  • vavavima/ohj1ht
  • adjotuhk/ohj1ht
  • heijoshe/ohj1ht
  • sammakko/kohti-aaretonta
  • anneveka/kohti-aaretonta
  • piippoje/lentokonepeli
  • emalmale/frog-jump
  • niemlexy/ohj1ht
  • jasajuyl/ohj1ht
  • peoswasa/pirtin-puolustus
  • mzitting/ohj1ht
  • heikkiaa/ohj1ht
  • mattarma/ohj-1-ht
  • kiiskiev/ohj1ht
  • noelleht/ohj1ht
  • vtsarkka/ohj1ht
  • majuvaaj/ohj-1-ht
  • eiekuiri/ohj1ht2
  • moilanii/ohj1ht
  • jpmoilan/ohj1ht
  • lipavaxy/lipavaxy
  • varauhal/ohj1ht
  • seastrom/ohj1ht3
  • jlinnik/metsakissa
  • mipeolli/ohj1ht
  • majugroh/ohj1ht
  • aijaeeus/ohj1ht
  • anjopitk/ohj1ht
  • ulentika/ohj1ht
  • paajooni/ohj1ht
  • avfresta/ohj-1-harjoitustyo-peli
  • jueesark/ohj1ht
  • sulasaal/ohj1ht
  • tervomhj/ohj1ht
  • pelkkezz/ohj1ht
  • otjalouk/hoylaajanpaluu
  • jupeupol/ohj1ht
  • jojuhemu/ilmailusaatiedotus
  • karnlazy/ohj1ht
  • tornbeev/eetu-t-ht
  • makelkjt/ohj1ht
  • masakoiv/ohj1ht
  • jerantat/ohj1ht
  • reevirta/ohj1ht
  • junijuku/ohj1ht
  • oaaltola/ohj1ht
  • renmikta/ohj1ht
  • kuntekys/ohj1ht
  • emhaauha/ohj1ht
  • lijovest/ohj1ht
  • sjuskivs/ohj1ht
  • joohirvo/ohj1ht
  • rekallio/ohj1ht
  • tuzuneru/ohj1ht
  • jacheryy/vapaa-maailma-ht
  • salompxs/ohj1ht
  • vamavatu/peliprojekti
  • mikalese/project-color
  • vimimalu/ohj1ht
  • vehartzz/ohj1ht
  • anlutuho/vilsun-seikkailu
  • saadmikk/ohj-1-ht-2
  • topevoud/ohj1ht
  • mvhonkzz/kana-kana
  • kopperp/ohj1ht
  • jutalapp/ohj1ht
  • jejajoko/ohj1ht
  • suholaju/Webbi
  • askuisyy/ohj1ht
  • samjaajo/ohj1ht
  • penttu/ohj1ht
  • ekkoykka/ohj1ht
  • tamakark/ohj1ht
  • ckbboman/ohj1ht
  • jomuhaat/ohj-1-ht
  • tslahtin/ohj1ht
  • salmatel/ohj1ht
  • linnahee/pelastapeikoilta
  • pirhonmx/ohj1ht
  • perkem/ohj1ht
  • ssniinim/ohj-1-ht
  • nikaleko/ajope
  • heijohra/ohj1ht
  • kaikkoju/ohj1ht
  • rekanyys/ohj1ht
  • nijomagg/ohj1ht
  • solismpa/ohj1ht
  • enhekorp/ohj1ht
  • myahsumy/h-tohj-1
  • nynalynn/ohj1ht
  • iitojopi/ohj1ht
  • harmjosa/ohj1ht
  • joalsaun/ohj-1-ht
  • jimsebna/ohj1ht
  • jcmbergg/ohj1ht
  • vemaveij/ohj-1-ht
232 results
Show changes
Showing
with 2985 additions and 0 deletions
koodi/Content/taustakuvat/pattern_33.png

2.47 KiB

koodi/Content/taustakuvat/pattern_42.png

3.91 KiB

koodi/Content/taustakuvat/pattern_71.png

800 B

koodi/Content/taustakuvat/pattern_72.png

2.75 KiB

koodi/Content/taustakuvat/pattern_79.png

3.63 KiB

koodi/Content/taustakuvat/pattern_80.png

2.99 KiB

koodi/Content/taustakuvat/pattern_83.png

6 KiB

koodi/Content/tiilet/tileBlue_02.png

493 B

koodi/Content/tiilet/tileGreen_02.png

494 B

koodi/Content/tiilet/tileOrange_01.png

493 B

koodi/Content/tiilet/tilePink_02.png

487 B

koodi/Content/tiilet/tileRed_02.png

489 B

koodi/Content/tiilet/tileYellow_02.png

487 B

using Jypeli;
using System;
using static Jypeli.Game;
/// @author Micke Saarnela
/// @version 11.10.2023
///
/// <summary>
/// Jyväskylän yliopiston Ohjelmointi 1 -kurssin harjoitustyö, syksy 2023.
/// </summary>
namespace Superpallo3000
{
/// <summary>
/// Mailaolion luokka.
/// </summary>
class Maila : PhysicsObject
{
/// <summary>
/// OlionTilanne tilanne kertoo, missä kohtaa olion koodin suoritus on menossa.
/// </summary>
///
/// <remarks>
/// <code>
/// Normaali = olio on luotu tai animaatio on suoritettu loppuun
/// Aloitusanimaatio = olio suorittaa animaatiota, jonka loppumista pitää odottaa
/// Lopetusanimaatio = olio suorittaa animaatiota, jonka loppumista pitää odottaa
/// Tuhottu = olio on tuhoutumassa tai on jo tuhottu
/// </code>
/// </remarks>
private enum OlionTilanne : int { Normaali, Aloitusanimaatio, Lopetusanimaatio, Tuhottu }
/// <summary>
/// Mailan reunan ja pelialueen reunan väliin jätettävä tila pikseleinä.
/// </summary>
private const int RAJAN_MARGINAALI = 5;
/// <summary>
/// Lopetusanimaatiossa mailan kokoa pienennetään tämän kertoimen mukaan.
/// </summary>
private const float LOPETUSANIMAATIO_KOON_KERROIN_PER_PAIVITYS = 0.9f;
/// <summary>
/// Animaatio lopetetaan kun mailan koko on pienempi.
/// </summary>
private const float ANIMAATIO_PIENIN_KOON_KERROIN = 0.1f;
/// <summary>
/// Kuinka monta pikseliä mailaa siirretään animaatiossa per päivitys.
/// </summary>
private const int ANIMAATIO_POSITION_MUUTOS_PER_PAIVITYS = 2;
/// <summary>
/// Varjokuvan siirto pikseleinä vaakasuunnassa mailaan verrattuna.
/// </summary>
private const int VARJON_SIIRTO_VAAKASUUNNASSA = -3;
/// <summary>
/// Varjokuvan siirto pikseleinä pystysuunnassa mailaan verrattuna.
/// </summary>
private const int VARJON_SIIRTO_PYSTYSUUNNASSA = -7;
/// <summary>
/// Mailan sijainnin rajoitus vasemmalla (X-koordinaatti).
/// </summary>
private readonly int vasenRaja;
/// <summary>
/// Mailan sijainnin rajoitus oikealla (X-koordinaatti).
/// </summary>
private readonly int oikeaRaja;
/// <summary>
/// Mailan vakionopeus.
/// </summary>
private readonly int vakionopeus;
/// <summary>
/// Mailan varjon GameObject-olio.
/// </summary>
private GameObject varjoOlio;
/// <summary>
/// Mailaolio siirretään tähän Y-koordinaattiin alkuanimaatiossa.
/// </summary>
private int alkuanimaationPaatepisteY;
/// <summary>
/// Olion tilanne.
/// </summary>
/// <remarks>Normaali, Aloitusanimaatio, Lopetusanimaatio, Tuhottu</remarks>
private OlionTilanne olionTilanne = OlionTilanne.Normaali;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun mailan alkuanimaatio on suoritettu loppuun.</remarks>
public event EventHandler MailaValmis;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun mailan lopetusanimaatio on suoritettu loppuun.</remarks>
public event EventHandler MailanVoiPoistaa;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun pallo on osunut mailaan.</remarks>
public event EventHandler<AaniefektienTyypit> SoitaAaniefekti;
/// <summary>
/// Mailan konstruktori.
/// </summary>
/// <param name="x">Keskipiste X-akselilla.</param>
/// <param name="y">Keskipiste Y-akselilla.</param>
/// <param name="leveys">Mailan leveys pikseleinä.</param>
/// <param name="korkeus">Mailan korkeus pikseleinä.</param>
/// <param name="vasenRaja">Pelialueen vasemman reunan sijainti.</param>
/// <param name="oikeaRaja">Pelialueen oikean reunan sijainti.</param>
/// <param name="vakionopeus">Mailan vakionopeus.</param>
/// <param name="kuva">Mailan kuva.</param>
/// <param name="varjonKuva">Mailan varjokuva.</param>
public Maila(int x, int y, int leveys, int korkeus, int vasenRaja, int oikeaRaja, int vakionopeus, Image kuva, Image varjonKuva) : base(leveys, korkeus)
{
MakeStatic(); // staattinen olio
Restitution = 1.0; // kimmoisuus, ei muuta pallon nopeutta jos arvo on 1
KineticFriction = 0;
X = x;
Y = y;
Image = kuva;
this.vasenRaja = vasenRaja + (int)Size.X / 2 + RAJAN_MARGINAALI;
this.oikeaRaja = oikeaRaja - (int)Size.X / 2 - RAJAN_MARGINAALI;
this.vakionopeus = vakionopeus;
varjoOlio = new GameObject(Size.X, Size.Y);
varjoOlio.Image = varjonKuva;
varjoOlio.X = X + VARJON_SIIRTO_VAAKASUUNNASSA;
varjoOlio.Y = Y + VARJON_SIIRTO_PYSTYSUUNNASSA;
Instance.Add(varjoOlio, (int)OlioidenPiirtotasot.Varjot);
olionTilanne = OlionTilanne.Normaali;
}
/// <summary>
/// Aloitetaan mailan alkuanimaatio.
/// </summary>
/// <param name="animaationPaatepisteY">Mailan lopullinen Y-koordinaatti.</param>
public void AloitaAlkuanimaatio(int animaationPaatepisteY)
{
alkuanimaationPaatepisteY = animaationPaatepisteY;
Velocity = Vector.Zero;
varjoOlio.X = X + VARJON_SIIRTO_VAAKASUUNNASSA;
varjoOlio.Y = Y + VARJON_SIIRTO_PYSTYSUUNNASSA;
olionTilanne = OlionTilanne.Aloitusanimaatio;
}
/// <summary>
/// Liikutetaan mailaa vakionopeudella vasemmalle tai oikealle.
/// </summary>
/// <param name="suunta">Suuntavektori, jossa X on -1 tai 1 ja Y on 0.</param>
public void LiikutaMailaa(Vector suunta)
{
if (X <= vasenRaja && suunta.X < 0)
{
Velocity = Vector.Zero;
}
else if (X >= oikeaRaja && suunta.X > 0)
{
Velocity = Vector.Zero;
}
else
{
Velocity = suunta * vakionopeus;
}
}
/// <summary>
/// Pallo törmäsi mailaan, lähetetään viesti, jossa pyydetään soittamaan tietty ääniefekti.
/// </summary>
public void PalloTormasi()
{
SoitaAaniefekti?.Invoke(this, AaniefektienTyypit.Maila);
}
/// <summary>
/// Aloitetaan mailan lopetusanimaatio.
/// </summary>
public void PoistaPelista()
{
Velocity = Vector.Zero;
olionTilanne = OlionTilanne.Lopetusanimaatio;
}
/// <summary>
/// Tuhotaan maila ja sen varjo.
/// </summary>
public override void Destroy()
{
olionTilanne = OlionTilanne.Tuhottu;
varjoOlio.Destroy();
base.Destroy();
}
/// <summary>
/// Jypeli kutsuu tätä funktiota tietyin välein.
/// Päivittää mailan animaation ja varjon sijainnin.
/// </summary>
/// <param name="time">Aika joka on kulunut viimeisen kutsun jälkeen.</param>
public override void Update(Time time)
{
if (!IsDestroyed)
{
if (olionTilanne == OlionTilanne.Aloitusanimaatio)
{
Y += ANIMAATIO_POSITION_MUUTOS_PER_PAIVITYS;
if (Y >= alkuanimaationPaatepisteY)
{
Y = alkuanimaationPaatepisteY;
olionTilanne = OlionTilanne.Normaali;
MailaValmis?.Invoke(this, EventArgs.Empty);
}
}
else if (olionTilanne == OlionTilanne.Lopetusanimaatio)
{
Size = Size * LOPETUSANIMAATIO_KOON_KERROIN_PER_PAIVITYS;
varjoOlio.Size = Size;
Y -= ANIMAATIO_POSITION_MUUTOS_PER_PAIVITYS;
if (Size.X < ANIMAATIO_PIENIN_KOON_KERROIN)
{
olionTilanne = OlionTilanne.Normaali;
MailanVoiPoistaa?.Invoke(this, EventArgs.Empty);
}
}
varjoOlio.X = X + VARJON_SIIRTO_VAAKASUUNNASSA;
varjoOlio.Y = Y + VARJON_SIIRTO_PYSTYSUUNNASSA;
}
base.Update(time);
}
}
}
\ No newline at end of file
using System;
namespace Superpallo3000
{
/// <summary>
/// The main class.
/// </summary>
public static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
using var game = new Superpallo3000();
game.Run();
}
}
}
using Jypeli;
using System;
using static Jypeli.Game;
/// @author Micke Saarnela
/// @version 11.10.2023
///
/// <summary>
/// Jyväskylän yliopiston Ohjelmointi 1 -kurssin harjoitustyö, syksy 2023.
/// </summary>
namespace Superpallo3000
{
/// <summary>
/// Pallo-olion luokka.
/// </summary>
class Pallo : PhysicsObject
{
/// <summary>
/// OlionTilanne tilanne kertoo, missä kohtaa olion koodin suoritus on menossa.
/// </summary>
///
/// <remarks>
/// <code>
/// Normaali = olio on luotu tai animaatio on suoritettu loppuun
/// Aloitusanimaatio = olio suorittaa animaatiota, jonka loppumista pitää odottaa
/// Lopetusanimaatio = olio suorittaa animaatiota, jonka loppumista pitää odottaa
/// Tormaysanimaatio = olio suorittaa animaatiota, jonka loppumista pitää odottaa
/// Tuhoutumassa = pallo ylitti pelialueen alareunan
/// Tuhottu = olio on tuhottu
/// </code>
/// </remarks>
private enum OlionTilanne : int { Normaali, Aloitusanimaatio, Lopetusanimaatio, Tormaysanimaatio, Tuhoutumassa, Tuhottu }
/// <summary>
/// Aloitusanimaatiossa pallon kokoa suurennetaan tämän kertoimen mukaan.
/// </summary>
private const float ALOITUSANIMAATIO_KOON_KERROIN = 1.3f;
/// <summary>
/// Lopetusanimaatiossa pallon kokoa pienennetään tämän kertoimen mukaan.
/// </summary>
private const float LOPETUSANIMAATIO_KOON_KERROIN = 0.9f;
/// <summary>
/// Animaatio lopetetaan kun pallon koko on pienempi.
/// </summary>
private const float LOPETUSANIMAATIO_PIENIN_KOON_KERROIN = 0.1f;
/// <summary>
/// Varjokuvan siirto pikseleinä vaakasuunnassa palloon verrattuna.
/// </summary>
private const int VARJON_SIIRTO_VAAKASUUNNASSA = -3;
/// <summary>
/// Varjokuvan siirto pikseleinä pystysuunnassa palloon verrattuna.
/// </summary>
private const int VARJON_SIIRTO_PYSTYSUUNNASSA = -3;
/// <summary>
/// Törmäysanimaation kesto millisekunteina.
/// </summary>
private const int TORMAYSANIMAATION_KESTO = 40;
/// <summary>
/// Olion tilanne.
/// </summary>
/// <remarks>Normaali, Aloitusanimaatio, Lopetusanimaatio, Tormaysanimaatio, Tuhoutumassa, Tuhottu</remarks>
private OlionTilanne olionTilanne = OlionTilanne.Normaali;
/// <summary>
/// Pallon halkaisija pikseleinä.
/// </summary>
private int pallonHalkaisija;
/// <summary>
/// Pallon vakionopeus.
/// </summary>
private int vakionopeus;
/// <summary>
/// Alareunan Y-koordinaatti, jonka yli siirtyessään pallo tuhoutuu.
/// </summary>
private int alareunaPallonTuhoutumisraja;
/// <summary>
/// Varjon GameObject-olio.
/// </summary>
private GameObject varjoOlio;
/// <summary>
/// Törmäysefektin GameObject-olio.
/// </summary>
private GameObject tormaysolio;
/// <summary>
/// Apumuuttuja, tähän tallennetaan pallon suunta törmäyksessä.
/// </summary>
private Vector suuntavektori;
/// <summary>
/// Apumuuttuja, törmäysanimaatiossa kulunut aika.
/// </summary>
private int tormaysanimaatioKulunutAika = 0;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun pallon alkuanimaatio on suoritettu loppuun.</remarks>
public event EventHandler PalloValmis;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun pallon lopetusanimaatio on suoritettu loppuun, tai pallo on tuhoutunut.</remarks>
public event EventHandler PallonVoiPoistaa;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun pallo on ohittanut pelialueen alareunan.</remarks>
public event EventHandler PalloOhittiAlareunan;
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun pallo on ohittanut pelialueen alareunan.</remarks>
public event EventHandler<AaniefektienTyypit> SoitaAaniefekti;
/// <summary>
/// Pallon konstruktori.
/// </summary>
/// <param name="x">Keskipiste X-akselilla.</param>
/// <param name="y">Keskipiste Y-akselilla.</param>
/// <param name="pallonHalkaisija">Pallon halkaisija pikseleinä.</param>
/// <param name="vakionopeus">Pallon vakionopeus.</param>
/// <param name="alareunaPallonTuhoutumisraja">Pelialueen alareunan Y-koordinaatti.</param>
/// <param name="kuva">Pallon kuva.</param>
/// <param name="varjokuva">Pallon varjokuva.</param>
/// <param name="tormayskuva">Pallon törmäysanimaatiossa käytettävä kuva.</param>
public Pallo(int x, int y, int pallonHalkaisija, int vakionopeus, int alareunaPallonTuhoutumisraja, Image kuva, Image varjokuva, Image tormayskuva) : base(pallonHalkaisija, pallonHalkaisija)
{
Restitution = 1.0; // kimmoisuus, ei muuta pallon nopeutta jos arvo on 1
KineticFriction = 0;
CanRotate = false;
X = x;
Y = y;
Image = kuva;
//this.tormayskuva = tormayskuva;
this.pallonHalkaisija = pallonHalkaisija;
this.vakionopeus = vakionopeus;
this.alareunaPallonTuhoutumisraja = alareunaPallonTuhoutumisraja;
varjoOlio = new GameObject(pallonHalkaisija, pallonHalkaisija);
varjoOlio.Image = varjokuva;
varjoOlio.X = X + VARJON_SIIRTO_VAAKASUUNNASSA;
varjoOlio.Y = Y + VARJON_SIIRTO_PYSTYSUUNNASSA;
Instance.Add(varjoOlio, (int)OlioidenPiirtotasot.Varjot);
tormaysolio = new GameObject(pallonHalkaisija, pallonHalkaisija);
tormaysolio.Image = tormayskuva;
tormaysolio.Position = Position;
tormaysolio.IsVisible = false;
Instance.Add(tormaysolio, (int)OlioidenPiirtotasot.Efektit);
olionTilanne = OlionTilanne.Normaali;
}
/// <summary>
/// Aloitetaan pallon alkuanimaatio.
/// </summary>
public void AloitaAlkuanimaatio()
{
Velocity = Vector.Zero;
varjoOlio.X = X + VARJON_SIIRTO_VAAKASUUNNASSA;
varjoOlio.Y = Y + VARJON_SIIRTO_PYSTYSUUNNASSA;
Size = new Vector(1, 1);
varjoOlio.Size = Size;
olionTilanne = OlionTilanne.Aloitusanimaatio;
}
/// <summary>
/// Laukaistaan pallo annetun vektorin suuntaan.
/// </summary>
/// <param name="suunta">Pallon suunta.</param>
public void LaukaisePallo(Vector suunta)
{
Velocity = suunta.Normalize() * vakionopeus;
}
/// <summary>
/// Pallo törmäsi johonkin olioon, aloitetaan törmäysanimaatio.
/// </summary>
public void PalloTormasi()
{
if (olionTilanne == OlionTilanne.Normaali)
{
olionTilanne = OlionTilanne.Tormaysanimaatio;
tormaysanimaatioKulunutAika = 0;
suuntavektori = Velocity;
Velocity = Vector.Zero;
tormaysolio.IsVisible = true;
}
}
/// <summary>
/// Aloitetaan lopetusanimaatio.
/// </summary>
public void PoistaPelista()
{
Velocity = Vector.Zero;
olionTilanne = OlionTilanne.Lopetusanimaatio;
}
/// <summary>
/// Pallo on mennyt pelialueen alareunan ohitse, lähetetään viesti että pallon voi poistaa.
/// </summary>
public void TuhoaPallo()
{
Velocity = Vector.Zero;
SoitaAaniefekti?.Invoke(this, AaniefektienTyypit.PalloTuhoutui);
PallonVoiPoistaa?.Invoke(this, EventArgs.Empty);
}
/// <summary>
/// Tuhotaan pallo ja sen varjo.
/// </summary>
public override void Destroy()
{
olionTilanne = OlionTilanne.Tuhottu;
varjoOlio.Destroy();
tormaysolio.Destroy();
base.Destroy();
}
/// <summary>
/// Jypeli kutsuu tätä funktiota tietyin välein.
/// Päivittää pallon animaation ja varjon sijainnin.
/// </summary>
/// <param name="time">Aika joka on kulunut viimeisen kutsun jälkeen.</param>
public override void Update(Time time)
{
if (!IsDestroyed)
{
switch (olionTilanne)
{
case OlionTilanne.Normaali:
if (Y < alareunaPallonTuhoutumisraja)
{
// pallo meni alareunan ohitse
Velocity = Vector.Zero;
olionTilanne = OlionTilanne.Tuhoutumassa;
PalloOhittiAlareunan?.Invoke(this, EventArgs.Empty);
break;
}
// pallo on liikkeessä, pidetään pallon nopeus vakiona
if (Velocity.Magnitude > 0 && Velocity.Magnitude < vakionopeus) Velocity = vakionopeus * Velocity.Normalize();
break;
case OlionTilanne.Aloitusanimaatio:
Size = Size * ALOITUSANIMAATIO_KOON_KERROIN;
varjoOlio.Size = Size;
if (Size.X >= pallonHalkaisija)
{
Size = new Vector(pallonHalkaisija, pallonHalkaisija);
varjoOlio.Size = Size;
olionTilanne = OlionTilanne.Normaali;
PalloValmis?.Invoke(this, EventArgs.Empty);
}
break;
case OlionTilanne.Lopetusanimaatio:
Size = Size * LOPETUSANIMAATIO_KOON_KERROIN;
varjoOlio.Size = Size;
if (Size.X < LOPETUSANIMAATIO_PIENIN_KOON_KERROIN)
{
olionTilanne = OlionTilanne.Normaali;
PallonVoiPoistaa?.Invoke(this, EventArgs.Empty);
}
break;
case OlionTilanne.Tormaysanimaatio:
tormaysanimaatioKulunutAika += (int)time.SinceLastUpdate.TotalMilliseconds;
if (tormaysanimaatioKulunutAika >= TORMAYSANIMAATION_KESTO)
{
// törmäysefekti loppuu
tormaysolio.IsVisible = false;
olionTilanne = OlionTilanne.Normaali;
Velocity = suuntavektori;
}
break;
default:
break;
}
varjoOlio.X = X + VARJON_SIIRTO_VAAKASUUNNASSA;
varjoOlio.Y = Y + VARJON_SIIRTO_PYSTYSUUNNASSA;
tormaysolio.Position = Position;
}
base.Update(time);
}
}
}
using Jypeli;
using System;
/// @author Micke Saarnela
/// @version 11.10.2023
///
/// <summary>
/// Jyväskylän yliopiston Ohjelmointi 1 -kurssin harjoitustyö, syksy 2023.
/// </summary>
namespace Superpallo3000
{
/// <summary>
/// Pelialueen reunaolion luokka, yläreuna, vasen ja oikea sivureuna.
/// Rajaa pelialueen niin, että pallo kimpoaa osuttuaan reunaan.
/// Pallon törmäyksestä soitetaan ääniefekti.
/// </summary>
class Reuna : PhysicsObject
{
/// <summary>
/// Pääohjelma kuuntelee tämän tapahtumankäsittelijän lähettämiä viestejä.
/// </summary>
/// <remarks>Viesti lähetetään kun pallo on osunut reunaan.</remarks>
public event EventHandler<AaniefektienTyypit> SoitaAaniefekti;
/// <summary>
/// Luokan konstruktori.
/// </summary>
/// <param name="x">Keskipiste X-akselilla.</param>
/// <param name="y">Keskipiste Y-akselilla.</param>
/// <param name="leveys">Reunan leveys pikseleinä.</param>
/// <param name="korkeus">Reunan korkeus pikseleinä.</param>
/// <param name="vari">Reunan väri.</param>
public Reuna(int x, int y, int leveys, int korkeus, Color vari) : base(leveys, korkeus)
{
// base(leveys, korkeus) -> kutsutaan PhysicsObject-luokan constructoria
MakeStatic(); // staattinen olio
Restitution = 1.0; // kimmoisuus, ei muuta pallon nopeutta jos arvo on 1
KineticFriction = 0;
X = x;
Y = y;
Color = vari;
}
/// <summary>
/// Pallo törmäsi reunaan, lähetetään viesti, jossa pyydetään soittamaan tietty ääniefekti.
/// </summary>
public void PalloTormasi()
{
SoitaAaniefekti?.Invoke(this, AaniefektienTyypit.Reuna);
}
}
}
using Jypeli;
using static Jypeli.Game;
using System;
using System.Collections.Generic;
using System.Linq;
/// @author Micke Saarnela
/// @version 11.10.2023
///
/// <summary>
/// Jyväskylän yliopiston Ohjelmointi 1 -kurssin harjoitustyö, syksy 2023.
/// </summary>
namespace Superpallo3000
{
/// <summary>
/// Alkuvalikon animoidun otsikkotekstin luokka.
/// </summary>
class Skrollinaytto : GameObject
{
/// <summary>
/// OlionTilanne tilanne kertoo, missä kohtaa olion koodin suoritus on menossa.
/// </summary>
///
/// <remarks>
/// <code>
/// Normaali = olio on luotu tai animaatio on suoritettu loppuun
/// Animaatio = olio suorittaa animaatiota
/// </code>
/// </remarks>
private enum OlionTilanne : int { Normaali, Animaatio }
/// <summary>
/// Kirjaimien paikkaan tehtävä muutos per Update-funktion kutsu.
/// </summary>
private const double KIRJAIMIEN_PAIKAN_MUUTOS_PER_PAIVITYS = 0.03d;
/// <summary>
/// Kirjaimen värin vaihteluun viiveeseen tehtävä muutos.
/// </summary>
private const double ANIMAATION_PAIVITYSAJAN_MUUTOS = 1.0d;
/// <summary>
/// Kirjaimen värin vaihtelun päivitysväli.
/// </summary>
private const double ANIMAATION_PAIVITYSVALI = 2.0d;
/// <summary>
/// Kirjaimen värin vaihtelun viive.
/// </summary>
private const double ANIMAATION_KULUNEEN_AJAN_KERROIN = -4.0d;
/// <summary>
/// Kirjaimen vaakasuunnassa tapahtuvan siirron kerroin.
/// </summary>
private const double ANIMAATIO_MUUTOS_VAAKASUUNNASSA_KERROIN = 0.16d;
/// <summary>
/// Kirjaimen pystysuunnassa tapahtuvan siirron kerroin.
/// </summary>
private const double ANIMAATIO_MUUTOS_PYSTYSUUNNASSA_KERROIN = 10.0d;
/// <summary>
/// Kirjaimen animaation (värin muutos) kesto millisekunteina.
/// Kesto valitaan satunnaisesti kahden numeron väliltä.
/// </summary>
private readonly int[] animaationKestonVaihteluvalit = { 400, 500 };
/// <summary>
/// Kirjaimien värit valitaan satunnaisesti tästä taulukosta.
/// </summary>
private readonly Color[] varit = { Color.Gray, Color.White, Color.Gold, Color.Blue, Color.Red };
/// <summary>
/// Jokaisen kirjaimen alkuperäinen piste x-akselilla.
/// </summary>
private readonly int[] aloituspisteetX;
/// <summary>
/// Jokaisen kirjaimen alkuperäinen piste y-akselilla.
/// </summary>
private readonly int[] aloituspisteetY;
/// <summary>
/// Jokaisen kirjaimen animaation kesto, jokaisella kirjaimella hieman eri luku.
/// </summary>
private readonly double[] animaationKestot;
/// <summary>
/// Alkuperäinen tekstin väri.
/// </summary>
private readonly Color tekstinVari;
/// <summary>
/// Random-luokan olio, tarvitaan Update-funktiossa.
/// </summary>
private readonly Random random = new Random();
/// <summary>
/// Olion tilanne
/// </summary>
/// <remarks>Normaali, Animaatio</remarks>
private OlionTilanne olionTilanne = OlionTilanne.Normaali;
/// <summary>
/// Muodostetaan jokaisesta kirjaimesta oma Label-luokan olio,
/// joka tallennetaan List-tyypin muuttujaan.
/// </summary>
private List<Label> kirjainObjektit = new List<Label>();
/// <summary>
/// Apumuuttuja, missä kohtaa kirjaimien paikan animointi on menossa.
/// </summary>
private double kirjaimienPaikanVaihe = 0;
/// <summary>
/// Apumuuttuja, jokaisen kirjaimen animaatioon kulunut aika.
/// </summary>
private double[] kuluneetAjat;
/// <summary>
/// Apumuuttuja, jokaisen kirjaimen animaation seuraava päivitysaika.
/// </summary>
private double[] paivitysAjat;
/// <summary>
/// Luokan konstruktori.
/// </summary>
/// <param name="x">Keskipiste X-akselilla.</param>
/// <param name="y">Keskipiste Y-akselilla.</param>
/// <param name="kirjasin">Käytettävä kirjasin.</param>
/// <param name="kirjasimenKoko">Tekstin koko pikseleinä.</param>
/// <param name="tekstinVari">Tekstin väri.</param>
/// <param name="teksti">Näytettävä merkkijono.</param>
public Skrollinaytto(int x, int y, Font kirjasin, int kirjasimenKoko, Color tekstinVari, string teksti) : base(0, 0)
{
this.tekstinVari = tekstinVari;
char[] kirjaimet = teksti.ToCharArray();
aloituspisteetX = new int[kirjaimet.Length];
aloituspisteetY = new int[kirjaimet.Length];
animaationKestot = new double[kirjaimet.Length];
kuluneetAjat = new double[kirjaimet.Length];
paivitysAjat = new double[kirjaimet.Length];
int aloitusPositioX = x - (kirjaimet.Length * kirjasimenKoko / 2) / 2 + kirjasimenKoko / 2;
// muodostetaan jokaisesta merkkijonon kirjaimesta oma Label-luokan olio,
// jotta kirjaimien sijaintia voidaan animoida.
for (int i = 0; i < kirjaimet.Length; i++)
{
kirjainObjektit.Add(new Label(kirjasimenKoko, kirjasimenKoko, kirjaimet[i].ToString()));
kirjainObjektit.Last().X = aloitusPositioX;
kirjainObjektit.Last().Y = y;
kirjainObjektit.Last().Font = kirjasin;
kirjainObjektit.Last().Font.Size = kirjasimenKoko;
kirjainObjektit.Last().TextColor = tekstinVari;
Instance.Add(kirjainObjektit.Last(), (int)OlioidenPiirtotasot.UI);
aloituspisteetX[i] = aloitusPositioX;
aloituspisteetY[i] = y;
animaationKestot[i] = random.Next(animaationKestonVaihteluvalit[0], animaationKestonVaihteluvalit[1]);
kuluneetAjat[i] = random.Next(animaationKestonVaihteluvalit[1]);
paivitysAjat[i] = 0;
aloitusPositioX += kirjasimenKoko / 2;
}
}
/// <summary>
/// Aloitetaan tekstin animointi.
/// </summary>
public void AsetaAnimaatio()
{
olionTilanne = OlionTilanne.Animaatio;
}
/// <summary>
/// Tuhotaan kirjaimet ja tämä olio.
/// </summary>
public override void Destroy()
{
foreach(var item in kirjainObjektit)
{
item.Destroy();
}
kirjainObjektit.Clear();
base.Destroy();
}
/// <summary>
/// Jypeli kutsuu tätä funktiota tietyin ajoin.
/// Päivitetään kirjainten väri ja paikka.
/// </summary>
/// <param name="time">Aika joka on kulunut viimeisen kutsun jälkeen.</param>
public override void Update(Time time)
{
if (IsDestroyed) { }
else if (olionTilanne == OlionTilanne.Animaatio)
{
kirjaimienPaikanVaihe += KIRJAIMIEN_PAIKAN_MUUTOS_PER_PAIVITYS;
for (int i = 0; i < kirjainObjektit.Count(); i++)
{
kuluneetAjat[i] = kuluneetAjat[i] + time.SinceLastUpdate.TotalMilliseconds;
paivitysAjat[i] = paivitysAjat[i] + ANIMAATION_PAIVITYSAJAN_MUUTOS;
if (kuluneetAjat[i] >= animaationKestot[i])
{
// palataan alkutilanteeseen
kirjainObjektit[i].TextColor = tekstinVari;
kuluneetAjat[i] = kuluneetAjat[i] * ANIMAATION_KULUNEEN_AJAN_KERROIN;
}
else if (kuluneetAjat[i] >= 0 && paivitysAjat[i] >= ANIMAATION_PAIVITYSVALI)
{
// animoidaan tekstiä, vaihdetaan kirjaimen väri
kirjainObjektit[i].TextColor = varit[random.Next(varit.Count())];
paivitysAjat[i] = -ANIMAATION_PAIVITYSVALI;
}
// lasketaan kirjaimelle uusi sijainti
kirjainObjektit[i].X = aloituspisteetX[i] + (Math.Cos(kirjaimienPaikanVaihe) * aloituspisteetX[i] * ANIMAATIO_MUUTOS_VAAKASUUNNASSA_KERROIN);
kirjainObjektit[i].Y = aloituspisteetY[i] + (Math.Sin(kirjaimienPaikanVaihe + i) * ANIMAATIO_MUUTOS_PYSTYSUUNNASSA_KERROIN);
}
}
base.Update(time);
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<PublishReadyToRun>false</PublishReadyToRun>
<TieredCompilation>false</TieredCompilation>
<Nullable>disable</Nullable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<Optimize>False</Optimize>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Assets\**" />
<EmbeddedResource Remove="Assets\**" />
<None Remove="Assets\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Jypeli.NET" Version="11.*" />
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*" />
</ItemGroup>
<ItemGroup>
<None Update="Content\aanet\alkumusa.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\game_over.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\go.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\kentta_lapi.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\osuma.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\osuma_maila.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\osuma_reuna.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\osuma_tiili.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\pallo_tuhoutui.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\peli_loppu.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\uusi_kentta.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\aanet\uusi_peli.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\mailat\paddle_01.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\mailat\paddle_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\mailat\paddle_05.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\mailat\paddle_09.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muutkuvat\elama.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muutkuvat\sydan.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\elama.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\Kenney Blocks.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\Kenney High Square.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\maila.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\OFL.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\pallo.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\Roboto-Black.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\Roboto-Bold.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\Roboto-Regular.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\RubikMonoOne-Regular.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\muut\sydan.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\pallot\ballBlack_06.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\pallot\ballBlue_06.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\pallot\ballBlue_10.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\pallot\ballGrey_06.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\pallot\ballYellow_06.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_10.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_24.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_25.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_26.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_27.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_32.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_33.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_42.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_54.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_55.png">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_56.png">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_58.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_63.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_66.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_71.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_72.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_77.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_79.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_80.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_81.png">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_82.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuvat\pattern_83.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tiilet\tileBlue_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tiilet\tileGreen_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tiilet\tileOrange_01.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tiilet\tilePink_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tiilet\tileRed_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tiilet\tileYellow_02.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
This diff is collapsed.