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
  • tmruisma/ohj1ht
  • eljuarha/ohj1ht
  • alvejmsu/ohj1ht
  • tuvoo/ohj1ht
  • annelinu/ohj1ht
  • malonen/ohj1ht
  • jphkauxs/ohj1ht
  • rarouvin/vaiskin-kauppapeli
  • ansovalk/ohj1ht
  • tkleinon/ohj1ht
  • tmraassy/ohj1ht
  • fmksepps/ohj1ht
  • kosksaka/ohj1ht
  • aatjarvs/ohj1ht
  • segersls/ohj1ht
  • peropami/ohj1ht
  • jylhasmy/ohj1ht
  • suomiejs/ohj1ht
  • ojanpele/ohj1ht
  • oeppulkk/ohj1ht
  • pulliami/ohj1ht
  • lemakinn/ohj1ht
  • lappkvuu/ohjelmointi-1-ht-1
  • misutuom/ohj1ht
  • vivclaje/harkkatyo
  • kohelasa/ohj1ht
  • tulehtol/ohj-1-ht-2023
  • otoskinn/ohj1ht
  • karossi/ohj1ht
  • anttlaol/ohj1ht
  • autioans/ohj1ht
  • vjokine/ohjelmointi-1-kurssin-harkkapeli
  • viempaas/ohj1ht
  • jjikouyz/ohj1ht
  • pejuuso/ohj1ht
  • ideljako/ohj1ht
  • juutirls/ohj1ht
  • nivagadd/ohj1ht
  • elvivihe/ohj1ht
  • tie/ohj1/2023k/ohj1ht
  • aruokane/ohj1ht
  • nimirich/ohj1ht
  • alarnika/ohj1ht
  • viheijo/ohj1ht
  • esshelkr/ohj1ht
  • tttkanka/ohjelmointi-1-harjoitustyo
  • jmporras/ohj1ht
  • sernopet/ohj1ht
  • alnikupa/ohj1ht
  • kamarama/ohj1ht
  • pakakata/ohj1ht
  • sorjonmi/ohj1ht
  • silimapa/ohj1ht
  • jatirkko/ohj1ht
  • jsundelu/ohj1ht
  • maerlepo/ohj1ht
  • korhoovy/ohj1ht
  • partanji/ohj1ht
  • amheikkz/ohj1ht
  • koskinnm/ohj1ht
  • pehaline/ohj1ht
  • svhyvaos/ohj1ht
  • tetutaim/ohj1ht
  • alaluuop/ohj1ht
  • veijhrxz/ohj1ht
  • anmatala/ohjelmointi-1-harjoitustyo
  • anidmapo/ohj1ht
  • ttipoiko/ohj1ht
  • pyhalavh/ohj1ht
  • jemaijal/ohj1ht
  • joanurmi/ohj1ht
  • eemaelsa/ohj1ht
  • mijoutri/ohj1ht
  • ijsalmin/ohj1ht
  • saimaahu/ohj1ht
  • annkriau/ohj1ht
  • mkhirvon/ohj1ht
  • uttija/ohj1ht
  • mikkolto/ohj1ht
  • meakorho/ohj1ht
  • laaksoel/ohj1ht
  • mholammi/ohj1ht
  • krrekahk/ohj1ht
  • wistnest/ohj1ht
  • arhesant/arttu-s-ohj-1-peli
  • ihakalel/ohj1ht
  • ijaslaii/ohj1ht
  • veosvuol/ohj1ht
  • saarelee/ohj-1-ht-o
  • aevantti/ohj1ht
  • akruth/ohj1ht
  • idjupirh/ohj1ht
  • cgmlilja/ohj1ht
  • pojujoen/ohj1ht
  • ssfrom/ohj1ht
  • heinonpe/ohj1ht
  • viitanti/ohj1ht
  • lehtolts/ohj1ht
  • galetas/ohj1ht
  • dikogalu/ohj1ht
  • wahesale/ohj1ht
  • tepesimo/ohj1ht
  • ssapakys/ohj1ht
  • vestmine/ohj1ht
  • dooleyy/ohj1ht
  • vicdavfa/ohj1ht
  • kalloupe/ohj1ht
  • katajaam/ohj1ht
  • aransjos/ohj1ht
  • kaahyton/ohj1ht
  • jarvluee/ohj1ht
  • joaframi/ohj1ht
  • saiannka/ohj1ht
  • sasumyrs/ohj-1-ht-2023
  • jumavehi/ohj-1-ht-k-23
  • juhahuov/ohj1ht
  • immoneth/ohj-1-ht-thomas-immonen
  • rimijarv/ohj1ht
  • ponkayy/ohj1ht
  • tiainess/ohj1ht
  • setkinnu/ohj1ht
  • vvkeinan/ohj1ht
  • jelavonv/ohj1ht
  • haukjohe/ohj1ht
  • jumavais/ohj1ht
  • esmajoki/ohj1ht
  • minkjmzy/ohj1ht
  • jaahwiih/ohj1ht
  • maalvirt/ohj1ht
  • tttikkan/ohj1ht
  • kihedema/ohj1ht
  • nipeniem/ohj1ht
  • saaraijm/ohj1ht
  • roalsuvi/ohj1ht
  • sjkoskel/ohj1ht
  • hsjkulma/hannelen-harjoitustyo-ohj-1
  • mitaniem/ohj1ht
  • ahiekkan/ohj1ht
  • nmpuskzv/ohj-1-ht
  • wwwmolqo/ohj1ht
  • juntjuii/ohj1ht
  • santurun/ohj1ht
  • ettalaes/ohj-1-ht
  • hairjarv/ohj1ht
  • jjbergfo/ohj1ht
  • lehtikmi/ohj1ht
  • sianpapa/ohj1ht
  • aaperttu/tipitsi
  • tie/ohj1/2024k/ohj1ht
  • hesalmuu/ohj1ht
  • erkkaoxs/ohj1ht
  • temhints/ohj1ht
  • bekrnybe/ohj-1-ht-beata-otto
  • sawakorp/ohj1ht
  • saarinan/ohj1ht
  • kronjoma/ohj1ht
  • otjolyyt/ohj1ht-otjolyyt
  • tiantaha/ohj1ht
  • krislima/ohj1ht
  • rauhulil/suunnitelma
  • jutasier/ohj1ht
  • areeheki/ohj1ht
  • lausofla/ohj-1-ht
  • vemahaka/ohj1ht
  • suurnaat/ohj1ht
  • jakaraut/ohj1ht
  • jesupalo/ohj1ht
  • ferin/ohj1ht
  • annpauko/ohj1ht
  • npfriman/ohj1ht
  • kauppmsx/ohj1ht
  • vilaleka/ohj1ht
  • rohekokk/ohj1ht
  • roiirera/ohj1ht
  • jakinnun/ohj1ht
  • tormsu/titanic
  • saukkota/ohj1ht
  • iinpitka/ohj1ht
  • samalauk/ohj1ht
  • neemjaak/ohj1ht
  • mikkonhm/ohj1ht
  • hietmaem/ohj1ht
  • skytasuz/skytta-harjoitustyo-ohj-1-kevat
  • ylonmami/ohj1ht
  • rojunatu/ohj1ht
  • niemkeys/ohj1ht
  • korhoajx/ohj1ht
  • jjrsavol/ohj1ht
  • jowinoke/ohj1ht
  • hasemajo/ohj1ht
  • pinsofhe/ohj1ht
  • peltonla/ohj1ht
  • hamaot/ohj1ht
  • kettunko/ohj1ht
  • ansammal/ohj1ht
  • lxcevrhh/ohj1ht
  • niemhizz/ohj1ht
  • jumakemp/ohj1ht
  • vmahonen/ohj-1-ht-veeti-ahonen
  • mamahank/ohj1ht
  • ajehepol/ohj1ht
  • sisverve/ohj1ht
  • samapeke/ohj1ht
  • mejniemi/ohj-1-peli
  • janjuhni/ohj1ht
  • poyhontj/ohj1ht
  • valimasj/orginal-matopeli
  • adaoliro/ohj1ht
  • ejlahti/ohj1ht
  • iileskys/ohj1ht
  • juuariju/ohj-1-ht
  • eetuoril/ohj1ht
  • ebkaariv/ohj1ht
  • mnarhi/ohj1ht
  • peltsaxs/ohj1ht
  • tkoivisx/ohj1ht
  • eovvaris/ohj-1-ht-1
  • heilauma/ohj1ht
  • mmuhonen/ohj1ht
  • leevilha/ohj1ht
  • jurvidan/ohj1ht
  • iuteitti/ilonan-harjoitustyo
  • sinkkoja/ohj1ht
  • koivuaam/ohj1ht
  • jimsaixv/salimake
  • ihalaiv/ohj1ht
  • sellmmv/projekti
  • mimatasi/ohj1ht
  • sakapusa/harkkatyo
  • annkerki/ohj1ht
  • sabevaha/ohjelmointi-1-kurssin-peli
  • alnelima/ohj1ht
  • kijoperk/ohj1ht
  • tlelakan/ohj1ht
  • ojtorppa/ohj1ht
  • sutinele/ohj1ht
  • mhjlauyy/ohj1ht
  • tidentou/ohj-1-ht
  • akpameka/ohj1ht
  • nielraut/ohj1ht
  • jomimati/ohj1ht
  • alopaate/ohj1ht
  • niptunwu/ohj1ht
  • lihiauka/ohj1ht
  • kekuvaja/ohj1ht
  • salolase/bossikasi
  • venipiil/ohj1ht
  • rantalvo/ohj1ht
  • joveheko/raekuuro
  • vivakork/ohj1ht
  • nikoskhy/ohj1ht
  • jermatkr/suunnitelmamdks
  • jaempelt/ohj1ht
  • jjhonkuu/ohj1ht
  • rautpmxt/ohj1ht
  • mmoraru/escape-from-hell
  • espakolh/ohj1ht
  • kaotkurj/ohj1ht
  • niemeiws/ohj-1-ht
  • sisavart/ohj1ht
  • sivejukl/ohj1ht
  • panjuhle/ohj1ht
  • rtaalikk/ohj1ht
  • hesalone/ohj1ht
  • topeliku/ohj1ht
  • konttijm/ohj1ht
  • llaung/ohj1ht
  • jsnikkin/ohj1ht
  • spicjrxz/ohj1ht
  • kiikriha/ohj1ht
  • juhyytin/ohj1ht
  • jajuruti/jajuruti
  • vejovile/ohj1ht
  • jjoensyu/ohj1ht
  • hjnirhax/ohj1ht
  • nobekail/ohj1ht
  • wendjkvt/ohj1ht
  • aapotska/platformer
  • lamminm/ohj1ht
  • garammtu/platformerpeli
  • apeshhhh/ohj1ht
  • tototuru/ohj1ht
  • tejupasa/ohj1ht
  • amelhadd/ohj1ht
  • heminyrh/ohj1ht
  • rehirvel/ohj1ht
  • ilfrjohe/ohj1ht
  • vkarppaz/scrape-poster
  • rikantos/ohj1ht
  • jenjulha/ohj1ht
  • miimatpa/ohj1ht
  • julsadka/ohj1ht
  • gozavoro/ohj1ht
  • viljanta/ohj1ht
  • kostamol/ohj1ht
  • ylivezu/ohj1ht
  • pjsydanm/ohj1ht
  • suvleean/ohj1ht
  • diivysei/ohjelmointi-1-harjoitustyo
  • tapiopp/ohj1ht
  • kkpyykko/ohj1ht
  • summanwe/ohj1ht
  • lpuraney/ohj1ht
  • serimaai/ohj1ht
  • tarkkael/ohj1ht
  • eljoholt/ohj1ht
  • olenkail/ohj1ht
  • alkarant/harjoitustyo
  • sajovann/ohj1ht
  • vivestma/ohj1ht
  • sodenrzt/ohj1ht
  • sssuonyy/ohj1ht
  • salmiene/ohj1ht
  • vepsanew/ohj1ht
  • aslimma/ohj1ht
  • vvimmone/ohjelmointi-1-harjoitustyo
  • hejohyde/ohjelmointi-1-harjoitustyo-hh
  • phjhaapa/ohj1ht
  • makyolaa/ohj1ht
  • mipaflin/harjoitustyo
  • juutijos/ohj1ht
  • kalini/ohj1ht
  • jaaronur/harjoitustyo
  • tie/ohj1/2025k/ohj1ht
  • teamakin/ohj1ht
  • jylhali/ohj1ht
  • ollilaas/ohj1ht
  • jkasper/ohj1ht
  • kimakiiv/ohj1ht
  • hevianes/ohj-1-ht-1
  • xwusxjid/harjoitustyo-ohj-1
  • miiseppa/ohj1ht
  • miolnauk/ohj1ht
  • karjulto/ohj1ht
  • leeaable/ohj1ht
  • emraiha/ohj1ht
  • idriemla/ohj1ht
  • mkpsoini/ohj1ht
  • lewejoen/ohj1ht
  • blanilad/ohj1ht
  • matusora/ohj1ht
  • olsonasu/ohj1ht
  • puustipa/ohj-1-reaktiopeli
  • moishe/ohj1ht
  • keleppal/ohj1ht
  • aiesmati/ohj1ht
  • misajuha/ohj1ht
  • aaelriih/ohj1ht
  • misokopo/ohj1ht
  • iblagode/ohj1ht
  • kaaelmke/ohj1ht
  • iihuuton/ohj-1-ht
  • elmapurs/ohj-1-peli
  • hankssxs/ohj1ht
  • aisoantt/ohj1ht
  • jjsaukks/ohj1ht
  • emmidaka/ohj1ht
  • lohisajo/ohj1ht
  • jlahdeww/ohj1ht
  • tepekyla/ohj1ht
  • alaxgroe/ohj1ht
  • mkrajazz/ohj1ht
  • hihehuis/ohj1ht
  • sasisiti/ohj1ht
  • tshalme/ohj1ht
  • eskrelry/ohj1ht
  • haleriak/ohj1ht
  • kerakoju/ohj1ht
  • elainnas/peli
  • sinsushi/ohj1ht
  • otemhann/ohj1ht
  • eepetaka/ohj1ht
  • ieepirzy/ohj-1-ht
  • onmahela/ohj1ht
  • jupakraa/ohj1ht
  • rajatota/ohj1ht
  • sasaable/ohj1ht
  • jupakraa/harjoitustyo-1
  • jahalmtv/ohj1ht
  • joalvihe/ohj1ht
  • joeehimm/ohj1ht
  • anvasavi/ohj1ht
  • mhmniskx/ohj1ht
  • rintalsa/ohj1ht
  • veetoivo/ohj1ht
  • rtmatilt/Swatteri
  • maukotos/blackjack
  • karppir/ohj1ht
  • tammtu/ohj1ht
