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
  • 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
388 results
Show changes
Commits on Source (6)
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/modules.xml
/.idea.Tankkipeli.iml
/projectSettingsUpdater.xml
/contentModel.xml
# 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="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>
\ No newline at end of file
<?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}") = "Tankkipeli", "Tankkipeli\Tankkipeli.csproj", "{4D3D3729-B7D1-44CE-AA7F-FF984861C34B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4D3D3729-B7D1-44CE-AA7F-FF984861C34B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D3D3729-B7D1-44CE-AA7F-FF984861C34B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D3D3729-B7D1-44CE-AA7F-FF984861C34B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D3D3729-B7D1-44CE-AA7F-FF984861C34B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
#region Using Statements
using System;
using System.Collections.Generic;
using System.Linq;
#endregion
namespace Tankkipeli
{
/// <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 Tankkipeli();
game.Run();
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using Jypeli;
namespace Tankkipeli;
/// @author sebas
/// @version 08.03.2025
/// <summary>
///
/// </summary>
public class Tankkipeli : PhysicsGame
{
private Vector nopeusYlos = new Vector(0, 200);
private Vector nopeusAlas = new Vector(0, -200);
private Vector nopeusOikea = new Vector(200, 0);
private Vector nopeusVasen = new Vector(-200, 0);
private int ammusseinatormauslkm;
private int ammuspelaaja1tormauslkm;
private int ammuspelaaja2tormauslkm;
private int pelaaja1Voitot;
private int pelaaja2Voitot;
private int pelaaja1Ammukset;
private int pelaaja2Ammukset;
private const int maxammukset = 5;
private PhysicsObject pelaaja1;
private PhysicsObject pelaaja2;
private PhysicsObject seina;
/// <summary>
/// Aloittaa pelin
/// </summary>
public override void Begin()
{
// Kirjoita ohjelmakoodisi tähän
LuoKentta();
pelaaja1 = LuoPelaaja(400, Color.Blue, "pelaaja1tankki");
pelaaja2 = LuoPelaaja(-400, Color.Red, "pelaaja2tankki");
AsetaOhjaimet();
}
/// <summary>
/// Luo kenttään ulkoreunat, ja valitsee listasta satunnaiset paikat kentän
/// sisäisille seinille.
/// </summary>
private void LuoKentta()
{
int seinanleveys = 25;
int seinanpituus = 1100;
// Tehdään kentäään reunat
LuoSeina(seinanleveys, seinanpituus, Level.Left-25, 0, Color.Black);
LuoSeina(seinanleveys, seinanpituus, Level.Right+25, 0, Color.Black);
LuoSeina(seinanpituus, seinanleveys, 0, Level.Top, Color.Black);
LuoSeina(seinanpituus, seinanleveys, 0, Level.Bottom, Color.Black);
// Luodaan kenttän sisälle satunnaiset seinät
// Aluksi teen listan mahdollisista paikoista seinille, josta arvotaan 3 vaakasuoraa
// seinää, 2 pystysuoraa seinää ja kaksi "neliötä"
Random luku = new Random();
List<Vector> mahdollisetPaikat = new List<Vector>
{
new (0, 0),
new (0, -300),
new (0, 300),
new (100, 100),
new (200, 200),
new (-200, 0),
new (-200, -200),
new (-100, -100),
new (-300, -300),
new (300, 300),
new (-300, 300)
};
int esteenpituus = 250;
// Valitaan kolme vaakasuoraa satunnaista seinää
for (int i = 0; i < 3; i++)
{
int valittupaikka = luku.Next(mahdollisetPaikat.Count);
Vector paikka = mahdollisetPaikat[valittupaikka];
mahdollisetPaikat.RemoveAt(valittupaikka); // Poistetaan valittu paikka
LuoSeina(esteenpituus, seinanleveys, paikka.X, paikka.Y, Color.Black);
}
// Valitaan 2 pystsuoraa seinää
for (int i = 0; i < 2; i++)
{
int valittupaikka = luku.Next(mahdollisetPaikat.Count);
Vector paikka = mahdollisetPaikat[valittupaikka];
mahdollisetPaikat.RemoveAt(valittupaikka); // Poistetaan valittu paikka
LuoSeina(seinanleveys, esteenpituus, paikka.X, paikka.Y, Color.Black);
}
int nelionreuna = 100;
// Valitaan vielä 2 "taloa" eli neliötä satunnaisiin paikkoihin
for (int i = 0; i < 2; i++)
{
int valittupaikka = luku.Next(mahdollisetPaikat.Count);
Vector paikka = mahdollisetPaikat[valittupaikka];
mahdollisetPaikat.RemoveAt(valittupaikka); // Poistetaan valittu paikka
LuoSeina(nelionreuna, nelionreuna, paikka.X, paikka.Y, Color.Brown);
}
Camera.ZoomToLevel();
}
/// <summary>
/// Luo sekä palauttaa pelaajan peliin.
/// </summary>
/// <param name="x"> Pelaajan x-kordinaatti kentällä </param>
/// <param name="vari"> Pelaajan väri </param>
/// <param name="kuva"> Pelaajan kuva, joka ladataan pelaajalle </param>
/// <returns> palauttaa pelaajan, joka tallenetaan fysiikka-olioon</returns>
private PhysicsObject LuoPelaaja(double x, Color vari, string kuva)
{
PhysicsObject pelaaja = new PhysicsObject(50, 50);
pelaaja.Color = vari;
pelaaja.X = x;
pelaaja.Shape = Shape.Rectangle;
pelaaja.CanRotate = false;
pelaaja.Image = LoadImage(kuva);
pelaaja.Tag = "pelaaja";
Add(pelaaja);
return pelaaja;
}
/// <summary>
/// Asettaa pelaajalle nopeuden, jota hyödynnetään liikkumisessa
/// </summary>
/// <param name="pelaaja"> Kumpi pelaaja on kyseessä </param>
/// <param name="suunta"> mihin suuntaan halutaan liikkua </param>
private void AsetaNopeus(PhysicsObject pelaaja, Vector suunta)
{
pelaaja.Velocity = suunta;
}
/// <summary>
/// Ottaa vastaan koon, sijainnin ja värin ja tekee niiden perusteella peliin seinän
/// tai muun objektin
/// </summary>
/// <param name="leveys"> seinan leveys </param>
/// <param name="korkeus"> seinän korkeus </param>
/// <param name="x"> seinan x-kordinaatti </param>
/// <param name="y"> seinan y-koordinatti</param>
/// <param name="vari"> seinan väri </param>
private void LuoSeina(double leveys, double korkeus, double x, double y, Color vari)
{
seina = new PhysicsObject(leveys, korkeus);
seina.Shape = Shape.Rectangle;
seina.Color = vari;
seina.Restitution = 0.85;
seina.MakeStatic();
seina.X = x;
seina.Y = y;
seina.Tag = "seina";
Add(seina);
}
/// <summary>
/// Tekee ammuksen peliin ja lähettää sen liikkeelle, katsoo myös onko pelaaja ampumia
/// ammuksia enemmän kuin sallittu määrä (maxammukset), jos on niin pelaaja ei pysty
/// ampumaan.
/// </summary>
/// <param name="pelaaja"> Kumpi pelaaja ampuu </param>
public void Ammu(PhysicsObject pelaaja)
{
// Tehdään ammukset peliin
// Jos pelaajalla on enemmän kuin maxammukset ammuksia kentällä, estetään
// ampuminen
if (pelaaja == pelaaja1 && pelaaja1Ammukset >= maxammukset) return;
if (pelaaja == pelaaja2 && pelaaja2Ammukset >= maxammukset) return;
// Luodaan ammukset
PhysicsObject ammus = new PhysicsObject(10, 10);
ammus.Shape = Shape.Circle;
ammus.X = pelaaja.X;
ammus.Y = pelaaja.Y;
ammus.Color = Color.Brown;
ammus.Restitution = 1;
// Erotetaan eri pelaajien ammukset toisistaan
if (pelaaja == pelaaja1)
{
ammus.Tag = "pelaaja1ammus";
pelaaja1Ammukset++;
}
if (pelaaja == pelaaja2)
{
ammus.Tag = "pelaaja2ammus";
pelaaja2Ammukset++;
}
Add(ammus);
// Laitetaan ammukset liikkeelle
Vector ammusSuunta = Vector.FromAngle(pelaaja.Angle);
ammus.Velocity = ammusSuunta * 500;
// Kun toisen pelaajan ammus osuu toiseen pelaajan 3 kertaa, toinen pelaaja tuhoutuu
AddCollisionHandler(ammus, pelaaja1, AmmusOsuuPelaajaan);
AddCollisionHandler(ammus, pelaaja2, AmmusOsuuPelaajaan);
// Kun ammus törmää kolme kertaa seinään, se tuhoutuu
AddCollisionHandler(ammus, "seina", AmmusOsuuSeinaan);
}
/// <summary>
/// Jos ammus osuu pelaajaan, lisätään pelaajalle osuma ja jos osumia on 3 niin pelaaja
/// tuhotaan ja toinen pelaaja voittaa. Kun ammus osuu pelaajaan, niin vähennetään
/// ammuslaskureita, jotta molemmilla on silti saman verran maksimiammuksia.
/// </summary>
/// <param name="ammus"> Kumman pelaajan ammus osuu </param>
/// <param name="pelaaja"> Kumpaan pelaajaan ammus osuu </param>
private void AmmusOsuuPelaajaan(PhysicsObject ammus, PhysicsObject pelaaja)
{
// Jos vastustajan ammus osuu pelaajaan, merkataan että pelaajaan on osuttu, ja
// vähennetään ammuslaskureita.
if (pelaaja == pelaaja1)
{
if (ammus.Tag.ToString() == "pelaaja2ammus")
{
// merkataan, että pelaajaan on osuttu
ammuspelaaja1tormauslkm++;
if (ammus.Tag.ToString() == "pelaaja1ammus") pelaaja1Ammukset--;
if (ammus.Tag.ToString() == "pelaaja2ammus") pelaaja2Ammukset--;
ammus.Destroy();
// Jos tämä on kolmas osuma pelaajaan, Lopetetaan peli ja lisätään yksi voitto
// pelaajalle toiselle pelaajalle
if (ammuspelaaja1tormauslkm == 3)
{
pelaaja.Destroy();
pelaaja2Voitot++;
PeliLoppuu("Pelaaja 2"); // Pelaaja 2 voittaa
}
}
}
// Sama kuin yllä, mutta pelaajalle 2
if (pelaaja == pelaaja2)
{
if (ammus.Tag == "pelaaja1ammus")
{
ammuspelaaja2tormauslkm++;
if (ammus.Tag == "pelaaja1ammus") pelaaja1Ammukset--;
if (ammus.Tag == "pelaaja2ammus") pelaaja2Ammukset--;
ammus.Destroy();
if (ammuspelaaja2tormauslkm == 3)
{
pelaaja.Destroy();
pelaaja1Voitot++;
PeliLoppuu("Pelaaja 1"); // Pelaaja 1 voittaa
}
}
}
}
/// <summary>
/// Kun ammus osuu seinään kolme kertaa, se tuhotaan ja vähennetään taas ammuslaskureita.
/// Tuhoamisen jälkeen resetoidaan ammuksen törmäyslaskuri.
/// </summary>
/// <param name="ammus"> kumman pelaajan ommus osuu seinään </param>
/// <param name="seinä"> mihin ammus osuu </param>
private void AmmusOsuuSeinaan(PhysicsObject ammus, PhysicsObject seinä)
{
ammusseinatormauslkm++;
if (ammusseinatormauslkm >= 3)
{
ammus.Destroy();
if (ammus.Tag.ToString() == "pelaaja1ammus") pelaaja1Ammukset--;
if (ammus.Tag.ToString() == "pelaaja2ammus") pelaaja2Ammukset--;
ammusseinatormauslkm = 0;
}
}
/// <summary>
/// Kun toinen pelaajista on tuhottu, tehdään voittoteksti, päivitetään voittolaskuria
/// ja tehdään "Pelaa Uudestaan" nappi, joka kutsuu aliohjelmaa AloitaAlusta
/// </summary>
/// <param name="voittaja">kuka voittaa</param>
private void PeliLoppuu(string voittaja)
{
Label voittoteksti = new Label($"{voittaja} voittaa!");
voittoteksti.Position = new Vector(0, 100);
voittoteksti.Color = Color.White;
Add(voittoteksti);
Label voittoLaskuri = new Label($"{pelaaja2Voitot} | {pelaaja1Voitot}");
voittoLaskuri.Position = new Vector(0, 0);
voittoLaskuri.Color = Color.White;
Add(voittoLaskuri);
PushButton pelaaUudestaan = new PushButton(200, 50, "Pelaa Uudestaan");
pelaaUudestaan.Position = new Vector(0, -50);
pelaaUudestaan.Clicked += AloitaAlusta;
Add(pelaaUudestaan);
}
// Aliohjelma, jota kutsutaan, kun halutaan aloittaa peli alusta
/// <summary>
/// Kun peli halutaan aloittaa alusta, nollataan kaikki laskurit ja tyhjennetään
/// kentästä kaikki fysiikkaoliot ja aloitetaan peli alusta.
/// </summary>
private void AloitaAlusta()
{
// Nollataan kaikki laskurit
ammusseinatormauslkm = 0;
ammuspelaaja1tormauslkm = 0;
ammuspelaaja2tormauslkm = 0;
pelaaja1Ammukset = 0;
pelaaja2Ammukset = 0;
ClearAll(); // Tyhjennetään kaikki objektit
Begin(); // Käynnistetään peli alusta
}
/// <summary>
/// Asetetaan peliin ohjaimet ja napit
/// </summary>
private void AsetaOhjaimet()
{
// Pelaaja 1:n tankin ohjaimet
Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Pelaaja 1 Liiku: Oikealle", pelaaja1, nopeusOikea);
Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero);
Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku Vasemmalle", pelaaja1, nopeusVasen);
Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero);
// **Pelaaja 1 ohjaimet**
Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku eteenpäin", pelaaja1, nopeusYlos);
Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero);
Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku taaksepäin", pelaaja1, nopeusAlas);
Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero);
// Käännetään pelaajan kuvaa samalla kun pelaaja liikkuu
Keyboard.Listen(Key.Left, ButtonState.Pressed, () => { pelaaja1.Angle = Angle.FromDegrees(180); }, null);
Keyboard.Listen(Key.Right, ButtonState.Pressed, () => { pelaaja1.Angle = Angle.Zero; }, null);
Keyboard.Listen(Key.Up, ButtonState.Pressed, () => { pelaaja1.Angle = Angle.FromDegrees(90); }, null);
Keyboard.Listen(Key.Down, ButtonState.Pressed, () => { pelaaja1.Angle = Angle.FromDegrees(270); }, null);
// Ampuminen molemmille pelaajille
Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Pelaaja 1: Ammu", pelaaja1);
Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, "Pelaaja 2: Ammu", pelaaja2);
// Pelaaja 2
Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liiku Oikealle", pelaaja2, nopeusOikea);
Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, pelaaja2, Vector.Zero);
Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liiku Vasemmalle", pelaaja2, nopeusVasen);
Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, pelaaja2, Vector.Zero);
Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liiku eteenpäin", pelaaja2, nopeusYlos);
Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, pelaaja2, Vector.Zero);
Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liiku taaksepäin", pelaaja2, nopeusAlas);
Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, pelaaja2, Vector.Zero);
Keyboard.Listen(Key.A, ButtonState.Pressed, () => { pelaaja2.Angle = Angle.FromDegrees(180); }, null);
Keyboard.Listen(Key.D, ButtonState.Pressed, () => { pelaaja2.Angle = Angle.Zero; }, null);
Keyboard.Listen(Key.W, ButtonState.Pressed, () => { pelaaja2.Angle = Angle.FromDegrees(90); }, null);
Keyboard.Listen(Key.S, ButtonState.Pressed, () => { pelaaja2.Angle = Angle.FromDegrees(270); }, null);
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
}
}
<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 Remove="pelaaja1tankki.png" />
<Content Include="pelaaja1tankki.png" />
</ItemGroup>
</Project>
Tankkipeli/Tankkipeli/pelaaja1tankki.png

1.89 KiB

# 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.)
Aion tehdä pelin, jossa pelaaja kontrolloi yhtä "tankkia" ja ampuu sillä pieniä panoksia, joilla koittaa tuhota viholliset. Panokset kimpoisivat seinistä muutaman kerran, jolloin pelaajan pitää olla varovainen milloin itse ampuu, jotta ammus ei kimpoa takaisin itseensä. Suunnitelmana on myös saada viholliset ampumaan pelaajaa kohti.
## Tietoja
Tekijä: (Etunimi Sukunimi)
Tekijä: Sebastian Suonpää
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/sssuonyy/ohj1ht>
Pelin nimi: (Nimi)
Pelin nimi: Kimpoilevat tankit
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.)
Pelaaja on jotenkin päätynyt ohjaamaan tankkia ja hänen tavoitteensa on selvitä hengissä.
## Pelin idea ja tavoitteet
(Pelin idea ja tavoitteet.)
Pelin idea on kontrolloida tankkia ja ampua sillä viholliset, jotka koittavat myös ampua pelaajaa ammuksilla, jotka kimpoavat seinistä. Pelin tavoitteena on tuhota kaikki viholliset eli selviytyä.
## Hahmotelma pelistä
(Kun olet lisännyt suunnitelmakuvan tähän hakemistoon, linkitä se tähän alle. Alla on esimerkkikuvan linkitys.)
![Esimerkkikuva](esimerkkikuva.png "Esimerkkikuva")
![Hahmotelma pelistä](suunnitelma.png "Hahmotelma pelistä")
## Toteutuksen suunnitelma
Helmikuu
- (Tavoite 1)
- (Tavoite 2)
- (Tavoite 3)
- Tehdä kenttä
- Luoda pelaaja ja saada pelaaja ampumaan
- Saa ammukset kimpoamaan seinistä ja katoamaan x kimpoamisen määrän jälkeen
Maaliskuu
- (Tavoite 1)
- (Tavoite 2)
- (Tavoite 3)
- Saada vihollinen ampumaan pelaaja kohti
- Saada vihollinen liikkumaan pelaajaa kohti
- Tehdä peliin lisää kenttiä
Jos aikaa jää
- (Tavoite 1)
- (Tavoite 2)
- (Tavoite 3)
- Tehdä pelistä käyttäjäystävällinen
- Tee peliin pistelaskuri
- "loputon" muoto, missä jos yksi vihollinen kuolee, tulee 2 tilalle
suunnitelma/suunnitelma.png

20.1 KiB