{"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-09-10T13:05:27","modified_gmt":"2026-09-10T10:05:27","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, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/4-1-768x553.png 768w\" 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 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-icon has-icon-right 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\" id=\"accordion-item-2\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Peliohjelmointi<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div aria-labelledby=\"accordion-item-2\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-2-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"has-text-color has-link-color has-medium-font-size wp-elements-1 wp-block-paragraph\" style=\"color:#4ba432\"><strong>Yleisohje peliohjelmoinnin pakettiin:<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-2 wp-block-paragraph\"><strong>Ennakkovaatimukset:<\/strong> Perusosaaminen Python-ohjelmoinnista.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3 wp-block-paragraph\"><strong>Tavoite:<\/strong> Opiskelija osaa ohjelmoida Pythonin Pygame-kirjastolla yksinkertaisia pelej\u00e4.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4 wp-block-paragraph\"><strong>Tarvittavat v\u00e4lineet:<\/strong> <strong><\/strong>Tietokone.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-5 wp-block-paragraph\"><strong>Toteutus ja ty\u00f6tavat:<\/strong> <strong><\/strong>Ohjelmointipaketin voi suorittaa&nbsp;itsen\u00e4isesti. Teht\u00e4vien teossa saa hy\u00f6dynt\u00e4\u00e4 teko\u00e4ly\u00e4 ja Internetist\u00e4 l\u00f6ytyvi\u00e4 materiaaleja. Koodin suora kopioiminen muista l\u00e4hteist\u00e4 ei kuitenkaan ole suositeltavaa.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6 wp-block-paragraph\"><strong>Ohjelmointipaketin rakenne:<\/strong> Paketissa&nbsp;on kaksi&nbsp;osaa (perusosa ja lopputeht\u00e4v\u00e4).&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-7 wp-block-paragraph\">Perusosa koostuu yksinkertaisista teht\u00e4vist\u00e4, joiden tarkoituksena on perehdytt\u00e4\u00e4 opiskelija ohjelmoinnin perusteisiin Pygame\u2011kirjaston avulla.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-8 wp-block-paragraph\">Lopputeht\u00e4v\u00e4t ovat kesken\u00e4\u00e4n eri laajuisia. Suorituksina on tehd\u00e4 joko kaksi teht\u00e4v\u00e4\u00e4 teht\u00e4vist\u00e4 1-3 tai teht\u00e4v\u00e4 4&nbsp;joka on laajuudeltaan kahden teht\u00e4v\u00e4n kokoinen.&nbsp;<\/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-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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#fff0cd\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-1-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-1\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Opettajalle ohjelmointipaketin arviointiin:<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div aria-labelledby=\"accordion-item-1\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-1-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9 wp-block-paragraph\"><strong>Mik\u00e4li ohjelmointipaketti halutaan katsoa suoritukseksi ja arvioida, suosittelemme seuraavaa:<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-10 wp-block-paragraph\"><strong>Teht\u00e4vien palautus:<\/strong> N\u00e4yt\u00f6ntallenne pelin toiminnasta, koodi ja lyhyt kuvaus pelin tekemisest\u00e4.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-11 wp-block-paragraph\"><strong>Opintopisteet:<\/strong> 2 op&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-12 wp-block-paragraph\"><strong>Arviointi:<\/strong> Hyv\u00e4ksytty\/Hyl\u00e4tty&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/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\"><\/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-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-icon has-icon-right 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\" id=\"accordion-item-3\" 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 aria-labelledby=\"accordion-item-3\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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 has-link-color wp-elements-13\"><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-14 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-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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#e6f3b0\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-4-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-4\" 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 aria-labelledby=\"accordion-item-4\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-4-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-15 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-5\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-5-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-16\" 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-6\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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# 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-17 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-7\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\"\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-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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-8-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-8\" 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 aria-labelledby=\"accordion-item-8\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-8-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-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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#e6f3b0\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-9-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-9\" 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 aria-labelledby=\"accordion-item-9\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-9-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-18 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-19 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-20 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-21 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-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-icon has-icon-right 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\" id=\"accordion-item-10\" 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 aria-labelledby=\"accordion-item-10\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-10-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-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-icon has-icon-right 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\" id=\"accordion-item-11\" 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 aria-labelledby=\"accordion-item-11\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-11-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-22 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-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-icon has-icon-right 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\" id=\"accordion-item-12\" 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 aria-labelledby=\"accordion-item-12\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-12-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-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-icon has-icon-right 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\" id=\"accordion-item-13\" 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 aria-labelledby=\"accordion-item-13\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-13-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-23 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-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-icon has-icon-right 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\" id=\"accordion-item-14\" 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 aria-labelledby=\"accordion-item-14\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-14-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-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-icon has-icon-right 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\" id=\"accordion-item-15\" 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 aria-labelledby=\"accordion-item-15\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-15-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-24 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-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-icon has-icon-right 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\" id=\"accordion-item-16\" 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 aria-labelledby=\"accordion-item-16\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-16-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-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-icon has-icon-right 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\" id=\"accordion-item-17\" 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 aria-labelledby=\"accordion-item-17\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-17-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-25 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-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-icon has-icon-right 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\" id=\"accordion-item-18\" 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 aria-labelledby=\"accordion-item-18\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-18-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-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-icon has-icon-right 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\" id=\"accordion-item-19\" 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 aria-labelledby=\"accordion-item-19\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-19-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-26 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-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-icon has-icon-right 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\" id=\"accordion-item-20\" 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 aria-labelledby=\"accordion-item-20\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-20-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-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-icon has-icon-right 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\" id=\"accordion-item-21\" 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 aria-labelledby=\"accordion-item-21\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-21-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-27 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-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-icon has-icon-right 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\" id=\"accordion-item-22\" 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 aria-labelledby=\"accordion-item-22\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-22-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-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-icon has-icon-right 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\" id=\"accordion-item-23\" 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 aria-labelledby=\"accordion-item-23\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-23-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-28 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-29\"><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-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-icon has-icon-right 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\" id=\"accordion-item-24\" 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 aria-labelledby=\"accordion-item-24\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-24-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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-25\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\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-30 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-31 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-26\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\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-32 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-27\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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    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-33 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-28\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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 = 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-34 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-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-icon has-icon-right 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\" id=\"accordion-item-29\" 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 aria-labelledby=\"accordion-item-29\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-29-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-35 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-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-icon has-icon-right 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\" id=\"accordion-item-30\" 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 aria-labelledby=\"accordion-item-30\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-30-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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-31\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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    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-36 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-37 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-32\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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    \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-38 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-33\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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:\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-39 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-34\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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 = 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-40 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-35\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-35-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-41 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-42 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-43 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-44 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-45 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-46 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-36\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-36-panel\" role=\"region\" class=\"wp-block-accordion-panel has-black-color has-text-color has-link-color wp-elements-47 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-48\" 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-49 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-37\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\">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-50 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-38\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-38-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-51\" 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-39\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-39-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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-40\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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    \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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-41\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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>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-52 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-42\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\">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-53 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-43\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\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-54 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-44\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\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-55 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-45\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\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-56 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-46\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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\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-57 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-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-icon has-icon-right 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\" id=\"accordion-item-47\" 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 aria-labelledby=\"accordion-item-47\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-47-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<p class=\"has-black-color has-text-color has-link-color wp-elements-58 wp-block-paragraph\">Tee haluamasi projektiteht\u00e4v\u00e4t ohjeiden mukaan. <\/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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#fff0cd\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-48-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-48\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Arviointikriteerit (jos teht\u00e4v\u00e4si arvioidaan)<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div aria-labelledby=\"accordion-item-48\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" 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=\"has-black-color has-text-color has-link-color wp-elements-59 wp-block-paragraph\"><strong>Valitse kaksi projektiteht\u00e4v\u00e4\u00e4. Lis\u00e4ksi kirjoita raportti.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-60 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 lyhyt 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-61 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-62 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<\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/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-icon has-icon-right 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\" id=\"accordion-item-49\" 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 aria-labelledby=\"accordion-item-49\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-49-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-63 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-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-icon has-icon-right 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\" 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 aria-labelledby=\"accordion-item-50\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-50-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-64 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-51&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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-51-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-51\" 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 aria-labelledby=\"accordion-item-51\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-51-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-65 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-52&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-icon has-icon-right has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-52-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" id=\"accordion-item-52\" 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 aria-labelledby=\"accordion-item-52\" data-wp-bind--hidden=\"state.isHidden\" data-wp-on--beforematch=\"actions.handleBeforeMatch\" id=\"accordion-item-52-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":30,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3491\/revisions"}],"predecessor-version":[{"id":4652,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3491\/revisions\/4652"}],"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}]}}