389 results
Show changes
Commits on Source (15)
Showing
with 446 additions and 25 deletions
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/projectSettingsUpdater.xml
/contentModel.xml
/modules.xml
/.idea.NukkuMatti -harjoitustyö.iml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NukkuMatti -harjoitustyö", "NukkuMatti -harjoitustyö\NukkuMatti -harjoitustyö.csproj", "{1039CA95-7E69-4FCD-8CD2-CC33817F7978}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1039CA95-7E69-4FCD-8CD2-CC33817F7978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1039CA95-7E69-4FCD-8CD2-CC33817F7978}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1039CA95-7E69-4FCD-8CD2-CC33817F7978}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1039CA95-7E69-4FCD-8CD2-CC33817F7978}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
NukkuMatti -harjoitustyö/NukkuMatti -harjoitustyö/Content/taivas.jpeg

51.6 KiB

using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
namespace NukkuMatti__harjoitustyö;
/// @author eeron
/// @version 14.03.2025
/// <summary>
///
/// </summary>
public class NukkuMatti__harjoitustyö : PhysicsGame
{
public override void Begin()
{
// Kirjoita ohjelmakoodisi tähän
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Jypeli.NET" Version="11.*"/>
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*"/>
</ItemGroup>
<ItemGroup>
<None Update="Content\taivas.jpeg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\nukkumatti.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
using System;
using System.Collections.Generic;
using Jypeli;
/// <summary>
/// Eero Salmen tekemä tasohyppelypeli osana ohjelmointi 1 -kurssia. Pelin nimi on NukkuMatti.
/// Pelaajan tehtävänä on kuljettaa NukkuMattia tasolta toiselle, tippumatta alas.
/// </summary>
/// <remarks>
/// @author Eero Salmi
/// @version 1
/// </remarks>
public class Tasohyppely : PhysicsGame
{
// Muutama vakio arvo määritelty pelin mekaniikalle, jotta ne on helpommin hallittavissa samassa paikassa
private const double GravityStrength = -800;
private const double HyppyVoima = 1100;
private const double TasoLeveys = 100;
private const double TasoKorkeus = 10;
private const double PelaajaWidth = 100;
private const double PelaajaHeight = 100;
private const double AlkuperainenHyppyNopeus = 1000;
private const double TasoPoistoMarginaali = 200;
private const double StartingHeight = -20;
/// <summary>
/// Pelaaja-olio, jota käyttäjä ohjaa.
/// </summary>
private PhysicsObject pelaaja;
/// <summary>
/// Indikoidaan, onko peli käynnissä.
/// </summary>
private bool peliKaynnissa = true;
/// <summary>
/// Taustakuva, jota käytetään pelin visuaalisena taustana.
/// </summary>
private GameObject taustakuva;
/// <summary>
/// Näyttää game over -viestin pelin päättyessä.
/// </summary>
private Label gameOverTeksti;
/// <summary>
/// Näyttää pistemäärän pelin aikana.
/// </summary>
private Label scoreLabel;
/// <summary>
/// Pistemäärä, joka päivitetään pelaajan edistymisen mukaan.
/// </summary>
private int score;
/// <summary>
/// Lista kaikista peliin lisätyistä taso-olioista. Listalla seurataan ja poistetaan turhiksi muodostuneet tasot.
/// </summary>
private List<PhysicsObject> tasot = new List<PhysicsObject>();
/// <summary>
/// Käynnistetään pääohjelma.
/// </summary>
public override void Begin()
{
// Asetetaan painovoima
Gravity = new Vector(0, GravityStrength);
// Luodaan kentän elementit
LuoKentta();
LisaaOhjaimet();
LuoGameOverTeksti();
LuoPistelabel();
// Ajastin sille, kuinka usein uusia tasoja ilmestyy pelikenttään
Timer tasoAjastin = new Timer();
tasoAjastin.Interval = 0.8;
tasoAjastin.Timeout += LuoTaso;
tasoAjastin.Start();
// Hyppynopeus
pelaaja.Velocity = new Vector(0, AlkuperainenHyppyNopeus);
}
/// <summary>
/// Luodaan kenttä ja asetetaan pelaajan ominaisuudet.
/// Luodaan aloitustaso, laitetaan kamera seuraamaan pelaajaa ja asetetaan törmäysominaisuus.
/// </summary>
private void LuoKentta()
{
LuoTausta();
LuoPelaaja();
// Asetetaan pelaajan ominaisuudet ja lisätään kentälle
pelaaja.Position = new Vector(0, StartingHeight);
pelaaja.CanRotate = false;
pelaaja.Restitution = 0;
Add(pelaaja);
// Luodaan aloitustaso
PhysicsObject aloitusTaso = PhysicsObject.CreateStaticObject(200, TasoKorkeus);
aloitusTaso.Position = new Vector(0, -70);
aloitusTaso.Color = Color.White;
aloitusTaso.Tag = "taso";
Add(aloitusTaso);
// Laitetaan kamera seuraamaan pelaajaa
Camera.Follow(pelaaja);
// Lisätään törmäysominaisuus
AddCollisionHandler(pelaaja, "taso", OsuiTasoon);
// Luodaan muutama aloitustaso
for (int i = 0; i < 4; i++)
LuoTaso();
}
/// <summary>
/// Määritetään pelin tausta.
/// </summary>
private void LuoTausta()
{
// Lisätään taustakuva ja sijoitetaan se taustalle
taustakuva = new GameObject(Level.Width * 2, Level.Height * 2);
taustakuva.Image = LoadImage("taivas.jpeg");
taustakuva.Position = Camera.Position;
Add(taustakuva, -1);
}
/// <summary>
/// Luodaan ja asetetaan pistenäyttö peliruudulle.
/// </summary>
private void LuoPistelabel()
{
scoreLabel = new Label("Pisteet: 0");
scoreLabel.TextColor = Color.Red;
scoreLabel.Font = Font.Default;
scoreLabel.Position = new Vector(Level.Left + 100, Level.Top - 50);
Add(scoreLabel);
}
/// <summary>
/// Luodaan peliin Game over -teksti.
/// </summary>
private void LuoGameOverTeksti()
{
// Asetetaan pelin päättymis teksti
gameOverTeksti = new Label("HÄVISIT PELIN");
gameOverTeksti.TextColor = Color.Red;
gameOverTeksti.Font = Font.DefaultBold;
gameOverTeksti.Position = new Vector(0, 100);
gameOverTeksti.IsVisible = false;
Add(gameOverTeksti);
}
/// <summary>
/// Luodaan pelaaja itse tekemän kuvan avulla.
/// </summary>
private void LuoPelaaja()
{
// Luodaan hahmo/pelaaja
pelaaja = new PhysicsObject(PelaajaWidth, PelaajaHeight);
pelaaja.Image = LoadImage("nukkumatti.png");
pelaaja.Restitution = 0;
}
/// <summary>
/// Asetetaan tasoja ilmestymään sattumanvaraisesti pelikentälle.
/// Määritellään niiden koko ja väri. Hyödynnetään silmukkaa tasojen luonnissa.
/// </summary>
private void LuoTaso()
{
// Luodaan tasoja
double x = RandomGen.NextDouble(Level.Left + 100, Level.Right - 100);
double y = Camera.ScreenToWorld(new Vector(0, Screen.Height / 2)).Y + RandomGen.NextDouble(10, 20);
PhysicsObject taso = PhysicsObject.CreateStaticObject(TasoLeveys, TasoKorkeus);
taso.Position = new Vector(x, y);
taso.Color = Color.White;
taso.Tag = "taso";
Add(taso);
tasot.Add(taso);
}
/// <summary>
/// Asetetaan komennot näppäimistöltä.
/// </summary>
private void LisaaOhjaimet()
{
Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, null, -400.0);
Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, null, 400.0);
Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
}
/// <summary>
/// Asetetaan pelaajan vaakasuuntainen liike.
/// </summary>
/// <param name="nopeus">Vastaa pelaajan liikkumisen vaakasuuntaista nopeutta. Negatiivinen arvo siirtää pelaajaa vasemmalle ja positiivinen oikealle.</param>
private void Liikuta(double nopeus)
{
if (peliKaynnissa)
pelaaja.Velocity = new Vector(nopeus, pelaaja.Velocity.Y);
}
/// <summary>
/// Käsitellään törmäystilanne pelaajan ja tason välillä.
/// </summary>
/// <param name="törmääväPelaaja">Hahmo, jota ohjataan ja jonka törmäystä tarkastellaan.</param>
/// <param name="taso">Objekti, jota käytetään ylöspäin liikkumisen mahdollistamiseksi törmäystilanteessa.</param>
private void OsuiTasoon(PhysicsObject törmääväPelaaja, PhysicsObject taso)
{
// Törmäys pelaajan ja tason välillä
if (this.pelaaja.Velocity.Y > 0 && this.pelaaja.Position.Y < taso.Top)
{
this.pelaaja.IgnoresCollisionResponse = true;
return;
}
if (this.pelaaja.Velocity.Y <= 0 && Math.Abs(this.pelaaja.Bottom - taso.Top) < 5)
{
this.pelaaja.Y = taso.Top + this.pelaaja.Height / 2;
this.pelaaja.Velocity = new Vector(this.pelaaja.Velocity.X, HyppyVoima);
}
this.pelaaja.IgnoresCollisionResponse = false;
}
/// <summary>
/// Määritellään marginaali, jolloin tasot poistuvat.
/// </summary>
private void PoistaPoistuvatTasot()
{
// Turhat tasot poistetaan
for (int i = tasot.Count - 1; i >= 0; i--)
{
if (tasot[i].Y < Camera.ScreenToWorld(new Vector(0, -Screen.Height / 2)).Y - TasoPoistoMarginaali)
{
tasot[i].Destroy();
tasot.RemoveAt(i);
}
}
}
/// <summary>
/// Laskee pistemäärän pelaajan korkeuden perusteella.
/// Laskenta: jokaista 100 yksikköä pelaajan Y-koordinaatista kohden lisätään 1 piste.
/// </summary>
/// <param name="pelaajaY">Pelaajan Y-koordinaatti.</param>
/// <returns>Palauttaa laskettuna pistemäärän.</returns>
private int LaskePisteet(double pelaajaY)
{
return (int)(pelaajaY / 100);
}
/// <summary>
/// Lopetetaan peli asettamalla peliKaynnissa-arvo epätodeksi, näytetään game over -teksti ja
/// ajastetaan pelin lopetus kolmen sekunnin kuluttua.
/// </summary>
private void LopetaPeli()
{
if (peliKaynnissa)
{
peliKaynnissa = false;
gameOverTeksti.IsVisible = true;
Timer.SingleShot(3.0, Exit);
}
}
/// <summary>
/// Päivitetään pelin tila. Asetetaan taustakuvan sijainti kameran liikkeen mukaisesti, poistetaan turhat tasot,
/// lasketaan pistemäärä pelaajan Y-koordinaatin perusteella ja asetetaan pisteteksti. Tarkistetaan,
/// onko pelin lopetusehto täytetty.
/// </summary>
/// <param name="time">Ajan hetkitetiedot, joita käytetään pelin tilan päivitykseen.</param>
protected override void Update(Time time)
{
base.Update(time);
// Taustakuva päivittyy kameran liikkeen mukaisesti
taustakuva.Position = taustakuva.Position + (Camera.Position - taustakuva.Position) * 0.1;
PoistaPoistuvatTasot();
// Lasketaan pisteet ja päivitetään pistenäyttö
score = LaskePisteet(pelaaja.Y);
scoreLabel.Text = "Pisteet: " + score;
if (pelaaja.Y < Level.Bottom - 100)
LopetaPeli();
}
}
/// <summary>
/// Käynnistetään ohjelma.
/// </summary>
/// <remarks>
/// @author Eero Salmi
/// @version 1
/// </remarks>
public class Program
{
public static void Main()
{
using (var peli = new Tasohyppely())
peli.Run();
}
}
NukkuMatti -harjoitustyö/nukkumatti.png

