{"id":3491,"date":"2026-04-29T09:54:30","date_gmt":"2026-04-29T06:54:30","guid":{"rendered":"https:\/\/blog.edu.turku.fi\/allu\/?page_id=3491"},"modified":"2026-06-01T12:25:22","modified_gmt":"2026-06-01T09:25:22","slug":"pygame","status":"publish","type":"page","link":"https:\/\/blog.edu.turku.fi\/allu\/sivu-2\/pygame\/","title":{"rendered":"Pygame"},"content":{"rendered":"\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-black-color has-text-color has-background has-link-color wp-element-button\" href=\"https:\/\/blog.edu.turku.fi\/allu\/sivu-2\/\" style=\"background-color:#e6f3b7\">Palaa takaisin<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:30px\"><strong>Peliohjelmointi &#8211; Pygame<\/strong><\/h2>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"863\" height=\"680\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/1.png\" alt=\"\" class=\"wp-image-3879\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/1.png 863w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/1-300x236.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/1-768x605.png 768w\" sizes=\"auto, (max-width: 863px) 100vw, 863px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"676\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/2-1024x676.png\" alt=\"\" class=\"wp-image-3880\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/2-1024x676.png 1024w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/2-300x198.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/2-768x507.png 768w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/2.png 1030w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"856\" height=\"680\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/3.png\" alt=\"\" class=\"wp-image-3881\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/3.png 856w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/3-300x238.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/3-768x610.png 768w\" sizes=\"auto, (max-width: 856px) 100vw, 856px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"680\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/4-1.png\" alt=\"\" class=\"wp-image-3885\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/4-1.png 944w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/4-1-300x216.png 300w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><\/figure>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-1&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-1-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-1\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Opintojakson suorittaminen<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-1\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-1-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Pygame_yleisohje-6.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston Pygame_yleisohje upotus.\"><\/object><a id=\"wp-block-file--media-bf72ad12-b094-4fbb-bee8-24ba529d0f66\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Pygame_yleisohje-6.pdf\">Pygame_yleisohje<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Pygame_yleisohje-6.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-bf72ad12-b094-4fbb-bee8-24ba529d0f66\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-2&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b0\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-2-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-2\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: N\u00e4ytt\u00f6tallenteen ottaminen<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-2\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-2-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file has-link-color wp-elements-9c162eb4c187dd8f67d1492d6054fd46\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Nayttotallenneohjeet-1.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston N\u00e4ytt\u00f6tallenneohjeet upotus.\"><\/object><a id=\"wp-block-file--media-f54b46e8-9fa8-40ad-925f-7448d9bf9008\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Nayttotallenneohjeet-1.pdf\">N\u00e4ytt\u00f6tallenneohjeet<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Nayttotallenneohjeet-1.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-f54b46e8-9fa8-40ad-925f-7448d9bf9008\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:25px\"><strong>1. Perusteht\u00e4v\u00e4t<\/strong><\/h3>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-cd2c452d70b6a3f6e114906e13b42480 wp-block-paragraph\">Tee teht\u00e4v\u00e4t Pythonilla. Kuvaa jokaisesta teht\u00e4v\u00e4n osiosta oma n\u00e4ytt\u00f6video. Jos ohjelmassa ei ole liikkuvia asioita, voit palauttaa kuvakaappauksen. Kuvaa jokaisesta teht\u00e4v\u00e4n alakohdista (eli a, b .jne) oma video ja nime\u00e4 ne teht\u00e4v\u00e4nannon mukaisesti, kuten Teht\u00e4v\u00e4_1a. On suositeltavaa yhdist\u00e4\u00e4 kaikki saman teht\u00e4v\u00e4n alakohdat lopuksi yhdeksi videoksi, kuten Teht\u00e4v\u00e4_1.<\/p>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Asennukset ja Pygame tutuksi<\/strong><\/h4>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-3&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b0\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-3-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-3\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Pythonin ja Visual Studio Coden asentaminen<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-3\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-3-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Pygame-ja-Python-asennus-6.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston Pygame ja Python -asennus-6 upotus.\"><\/object><a id=\"wp-block-file--media-83d92fbb-96e5-4d5e-8b43-082cd696e586\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Pygame-ja-Python-asennus-6.pdf\">Pygame ja Python -asennus-6<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Pygame-ja-Python-asennus-6.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-83d92fbb-96e5-4d5e-8b43-082cd696e586\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Ensimm\u00e4inen Pygame-sovellus<\/strong><\/h4>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 1<\/strong><\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-aee283e8d733fec85b50c00fdfa246ee wp-block-paragraph\"><strong>a.<\/strong> Aja annettu koodi ja seuraa, mit\u00e4 tapahtuu. Kirjoita lyhyt vastaus siit\u00e4, mit\u00e4 n\u00e4it ja miksi niin k\u00e4vi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((400, 300))\npygame.display.set_caption(\"Terve Pygame\")<\/code><\/pre>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-4&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-4-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-4\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-4\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-4-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Ikkuna v\u00e4l\u00e4ht\u00e4\u00e4 ja sulkeutuu heti, koska ohjelmassasi ei ole pelisilmukkaa eik\u00e4 tapahtumank\u00e4sittely\u00e4. Kun Python suorittaa viimeisen rivin, ohjelma p\u00e4\u00e4ttyy v\u00e4litt\u00f6m\u00e4sti, koska Pygame-ikkuna pysyy \u201chengiss\u00e4\u201d vain kun ohjelma on k\u00e4ynniss\u00e4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-8375eba6d0dc4e5b9b1c1c9d43234e64\" style=\"font-size:16px\"><strong>b.<\/strong> Lis\u00e4\u00e4 annettuun koodiin toimiva pelisilmukka, joka pit\u00e4\u00e4 pelin toiminnassa. Muista huomioida my\u00f6s peli-ikkunan sulkeminen. <\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-5&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-5-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-5\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-5\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-5-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((400, 300))\npygame.display.set_caption(\"Terve Pygame\")\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n\n# Pygame lopetus\/sulku\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>c.<\/strong> Muokkaa koodia niin, ett\u00e4 peli-ikkunan koko muuttuu ja vaihda peli-ikkunan otsikoksi oma nimi ja luokka. Kokeile useita eri kokoja peli-ikkunalle. Tee muutokset muuttujien avulla \u00e4l\u00e4k\u00e4 korvaa pohjakoodia.<\/h5>\n\n\n\n<p class=\"has-text-color has-link-color wp-elements-bcc65b28c661c233b7922b7d9659cacf wp-block-paragraph\" style=\"color:#4ba432\"><strong>HUOM! T\u00e4st\u00e4 teht\u00e4v\u00e4st\u00e4 eteenp\u00e4in muista aina muuttaa peli-ikkunan nimeksi oma nimi ja luokka.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esimerkkiarvot:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Peli-ikkunan otsikko: Maija Meik\u00e4l\u00e4inen 26A<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Peli-ikkunan koko: leveys = 800 ja korkeus = 600<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-6&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-6-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-6\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-6\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-6-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n#muuttujat\nleveys = 800\nkorkeus = 600\nruudun_kuvaus = \"Testi-ikkuna\"\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(ruudun_kuvaus)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n\n# Pygame lopetus\/sulku\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>d. <\/strong>Muuta peli-ikkunan taustan v\u00e4ri punaiseksi. <\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-7&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-7-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-7\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-7\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-7-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n#muuttujat\nleveys = 800\nkorkeus = 600\nruudun_kuvaus = \"Testi-ikkuna\"\nrgb = (255, 0, 0)#punainen\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(ruudun_kuvaus)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    screen.fill(rgb)#taustan v\u00e4rin m\u00e4\u00e4ritys\n    pygame.display.flip()\n\n# Pygame lopetus\/sulku\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Piirt\u00e4minen ja koordinaatisto<\/strong><\/h4>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-8&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b0\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-8-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-8\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Pygamen dokumentaation k\u00e4ytt\u00f6<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-8\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-8-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"has-link-color wp-elements-7ef19d08bcf5afe6acd46adba7e497db wp-block-paragraph\"><strong>Mist\u00e4 tiet\u00e4\u00e4, mit\u00e4 komentoja on ja miten niit\u00e4 voi k\u00e4ytt\u00e4\u00e4?<\/strong><br>Pygamen dokumentaatiossa (<a href=\"https:\/\/www.pygame.org\/docs\/ref\/font.html\" target=\"_blank\" rel=\"noreferrer noopener\">pygame.font \u2014 pygame v2.6.0 documentation<\/a>) kerrotaan, mit\u00e4 funktioita on ja miten niit\u00e4 k\u00e4ytet\u00e4\u00e4n. L\u00f6yd\u00e4tk\u00f6 piirt\u00e4miseen liittyv\u00e4 osion? Valitse yksi malli. Osaatko sanoa, mit\u00e4 muuttujia funktio tarvitsee ja mit\u00e4 se palauttaa?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vastaus:<\/strong><br>Pygamen dokumentaatiosta l\u00f6ytyy Most useful stuff -kohta, jonka vierst\u00e4 l\u00f6ytyy draw-osio. Esimerkiksi funktio pygame.draw.line() toimii siten, ett\u00e4 ensimm\u00e4inen parametri on surface, eli pinta, johon piirret\u00e4\u00e4n. Esimerkkikoodissa se on screen. Seuraava parametri on v\u00e4ri, joka annetaan RGB-muodossa. T\u00e4m\u00e4n j\u00e4lkeen m\u00e4\u00e4ritet\u00e4\u00e4n viivan alku- ja loppupiste koordinaatteina, muodossa [alku x, alku y] ja [loppu x, loppu y]. Koordinaatit voidaan antaa joko hakasuluissa [] tai sulkeissa (). Viimeinen parametri on valinnainen ja m\u00e4\u00e4ritt\u00e4\u00e4 viivan paksuuden. Jos sit\u00e4 ei anneta, oletusarvona k\u00e4ytet\u00e4\u00e4n paksuutta 1.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"551\" height=\"324\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-9.png\" alt=\"\" class=\"wp-image-3797\" style=\"aspect-ratio:1.700651073064866;width:501px;height:auto\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-9.png 551w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-9-300x176.png 300w\" sizes=\"(max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sivustolla alempana on esimerkki funktion k\u00e4yt\u00f6st\u00e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"601\" height=\"86\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-10.png\" alt=\"\" class=\"wp-image-3798\" style=\"aspect-ratio:6.989460294384881;width:499px;height:auto\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-10.png 601w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-10-300x43.png 300w\" sizes=\"(max-width: 601px) 100vw, 601px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kun hiiri vied\u00e4\u00e4n funktion line() p\u00e4\u00e4lle Visual Studio Codessa, ohjelma n\u00e4ytt\u00e4\u00e4, mit\u00e4 parametreja funktio tarvitsee.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"500\" height=\"241\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-12.png\" alt=\"\" class=\"wp-image-3800\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-12.png 500w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-12-300x145.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6de74209356b6939e8cfc5aa690a6f43 wp-block-paragraph\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 2<\/strong><\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9facdee2fb0504b0473bdf6ae6322818 wp-block-paragraph\" style=\"font-size:16px\">Teht\u00e4v\u00e4ss\u00e4 k\u00e4ytett\u00e4v\u00e4n v\u00e4rin, fontin ja kuvion saa valita vapaasti.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-04a2c42ba203fee0f53bd8cd9427849d wp-block-paragraph\"><strong>a.<\/strong> Piirr\u00e4 haluamasi kuvio hy\u00f6dynt\u00e4m\u00e4ll\u00e4 Pygamen dokumentaatiota (<a href=\"https:\/\/www.pygame.org\/docs\/ref\/font.html\" target=\"_blank\" rel=\"noreferrer noopener\">pygame.font \u2014 pygame v2.6.0 documentation<\/a>). <\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-9&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-9-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-9\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-9\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-9-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"581\" height=\"456\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image.png\" alt=\"\" class=\"wp-image-3728\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image.png 581w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-300x235.png 300w\" sizes=\"(max-width: 581px) 100vw, 581px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-10&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-10-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-10\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-10\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-10-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n#muuttujat\nleveys = 800\nkorkeus = 600\nruudun_kuvaus = \"Testi-ikkuna\"\nrgb = (255, 0, 0)#punainen\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(ruudun_kuvaus)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    screen.fill((0,0,0)) #taustan v\u00e4rin m\u00e4\u00e4ritys\n    pygame.draw.circle(screen, rgb, &#091;600,300], 20) #pallon piirt\u00e4minen\n    pygame.display.flip()\n\n# Pygame lopetus\/sulku\npygame.quit()\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-88bbd50a949f25d3a44eabbadda01933 wp-block-paragraph\"><strong>b.<\/strong> Piirr\u00e4 kuvio origoon. Mit\u00e4 huomaat?<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-11&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-11-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-11\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-11\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-11-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"570\" height=\"447\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-1.png\" alt=\"\" class=\"wp-image-3731\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-1.png 570w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-1-300x235.png 300w\" sizes=\"(max-width: 570px) 100vw, 570px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-12&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-12-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-12\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-12\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-12-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>pygame.draw.circle(screen, rgb , &#091;0,0], 20) #pallon piirt\u00e4minen<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Origo on ruudun vasemassa yl\u00e4kulmassa.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6da40a0d740802c9d595132c2aed4838 wp-block-paragraph\"><strong>c. <\/strong>Piirr\u00e4 kuvio keskelle.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-13&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-13-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-13\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-13\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-13-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"608\" height=\"481\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-4.png\" alt=\"\" class=\"wp-image-3735\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-4.png 608w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-4-300x237.png 300w\" sizes=\"(max-width: 608px) 100vw, 608px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-14&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-14-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-14\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-14\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-14-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>pygame.draw.circle(screen,(255, 0, 0), &#091;leveys\/2,korkeus\/2], 20) #pallon piirt\u00e4minen<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e0ea499b1b3155666ceb881d91a11378 wp-block-paragraph\"><strong>d. <\/strong>Piirr\u00e4 kuvio reunaan. Ota huomioon kuvion oma leveys ja pituus.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-15&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-15-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-15\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-15\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-15-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"606\" height=\"475\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-3.png\" alt=\"\" class=\"wp-image-3734\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-3.png 606w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-3-300x235.png 300w\" sizes=\"(max-width: 606px) 100vw, 606px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-16&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-16-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-16\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-16\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-16-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>pygame.draw.circle(screen,rgb, &#091;leveys-20,korkeus-20], 20) #pallon piirt\u00e4minen<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-daccc4b2b2fee412355eb319fa36e63a wp-block-paragraph\"><strong>e.<\/strong> Onko mahdollista piirt\u00e4\u00e4 kuvio ruudun ulkopuolelle? Kokeile piirt\u00e4\u00e4 kuvio peli-ikkunan ulkopuolelle.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-17&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-17-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-17\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-17\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-17-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"561\" height=\"442\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-5.png\" alt=\"\" class=\"wp-image-3736\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-5.png 561w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-5-300x236.png 300w\" sizes=\"(max-width: 561px) 100vw, 561px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-18&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-18-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-18\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-18\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-18-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>pygame.draw.circle(screen,(255, 0, 0), &#091;leveys+10,korkeus-20],20) #pallon piirt\u00e4minen<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On siis mahdollista.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-dd3214df2c6dff3a6a2277275b33a9bb wp-block-paragraph\"><strong>f.<\/strong> Piirr\u00e4 jollekin korkeudelle yksi rivi kuviota. Katso apua rakenteelle linkist\u00e4 <a href=\"https:\/\/blog.edu.turku.fi\/allu\/sivu-1\/ohjelmoinnin_aiheet\/toisto-tasot\/\" target=\"_blank\" rel=\"noreferrer noopener\">Toisto \u2013 ALLU \u2013 Algoritmeja ja lukuteoriaa oppimassa<\/a>. Tallenna muuttujiin tarvittavia tietoja, kuten s\u00e4de, v\u00e4li ja haluttu korkeus. Lis\u00e4\u00e4 pelisilmukan loppuun <code>pygame.display.flip()<\/code><\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-19&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-19-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-19\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-19\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-19-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"518\" height=\"408\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-6.png\" alt=\"\" class=\"wp-image-3737\" style=\"aspect-ratio:1.2696181685879515;width:517px;height:auto\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-6.png 518w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-6-300x236.png 300w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-20&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-20-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-20\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-20\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-20-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n#muuttujat\nleveys = 800\nkorkeus = 600\nruudun_kuvaus = \"Testi-ikkuna\"\nrgb = (255, 0, 0)#punainen\n\ns\u00e4de = 20 # pallon s\u00e4de\nv\u00e4li = 2 * s\u00e4de  # pallojen v\u00e4li\ny = korkeus \/ 2 # haluttu korkeus\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(ruudun_kuvaus)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    screen.fill((0,0,0)) #taustan v\u00e4rin m\u00e4\u00e4ritys\n    \n    for x in range(s\u00e4de, leveys, v\u00e4li):\n        pygame.draw.circle(screen, rgb, &#091;x, y], s\u00e4de) #pallon piirt\u00e4minen\n    pygame.display.flip()\n\n# Pygame lopetus\/sulku\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-83a644a1b02c029210b99f5533cae981 wp-block-paragraph\"><strong>g.<\/strong> T\u00e4yt\u00e4 peli-ikkuna kokonaisilla kuviolla. Katso apua rakenteelle linkist\u00e4 <a href=\"https:\/\/blog.edu.turku.fi\/allu\/sivu-1\/ohjelmoinnin_aiheet\/toisto-tasot\/toisto-vaikeat\/\" target=\"_blank\" rel=\"noreferrer noopener\">Toisto vaikeat \u2013 ALLU \u2013 Algoritmeja ja lukuteoriaa oppimassa<\/a><\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-21&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-21-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-21\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-21\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-21-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"940\" height=\"739\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-8.png\" alt=\"\" class=\"wp-image-3739\" style=\"aspect-ratio:1.2719997907895082;width:514px;height:auto\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-8.png 940w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-8-300x236.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/image-8-768x604.png 768w\" sizes=\"(max-width: 940px) 100vw, 940px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-22&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-22-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-22\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-22\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-22-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>#kutsutaan tarvittavat kirjastot\nimport pygame\n\n# Alustetaan Pygame\npygame.init()\n\n#muuttujat\nleveys = 800\nkorkeus = 600\nruudun_kuvaus = \"Testi-ikkuna\"\nrgb = (255, 0, 0)#punainen\n\ns\u00e4de = 20 # pallon s\u00e4de\nv\u00e4li = 2 * s\u00e4de  # pallojen v\u00e4li\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(ruudun_kuvaus)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    screen.fill((0,0,0)) #taustan v\u00e4rin m\u00e4\u00e4ritys\n    \n    for x in range(s\u00e4de, leveys, v\u00e4li):\n        for y in range(s\u00e4de, korkeus, v\u00e4li):\n            pygame.draw.circle(screen, rgb, &#091;x, y], s\u00e4de) #pallon piirt\u00e4minen\n    pygame.display.flip()\n\n# Pygame lopetus\/sulku\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-606a88d7fa79a3b6390cbf28dd734883 wp-block-paragraph\"><strong>h.<\/strong> Aloita tilanteesta ennen a-kohtaa eli tyhj\u00e4st\u00e4 mustasta ruudusta ja rakenna ohjelma seuraavien ohjeiden mukaisesti. Varmista, ett\u00e4 kuva on samassa kansiossa kuin Python-tiedosto. Muussa tapauksessa lis\u00e4\u00e4 kuvan tiedostopolku. Apua saa alussa olevista ohjeista ja ongelmatilanteissa voi hy\u00f6dynt\u00e4\u00e4 teko\u00e4ly\u00e4. Lataa kuva alla olevasta linkist\u00e4. Ladattaessa kuvan nimeksi tulee kaarme-1.png. Vaihda nimeksi kaarme.png.<\/p>\n\n\n\n<div class=\"wp-block-file has-white-background-color has-background has-link-color wp-elements-4adbc76eeb5d8810ddd0100da95f7e56\"><a id=\"wp-block-file--media-a4c6f8c0-8f6a-4dd8-b2b5-9d8527caf09b\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/kaarme-1.png\">kaarme<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/kaarme-1.png\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-a4c6f8c0-8f6a-4dd8-b2b5-9d8527caf09b\">Lataa<\/a><\/div>\n\n\n\n<div style=\"height:24px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Lis\u00e4\u00e4 muuttujiin <code>kuva = pygame.image.load(\"kaarme.png\") # kuvan lataaminen<\/code><\/li>\n\n\n\n<li>Lis\u00e4\u00e4 pelisilmukkaan toiminto <code>screen.blit(kuva, [x-koordinaatti, y-koordinaatti])<\/code>. Lis\u00e4\u00e4 haluamasi koordinaatit.<\/li>\n\n\n\n<li>Kun kuva toimii, lis\u00e4t\u00e4\u00e4n tekstit. Tuo fontit alussa <code>pygame.font.init()<\/code>-toiminnolla.<\/li>\n\n\n\n<li>Lis\u00e4\u00e4 muuttujiin <code>fontti = pygame.font.SysFont('Arial', 40) # fontin luonti<\/code><\/li>\n\n\n\n<li>Kun fontti on ladattu, lis\u00e4\u00e4 <code>teksti = fontti.render(\"Jokin teksti t\u00e4h\u00e4n\", True, rgb) # tekstin muodostus<\/code><\/li>\n\n\n\n<li>Kutsu teksti\u00e4 samalla tavalla pelisilmukassa kuin kuvaa.<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-23&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-23-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-23\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Kuva<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-23\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-23-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"1024\" height=\"810\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/EED6F55D-DC91-4414-A5BB-EAA8D823677F.png\" alt=\"\" class=\"wp-image-3788\" style=\"aspect-ratio:1.2639675692531573;width:560px;height:auto\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/EED6F55D-DC91-4414-A5BB-EAA8D823677F.png 1024w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/EED6F55D-DC91-4414-A5BB-EAA8D823677F-300x237.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/EED6F55D-DC91-4414-A5BB-EAA8D823677F-768x608.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-24&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-24-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-24\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-24\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-24-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame\n\n# Alustetaan Pygame\npygame.init()\npygame.font.init() \n\n#muuttujat\nleveys = 800\nkorkeus = 600\nruudun_kuvaus = \"Testi-ikkuna\"\nrgb = (255, 0, 0)# punainen\n\nkuva = pygame.image.load(\"kaarme.png\")# kuvan lataaminen \nfontti = pygame.font.SysFont('Arial', 40) # fontin luonti\nteksti = fontti.render(\"Lis\u00e4\u00e4 t\u00e4h\u00e4n jokin teksti\", True, rgb) # tekstin muodostus\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(ruudun_kuvaus)\n\n\n# Pelisilmukan m\u00e4\u00e4ritys\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    screen.fill((0,0,0)) #taustan v\u00e4rin m\u00e4\u00e4ritys\n\n    # Piirret\u00e4\u00e4n kuva ja teksti\n    screen.blit(kuva, &#091;100, 100])\n    screen.blit(teksti, &#091;300, 300])\n    pygame.display.flip()\n\n# Pygame lopetus\/sulku\npygame.quit()\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Liike ja aika<\/strong><\/h4>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 3<\/strong><\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-af649431cbd6c24a7587931a5756e6b6 wp-block-paragraph\" style=\"font-size:16px\">T\u00e4ss\u00e4 teht\u00e4v\u00e4ss\u00e4 laitetaan neli\u00f6 liikkumaan yhteen suuntaan.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-297ee4af3b4648656695851d932f3c86 wp-block-paragraph\"><strong>a. <\/strong>Aloitetaan piirt\u00e4m\u00e4ll\u00e4 n\u00e4yt\u00f6lle keltainen neli\u00f6 kohtaan 20, 20. Neli\u00f6n sivun pituus on 50.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-25&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-25-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-25\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-25\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-25-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d0f635f2f8decfbdb20100c5afa743b7 wp-block-paragraph\"><strong>b. <\/strong>Laitetaan nyt neli\u00f6 liukumaan kohti n\u00e4yt\u00f6n oikeaa reunaa.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-26&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-26-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-26\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-26\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-26-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\nneli\u00f6n_nopeus = 0.5\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    neli\u00f6.x += neli\u00f6n_nopeus\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9e3ced5daa56164605e8e85d64deba24 wp-block-paragraph\"><strong>c. <\/strong>Edellisess\u00e4 kohdassa neli\u00f6 j\u00e4tti &#8221;j\u00e4ljen&#8221;. T\u00e4m\u00e4 pit\u00e4isi korjata. Mieti, mit\u00e4 joka kierroksella tapahtuu ja mit\u00e4 ei tapahdu.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-27&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-27-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-27\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-27\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-27-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\nneli\u00f6n_nopeus = 0.5\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    neli\u00f6.x += neli\u00f6n_nopeus\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9a07c3c491fb14afd31a9ed72413cbae wp-block-paragraph\"><strong>d.<\/strong> Nyt neli\u00f6st\u00e4 ei j\u00e4\u00e4 j\u00e4lke\u00e4, mutta se menee melko nopeasti pois n\u00e4kyvist\u00e4. Yrit\u00e4 s\u00e4\u00e4t\u00e4\u00e4 neli\u00f6n nopeutta. Mit\u00e4 huomaat?<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-28&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-28-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-28\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-28\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-28-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\nneli\u00f6n_nopeus = 1\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    neli\u00f6.x += neli\u00f6n_nopeus\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Huomataan, ettei nopeus juuri muutu. Neli\u00f6 h\u00e4vi\u00e4\u00e4 edelleen melko nopeasti.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ce1c90ab8483f04ca718ac6186c6edfd wp-block-paragraph\"><strong>e. <\/strong>Edellisess\u00e4 kohdassa huomattiin, ettei nopeusmuuttujan s\u00e4\u00e4t\u00e4minen juuri vaikuttanut nopeuteen. T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 kuvataajuutta ei ole m\u00e4\u00e4ritetty, eli ohjelma suoritetaan jotakuinkin niin nopeasti kuin kone pystyy sen suorittamaan. Jos lukitsemme kuvataajuuden (eli p\u00e4ivitystaajuuden) esim. 60:een, voimme oikeasti s\u00e4\u00e4t\u00e4\u00e4 nopeutta.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-29&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-29-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-29\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vinkki<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-29\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-29-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">T\u00e4t\u00e4 varten tarvitaan kelloa, eli m\u00e4\u00e4rit\u00e4 pygame.time.Clock() Katso dokumentaatiosta apua.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-30&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-30-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-30\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-30\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-30-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\n# M\u00e4\u00e4ritet\u00e4\u00e4n kello\nkello = pygame.time.Clock()\n\nneli\u00f6n_nopeus = 1\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    neli\u00f6.x += neli\u00f6n_nopeus\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n    kello.tick(60)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 4<\/strong><\/h5>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-19b9be62662b6ccd2c4357597db5c7b2 wp-block-paragraph\" style=\"font-size:16px\">Edellisess\u00e4 teht\u00e4v\u00e4ss\u00e4 saimme neli\u00f6n liikkumaan kohtuullista vauhtia, mutta se karkaa n\u00e4yt\u00f6n ulkopuolelle. T\u00e4ss\u00e4 teht\u00e4v\u00e4ss\u00e4 pys\u00e4ytet\u00e4\u00e4n neli\u00f6, kun se kohtaa n\u00e4yt\u00f6n reunan. Rakenna ratkaisusi edellisen teht\u00e4v\u00e4n ratkaisun p\u00e4\u00e4lle.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4fbec121c16ede6b8370fe1cbecc4baa wp-block-paragraph\"><strong>a.<\/strong> Pys\u00e4yt\u00e4 neli\u00f6n liike sen kohdatessa n\u00e4yt\u00f6n reunan.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-31&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-31-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-31\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-31\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-31-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\n# M\u00e4\u00e4ritet\u00e4\u00e4n kello\nkello = pygame.time.Clock()\n\nneli\u00f6n_nopeus = 1\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    if neli\u00f6.right &lt;= leveys:\n        neli\u00f6.x += neli\u00f6n_nopeus\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n    kello.tick(60)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b26545cdc16188e15b75c45460b78342 wp-block-paragraph\"><strong>b.<\/strong> Edellisess\u00e4 kohdassa saimme neli\u00f6n pys\u00e4htym\u00e4\u00e4n reunaan. T\u00e4ss\u00e4 kohdassa on tarkoitus saada se k\u00e4\u00e4ntym\u00e4\u00e4n takaisin. Kohdatessa n\u00e4yt\u00f6n reuna k\u00e4\u00e4nn\u00e4 neli\u00f6n liike p\u00e4invastaiseen suuntaan.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-32&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-32-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-32\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-32\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-32-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\n# M\u00e4\u00e4ritet\u00e4\u00e4n kello\nkello = pygame.time.Clock()\n\nneli\u00f6n_nopeus = 1\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    if neli\u00f6.right &lt;= leveys:\n        neli\u00f6.x += neli\u00f6n_nopeus\n    if neli\u00f6.right &gt;= leveys:\n        neli\u00f6n_nopeus *= -1\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n    kello.tick(60)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f2b9ee308229e6fbd92e23410a29978e wp-block-paragraph\"><strong>c.<\/strong> Edellisess\u00e4 kohdassa neli\u00f6 tuli takaisin, mutta se jatkoi matkaansa j\u00e4lleen n\u00e4yt\u00f6n ulkopuolelle toiseen suuntaan. T\u00e4ss\u00e4 kohdassa neli\u00f6 pit\u00e4isi saada pysym\u00e4\u00e4n n\u00e4yt\u00f6n sis\u00e4puolella.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-33&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-33-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-33\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-33\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-33-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\n# M\u00e4\u00e4ritet\u00e4\u00e4n kello\nkello = pygame.time.Clock()\n\nneli\u00f6n_nopeus = 1\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    if neli\u00f6.right &lt;= leveys:\n        neli\u00f6.x += neli\u00f6n_nopeus\n    if neli\u00f6.right &gt;= leveys  or neli\u00f6.left &lt;= 0:\n        neli\u00f6n_nopeus *= -1\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n    kello.tick(60)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-dd180949e8d81953650b910a89272ec2 wp-block-paragraph\"><strong>d.<\/strong> Nyt neli\u00f6 pysyy n\u00e4yt\u00f6n sis\u00e4puolella. Neli\u00f6 voisi liikkua my\u00f6s korkeussuunnassa. Lis\u00e4\u00e4 neli\u00f6n liike my\u00f6s yl\u00f6s- ja alasp\u00e4in ja est\u00e4 neli\u00f6t\u00e4 karkaamasta j\u00e4lleen.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-34&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-34-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-34\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-34\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-34-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\n\n# Alustetaan Pygame\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\n# Peli-ikkunan m\u00e4\u00e4ritys\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"Neli\u00f6 liukuu\")\n\n# M\u00e4\u00e4ritet\u00e4\u00e4n kello\nkello = pygame.time.Clock()\n\nneli\u00f6n_nopeus_vaaka = 1\nneli\u00f6n_nopeus_pysty = 1\n\nneli\u00f6 = pygame.Rect(20, 20, 50, 50)\n\n# Pelisilmukan m\u00e4\u00e4ritys\nk\u00e4ynniss\u00e4 = True\nwhile k\u00e4ynniss\u00e4:\n    n\u00e4ytt\u00f6.fill((0, 0, 0,))\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n\n    neli\u00f6.x += neli\u00f6n_nopeus_vaaka\n    neli\u00f6.y += neli\u00f6n_nopeus_pysty\n    if neli\u00f6.right &gt;= leveys or neli\u00f6.left &lt;= 0:\n        neli\u00f6n_nopeus_vaaka *= -1\n    if neli\u00f6.top &lt;= 0 or neli\u00f6.bottom &gt;= korkeus:\n        neli\u00f6n_nopeus_pysty *= -1\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f6)\n    pygame.display.flip()\n    kello.tick(60)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 5<\/strong><\/h5>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-66640e235d48887e32f65c3ec24e55cd wp-block-paragraph\" style=\"font-size:16px\">Pygamessa on useita tapoja n\u00e4yt\u00f6n p\u00e4ivitt\u00e4miseen. N\u00e4ist\u00e4 yleisin on pygame.display.flip(), joka p\u00e4ivitt\u00e4\u00e4 koko n\u00e4yt\u00f6n (ja sijoitetaan useimmiten pelisilmukan loppuun, ellei koko n\u00e4ytt\u00f6\u00e4 tarvitse p\u00e4ivitt\u00e4\u00e4 silmukan aikana). Toinen tapa on pygame.display.update(), jolla voi vastaavasti p\u00e4ivitt\u00e4\u00e4 koko n\u00e4yt\u00f6n, eli se toimii t\u00e4ss\u00e4 tapauksessa t\u00e4ysin identtisesti kuin flip(). update() -funktiolla voi kuitenkin p\u00e4ivitt\u00e4\u00e4 my\u00f6s vain osia n\u00e4yt\u00f6ll\u00e4 olevista Pygame-elementeist\u00e4 antamalla n\u00e4m\u00e4 parametriksi funktiolle.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ad65454ba27f169066e5a8a486df17b3 wp-block-paragraph\">P\u00e4ivitt\u00e4v\u00e4tk\u00f6 seuraavat pelisilmukat koko n\u00e4yt\u00f6n? Seuraava koodin alkuosa on sama kaikissa kohdissa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame, sys\n\npygame.init()\n\nleveys = 800\nkorkeus = 600\n\nn\u00e4ytt\u00f6 = pygame.display.set_mode((leveys, korkeus))\npygame.display.set_caption(\"N\u00e4yt\u00f6n p\u00e4ivitys\")\n\nk\u00e4ynniss\u00e4 = True\nneli\u00f6 = pygame.Rect(0, 0, 50, 50)<\/code><\/pre>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-82c5e1ff72e79c574fe25e2b3cd72b55 wp-block-paragraph\">1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while k\u00e4ynniss\u00e4:\n    \n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 0, 0), neli\u00f6)\n\n    pygame.display.flip()<\/code><\/pre>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f90091bab3594b397ab3cf75644703df wp-block-paragraph\">2.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while k\u00e4ynniss\u00e4:\n    \n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 0, 0), neli\u00f6)\n\n    pygame.display.update()<\/code><\/pre>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f8bb8ade3a909a884098f195f02b12d6 wp-block-paragraph\">3.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while k\u00e4ynniss\u00e4:\n    \n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 0, 0), neli\u00f6)\n\n    pygame.display.update(neli\u00f6)<\/code><\/pre>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4dd3ee125245b3d8527c006ab509c7ad wp-block-paragraph\">4. Huomaa, ett\u00e4 pelk\u00e4st\u00e4\u00e4n pelisilmukka ei ole muuttunut.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>neli\u00f62 = pygame.Rect(10, 10, 20, 20)\nluku = 0\nwhile k\u00e4ynniss\u00e4:\n    luku += 1\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            pygame.quit()\n            sys.exit()\n    if luku % 2 == 1:\n        neli\u00f62.x = neli\u00f62.x+60\n    else:\n        neli\u00f62.x = neli\u00f62.x-60\n\n    \n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 0, 0), neli\u00f6)\n    pygame.draw.rect(n\u00e4ytt\u00f6, (255, 255, 0), neli\u00f62)\n\n    pygame.display.update(&#091;neli\u00f6, neli\u00f62])\n    kello.tick(10)<\/code><\/pre>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-35&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-35-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-35\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-35\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-35-panel\" role=\"region\" class=\"wp-block-accordion-panel has-black-color has-text-color has-link-color wp-elements-0efcb2aaee84328f27253cb30f35baec is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<ol class=\"wp-block-list\">\n<li>p\u00e4ivitt\u00e4\u00e4 koko n\u00e4yt\u00f6n ilman muuta, sill\u00e4 se on flip()-komennon tarkoitus.<\/li>\n\n\n\n<li>p\u00e4ivitt\u00e4\u00e4 my\u00f6s koko n\u00e4yt\u00f6n, sill\u00e4 update()-komennolla ei ole parametria, joten se toimii kuten flip()<\/li>\n\n\n\n<li>ei p\u00e4ivit\u00e4 koko n\u00e4ytt\u00f6\u00e4, sill\u00e4 update()-komennolle on annettu parametriksi neli\u00f6. T\u00e4ll\u00f6in vain neli\u00f6 p\u00e4ivittyy. Vaikka se onkin ainut asia, joka on piirretty n\u00e4yt\u00f6lle, ei koko n\u00e4ytt\u00f6 silti p\u00e4ivity.<\/li>\n\n\n\n<li>ei p\u00e4ivit\u00e4 koko n\u00e4ytt\u00f6\u00e4, sill\u00e4 update()-komennolle on annettu parametriksi lista. update() p\u00e4ivitt\u00e4\u00e4 kaikki listan j\u00e4senet, mutta koko n\u00e4ytt\u00f6 ei taaskaan p\u00e4ivity.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Ohjaaminen ja vuorovaikutus<\/strong><\/h4>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-a63a4038f0304cb488c7d3cc89816ef9\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 6<\/strong><\/h5>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-719f012dc73c668cfdce6d98411a494b wp-block-paragraph\" style=\"font-size:16px\">Tutki annettua koodia ja selvit\u00e4, mit\u00e4 n\u00e4pp\u00e4int\u00e4 painamalla saat jotain tapahtumaan. K\u00e4yt\u00e4 apuna Pygamen dokumentaatiota (<a href=\"https:\/\/www.pygame.org\/docs\/ref\/key.html\" target=\"_blank\" rel=\"noreferrer noopener\">pygame.key \u2014 pygame v2.6.0 documentation<\/a>). Aja annettu koodi ja paina n\u00e4pp\u00e4int\u00e4. Kirjoita lyhyt vastaus siit\u00e4, mit\u00e4 tapahtui.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nscreen = pygame.display.set_mode((400, 300))\n\nrgb = (0, 0, 0)\nrunning = True\nkello = pygame.time.Clock()\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n        \n        nappaimet = pygame.key.get_pressed()\n    \n        if nappaimet&#091;pygame.K_SPACE] == True:\n            rgb = (255, 0, 0)\n        if nappaimet&#091;pygame.K_SPACE] == False:\n            rgb = (255, 255, 0)\n\n    screen.fill((0, 0, 0))\n    pygame.draw.rect(screen, rgb, (175, 125, 50, 50))\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-36&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-36-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-36\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-36\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-36-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">V\u00e4lily\u00f6ntin\u00e4pp\u00e4imen painaminen saa muutoksen aikaiseksi. Painiketta painamalla ruudulla n\u00e4kyv\u00e4n neli\u00f6n v\u00e4ri vaihtuu keltaisesta punaiseksi. Punainen v\u00e4ri n\u00e4kyy niin kauan, kun v\u00e4lily\u00f6ntin\u00e4pp\u00e4in on pohjassa.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 7<\/strong><\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c3b0a332938dc72c8fc44082d2c439ef wp-block-paragraph\"><strong>a. <\/strong>Kirjoita koodi, jolla voit liikuttaa kuviota (esimerkiksi neli\u00f6) yl\u00f6s, alas ja sivuille. Liit\u00e4 liike nuolin\u00e4pp\u00e4imiin sek\u00e4 wasd-n\u00e4pp\u00e4imiin.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-37&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-37-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-37\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-37\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-37-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkki ratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#kirjasto(t)\nimport pygame\n\n#alustetaan Pygame\npygame.init()\n\n#Peli-ikkunan m\u00e4\u00e4ritys\nscreen = pygame.display.set_mode((400, 300))\n\n#muuttujat\nx, y = 175, 125\nnopeus = 10\nrunning = True\n\nkello = pygame.time.Clock()\n\nnelio = pygame.Rect(x, y, 50, 50)\n\n#Pelisilmukka\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n        \n        nappaimet = pygame.key.get_pressed()\n    \n        if nappaimet&#091;pygame.K_UP] or nappaimet&#091;pygame.K_w]: #yl\u00f6s\n            nelio.y = nelio.y - nopeus\n        if nappaimet&#091;pygame.K_DOWN] or nappaimet&#091;pygame.K_s]: #alas\n            nelio.y = nelio.y + nopeus\n        if nappaimet&#091;pygame.K_RIGHT] or nappaimet&#091;pygame.K_d]: #oikealle\n            nelio.x = nelio.x + nopeus\n        if nappaimet&#091;pygame.K_LEFT] or nappaimet&#091;pygame.K_a]: #vasemmalle\n            nelio.x = nelio.x - nopeus\n\n    screen.fill((0, 0, 0))\n    pygame.draw.rect(screen, (255, 255, 255), nelio)\n    pygame.display.flip()\n    kello.tick(60)\n\n#Pygame sulku\/lopetus\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-15c117b6c30f092156feb1e3c040faaf\" style=\"font-size:16px\"><strong>b. <\/strong>Muokkaa a-kohdan koodia niin, ett\u00e4 kuvio ei p\u00e4\u00e4se poistumaan peli-ikkunasta. L\u00f6yd\u00e4t valmiin funktion dokumentaatiosta (<a href=\"https:\/\/www.pygame.org\/docs\/ref\/rect.html\" target=\"_blank\" rel=\"noreferrer noopener\">pygame.Rect \u2014 pygame v2.6.0 documentation<\/a>) tai voit k\u00e4ytt\u00e4\u00e4 muuta menetelm\u00e4\u00e4.<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-38&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-38-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-38\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-38\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-38-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Tapa 1. Valmiilla Pygame funktiolla<\/summary>\n<p class=\"wp-block-paragraph\">Esimerkki ratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nscreen = pygame.display.set_mode((400, 300))\n\nx, y = 175, 125\nnopeus = 10\nrunning = True\n\nnelio = pygame.Rect(x, y, 50, 50)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    \n        nappaimet = pygame.key.get_pressed()\n\n        if nappaimet&#091;pygame.K_UP] or nappaimet&#091;pygame.K_w]:\n            nelio.y = nelio.y - nopeus\n        if nappaimet&#091;pygame.K_DOWN] or nappaimet&#091;pygame.K_s]:\n            nelio.y = nelio.y + nopeus\n        if nappaimet&#091;pygame.K_RIGHT] or nappaimet&#091;pygame.K_d]:\n            nelio.x = nelio.x + nopeus\n        if nappaimet&#091;pygame.K_LEFT] or nappaimet&#091;pygame.K_a]:\n            nelio.x = nelio.x - nopeus\n\n    nelio.clamp_ip(screen.get_rect()) #varmistaa ettei hahmo poistu peli-ikkunasta\n\n    screen.fill((0, 0, 0))\n    pygame.draw.rect(screen, (255, 255, 255), nelio)\n    pygame.display.flip()\n\npygame.quit()<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Tapa 2. Ehtorakenteella<\/summary>\n<p class=\"wp-block-paragraph\">Esimerkki ratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\n\nx, y = 175, 125\nnopeus = 10\nrunning = True\nkorkeus = 300\nleveys = 400\n\nscreen = pygame.display.set_mode((leveys, korkeus))\nnelio = pygame.Rect(x, y, 50, 50)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    \n        nappaimet = pygame.key.get_pressed()\n\n        if nappaimet&#091;pygame.K_UP] and nelio.y &gt; 0:\n            nelio.y = nelio.y - nopeus\n        if nappaimet&#091;pygame.K_DOWN] and nelio.y &lt; korkeus-50: #50 = neli\u00f6n korkeus\n            nelio.y = nelio.y + nopeus\n        if nappaimet&#091;pygame.K_RIGHT] and nelio.x &lt; leveys-50: #50 = neli\u00f6n leveys\n            nelio.x = nelio.x + nopeus\n        if nappaimet&#091;pygame.K_LEFT] and nelio.x &gt; 0:\n            nelio.x = nelio.x - nopeus\n\n    screen.fill((0, 0, 0))\n    pygame.draw.rect(screen, (255, 255, 255), nelio)\n    pygame.display.flip()\n\npygame.quit()<\/code><\/pre>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>c. <\/strong>Muokkaa koodia viel\u00e4 niin, ett\u00e4 n\u00e4pp\u00e4int\u00e4 painettaessa liike jatkuu niin kauan kuin n\u00e4pp\u00e4in on pohjassa.<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-39&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-39-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-39\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-39\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-39-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkki ratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nscreen = pygame.display.set_mode((400, 300))\n\nx, y = 175, 125\nnopeus = 10\nrunning = True\nkello = pygame.time.Clock()\n\nnelio = pygame.Rect(x, y, 50, 50)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    \n        nappaimet = pygame.key.get_pressed()\n\n    if nappaimet&#091;pygame.K_UP] or nappaimet&#091;pygame.K_w]:\n        nelio.y = nelio.y - nopeus\n    if nappaimet&#091;pygame.K_DOWN] or nappaimet&#091;pygame.K_s]:\n        nelio.y = nelio.y + nopeus\n    if nappaimet&#091;pygame.K_RIGHT] or nappaimet&#091;pygame.K_d]:\n        nelio.x = nelio.x + nopeus\n    if nappaimet&#091;pygame.K_LEFT] or nappaimet&#091;pygame.K_a]:\n        nelio.x = nelio.x - nopeus\n\n    nelio.clamp_ip(screen.get_rect())\n\n    screen.fill((0, 0, 0))\n    pygame.draw.rect(screen, (255, 255, 255), nelio)\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>d. <\/strong>Muuta ohjelman n\u00e4pp\u00e4inohjaus tapahtumapohjaiseksi (event-based). Korvaa siis aikaisempi tilakyselyyn (get_pressed) perustuva koodi tapahtumapohjaisella vaihtoehdolla. Ohjelman tulee edelleen toimia samalla tavalla kuin b-kohdassa.<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-40&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-40-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-40\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-40\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-40-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkki ratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nscreen = pygame.display.set_mode((400, 300))\n\nx, y = 175, 125\nnopeus = 10\nrunning = True\nkello = pygame.time.Clock()\n\nnelio = pygame.Rect(x, y, 50, 50)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n        if event.type == pygame.KEYDOWN:\n            if event.key in (pygame.K_UP, pygame.K_w):\n                nelio.y = nelio.y - nopeus\n            if event.key in (pygame.K_DOWN, pygame.K_s):\n                nelio.y = nelio.y + nopeus\n            if event.key in (pygame.K_RIGHT, pygame.K_d):\n                nelio.x = nelio.x + nopeus\n            if event.key in (pygame.K_LEFT, pygame.K_a):\n                nelio.x = nelio.x - nopeus\n\n    nelio.clamp_ip(screen.get_rect())\n\n    screen.fill((0, 0, 0))\n    pygame.draw.rect(screen, (255, 255, 255), nelio)\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 8 <\/strong><\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-63b77b4ca9871c2aeb5899ce8c3f6911 wp-block-paragraph\" style=\"font-size:16px\">Kirjoita ohjelma, jossa hahmoa pystyy liikuttamaan hiirell\u00e4, kun hiiren oikea painike on painettuna.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-41&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-41-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-41\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-41\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-41-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkki ratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#kirjasto(t)\nimport pygame\n\n# Alustus\npygame.init()\nnaytto = pygame.display.set_mode((800, 600))\nrect = pygame.Rect(300, 200, 50, 50)\nkello = pygame.time.Clock()\n\n#muuttujat\nraahata = False\n\nkaynnissa = True\n\n#Pelisilmukka\nwhile kaynnissa:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            kaynnissa = False\n        elif event.type == pygame.MOUSEBUTTONDOWN:\n            if event.button == 3:\n                raahata = True\n        elif event.type == pygame.MOUSEBUTTONUP:\n            raahata = False\n        elif event.type == pygame.MOUSEMOTION:\n            if raahata:\n                rect.move_ip(event.rel) \n\n    naytto.fill((30, 30, 30))\n    pygame.draw.rect(naytto, (0, 255, 0), rect)\n    pygame.display.flip()\n    kello.tick(60)\n\n#peli lopetus\/sulku\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Pelilogiikka ja s\u00e4\u00e4nn\u00f6t<\/strong><\/h4>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Teht\u00e4v\u00e4 9<\/strong><\/h5>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-16811fda0c20725d605d9389ae29a867 wp-block-paragraph\"><strong>a. <\/strong>Toteuta peli-ikkunaan labyrintin pohja esimerkin mukaan tai voit my\u00f6s suunnitella labyrintin itse. Pohjan voit toteuttaa esimerkiksi listan avulla, jossa x=sein\u00e4, p=pelaaja ja m=maali.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-color has-text-color has-link-color has-fixed-layout\"><tbody><tr><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>p<\/td><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>x<\/td><td>&nbsp;<\/td><td>m<\/td><td>x<\/td><\/tr><tr><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><td>x<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-42&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-42-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-42\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-42\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-42-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkiratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nnaytto = pygame.display.set_mode((650, 400))\nkello = pygame.time.Clock()\n\nrunning = True\n\nkartta = &#091;\n    \"xxxxxxxxxxxxx\",\n    \"x  px     x x\",\n    \"x xxxxx x x x\",\n    \"x     x x x x\",\n    \"x xxx   x   x\",\n    \"x   xxxxxx xx\",\n    \"x x      x mx\",\n    \"xxxxxxxxxxxxx\"\n]\n\n# Luo sein\u00e4t\nseinat = &#091;]\nmaali = None\npelaaja = None\n\nfor y in range(len(kartta)):\n    for x in range(len(kartta&#091;0])):\n        if kartta&#091;y]&#091;x] == \"x\":\n            seinat.append(pygame.Rect(x*50, y*50, 50, 50))\n        if kartta&#091;y]&#091;x] == \"m\":\n            maali = pygame.Rect(x*50, y*50, 50, 50)\n        if kartta&#091;y]&#091;x] == \"p\":\n            pelaaja = pygame.Rect(x*50, y*50, 40, 40)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n\n    for s in seinat:\n        pygame.draw.rect(naytto, (100, 100, 100), s)\n\n    if maali:\n        pygame.draw.rect(naytto, (0, 255, 0), maali)\n\n    pygame.draw.rect(naytto, (255, 255, 255), pelaaja)\n\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-32b252983f85bb50482fe1f21c5a3ff4 wp-block-paragraph\" style=\"font-size:16px\"><strong>b.<\/strong> Muokkaa pelin hahmoa (pelaaja) niin, ett\u00e4 se p\u00e4\u00e4see liikkumaan sallitulla alueella (k\u00e4yt\u00e4v\u00e4t) eik\u00e4 pysty l\u00e4p\u00e4isem\u00e4\u00e4n seini\u00e4. Apua t\u00f6rm\u00e4yksen tarkistamiseen saat dokumentaatiosta (<a href=\"https:\/\/www.pygame.org\/docs\/ref\/rect.html\">pygame.Rect \u2014 pygame v2.6.0 documentation<\/a>)<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-43&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-43-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-43\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-43\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-43-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkiratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nnaytto = pygame.display.set_mode((650, 400))\nkello = pygame.time.Clock()\n\nrunning = True\nnopeus = 1\nseinat = &#091;]\nmaali = None\npelaaja = None\nkartta = &#091;\n    \"xxxxxxxxxxxxx\",\n    \"x  px     x x\",\n    \"x xxxxx x x x\",\n    \"x     x x x x\",\n    \"x xxx   x   x\",\n    \"x   xxxxxx xx\",\n    \"x x      x mx\",\n    \"xxxxxxxxxxxxx\"\n]\n\n\nfor y in range(len(kartta)):\n    for x in range(len(kartta&#091;0])):\n        if kartta&#091;y]&#091;x] == \"x\":\n            seinat.append(pygame.Rect(x*50, y*50, 50, 50))\n        if kartta&#091;y]&#091;x] == \"m\":\n            maali = pygame.Rect(x*50, y*50, 50, 50)\n        if kartta&#091;y]&#091;x] == \"p\":\n            pelaaja = pygame.Rect(x*50, y*50, 40, 40)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n\n    nappaimet = pygame.key.get_pressed()\n    vanha = pelaaja.copy()\n\n    if nappaimet&#091;pygame.K_UP]:\n        pelaaja.y = pelaaja.y - nopeus\n    if nappaimet&#091;pygame.K_DOWN]:\n        pelaaja.y = pelaaja.y + nopeus\n    if nappaimet&#091;pygame.K_RIGHT]:\n        pelaaja.x = pelaaja.x + nopeus\n    if nappaimet&#091;pygame.K_LEFT]:\n        pelaaja.x = pelaaja.x - nopeus\n\n    for s in seinat:\n        if pelaaja.colliderect(s):\n            pelaaja = vanha\n\n\n    naytto.fill((0, 0, 0))\n    for s in seinat:\n        pygame.draw.rect(naytto, (100, 100, 100), s)\n\n    if maali:\n        pygame.draw.rect(naytto, (0, 255, 0), maali)\n\n    pygame.draw.rect(naytto, (255, 255, 255), pelaaja)\n\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ddf94dc811dbd8460ca0641d3a286d96 wp-block-paragraph\" style=\"font-size:16px\"><strong>c.<\/strong> Luo labyrinttiin lopetus (maali). Hahmon p\u00e4\u00e4sty\u00e4 maaliin ilmestyy peli-ikkunaan teksti \u201cP\u00e4\u00e4sit maaliin\u201d. Peli my\u00f6s ns. j\u00e4\u00e4tyy t\u00e4ss\u00e4 kohtaa eli hahmoa ei pysty en\u00e4\u00e4 liikuttamaan. Peli siis p\u00e4\u00e4ttyy.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-44&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-44-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-44\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-44\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-44-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkiratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nnaytto = pygame.display.set_mode((650, 400))\nkello = pygame.time.Clock()\n\nrunning = True\nnopeus = 1\nfontti = pygame.font.SysFont(\"Arial\", 40)\nnayta_teksti = False\nkaynnissa = True\nseinat = &#091;]\nmaali = None\npelaaja = None\nkartta = &#091;\n    \"xxxxxxxxxxxxx\",\n    \"x  px     x x\",\n    \"x xxxxx x x x\",\n    \"x     x x x x\",\n    \"x xxx   x   x\",\n    \"x   xxxxxx xx\",\n    \"x x      x mx\",\n    \"xxxxxxxxxxxxx\"\n]\n\nfor y in range(len(kartta)):\n    for x in range(len(kartta&#091;0])):\n        if kartta&#091;y]&#091;x] == \"x\":\n            seinat.append(pygame.Rect(x*50, y*50, 50, 50))\n        if kartta&#091;y]&#091;x] == \"m\":\n            maali = pygame.Rect(x*50, y*50, 50, 50)\n        if kartta&#091;y]&#091;x] == \"p\":\n            pelaaja = pygame.Rect(x*50, y*50, 40, 40)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    if kaynnissa == True:\n        nappaimet = pygame.key.get_pressed()\n        vanha = pelaaja.copy()\n\n        if nappaimet&#091;pygame.K_UP]:\n            pelaaja.y = pelaaja.y - nopeus\n        if nappaimet&#091;pygame.K_DOWN]:\n            pelaaja.y = pelaaja.y + nopeus\n        if nappaimet&#091;pygame.K_RIGHT]:\n            pelaaja.x = pelaaja.x + nopeus\n        if nappaimet&#091;pygame.K_LEFT]:\n            pelaaja.x = pelaaja.x - nopeus\n\n    for s in seinat:\n        if pelaaja.colliderect(s):\n            pelaaja = vanha\n    \n    if maali.contains(pelaaja):\n        nayta_teksti = True\n        kaynnissa = False\n\n    naytto.fill((0, 0, 0))\n    for s in seinat:\n        pygame.draw.rect(naytto, (100, 100, 100), s)\n\n    if maali:\n        pygame.draw.rect(naytto, (0, 255, 0), maali)\n\n    pygame.draw.rect(naytto, (255, 255, 255), pelaaja)\n\n    if nayta_teksti == True:\n        teksti_pinta = fontti.render(\"P\u00e4\u00e4sit maaliin!\", True, (255, 255, 255))\n        # Lasketaan tekstin keskikohta\n        teksti_rect = teksti_pinta.get_rect(center=(650\/2, 400\/2))\n        naytto.blit(teksti_pinta, teksti_rect)\n\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3064663c8fb645fd9d26319a4c839a3b wp-block-paragraph\" style=\"font-size:16px\"><strong>d.<\/strong> Lis\u00e4\u00e4 labyrinttiin vihollinen, joka kulkee m\u00e4\u00e4ritetyss\u00e4 kohdassa s\u00e4\u00e4nn\u00f6llisesti. Vihollisen kohdan voit p\u00e4\u00e4tt\u00e4\u00e4 itse tai voit laittaa sen kulkemaan yl\u00f6s-alas ensimm\u00e4iselle k\u00e4yt\u00e4v\u00e4lle. Jos pelaaja osuu viholliseen, peli p\u00e4\u00e4ttyy.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-45&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-45-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-45\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-45\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-45-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkiratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nnaytto = pygame.display.set_mode((650, 400))\nkello = pygame.time.Clock()\n\nrunning = True\nnopeus = 1\nfontti = pygame.font.SysFont(\"Arial\", 40)\nnayta_teksti = False\nkaynnissa = True\ntappio = False\nseinat = &#091;]\nmaali = None\npelaaja = None\nvihollinen = pygame.Rect(52.5, 100, 40, 40)\nvihollis_nopeus = 1\nsuunta = 1  # 1 = alas, -1 = yl\u00f6s\nkartta = &#091;\n    \"xxxxxxxxxxxxx\",\n    \"x  px     x x\",\n    \"x xxxxx x x x\",\n    \"x     x x x x\",\n    \"x xxx   x   x\",\n    \"x   xxxxxx xx\",\n    \"x x      x mx\",\n    \"xxxxxxxxxxxxx\"\n]\n\nfor y in range(len(kartta)):\n    for x in range(len(kartta&#091;0])):\n        if kartta&#091;y]&#091;x] == \"x\":\n            seinat.append(pygame.Rect(x*50, y*50, 50, 50))\n        if kartta&#091;y]&#091;x] == \"m\":\n            maali = pygame.Rect(x*50, y*50, 50, 50)\n        if kartta&#091;y]&#091;x] == \"p\":\n            pelaaja = pygame.Rect(x*50, y*50, 40, 40)\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    if kaynnissa == True:\n        nappaimet = pygame.key.get_pressed()\n        vanha = pelaaja.copy()\n\n        if nappaimet&#091;pygame.K_UP]:\n            pelaaja.y = pelaaja.y - nopeus\n        if nappaimet&#091;pygame.K_DOWN]:\n            pelaaja.y = pelaaja.y + nopeus\n        if nappaimet&#091;pygame.K_RIGHT]:\n            pelaaja.x = pelaaja.x + nopeus\n        if nappaimet&#091;pygame.K_LEFT]:\n            pelaaja.x = pelaaja.x - nopeus\n\n        vihollinen.y += vihollis_nopeus * suunta\n\n        # vaihda suuntaa kun osuu reunoihin\n        if vihollinen.y &lt; 50 or vihollinen.y &gt; 300:\n            suunta *= -1\n\n        if pelaaja.colliderect(vihollinen):\n            kaynnissa = False\n            tappio = True\n\n    for s in seinat:\n        if pelaaja.colliderect(s):\n            pelaaja = vanha\n    \n    if maali.contains(pelaaja):\n        nayta_teksti = True\n        kaynnissa = False\n\n    naytto.fill((0, 0, 0))\n    for s in seinat:\n        pygame.draw.rect(naytto, (100, 100, 100), s)\n\n    if maali:\n        pygame.draw.rect(naytto, (0, 255, 0), maali)\n\n    pygame.draw.rect(naytto, (255, 255, 255), pelaaja)\n\n    pygame.draw.rect(naytto, (255, 0, 0), vihollinen) \n\n    if tappio == True:\n        teksti_pinta = fontti.render(\"H\u00e4visit!\", True, (255, 255, 255))\n        # Lasketaan tekstin keskikohta\n        teksti_rect = teksti_pinta.get_rect(center=(650\/2, 400\/2))\n        naytto.blit(teksti_pinta, teksti_rect)\n\n    if nayta_teksti == True:\n        teksti_pinta = fontti.render(\"P\u00e4\u00e4sit maaliin!\", True, (255, 255, 255))\n        # Lasketaan tekstin keskikohta\n        teksti_rect = teksti_pinta.get_rect(center=(650\/2, 400\/2))\n        naytto.blit(teksti_pinta, teksti_rect)\n\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-999aff0c6153785d729bafc68f9a4622 wp-block-paragraph\" style=\"font-size:16px\"><strong>e.<\/strong> Lis\u00e4\u00e4 peliin palkinto jokaiseen k\u00e4yt\u00e4v\u00e4ruutuun (v\u00e4lily\u00f6nnit). Palkinnon tulee kadota samalla, kun siihen osuu. Pelaajan osuessa palkintoon pistem\u00e4\u00e4r\u00e4 kasvaa yhdell\u00e4.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-46&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-46-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-46\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-46\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-46-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkiratkaisu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame\n\npygame.init()\nnaytto = pygame.display.set_mode((650, 400))\nkello = pygame.time.Clock()\n\nrunning = True\nnopeus = 1\nfontti = pygame.font.SysFont(\"Arial\", 40)\nnayta_teksti = False\nkaynnissa = True\ntappio = False\npalkinnot = &#091;]\npisteet = 0\nseinat = &#091;]\nmaali = None\npelaaja = None\npalkinto = None\n\nkartta = &#091;\n    \"xxxxxxxxxxxxx\",\n    \"x  px     x x\",\n    \"x xxxxx x x x\",\n    \"x     x x x x\",\n    \"x xxx   x   x\",\n    \"x   xxxxxx xx\",\n    \"x x      x mx\",\n    \"xxxxxxxxxxxxx\"\n]\n\nfor y in range(len(kartta)):\n    for x in range(len(kartta&#091;0])):\n        if kartta&#091;y]&#091;x] == \"x\":\n            seinat.append(pygame.Rect(x*50, y*50, 50, 50))\n        if kartta&#091;y]&#091;x] == \"m\":\n            maali = pygame.Rect(x*50, y*50, 50, 50)\n        if kartta&#091;y]&#091;x] == \"p\":\n            pelaaja = pygame.Rect(x*50, y*50, 40, 40)\n        if kartta&#091;y]&#091;x] == \" \":\n            palkinnot.append(pygame.Rect(x*51.5, y*51.5, 30, 30)) #mahdollisimman keskell\u00e4 \"ruutua\"\n\n\nvihollinen = pygame.Rect(52.5, 52.5, 40, 40)\nvihollis_nopeus = 1\nsuunta = 1  # 1 = alas, -1 = yl\u00f6s\n\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n    if kaynnissa == True:\n        nappaimet = pygame.key.get_pressed()\n        vanha = pelaaja.copy()\n\n        if nappaimet&#091;pygame.K_UP]:\n            pelaaja.y = pelaaja.y - nopeus\n        if nappaimet&#091;pygame.K_DOWN]:\n            pelaaja.y = pelaaja.y + nopeus\n        if nappaimet&#091;pygame.K_RIGHT]:\n            pelaaja.x = pelaaja.x + nopeus\n        if nappaimet&#091;pygame.K_LEFT]:\n            pelaaja.x = pelaaja.x - nopeus\n\n        vihollinen.y += vihollis_nopeus * suunta\n\n        # vaihda suuntaa kun osuu reunoihin\n        if vihollinen.y &lt; 50 or vihollinen.y &gt; 300:\n            suunta *= -1\n\n        if pelaaja.colliderect(vihollinen):\n            kaynnissa = False\n            tappio = True\n\n    for s in seinat:\n        if pelaaja.colliderect(s):\n            pelaaja = vanha\n    \n    if maali.contains(pelaaja):\n        nayta_teksti = True\n        kaynnissa = False\n\n    naytto.fill((0, 0, 0))\n    for s in seinat:\n        pygame.draw.rect(naytto, (100, 100, 100), s)\n\n    if maali:\n        pygame.draw.rect(naytto, (0, 255, 0), maali)\n\n    pygame.draw.rect(naytto, (255, 255, 255), pelaaja) \n\n    for palkinto in palkinnot&#091;:]:\n        pygame.draw.rect(naytto, (255, 255, 0), palkinto) \n        if pelaaja.colliderect(palkinto):\n            pisteet += 1\n            palkinnot.remove(palkinto)\n            break\n\n    pygame.draw.rect(naytto, (255, 0, 0), vihollinen) \n\n    if tappio == True:\n        teksti_pinta = fontti.render(\"H\u00e4visit!\", True, (255, 255, 255))\n        # Lasketaan tekstin keskikohta\n        teksti_rect = teksti_pinta.get_rect(center=(650\/2, 400\/2))\n        naytto.blit(teksti_pinta, teksti_rect)\n\n    if nayta_teksti == True:\n        teksti_pinta = fontti.render(\"P\u00e4\u00e4sit maaliin!\", True, (255, 255, 255))\n        # Lasketaan tekstin keskikohta\n        teksti_rect = teksti_pinta.get_rect(center=(650\/2, 400\/2))\n        naytto.blit(teksti_pinta, teksti_rect)\n    \n    score_text = fontti.render(f\"Pisteet: {pisteet}\", True, (255, 255, 255)) # Valkoinen teksti\n    naytto.blit(score_text, (10, 10)) # Piirret\u00e4\u00e4n koordinaatteihin (10, 10)\n\n    pygame.display.flip()\n    kello.tick(60)\n\npygame.quit()<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:25px\"><strong>2. Lopputeht\u00e4v\u00e4<\/strong><\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4b3e681a0a54384ba26c9a6de7a09afd wp-block-paragraph\"><strong>Valitse kaksi projektiteht\u00e4v\u00e4\u00e4 tai projektiteht\u00e4v\u00e4 4. Lis\u00e4ksi kirjoita raportti. <\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-42f13d557d9006a71c6b30dad830b65f wp-block-paragraph\">Projektiteht\u00e4vist\u00e4 tulee toteuttaa joko kaksi projektiteht\u00e4vist\u00e4 1\u20133 tai yksi laajempi projektiteht\u00e4v\u00e4 4. Lis\u00e4ksi tulee kirjoittaa v\u00e4hint\u00e4\u00e4n 200 sanan raportti, jossa kuvailet, miten rakensit lopputy\u00f6n. Raporttiin voi my\u00f6s sis\u00e4llytt\u00e4\u00e4 koodiesimerkkej\u00e4. Kuvaa jokaisesta projektiteht\u00e4v\u00e4st\u00e4 oma n\u00e4ytt\u00f6video.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-212c532aa8e05e8abe62259a37169bd0 wp-block-paragraph\">Mallivideon, malliratkaisujen sek\u00e4 pitkien tekstip\u00e4tkien kopioiminen Pygamen kirjastosta teko\u00e4lylle on kielletty\u00e4. Projektin rakenteen tulee perustua perusteht\u00e4vien kaltaisiin ratkaisuihin ja esimerkkeihin. Pelin tarkoituksena on tukea omaa oppimistasi, joten projekti tulee toteuttaa vaiheittain pieniss\u00e4 osissa. Vaikka teko\u00e4ly pystyy tuottamaan kokonaisen pelin kerralla, sit\u00e4 ei saa tehd\u00e4 lopputy\u00f6ss\u00e4. T\u00e4ll\u00f6in et v\u00e4ltt\u00e4m\u00e4tt\u00e4 ymm\u00e4rr\u00e4, mit\u00e4 koodissa tapahtuu. Lis\u00e4ksi kokonaisuus on liian suuri hahmottaa kerralla, jolloin virheiden l\u00f6yt\u00e4minen ja korjaaminen on vaikeampaa. Suuremmat ohjelmat, kuten esimerkiksi 10\u202f000 rivin kokonaisuudet, rakennetaan ja ymm\u00e4rret\u00e4\u00e4n jakamalla ne pienempiin osiin, koska koko koodia ei voi hahmottaa tai rakentaa kerralla.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-95c7bbd70095b7b6fa6729ec898b805b wp-block-paragraph\">Projektiteht\u00e4viss\u00e4 1\u20133. tulee olla v\u00e4hint\u00e4\u00e4n 50 koodirivi\u00e4. Tyhji\u00e4 riviv\u00e4lej\u00e4 ja kommentteja ei lasketa mukaan. Ohjelmassa tulee k\u00e4ytt\u00e4\u00e4 v\u00e4hint\u00e4\u00e4n kolmea funktiota. Mallivideot n\u00e4ytt\u00e4v\u00e4t projektin v\u00e4himm\u00e4istason eli sen, mit\u00e4 peliss\u00e4 tulee v\u00e4hint\u00e4\u00e4n olla. Halutessasi voit kuitenkin laajentaa peli\u00e4 lis\u00e4\u00e4m\u00e4ll\u00e4 omia toiminnallisuuksia, kuten kuvia.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ec72b6c2f684c066b9a2bfaf8204ba0b wp-block-paragraph\">Projektiteht\u00e4v\u00e4ss\u00e4 4. tulee olla v\u00e4hint\u00e4\u00e4n 120 koodirivi\u00e4. Tyhji\u00e4 riviv\u00e4lej\u00e4 ja kommentteja ei lasketa mukaan. Ohjelmassa tulee k\u00e4ytt\u00e4\u00e4 v\u00e4hint\u00e4\u00e4n kuutta funktiota. Peliss\u00e4 tulee olla kuvia, piirrettyj\u00e4 objekteja, ohjattavia osia, vuorovaikutusta eri osien v\u00e4lill\u00e4, pisteit\u00e4 kasvattava elementti, pisteit\u00e4 v\u00e4hent\u00e4v\u00e4 elementti, pisteiden n\u00e4ytt\u00e4minen sek\u00e4 pelin p\u00e4\u00e4ttyminen jonkin ehdon perusteella.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-47&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-47-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-47\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vinkkej\u00e4 pelin rakentamiseen<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-47\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-47-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Rakenna pelisilmukka.<\/li>\n\n\n\n<li>Mieti, miten liikkuvat objektit on toteutettu ja millaisessa muodossa ne ovat koodissa. Mallinna rakenne aluksi paikallaan.<\/li>\n\n\n\n<li>Lis\u00e4\u00e4 liike perusteht\u00e4viss\u00e4 opitulla tavalla. Onko liikkeess\u00e4 ehtoja?<\/li>\n\n\n\n<li>Pohdi, mit\u00e4 t\u00f6rm\u00e4ys tarkoittaa koodissa ja miten se toteutuu kahden objektin v\u00e4lill\u00e4.<\/li>\n\n\n\n<li>Jaa toiminnalliset kokonaisuudet funktioihin.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Projektiteht\u00e4v\u00e4 1. <\/strong>Nappaajapeli<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-bdae785f0098aa830c489895e45a7478 wp-block-paragraph\">Luo nappaajapeli, jossa pelaaja hallitsee alustaa, joka h\u00e4nen on viet\u00e4v\u00e4 n\u00e4yt\u00f6n yl\u00e4reunasta &#8221;putoavien&#8221; palikoiden alle est\u00e4en niiden p\u00e4\u00e4sy n\u00e4yt\u00f6n alareunaan. Palikat putoavat aina satunnaisesta kohdasta ja niiden nopeus kiihtyy joka kerta, kun pelaaja saa palikan kiinni. Kun palikka saadaan kiinni, pistem\u00e4\u00e4r\u00e4 kasvaa yhdell\u00e4. Pistem\u00e4\u00e4r\u00e4n tulee p\u00e4ivitty\u00e4 n\u00e4yt\u00f6lle sit\u00e4 mukaa kuin palikoita saadaan kiinni. Jos palikka osuu n\u00e4yt\u00f6n alareunaan, peli p\u00e4\u00e4ttyy ja pistem\u00e4\u00e4r\u00e4 n\u00e4ytet\u00e4\u00e4n keskell\u00e4 n\u00e4ytt\u00f6\u00e4.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-48&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-48-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-48\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-48\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-48-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Peliohjelmointi - projektiteht\u00e4v\u00e4 1\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/OIaQuNNKb1E?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Projektiteht\u00e4v\u00e4 2. <\/strong>Ampumispeli<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d04e3f6508442d97a2df9d25c19c370a wp-block-paragraph\">Luo ampumispeli, jossa ylh\u00e4\u00e4lt\u00e4 laskeutuu vihollisia kohti n\u00e4yt\u00f6n alareunaa. Pelaajan on estett\u00e4v\u00e4 vihollisten p\u00e4\u00e4sy n\u00e4yt\u00f6n alareunaan ampumalla niit\u00e4 valkeilla ammuksilla, jotka aloittavat pelaajan kohdalta ja liikkuvat yl\u00f6sp\u00e4in ja osuessaan viholliseen poistavat itsens\u00e4 ja vihollisen. T\u00e4ll\u00f6in n\u00e4yt\u00f6ll\u00e4 n\u00e4kyv\u00e4 pistem\u00e4\u00e4r\u00e4 kasvaa yhdell\u00e4. Viholliset aloittavat aina satunnaisesta kohtaa ja niiden vauhti kiihtyy sit\u00e4 mukaa kuin niit\u00e4 syntyy. N\u00e4yt\u00f6lle tulee lis\u00e4ksi piirt\u00e4\u00e4 el\u00e4m\u00e4t, joita voi olla esimerkiksi kolme. El\u00e4mien m\u00e4\u00e4r\u00e4n tulee v\u00e4henty\u00e4, jos vihollinen p\u00e4\u00e4see pelaajan ohi n\u00e4yt\u00f6n alareunaan. Kun el\u00e4m\u00e4t loppuvat, peli p\u00e4\u00e4ttyy ja pistem\u00e4\u00e4r\u00e4 n\u00e4ytet\u00e4\u00e4n keskell\u00e4 n\u00e4ytt\u00f6\u00e4.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-49&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-49-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-49\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-49\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-49-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Peliohjelmointi - projektiteht\u00e4v\u00e4 2\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/daGwjtSPF-I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:18px\"><strong>Projektiteht\u00e4v\u00e4 3. <\/strong>Pong &#8211; virtuaalinen ilmakiekko<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c55a7a0c0225bf367b7155e51e575b58 wp-block-paragraph\">Luo kopio Pong-pelist\u00e4. Peliss\u00e4 pelaajat liikuttavat mailoja ja yritt\u00e4v\u00e4t est\u00e4\u00e4 pallon p\u00e4\u00e4syn omaan p\u00e4\u00e4tyyns\u00e4 viem\u00e4ll\u00e4 mailan sen eteen. Vaatimuksena on, ett\u00e4 pelaaja pystyy liikuttamaan mailaansa ja vastapelaajan maila liikkuu itsest\u00e4\u00e4n yritt\u00e4en est\u00e4\u00e4 pallon p\u00e4\u00e4syn p\u00e4\u00e4tyyn. Pallo liikkuu itsest\u00e4\u00e4n ja vaihtaa suuntaa osuessaan pelilaudan yl\u00e4- tai alareunaan tai pelaajien mailoihin. Kummankaan pelaajan maila ei saa p\u00e4\u00e4st\u00e4 n\u00e4yt\u00f6n ulkopuolelle. Kummallakin pelaajalla on pisteet, jotka tulee n\u00e4ytt\u00e4\u00e4 pelaajien omilla puolilla ja niiden tulee kasvaa, kun pallo osuu vastustajan p\u00e4\u00e4tyyn.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-50&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-50-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-50\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-50\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-50-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Peliohjelmointi - projektiteht\u00e4v\u00e4 3\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/d7ORbju3xxg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Peliohjelmointi &#8211; Pygame 1. Perusteht\u00e4v\u00e4t Tee teht\u00e4v\u00e4t Pythonilla. Kuvaa jokaisesta teht\u00e4v\u00e4n osiosta oma n\u00e4ytt\u00f6video. Jos ohjelmassa ei ole liikkuvia asioita, voit palauttaa kuvakaappauksen. Kuvaa jokaisesta teht\u00e4v\u00e4n alakohdista (eli a, b .jne) oma video ja nime\u00e4 ne teht\u00e4v\u00e4nannon mukaisesti, kuten Teht\u00e4v\u00e4_1a.<\/p>\n","protected":false},"author":3745,"featured_media":0,"parent":6,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3491","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/users\/3745"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/comments?post=3491"}],"version-history":[{"count":212,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3491\/revisions"}],"predecessor-version":[{"id":4577,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3491\/revisions\/4577"}],"up":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/6"}],"wp:attachment":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/media?parent=3491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}