Ohjelmointi 1, syksy 2024, luento03

# L03

3. luento: ma 9.9.2024 klo 12:15-14:00: Yksinkertainen graafinen C#-ohjelma, aliohjelmat, dokumentointi

Suosituksia opiskeluun

  • kertausta kurssin sivujen rakenteesta
    • (PÄÄTE)OHJAUKSET (kurssilla n. 300, n. 200 ilmoittautui, 144 kävi!)
    • ks em lista luennon aiheista
    • jos menuista puuttuu jotakin, kerro niin lisätään
    • lue huolella!
    • laiskuus (lazy), ks demo1
    • muutosten tilaaminen
    • muista klikata punaiset pois!!!
    • Pisteet/eteneminen
# viikkorytmi

Ja ennen kutakin luentoa kannattaa lukea luennolle M: merkityt luvut!

Kurssin aikana sinun on tarkoitus oppia seuraavia asioita (osaamisen taso sovelletulla Bloomin asteikolla: 1=muistaa, 2=ymmärtää, 3=osaa soveltaa, 4=osaa analysoida, 5=osaa arvioida, 6=osaa luoda)

Siirrä alla osaamisesi (punainen pallukka) aina sitä vastaavalle kohdalle. Keltainen ruutu on tavoite johon tulisi päästä kurssin lopuksi. Ruksaa ensin muokkaa.

# goaltable2

Please to interact with this component.

Osattava asia123456
Rakenteisen ohjelmoinnin perusajatus o
Algoritminen ajattelu o
C#-kielen perusteet o
Peräkkäisyys o
Muuttujat o
Aliohjelmat ja funktiot o
Parametrin välitys o
Ehtolauseet o
Silmukat o
Taulukot o
Tiedostot ohjelmasta käytettynä o
Olioiden käyttö o
Yksikkötestit (TDD) o
Debuggerin käyttö o
Lukujärjestelmät, ASCII-koodi o
Rekursio o
Dokumentointi ja sen lukeminen o

Hello World

Ohjelman tekemiseksi tarvitaan siis

  • tapa kirjoittaa ohjelman tarvitsema teksti (lähdekoodi, source)
    • siksi siis se editori
    • lähdekoodisella tiedostolla on tarkennin, joka kuvaa kieltä, esim .cs
    • muista tallentaa aina muutosten jälkeen
  • ohjelmakielen kääntäjä joka lukee lähdekoodin ja tuottaa siitä konekielisen version
    • esim csc C# ohjelmien kääntämiseksi
    • nykyisin dotnet-komennolla
    • tuottaa esim .exe tiedoston (executable)
  • lähdekoodi käännetään kääntäjällä
  • ajetaan konekielinen ohjelma
    • esim: ./HelloWorld.exe
# helloeka
  • Ohjelman kääntäminen komentoriviltä

  • Hello World

      export PATH="/c/devel/rider/tools/MSBuild/Current/Bin/Roslyn/:$PATH"
      csc.exe HelloWorld.cs
      ./HelloWorld.exe
  • dotnet-komennolla

      dotnet new ConsoleMain -n HelloWorld
      cd HelloWorld
      code HelloWorld.cs
      dotnet build
      bin/Debug/net7.0/Hello.exe
  • Lumiukkko
    Ennen:

      csc Lumiukko.cs /reference:Jypeli.dll;Jypeli.Physics2d.dll;MonoGame.Framework.dll /platform:x86
  • Uuden projektin luominen, jos ei muista templaten nimiä

      dotnet new list | grep Jypeli 
    
      dotnet new Fysiikkapeli -n Lumiukko
      ...
  • Ajaminen

      dotnet run

VSCodeen saa C#-pluginin, jolla ohjelman voi ajaa suoraan VSCodesta.

Lumiukko

# lumiukko1
// Otetaan käyttöön Jyväskylän yliopiston Jypeli-kirjasto
using Jypeli;

namespace LumiukkoTyhma;

/// @author  Vesa Lappalainen, Antti-Jussi Lakanen
/// @version 22.12.2011
///
///
/// <summary>
/// Luokka, jossa harjoitellaan piirtämistä lisäämällä ympyröitä ruudulle
/// </summary>
public class LumiukkoTyhma: PhysicsGame
{

    /// <summary>
    /// Piirretään oliot ja zoomataan kamera niin että kenttä näkyy kokonaan.
    /// </summary>
    public override void Begin()
    {
        PhysicsGame peli = this;
        
        peli.Camera.ZoomToLevel();
        peli.Level.Background.Color = Color.Black;

        {
            double x = -200;
            PhysicsObject p1 = new PhysicsObject(2 * 100.0, 2 * 100.0, Shape.Circle);
            p1.X = x;
            p1.Y = Level.Bottom + 200.0;
            peli.Add(p1);

            PhysicsObject p2 = new PhysicsObject(2 * 50.0, 2 * 50.0, Shape.Circle);
            p2.X = x;
            p2.Y = p1.Y + 100 + 50;
            peli.Add(p2);

            PhysicsObject p3 = new PhysicsObject(2 * 30.0, 2 * 30.0, Shape.Circle);
            p3.X = x;
            p3.Y = p2.Y + 50 + 30;
            peli.Add(p3);
        }
        {
            double x = 200;
            PhysicsObject p1 = new PhysicsObject(2 * 100.0, 2 * 100.0, Shape.Circle);
            p1.X = x;
            p1.Y = Level.Bottom + 200.0;
            peli.Add(p1);

            PhysicsObject p2 = new PhysicsObject(2 * 50.0, 2 * 50.0, Shape.Circle);
            p2.X = x;
            p2.Y = p1.Y + 100 + 50;
            peli.Add(p2);

            PhysicsObject p3 = new PhysicsObject(2 * 30.0, 2 * 30.0, Shape.Circle);
            p3.X = x;
            p3.Y = p2.Y + 50 + 30;
            peli.Add(p3);
        }

    }
}
# tekstia

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.