246 KiB

NukkuMatti -harjoitustyö/taivas.jpeg

51.6 KiB

suunnitelma/Hahmotelma.jpg

26 KiB

suunnitelma/Nukkumatti.jpg

67 KiB

suunnitelma/esimerkkikuva.png

9.92 KiB

suunnitelma/nukkumatti2.jpg

26 KiB

# Harjoitustyön suunnitelma # Harjoitustyön suunnitelma
(Täydennä oman pelisi tiedot tähän tiedostoon muokkaamalla
tiedostoa tekstieditorissa. Käytä [Markdown-syntaksia](https://about.gitlab.com/handbook/markdown-guide/).
Poista sitten *kaikki* suluilla merkityt ohjetekstit.)
## Tietoja Tietoja
Tekijä: (Etunimi Sukunimi) Tekijä: Eero Salmi
Työ git-varaston osoite: <https://gitlab.jyu.fi/anlakane/ohj1ht> (*Korvaa* tämä osoite oman git-varastosi osoitteella) Työ git-varaston osoite: https://gitlab.jyu.fi/salmiene/ohj1ht
Pelin nimi: (Nimi) Pelin nimi: Nukkumatti
Pelialusta: Windows/macOS/Linux (Valitse alusta) Pelialusta: Windows
Pelaajien lukumäärä: 1/2/3/4 (Valitse pelaajien lukumäärä) Pelaajien lukumäärä: 1
## Pelin tarina Pelin tarina:
(Pelin tarina.) Nukkumatti oli perinteisellä nukutuskierroksellaan, mutta hieroikin huolimattomasti
hiekkaisia käsiä silmiinsä ja nukahti itsekin syvään uneen.
Nyt hän harhailee unissaan ja pomppii tasolta toiselle.
Auta Nukkumattia kulkemaan ylöspäin, jotta hän ei putoa!
## Pelin idea ja tavoitteet
(Pelin idea ja tavoitteet.) Pelin idea ja tavoitteet:
Pelin ideana on ohjata Nukkumattia hyppimään tasolta toiselle, jotta hän etenee ylöspäin pelikentällä eikä putoa maahan.
Pisteitä saa myöhemmin määritellyn aikavälein. Hahmoa liikutellaan sivuittain, ylöspäin oleva liike on vakio. Hahmo ei osu tasoihin
mennessään ylöspäin. Hahmon nopeus kiihtyy mitä pidemmälle peli etenee.
## Hahmotelma pelistä
(Kun olet lisännyt suunnitelmakuvan tähän hakemistoon, linkitä se tähän alle. Alla on esimerkkikuvan linkitys.) ## Hahmotelma pelistä
![Esimerkkikuva](esimerkkikuva.png "Esimerkkikuva") ![Hahmon kuva](Nukkumatti.jpg "Hahmon kuva")
![Hahmotelma](Hahmotelma.jpg "Hahmotelma")
![Hahmo](nukkumatti2.jpg. "Hahmo")
## Toteutuksen suunnitelma ## Toteutuksen suunnitelma
Helmikuu Helmikuu
- (Tavoite 1) - Saa pelaaja liikkeelle siten, että sitä voi liikuttaa sivuille
- (Tavoite 2) - Painovoima: pelaaja tippuu alas, jos se ei osu tasolle
- (Tavoite 3) -Luo yksinkertainen pelikenttä ja tasot
Maaliskuu Maaliskuu
- (Tavoite 1) - Pistelaskuri
- (Tavoite 2) - Pelin päättyminen, mitä tapahtuu?
- (Tavoite 3) - Tiettyjen tasojen saavuttaminen, muuttuuko jokin? Esim. väriteema
Jos aikaa jää Jos aikaa jää
- (Tavoite 1) - Hio yksityiskohtia
- (Tavoite 2) - Ääniefektejä, visuaalisia hienouksia
- (Tavoite 3) \ No newline at end of file