Skip to content
Snippets Groups Projects
Commit 139708da authored by Salovaara Kosti Juhani's avatar Salovaara Kosti Juhani
Browse files

Versio 1.0, lisatty grafiikat ja koodi kommentoitu

parent 3c3ff1a4
Branches main
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
......@@ -14,11 +14,11 @@
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
</component>
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 4
}]]></component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 4
}</component>
<component name="ProjectId" id="2ul5Xh6t4LXvV8I0yFwY1wP6QLU" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
......@@ -28,7 +28,8 @@
"keyToString": {
".NET Project.TippuKivet.executor": "Run",
"RunOnceActivity.ShowReadmeOnStart": "true",
"git-widget-placeholder": "master",
"XThreadsFramesViewSplitterKey": "0.88839287",
"git-widget-placeholder": "main",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
......@@ -67,6 +68,7 @@
<option name="presentableId" value="Default" />
<updated>1742810361526</updated>
<workItem from="1742810362569" duration="8643000" />
<workItem from="1742821846343" duration="7405000" />
</task>
<servers />
</component>
......
TippuKivet/TippuKivet/Content/kivi.png

27.7 KiB

TippuKivet/TippuKivet/Content/pelaaja.png

58.3 KiB

TippuKivet/TippuKivet/Content/taustakuva.png

1.49 MiB

TippuKivet/TippuKivet/Content/timantti.png

12.6 KiB

......@@ -4,87 +4,111 @@ namespace TippuKivet
{
public class TippuKivet : PhysicsGame
{
// Pelaajan liikkumisnopeudet oikealle ja vasemmalle
private readonly Vector nopeusOikea = new Vector(800, 0);
private readonly Vector nopeusVasen = new Vector(-800, 0);
// Pelin keskeiset muuttujat
private PhysicsObject pelaaja;
private IntMeter pistelaskuri;
private Timer ajastinTimantit;
private Timer ajastinKivet;
private int ohimenneetTimantit;
private IntMeter pistelaskuri; // Pisteiden laskuri
private Timer ajastinTimantit; // Ajastin timanttien luomiselle
private Timer ajastinKivet; // Ajastin kivien luomiselle
private int ohimenneetTimantit; // Laskuri, montako timanttia pelaaja on missannut
public override void Begin()
{
SetWindowSize(1024, 768, false);
// Asetetaan pelin ikkunan koko
SetWindowSize(800, 600, false);
// Aloitetaan timanttien ja kivien generointi
ajastinTimantit = Timer.CreateAndStart(1.5, LuoTimantti);
ajastinKivet = Timer.CreateAndStart(3.0, LuoKivi);
// Alustetaan pistelaskuri
pistelaskuri = new IntMeter(0);
LuoPisteNaytto();
// Asetetaan painovoima
Gravity = new Vector(0, -700);
// Luodaan pelaaja ja pelin kenttä
pelaaja = LuoPelaaja(0);
LuoKenttä();
// Asetetaan ohjaimet
AsetaOhjaimet();
}
private void LuoKenttä()
{
// Luodaan näkymätön alalaatta, johon kivet ja timantit voivat osua
PhysicsObject alalaatta = Level.CreateBottomBorder();
alalaatta.IsVisible = false;
AddCollisionHandler(alalaatta, "Kivi", KiviAlalaattaCollide);
AddCollisionHandler(alalaatta, "Timantti", TimanttiAlalaattaCollide);
// Asetetaan taustakuva ja taustan väri
Level.Background.Image = LoadImage("taustakuva");
Level.Background.Color = Color.Black;
// Zoomataan kamera kenttään sopivaksi
Camera.ZoomToLevel();
}
// Luodaan pelaaja-objekti
private PhysicsObject LuoPelaaja(double x)
{
PhysicsObject pelaaja = LuoObjekti(350, 100, x, -400, Color.Red, "Pelaaja");
pelaaja.IgnoresCollisionResponse = true;
pelaaja.IgnoresGravity = true;
PhysicsObject pelaaja = LuoObjekti(150, 200, x, -300, Color.Red, "Pelaaja");
pelaaja.IgnoresCollisionResponse = true; // Törmäykset Pelaajaan ei vaikuta.
pelaaja.IgnoresGravity = true; // Painovoima ei vaikuta Pelaajaan
pelaaja.Image = LoadImage("pelaaja");
// Lisätään törmäyskäsittelijät pelaajalle
AddCollisionHandler(pelaaja, "Kivi", PelaajaKiviCollide);
AddCollisionHandler(pelaaja, "Timantti", PelaajaTimanttiCollide);
Add(pelaaja);
return pelaaja;
}
// Luodaan pistelaskuri-näyttö
private void LuoPisteNaytto()
{
Label pisteNaytto = new Label
{
Position = new Vector(-400, 200),
Position = new Vector(340, 250),
TextColor = Color.Red,
Color = Color.White,
Size = new Vector(5000, 5000)
Size = new Vector(5000, 5000),
Title = "Pisteet: ",
};
pisteNaytto.BindTo(pistelaskuri);
Add(pisteNaytto);
}
// Luodaan satunnaiseen paikkaan ilmestyvä timantti
private void LuoTimantti()
{
double x = RandomGen.NextDouble(Level.Left + 50, Level.Right - 50);
PhysicsObject timantti = LuoObjekti(60, 60, x, Level.Top + 50, Color.Yellow, "Timantti");
timantti.AngularVelocity = RandomGen.NextDouble(-5.0, 5.0);
AddCollisionHandler(timantti, "Pelaaja", PelaajaTimanttiCollide);
timantti.Image = LoadImage("timantti.png");
Add(timantti);
}
private void LuoKivi()
{
// Luodaan satunnaiseen paikkaan ilmestyvä kivi
double x = RandomGen.NextDouble(Level.Left + 20, Level.Right - 20);
double randomSize = RandomGen.NextDouble(30.0, 120.0);
PhysicsObject kivi = LuoObjekti(randomSize, randomSize, x, Level.Top + 50, Color.White, "Kivi");
kivi.Velocity = new Vector(0, -400);
AddCollisionHandler(kivi, "Pelaaja", PelaajaKiviCollide);
kivi.Image = LoadImage("kivi.png");
Add(kivi);
}
// Aliohjelma objektien luomiseen
private PhysicsObject LuoObjekti(double width, double height, double x, double y, Color color, string tag)
{
return new PhysicsObject(width, height, Shape.Rectangle)
......@@ -107,18 +131,21 @@ namespace TippuKivet
VoitaPeli();
}
}
// Pelaajan ja kiven törmäyskäsittelijä
private void PelaajaKiviCollide(PhysicsObject pelaaja, PhysicsObject kivi)
{
kivi.Destroy();
LopetaPeli("Kivi osui sinua päähän, Peli ohi!");
}
// Kiven ja alalaatan törmäyskäsittelijä
private void KiviAlalaattaCollide(PhysicsObject alalaatta, PhysicsObject kivi)
{
kivi.Destroy();
}
// Timantin ja alalaatan törmäyskäsittelijä
private void TimanttiAlalaattaCollide(PhysicsObject alalaatta, PhysicsObject timantti)
{
timantti.Destroy();
......@@ -129,9 +156,11 @@ namespace TippuKivet
LopetaPeli("Et ollut tarpeeksi tehokas!");
}
}
// Pelaajan koko pienenee timantin keräämisen jälkeen
private void KutistaPelaaja()
{
const double shrinkFactor = 0.9;
const double minSize = 10.0;
......@@ -142,37 +171,41 @@ namespace TippuKivet
}
}
// Peli päättyy voittoon, jos pelaaja kerää tarpeeksi pisteitä
private void VoitaPeli()
{
MessageDisplay.Add("Olet TippuKiviLuolan suvereeni Päällikkö!");
ajastinTimantit.Stop();
ajastinKivet.Stop();
Timer.SingleShot(6, Exit);
Pause();
}
// Peli päättyy häviöön, jos pelaaja osuu kiveen tai missaa liikaa timantteja
private void LopetaPeli(string viesti)
{
MessageDisplay.Add(viesti);
ajastinTimantit.Stop();
ajastinKivet.Stop();
Timer.SingleShot(7, Exit);
Pause();
}
// Määritellään pelin näppäimet, pelaajan liike, pause ja ESC.
private void AsetaOhjaimet()
{
Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Liikuta pelaajaa vasemmalle", pelaaja, nopeusVasen);
Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Liikuta pelaajaa oikealle", pelaaja, nopeusOikea);
Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta pelaajaa vasemmalle nuolinäppäimellä", pelaaja, nopeusVasen);
Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta pelaajaa vasemmalle", pelaaja, nopeusVasen);
Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta pelaajaa oikealle nuolinäppäimellä", pelaaja, nopeusOikea);
Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta pelaajaa oikealle", pelaaja, nopeusOikea);
Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
}
private void AsetaNopeus(PhysicsObject pelaaja, Vector nopeus)
{
// Estetään pelaajaa menemästä kentän ulkopuolelle
if ((pelaaja.X + pelaaja.Width / 2 >= Level.Right && nopeus.X > 0) ||
(pelaaja.X - pelaaja.Width / 2 <= Level.Left && nopeus.X < 0))
{
......@@ -183,7 +216,5 @@ namespace TippuKivet
pelaaja.Velocity = nopeus;
}
}
}
}
......@@ -10,4 +10,19 @@
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*"/>
</ItemGroup>
<ItemGroup>
<None Update="Content\kivi.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Content\taustakuva.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Content\timantti.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Content\pelaaja.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
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