Skip to content
Snippets Groups Projects
Commit 869253b6 authored by Antti-Jussi Lakanen's avatar Antti-Jussi Lakanen :field_hockey:
Browse files

Demo 5

parent ec59ad1c
No related branches found
No related tags found
No related merge requests found
Showing
with 472 additions and 0 deletions
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/contentModel.xml
/modules.xml
/projectSettingsUpdater.xml
/.idea.Demo05.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="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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
using System;
/// @author Antti-Jussi Lakanen
/// @version 2025
///
/// <summary>
/// Ohjelmassa lasketaan kertotauluja, harjoitellaan
/// silmukoiden käyttöä.
/// </summary>
public class Kertotaulut
{
/// <summary>
/// Aliohjelmakutsut.
/// </summary>
public static void Main()
{
TulostaKertotauluFor(3);
Console.WriteLine("-------------------");
TulostaKertotauluWhile(3, 5);
Console.WriteLine("-------------------");
TulostaKertotauluDoWhile(6, 0);
}
/// <summary>
/// Tulostetaan annetun luvun kertotaulu kokonaisluvuilla 1..10.
/// </summary>
/// <param name="kerrottava">Minkä luvun kertotaulu tulostetaan.</param>
public static void TulostaKertotauluFor(int kerrottava)
{
// Tämä yksi niitä harvoja tilanteita, kun silmukka aloitetaan jostain muusta kuin
// indeksistä nolla. Miksikö? Kokeilepa tulostaa alla oleva "i+1":n arvoilla.
for (int i = 1; i <= 10; i++)
{
Console.WriteLine($"{i,2} * {kerrottava} = {i * kerrottava,2}");
// TAI
// Console.WriteLine("{0,2} * {1} = {2,3}", i, kerrottava, i * kerrottava);
// TAI
// Console.WriteLine(i + " * " + kerrottava + " = " + i * kerrottava);
}
// for (int i = 0; i < 10; i++)
// {
// Console.WriteLine((i + 1) + " * " + kerrottava + " = " + (i + 1) * kerrottava);
// }
}
/// <summary>
/// Tulostetaan annetun luvun kertotaulu
/// alkaen ykkosesta ja paattyen annettuun lukuun.
/// </summary>
/// <param name="kerrottava">Minkä luvun kertotaulu tulostetaan.</param>
/// <param name="mihinSaakka">Mihin saakka kerrotaan annettua lukua.</param>
public static void TulostaKertotauluWhile(int kerrottava, int mihinSaakka)
{
int i = 1;
while (i <= mihinSaakka)
{
Console.WriteLine($"{i,2} * {kerrottava} = {i * kerrottava,2}");
i++;
}
}
/// <summary>
/// Tulostetaan annetun luvun kertotaulu kayttaen do-while -silmukkaa
/// alkaen ykkosesta ja paattyen annettuun lukuun.
/// </summary>
/// <param name="kerrottava">Minkä luvun kertotaulu tulostetaan.</param>
/// <param name="mihinSaakka">Mihin saakka kerrotaan annettua lukua.</param>
public static void TulostaKertotauluDoWhile(int kerrottava, int mihinSaakka)
{
// Tällaisen ehdon voisi tehdä mikäli do-while-silmukkarakennetta ei voisi jostain syystä muuttaa.
// Tämä EI ole suositeltava tapa!
if (mihinSaakka < 1) return;
int i = 1;
do
{
Console.WriteLine($"{i,2} * {kerrottava} = {i * kerrottava,2}");
i++;
} while (i <= mihinSaakka);
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
<RootNamespace>T4-MuuttuvaJono</RootNamespace>
</PropertyGroup>
</Project>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/// @author Antti-Jussi Lakanen
/// @version 2025
///
/// <summary>
/// Lisätään jonon alkuun ja loppuun
/// </summary>
public class MuuttuvaJono
{
/// <summary>
/// Lisätään jonon alkuun ja loppuun teksti
/// </summary>
public static void Main()
{
StringBuilder jono;
jono = new StringBuilder("kissa istuu");
LisaaAlkuunJaLoppuun(jono, "***");
Console.WriteLine("Jono on nyt " + jono); // tulostaa *** kissa istuu ***
}
/// <summary>
/// Lisätään jonon alkuun ja loppuun sama teksti
/// </summary>
/// <param name="jono">Mihin jonoo lisätään</param>
/// <param name="lisattava">mitä lisätään</param>
/// <example>
/// <pre name="test">
/// StringBuilder j1 = new StringBuilder("kissa istuu");
/// LisaaAlkuunJaLoppuun(j1,"***");
/// j1.ToString() === "*** kissa istuu ***";
/// StringBuilder j2 = new StringBuilder("123");
/// LisaaAlkuunJaLoppuun(j2,"XX");
/// j2.ToString() === "XX 123 XX";
/// StringBuilder j3 = new StringBuilder("");
/// LisaaAlkuunJaLoppuun(j3,"X");
/// j3.ToString() === "X X";
/// </pre>
/// </example>
public static void LisaaAlkuunJaLoppuun(StringBuilder jono, string lisattava)
{
jono.Insert(0, " ");
jono.Insert(0, lisattava);
jono.Append(" ");
jono.Append(lisattava);
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
<RootNamespace>B2-KirjaintenMuutos</RootNamespace>
</PropertyGroup>
</Project>
using System;
using System.Text;
/// @author Vesa Lappalainen, Antti-Jussi Lakanen
/// @version 2025
///
/// <summary>
/// Ohjelmassa kysytään käyttäjältä lause ja vaihdetaan
/// kirjaimia toisiksi.
/// </summary>
public class KirjaintenMuutos
{
/// <summary>
/// Pyydetään käyttäjältä lause ja kutsutaan aliohjelmaa,
/// joka muuttaa merkit. Lopuksi tulostetaan.
/// </summary>
/// <param name="args">Komentoriviparametrit (ei käytössä)</param>
public static void Main()
{
char mika = 's';
char miksi = 't';
Console.WriteLine(MuutaKirjaimet("Toistan mitä sanot, mutta en osaa sanoa kirjainta " + mika + "!", mika, miksi));
Console.Write("Anna lause >");
string lause = Console.ReadLine();
string muutettulause = MuutaKirjaimet(lause, mika, miksi);
Console.WriteLine(MuutaKirjaimet("Sanoit siis :", mika, miksi) + muutettulause);
Console.ReadKey();
}
/// <summary>
/// Aliohjelmassa korvataan annetun merkkijonon kaikki
/// pienet ja isot valitut (mika) kirjaimet kirjaimet vastaavilla
/// miksi-kirjaimilla.
/// </summary>
/// <param name="lause">Muutettava lause</param>
/// <param name="mika">Mikä kirjain muutetaan</param>
/// <param name="miksi">Miksi kirjaimeksi muutetaan</param>
/// <returns>Muutettu lause</returns>
/// <example>
/// <pre name="test">
/// MuutaKirjaimet("Ralliauto ajaa superkovaa.",'r','l') === "Lalliauto ajaa supelkovaa."
/// MuutaKirjaimet("Ralli-Kimi laulaa rokkia",'r','l') === "Lalli-Kimi laulaa lokkia"
/// MuutaKirjaimet("Kissa istuu puussa",'r','l') === "Kissa istuu puussa"
/// MuutaKirjaimet("Kissa istuu puussa",'S','t') === "Kitta ittuu puutta"
/// </pre>
/// </example>
public static string MuutaKirjaimet(string lause, char mika, char miksi)
{
StringBuilder uusilause = new("");
for (int i = 0; i < lause.Length; i++)
{
if (lause[i] == char.ToLower(mika)) uusilause.Append(char.ToLower(miksi));
else if (lause[i] == char.ToUpper(mika)) uusilause.Append(char.ToUpper(miksi));
else uusilause.Append(lause[i]);
}
return uusilause.ToString();
}
}
using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
/// @author Vesa Lappalainen, Antti-Jussi Lakanen
/// @version 2025
///
/// <summary>
/// Piirretään paljon palloja ja tönitään niitä.
/// Lisätty pistelaskuri ja lopetus 10 palloon.
/// </summary>
public class Pallot : PhysicsGame
{
private IntMeter pisteLaskuri;
/// <summary>
/// Luodaan ja lisätään ruudulle annetun kokoinen pallo
/// annettuun paikkaan.
/// </summary>
/// <param name="peli">Peli, johon neliö piirretään</param>
/// <param name="x">Kappaleen keskipisteen x-koordinaatti</param>
/// <param name="y">Kappaleen keskipisteen y-koordinaatti</param>
/// <param name="r">Pallon säde</param>
/// <param name="vari">Pallon väri</param>
public static PhysicsObject PiirraPallo(Game peli, double x, double y, double r, Color vari)
{
PhysicsObject kappale = new PhysicsObject(2 * r, 2 * r, Shape.Ellipse);
kappale.Mass = 0.1;
kappale.Position = new Vector(x, y);
kappale.Color = vari;
peli.Add(kappale);
return kappale;
}
/// <summary>
/// Pelin aloitus, reunat, zoomaus pllaojen luonti ja näppäinten kuuntelu
/// </summary>
public override void Begin()
{
Image[] kuvat = LoadImages("Baby", "Chell", "Cigur", "Igor", "Infant", "Jango", "Knive", "Leader", "Mum", "Ron", "Ven", "Yar");
List<Image> kuvatL = new List<Image>(kuvat);
Image arvottuKuva = RandomGen.SelectOne<Image>(kuvat);
Camera.ZoomToLevel();
Level.CreateBorders();
Level.Background.Color = Color.Black;
Level.Background.Image = LoadImage("village");
// Level.Background.CreateGradient(Color.White, Color.Blue);
Gravity = new Vector(0, -50);
for (int i = 0; i < 50; i++)
{
PhysicsObject p; // Tämä apumuuttuja tarvitaan Guru-tehtävää varten
p = PiirraPallo(
this,
RandomGen.NextDouble(Level.Left, Level.Right), // Kentän vasen ja oikea reuna
RandomGen.NextDouble(Level.Bottom, Level.Top), // alareuna, yläreuna
RandomGen.NextDouble(5, 30),
RandomGen.NextColor()
);
p.Tag = "vihollinen"; // jotta voidaan antaa tunniste törmäyksille
p.Image = kuvat[RandomGen.NextInt(kuvat.Length)];
}
PhysicsObject pallo = PiirraPallo(this, 0, 0, 40, Color.White);
pallo.Mass = 4;
AddCollisionHandler(pallo, "vihollinen", PalloTormasi); // Guru tehtävää varten oman pallon ja muiden törmäys
pallo.Image = LoadImage("King");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä näppäinohjeet");
Keyboard.Listen(Key.Up, ButtonState.Pressed, LyoPalloa, "Lyö palloa ylöspäin", pallo, new Vector(0, 1000));
Keyboard.Listen(Key.Down, ButtonState.Pressed, LyoPalloa, "Lyö palloa alaspäin", pallo, new Vector(0, -1000));
Keyboard.Listen(Key.Left, ButtonState.Pressed, LyoPalloa, "Lyö palloa vasemmalle", pallo, new Vector(-1000, 0));
Keyboard.Listen(Key.Right, ButtonState.Pressed, LyoPalloa, "Lyö palloa oikealle", pallo, new Vector(1000, 0));
LuoLaskuri();
}
/// <summary>
/// Luo pistelaskurin näyttöön
/// </summary>
private void LuoLaskuri()
{
pisteLaskuri = new IntMeter(0);
pisteLaskuri.MaxValue = 10;
pisteLaskuri.UpperLimit += delegate { PeliPaattyi(pisteLaskuri.MaxValue); };
Label pisteNaytto = new Label();
pisteNaytto.X = Screen.Left + 60;
pisteNaytto.Y = Screen.Top - 10;
pisteNaytto.TextColor = Color.Brown;
pisteNaytto.Color = Color.Yellow;
pisteNaytto.BorderColor = Color.Black;
pisteNaytto.Width = 100;
// pisteNaytto.IntFormatstring = "Pisteet: {0,2:D} ";
pisteNaytto.BindTo(pisteLaskuri);
Add(pisteNaytto);
}
/// <summary>
/// Annetaan pallolle isku pyydettyyn suuntaan ja pyydetyllä voimalla
/// </summary>
/// <param name="pallo">pallo jota lyödään</param>
/// <param name="suunta">suunta/voimavektori lyöntiä varten</param>
private void LyoPalloa(PhysicsObject pallo, Vector suunta)
{
pallo.Hit(suunta);
}
/// <summary>
/// Suoritetaan kun peli päättyi
/// </summary>
/// <param name="arvo">mikä oli laskurin arvo lun tultiin tänne</param>
private void PeliPaattyi(int arvo)
{
MessageDisplay.TextColor = Color.White;
MessageDisplay.BackgroundColor = Color.Red;
MessageDisplay.Clear();
ClearGameObjects();
MessageDisplay.Add("");
MessageDisplay.Add("");
MessageDisplay.Add("");
MessageDisplay.Add(String.Format(" Hyvä, sait {0} palloa ", arvo));
MessageDisplay.Add("");
MessageDisplay.Add("");
MessageDisplay.Add("");
}
/// <summary>
/// Guru-tehtävää varten pallojen törmäysten käsittely
/// </summary>
/// <param name="pallo">Oma pallo</param>
/// <param name="kohde">pallo johon törmättiin</param>
private void PalloTormasi(PhysicsObject pallo, PhysicsObject kohde)
{
if (kohde.Y < 0) return;
Explosion rajahdys = new Explosion(kohde.Width);
rajahdys.Position = kohde.Position;
Add(rajahdys);
kohde.Destroy();
pisteLaskuri.Value++;
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<PublishReadyToRun>false</PublishReadyToRun>
<TieredCompilation>false</TieredCompilation>
<RootNamespace>B3-Pallot_2</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Jypeli.NET" Version="11.*" />
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*" />
</ItemGroup>
<ItemGroup>
<None Update="Content\Baby.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Chell.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Cigur.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Igor.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Infant.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Jango.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\King.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Knive.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Leader.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Mum.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Ron.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\talo.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\tausta3.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Ven.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\village.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Content\Yar.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Demo05/B4-Pallot_2/Content/Baby.png

19.4 KiB

Demo05/B4-Pallot_2/Content/Chell.png

23.9 KiB

Demo05/B4-Pallot_2/Content/Cigur.png

64 KiB

Demo05/B4-Pallot_2/Content/Igor.png

43.4 KiB

Demo05/B4-Pallot_2/Content/Infant.png

21.8 KiB

Demo05/B4-Pallot_2/Content/Jango.png

92 KiB

Demo05/B4-Pallot_2/Content/King.png

41.1 KiB

Demo05/B4-Pallot_2/Content/Knive.png

25.3 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment