File:L peli.lha
From Zak
L_peli.lha (file size: 63 KB, MIME type: application/x-lha)
Warning: This file type may contain malicious code.
By executing it, your system may be compromised.
L-peli v1.1 for Amiga.
File Summary
File | L-peli | |
Version | 1.1 | |
File size | 63 KB | |
Release date | August 27 | |
Release year | 1994 | |
Type | Video game | |
Platform | Amiga | |
Requirements | ||
License | Freeware |
Game Summary
Developer | Esa Piirilä | |
Publisher | Esa Piirilä | |
Original release date | ||
Original release year | [[:Finnish games:|]] | |
Genre | Strategy | |
Subgenre | Board | |
Series | [[:Finnish games:|]] | |
Article | L-peli | |
Website | {{{Website}}} |
LUEMINUT
###### ###### ###### ##### ## ###### ### ###### #### ######## ####### ### ##### ###### #### #### ### ### ### ### ###### ####### #### #### ### ### ### ### ############# ####### #### #### ########### ### ### ############# ########## ### ### ### ############# #### ######### ####### ####### #### ######## Versio 1.1 27. Elokuuta 94 "Voittajat eivät koskaan luovuta, eikä luovuttajat koskaan voita." Copyright © 1994 Esa Piirilä Aluksi ------ Ja heti alkuun pakolliset varoituksen sanat: TÄMÄ 'L-PELI' ON FREEWAREA ELI OHJELMAA SAA VAPAASTI LEVITTÄÄ VAIN ALKUPERÄISESSÄ MUODOSSAAN, PAKETTIIN 'LPELI11E.LHA' MITÄÄN LISÄÄMÄTTÄ TAI MITÄÄN SIITÄ POISTAMATTA. OHJELMAA EI SAA MYYDÄ, EIKÄ SIITÄ SAA MUUTENKAAN HYÖTYÄ TALOUDELLISESTI. OHJELMA TOIMITETAAN SELLAISENAAN, ILMAN MITÄÄN TAKEITA SEN TOIMIVUUDESTA TAI MISTÄÄN MUUSTAKAAN. KÄYTÄT TÄTÄ OHJELMAA TÄYSIN OMALLA VASTUULLASI. TEKIJÄ EI OTA VASTUUTA ONGELMISTA, HARMEISTA TAI VAHINGOISTA, JOTKA OVAT AIHEUTUNEET SUORANAISESTI TAI VÄLILLESTI TÄMÄN OHJELMAN KÄYTÖSTÄ. TEKIJÄ EI MYÖSKÄÄN VASTAA ESITETTYJEN ASIOIDEN PAIKKAANSAPITÄVYYDESTÄ, OHJEIDEN OIKEELLISUUDESTA TAI MAHDOLLISISTA MUISTA ASIAVIRHEISTÄ. TUTUSTU HUOLELLISESTI TÄHÄN KÄYTTÖOHJEESEEN ENNEN OHJELMAN KÄYTTÄMISTÄ. KAIKKI OIKEUDET JA KONNAT PIDÄTETÄÄN. No, Huh! Toivottavasti joku vielä uskaltaa käyttääkin ohjelmaa tuollaisen pelottelun jälkeen.... Mutta itse asiaan. Mikä L-peli on? --------------- L-Peli on kahdenhengen laudalla (4*4) pelattava strategiapeli. Kummallakin pelaajalla on L-kirjaimen muotoinen pelinappula ja lisäksi laudalla on kaksi puolueetonta pelinappulaa. Tarkoituksena on saattaa vastustaja tilanteeseen, jossa hän ei voi enää siirtää nappulaansa. Peli on helppo oppia, mutta hyväksi pelaajaksi tuleminen vaatii harjoittelua. Tämä on yksi kilpailutöistä, joka otti osaa MikroBitin (6-7/94) järjestämään ohjelmointikilpailuun. Tämän version ominaisuuksia? ---------------------------- + Helppokäyttöinen ja täysin suomenkielinen. Peliä voi pelata joystickilla, hiirellä tai näppäimistöltä. + Toimivuus useissa amigamalleissa. Toimii myös vanhempien Kickstarttien kanssa. + Erinomainen pelitaito. Viisi vaikeustasoa takaavat, että jokaiselle löytyy sopiva vastustaja. + Nopea. Peli on koodattu 100% assemblerilla, joten koneen siirtoa et joudu kauaa odottamaan. + Sopii niin aloittelijalle kuin kokeneemmallekkin pelaajalle. Pelitilanteisiin voidaan kysyä apua koneelta. + Soveltuu mainiosti harjoitteluun. Tehdyt siirrot voidaan perua ja näin kokeilla erilaisia pelitapoja. + Lisäksi pelistä löytyy yli 6000 erilaista harjoitustehtävää. Peliä tehdessä on käytetty filosofiaa: Vain olennainen on tärkeää ja kaikki tarpeeton turhaa. Mitä uutta tässä versiossa? --------------------------- 1.0 Turhan hätäisesti liikkeelle päästetty versio. Aivan loppuvaiheessa oli mukaan tullut harmittavasti muutama paha virhe. Pahoittelen syvästi tapahtunutta. 1.1 Ilmeisimmät bugit korjattu: - nappula on nyt tosiaan siiretttävä _uuteen_ paikkaan - siirtovinkkiä ei saa enää menun aikana (johti sekoiluun) - pienempiä korjauksia Mitä kuuluu pakettiin LPELI11E.LHA? ---------------------------------- Ohjelmaa saa levittää vain alkuperäisessä muuttamattomassa paketissa, johon kuuluvat seuraavat tiedostot: MD5 l-peli (itse peli) c7b5961a6898af22fdecfbe8b4a1228e l-peli.sig (allekirjoitus) 724eb212b881291418b274d7ced0b43e lueminut (tämä ohje) lueminut.sig (allekirjoitus) historia (lyhyt historiikki 672da75d6653460742c48479a0e90b35 pelin syntymisestä) sources/ l-peli11.s (pelin lähdekoodi) 405fda12c5c51c70ea1adbb0c4bbd0a6 lauta.gfx (pelilauta) fonts.gfx (kirjaimisto) aivot (tiedot siirtojen hyvyyksistä) motitus (harjoitustehtävät) Tiedostojen perässä oleva 32 merkkinen koodi on tiedostoista laskettu tiiviste algoritmilla MD5 ('Rsa Data Security, Inc. MD5 Message-Digest Algorithm). Tiiviste on eräänlainen tarkistussumma, jolla on sellainen ominaisuus, että on erittäin epätodennäköistä löytää kahta eri tiedostoa, joilla olisi sama tiiviste. MD5:n lähdekoodi on yleisesti saatavilla ja amigallekin löytyy valmiiksi käännettyjä sovelluksia. Tiedostot lueminut.sig ja l-peli.sig sisältävät tekijän digitaalisen allekirjoituksen tälle ohjeelle ja itse pelille. Niillä voidaan varmistaa niiden aitous, että ne ovat juuri ne samat tiedostot, jotka itse ohjelman tekijä on pistänyt liikkeelle. Näin voidaan olla varmoja, että kukaan ei ole muuttanut niitä matkan varrella (esim. lisännyt virusta). Julkisen avaimeni löydät mm. useimmista internetin avainpalvelimista tai lähettämällä postia tämän ohjeen lopussa olevaan osoitteeseen. Olisikin suotavaa, että ohjelmien tekijät alkaisivat hyödyntää enemmän julkisen salakirjoituksen mahdollisuuksia. Nämä signeeraukset (l-peli.sig ja lueminut.sig) on tehty Philip R. Zimmermannin ohjelmalla PGP (Pretty Good Privacy (tm)), joka on vapaassa levityksessä useimmille koneille. Lisää tietoa mm. julkisesta salakirjoituksesta saat lukemalla PGP:n mukana tulevat manuaalit. PGP:n laillisessa käytössä on rajoituksia, joten tutustu niihin ennen ohjelman käyttöä. Mitä tarvitset käyttääksesi L-peliä? ----------------------------------- - amigan - näppäimistön, joystickin/hiiren - monitorin/tv:n (50/60 Hz) - sähköä Mitkä ovat oikein pelin säännöt? -------------------------------- Säännöt eivät tosiaankaan ole turhan monimutkaiset. Kummallakin pelaajalla on L-kirjaimen muotoinen nappula ja lisäksi laudalla on kaksi puolueetonta pelinappulaa. Pelaajien on vuorollaan siirrettävä L-nappulansa uuteen paikkaan. Nappulaa voi kääntää ja kiertää kaikkiin mahdollisiin asentoihin. Nappulaa ei saa kuitenkaan sijoittaa minkään toisen nappulan päälle. Oman nappulan siirron _jälkeen_ saa pelaaja halutessaan siirtää jommankumman puolueettomista nappuloista uuteen paikkaan. Puolueetonta nappulaa ei siis välttämättä tarvitse joka kieroksella siirtää. Tarkoituksena on saattaa vastustaja tilanteeseen, jossa hänelle ei löydy enää vapaata paikkaa laudalta. Tällöin viimeksi siirron tehnyt on voittaja. Kuinka L-peliä käytetään? ------------------------ Ohjelma käynnistetään ajamalla paketista löytyvä tiedosto 'l-peli'. Ohjelma ei käynnisty, jos muistia ei ollut tarpeeksi vapaana. Kun ohjelma on onnistuneesti saatu käynnistettyä ilmaantuu ruudulle valikko, jossa on mm. seuraavat tekstit: 'F1 = Aloita uusi peli/harjoitus' 'F2 = Nollaa pisteet' 'F3 = Vaikeusaste: x' 'F4 = Pelaajien lkm: x' 'F10 = Poistuminen ohjelmasta' Eli F1:lla voidaan alustaa lauta. Jos kyseessä ei ole harjoitus, niin lauta palautuu alkutilanteeseen ja samalla arvotaan aloitussiirron tekijä, minkä jälkeen aloittaja vaihtuu aina vuorotellen pelistä toiseen. Jos on valittu harjoitus (F3) painamlla näppäintä F1 arpoo kone uuden harjoitustehtävän. Pisteet nollataan F2:lla, eikä siitä sen enempää. Näppäimellä F3 vaihdetaan vaikeusastetta (1-5). Kuudes vaikeusaste on ns. harjoittelu. Harjoitustehtävinä on erilaisia tilanteita (yhteensä 6144 kpl), joissa sinun täytyy _yhdellä_ siirrolla motittaa vastustaja niin, ettei hän voi enää siirtää. Ratkaistuasi tehtävän arvotaan jälleen uusi. Mikäli et saanut ratkaistua tehtävää, voit yritää uudelleen perumalla siirron (DEL) tai siirtyä uuteen tehtävään painamalla nappia. Pelaajien lukumäärä vaihtaa näppäin F4. Pelissä voi olla pelaajia nollasta kahteen. Nolla tarkoitaa demoa, jossa kone pelaa itseään vastaan. Vaikeimmalla tasolla demo on aika hauskannäköistä nappuloiden tanssia. Tulee ihan mieleen Wargamesin WOPR, joka epätoivoisesti etsii ratkaisua peliin, jossa ei ole voittajaa... F10:n kanssa kannataa olla varovainen. Se palauttaa takaisin sinne, mistä oli tultu. Valikosta poistutaan näppäimellä ESC. Pelin aikana ESC tuo valikon uudestaan näytölle, DEL palaa takaisin aikaisempaan siirtoo ja HELPillä saa koneen näyttämään siirtovinkin. Poistuttuasi valikosta näkyy keskellä ruutua pelilauta, jossa on kaksi L-kirjaimen muotoista nappulaa (sininen ja punainen) sekä kaksi puolueetonta nappulaa (mustat pallot). Ruudun yläkulmissa on vastakkain pelaavien nimet, joista siirtovuorossa olevan nimi on kirjoitettu kirkkaammalla. Nimien alla on pelaajien pisteet. Pisteitä saa aina voitetusta pelistä (tai harjoitustehtävän ratkaisusta). Nappuloiden siirtely -------------------- Nappuloita on mahdollista siirtää joysctikilla, hiirellä tai näppäimistöllä (tapaa ei tarvitse erikeen valita). Siirto tapahtuu seuraavasti: Siirtovuorosi aluksi sinun on siirrettävä L-nappulasi uuteen paikkaan. Siirtovuorossa oleva nappula vilkkuu. Nappulan kääntäminen tapahtuu viemällä se ensin haluamaasi kohtaan. Nappulan kääntämisessä L-nappulan risteyskohta ei muuta ruutua, joten vie se haluamaasi paikkaan ja tämän jälkeen voit kääntää sen oikeaanasentoon. Nappula kääntyy automaattisesti vain mahdollisiin asentoihin. Nappuloiden siirtelyssä seuraa koneen esimerkkiä, niin opit idean nopeasti. Siirettyäsi nappulan voit vilkkuvalla kursorilla siirtää toista puolueettomista nappuloista. Jos yrität siirtää molempia niin aikaisemmin siiretty palaa alkuperäiselle paikalleen. Jos olet jo siirtänyt L-nappulasi ja haluatkin vielä vaihtaa sen paikkaa, niin voit valita L-nappulan kursorilla ja uusia siirron (puolueeton nappula palaa samalla alkuperäiseen paikkaansa). Kun olet tyytyväinen tilanteeseen, valitse kursorilla tyhjä ruutu. Joystickilla: nappulan siirtely (vasen, oikea, ylös, alas) nappulan kääntäminen (nappi pohjassa, vasen/oikea) nappulan valinta (nappi) siirron päättäminen (valitse kursorilla tyhjä ruutu) Hiirellä: nappulan siirtely (vasen, oikea, ylös, alas) nappulan kääntäminen (hiiren oikea nappi) nappulan valinta (hiiren vasen nappi) siirron päättäminen (valitse kursorilla tyhjä ruutu) Näppäimistöllä: nappulan siirtely (kursorinäppäimet) nappulan kääntäminen (näppäin R) nappulan valinta (näppäin ENTER)) siirron päättäminen (valitse kursorilla tyhjä ruutu) (tai painamalla SPACE) Aloittelijalle -------------- Muutama sana alkuun pääsemiseksi. Kannattaa aloittaa helpoimmasta vaikeusasteesta ja vähitellen siirtyä vaikeampaan. Erittäin hyödyllistä on pelata harjoitustehtäviä (valitse vaikeusasteeksi 'Harj.' näppäimellä F3). Jos et saanut ratkaistua tehtävää voit yrittää uudelleen peruuttamalla siirron DEL näppäimellä. Jos et millään keksi sopivaa siirtoa, niin siirtovinkin saat painamalla HELP. Jos häviät pelin kannattaa aluksi peruuttaa siirtoja (DEL) ja yrittää uudelleen, jotta oppii välttämään tappioon johtavat tilanteet. Pelitaktiikasta sen verran, että kannattaa välttää L-nappulalla kulmapaikkoja, sillä ne johtavat usein välittömään tappioon. 'Tekoäly': ---------- 'Kun tulin kotiin ja odotin yllätystä, eikä minulle ollut mitään yllätystä, olin tietenkin yllättynyt.' -Witttgenstein Pelin mielenkiintoisinta antia on varmaankin poikkeuksellisen hyvä pelitaito. Joten on varmaa paikallaan kertoa hieman, miten se on saatu niinkin viisaaksi. Samalla tulee käytyä vähän läpi niitä yleisiä periaatteita, joilla peleihin voidaan saada 'älykkyyttä'. Ne, jotka haluavat säilyttää myyttiä ajattelevista koneista, voivat huoletta hypätä tämän teknisemmän selostuksen yli. Yksinpeliä varten piti kehittää jonkinlainen tekoälyrutiini siirtojen tekemiseksi. Mielessä oli ensin oppiva järjestelmä, joka olisi viisastunut virheistään ja siten kehittynyt aina vaan paremmaksi pelaajaksi. Seuraavaksi innostuin sumeasta logiikasta luettuani aihetta käsittelevän kirjan. Kaikki nämä likimääräiset menetelmät tulivat kuitenkin tarpeettomiksi, sillä löytyi paljon tehokkaampi tapa. Kaikkiin peleihinän on ainakin periaatteesta mahdollista määrittää paras mahdollinen pelistrategia. Kaikkiin peleihin, jotka päättyvät äärellisessä ajassa voittoon tai häviöön (L-peli ei välttämättä pääty) on jommalle kummalle pelaajalle olemassa pelitapa, joka vie sen aina voittoon. Monesti kuitenkin pelit ovat niin laajoja (esim. sakki, go, othello), ettei tällaisen analyysin tekeminen ole käytännössä mahdollinen. Yleensä peleissä turvaudutaankin siihen, että tilanteelle lasketaan ns. hyvyysluku, algoritmilla joka pyrkii kuvaamaan mahdollisimman hyvin sen todellista hyvyyttä. Tässä L-pelin tapauksessa mahdollisia pelitilanteita on suhteellisen vähän eli 18368. Symmetria syistä olennaisesti erilaisia tilanteita kuitenkin vain 2296. Sillä esim. seuraavat tilanteet (A,B,C,D,E,F,G,H) ovat kaikki pelin kannalta aivan samanlaisia vaikka näyttävätkin erilaisilta. B on saatu A:sta pyöräyttämällä 90° astetta vastapäivään ja muut peilailemalla symmetria-akseleiden suhteen. | 0113 3200 | 3200 3110 0122 1222 | 2221 2210 0120 1111 | 1111 0210 3020 0003 | 0003 0203 A B | C D | ---------------------------+-------------------------- | 3020 0003 | 0003 0203 0120 1111 | 1111 0210 0122 1222 | 2221 2210 0113 3200 | 3200 3110 E F | G H | Aloitin koodaamisen rutiinista (calc_board), joka antaa laudalla olevalle pelitilanteelle numeron (0-65535) siten, että kaikki keskenään symmetriset tapaukset tuottavat saman tuloksen esim. kaikissa em. tilanteissa (A,B,C,D,E,F,G,H) rutiini palauttaa tilannenumeroksi 8403. Seuraavana tehtävänä oli antaa näille tilanteille lukuarvo, joka kuvaa niiden hyvyttä. Sitten vain siirtoa tehdessä etsitään kaikista mahdollisista siirroista sellainen, joka johtaa tilanteeseen, jolla on suurin tällainen arvo. Tilanteiden pisteyttämistä varten muodostin pelitaulukon kaikista (2296) mahdollisesta pelitilanteesta, siten pystyarakkeelle tuli pelitilanteet (niiden tilannenumero) ja vaakariveillä pelitilanteet mihin niistä voitiin edetä. Tähän tapaan: Pelaaja 1:n | Pelaaja 2:n | Pelaaja 1:n mahd. | Pelaaja 2:n mahd. tilanteet | tilanteet | siirrot | siirrot | | | ----------------+--------------+---------------------+-------------------- | | | 17354 | 5863 | 34128,763,29300,... | 341,43206,12005,... 874 | 29873 | 6908,47504,2766,... | 1817,34283,937,... 7332 | 11501 | 678,13906,4311,... | 4345,3821,53823,... . | . | | . | . | | . | . | | Pelitaulukossa ovat luvut ovat vain esimerkkejä ja todellisuudessa tilanteeseen kuuluvia mahdollisia jatkosiirtoja huomattavasti enemmän (jopa 195), tilanpuutteen vuoksi niitä on laitettua vain muutama malliksi. Pelaaja 2:n tilanteet on saatu pelaaja 1:n tilanteesta siten, että laudalla on vaihdettu 1. ja 2. pelaajan nappulan paikat ja laskettu tätä vastaa tilannenumero. 'Pelaajan 1:n mahd. siirrot' sarakkeeseen tulee kaikkien niiden tilanteiden numero joihin voidaan päästä pelaajan 1:n tilanteesta pelaaja 1:n pelivuorolla esim. tilanteesta 874 voidaan siirtyä tilanteeseen 47504. Aivan vastaavasti on laskettu mihin tilanteisiin pelaaja 2:n tilanteista voidaan päästä pelaaja 2:n vuorolla. Koko L-pelin olemus on nyt koodattu tähän massiiviseen pelitaulukkoon (yli 800 kb). Tästä eteenpäin tutkiminen jatkuu samanlaisena kaikille peleille, sillä käsiteltävänä on vain puhtaita lukuja. Ensin pitää määritellä ne tilanteet, jotka päättävät pelin. L-pelin tapauksessa etsin kaikista mahdollisista tilanteista ne, joissa pelaaja 2:n nappula voi olla vain yhdessä paikassa ts. ei voi enää tehdä siirtoa. Näin selville ne tilanteet, joissa pelaaja 1 on voittanut. Niitä löytyi yhteensä 15 kpl eli seuraavat tapaukset: 0322 0322 2230 0010 0010 0010 2210 2210 3012 0012 0210 0013 0012 3010 2010 2010 0012 3012 3210 3112 3112 2113 2110 2113 0110 0110 0110 2222 0322 2222 3030 3000 0100 0100 0122 0122 0010 0010 2210 0103 0130 0120 0102 3010 3012 2010 1132 1123 1123 1132 2110 0112 2110 2222 2220 0030 0003 2223 0322 3003 Siirtojen hyvyyttä kuvaavat lukuarvot tallensin kahteen taulukkoon, joiden molempien koko on 65536 tavua. Koska tilannenumero on aina välillä 0-65535 löytyy sitä vastaava hyvyysarvo (1 tavu) suoraan taulukosta kyseiseltä kohtaa. Pelaaja 1:n siirtovuorolla käytetään taulukkoa 1 ja vastaavasti taulukkoa 2 silloin kun on pelaaja 2:n vuoro. Tämä siksi, että tilanteen hyvyys riippuu olennaisesti siitä kumpana osapuolena tilannetta tarkastellaan. On huomattavaa, että vaikka taulukossa 1 olevalla tilanteella olisi pieni arvo (=ko. tilanne johtaa tappioon) ei välttämättä tarkoita sitä, että vastaavassa kohtaa taulukkoa 2 olisi suuri arvo (=ko. tilanne johtaa voittoon). Tämä siksi, että tilanteiden hyvyyttä tarkastellaan aina oman siirron jälkeen. Laskin pelin päättävien (15 kpl) tilanteiden numerot ja annoin niille arvon 1 taulukossa 1. Vastaavasti taulukkoon 2 tuli ykköset niihin kohtiin, jotka olivat näiden tilanteiden negatiivit (vaihdettu 1:n ja 2:n nappulat). Taulukot 1 ja 2 olivat aluksi molemmat täytetty 2:lla. Taulukossa arvo 1 tarkoittaa, että tilanne johtaa voittoon, 0 häviöön ja 2 ei kumpaakaan (tilannetta ei ole onnistuttu kytkemään voittoon eikä häviöön). Tämän jälkeen voitiin aloittaa tilanteiden läpikäyminen, joka tapahtui seuraavasti: A: Tutkitaan pelitaulukon ensimmäistä riviä (pelaaja 1:n tilanne) B: tarkastellaan pelaaja 1 tilannetta (esim. 17354) jos _kaikki_ pelaaja 1 siirrot johtavat tappioon niin merkataan tämä tilanne kuuluvaksi luokkaan 1 taulukossa 2 eli kertomaan, että pelaajalla 2 on varma voitto tällaisessa tilanteessa. Vastaavasti taulukkoon 1 tulee tämän tilanteen negatiivin kohdalle 1. Jos ei ole käyty vielä kaikki rivejä (2296) mennään seuraavalle riville ja palataan kohtaan B. C: Tutkitaan pelitaulukon ensimmäistä riviä (pelaaja 1:n tilanne) D: tarkastellaan pelaaja 2 tilannetta (esim. 5863) jos _joku_ pelaaja 2 siirroista johtaaa voittoon niin merkataan tämä tilanne kuuluvaksi luokkaan 0 taulukossa 1 eli kertomaan, että pelaaja 1 on varma häviäjä tällaisessa tilanteessa. Vastaavasti taulukkoon 2 tulee tämän tilanteen negatiivin kohdalle 0. Jos ei ole käyty vielä kaikki rivejä (2296) mennään seuraavalle riville ja palataan kohtaan D. Jos saatiin yksikin uusi tilanne (vaihessa B-D) luokiteltua palataan kohtaan A. Näin sain nopeasti tiedon siitä, mihin eri tilanteet johtavat. Varmat voitot ja tappiot tarkoittavat sitä, miten käy jos molemmat pelaajat ovat parhaita mahdollisia. Kun koneella on tieto mihin mikäkin tilanne johtaa, se voi pelata parhaalla mahdollisella pelitavalla. Tarkoittaen sitä, että se voittaa aina kun on mahdollista ja häviää aina vain silloin, kun se on välttämätöntä. Aloitustilanteesta et voi voittaa konetta vaikeimmalla tasolla. Tarkastelussa ei ole huomioitu mahdollisia silmukoita, jotka aiheuttavat 'tappiokuoppia', tilanteiden joukon, joista ei enää päästä voittoon. Tällaisten läpikäyminen olisi vaatinut hieman erilaisen rutiinin. Menetelmä on loppujen lopuksi hyvin yksinkertainen, vaikkei ehkä selitys sitä ollutkaan. On olemassa toki muitakin tapoja tilanteiden läpikäymiseksi (peli voi tarkastella graafina) ja esim. käytetyssä pelitaulukossa on arpeetonta tietoa, mutta näin läpikäymisen toteuttaminen on näin yksinkertaisempaa. Erottelin vielä tilanteet neljään luokkaan: 0 = Tilanteet, jotka johtavat välittömään tappioon, 768 kpl 1 = Tilanteet, jotka johtavat tappioon (ei välitön), 238 kpl 2 = Neutraalit tilanteet, 1261 kpl 3 = Tilanteet, jotka johtavat voittoon (ei välitön), 14 kpl 4 = Tilanteet, jotka johtavat välittömään voittoon, 15 kpl Parhaimmalla vaikeusasteella valitaan aina tilanne, joka kuuluu suurimpaan mahdolliseen luokkaan. Helpoimmilla vaikeusasteilla mukana on satunnaisuutta ja eikä esim. erotella luokkia 1 ja 2. Lopuksi ------- Kaikenlaiset kysymykset, kommentit yms. ovat tervetulleita Internet osoitteeseen: Esa.Piirila@***.fi tai perinteisemmin: Esa Piirilä Servin Mai*** *** ** ** 02*** ESPOO Hauskoja pelihetkiä! EOF
HISTORIA
Tähän mennessä tapahtunutta: 16.6 Näin kilpailun Mikrobitissä. Jostain käsittämättömästä syystä posti oli toimitattanut sen tällä kertaa osoitteensiirrosta huolimatta vielä vanhaan osoitteeseen. 18.6 Yritin epätoivoisesti saada peliohjeita Neuvosto-Savo purkista. 20.6 Aloitin varsinaisen koodaamisen tilanteen laskurutiinista. 23.6 Onnistuin saamaan tarkemmat peliohjeet purkista ja sain ne tulostettua juuri ennen lähtöä juhannuksen viettoon. Viikot 26 ja 27 menivät peliä analysoidessa. Kirjoittelin joitain rutiineja minigolf-radalla. Monien kirjoitus- ja ajatusvirhen jälkeen sain lopulta laskettua tilanteet, joista on joko varma voitto tai häviö. Pelautin konetta itseään vastaan varmistuakseni, että pelitaulukko oli todella muodostettu oikein. 10.7 Aloitin käyttöliittymän tekemisen. Sain nappuloiden tulostusrutiinin ja hieman menua valmiiksi. 29.7 Nappulat saivat varjonsa. 30.7 Kursorin/palikan ohjaus alkoi toimia hiirellä ja joystickilla. 31.7 Siistin koodia ja nappuloiden siirtorutiini alkoi olla valmiina. 4.8 Lisäsin nappuloiden liikutteluun myös puolueettoman nappulan. 6.8 Yhdistin laskemani pelitaulukot yhdeksi mastertaulukoksi, jossa tilanteet on luokiteltu viiden luokan mukaisesti (heti tappio, tappio, neutraali, voitto ja heti voitto). 7.8 Omien nappuloiden siirtely- ja koneen päättelyrutiini olivat niin valmiita, että pääsin pelaamaan ensimmäiset pelit konetta vastaan! Tarjoaa oikein hyvän vastuksen. Kulmat osoittautuivat varsin kohtalokkaiksi. Lisäksi kirjoittelin kuvausta pelin 'tekoäly' puolesta. 9.8 Koepelasin eri vaikeusasteilla ja säätelin parametrejä leveleitä varten. 11.8 Amigalla oli saanut kylmää (sinänsä uskomatonta näin kesällä!) ja sillä oli käynnistymisvaikeuksia, mutta hetken aikaa lämmittyään suostui onneksi taas yhteistyöhön. Koko päiväisen koodauksen tuloksena koodi oli entistä siistimpää, dokumentoi edistyi ja demo, yksinpeli sekä kaksinpeli alkoivat toimia niin kuin pitää. 12.8 Kokopäiväiset koodaustuokiot vievät peliä aina hiukan eteenpäin. Nyt vaihtuivat aloitusvuorot aina pelin jälkeen. Koodasin näppäimistörutiinia ja nyt peliä voi pelata myös näppäimistöltä. 13.8 Menu ja voittamisen tutkinta tulivat valmiiksi. Tein myös tekstin tulostusrutiinit ja pisteenlaskun. 14.8 Woodstockia kuunnellessa tein menun päivitystä. Peli sai myös hyödyllisen siirtojen peruuttamistoiminnon. Pakkasin taulukoita pienempään tilaan sekä muutin alustus ja poistumisrutiineja systeemiystävällisemmiksi. 15.8 Viime hetken paniikissa sain päähäni siirtyä käyttämään devpacia. Siitäpä seurasikin yllättäviä ongelmia. Vasta 10 tunnin intensiivisen etsinnän (kahdella koneella ja action replaylla) jälkeen bugi löytyi. Virhe löytyi lopulta satunnaislukurutiinista, jossa olin käyttänyt muuttujan nimenä r1:stä. Devpac oli tulkinnut tämän rekisteriksi (D1). Argh! 16.8 Korjasin bugin undo-toiminnasta ja lisäsin peliin harjoittelu mahdollisuuden. Lisäksi siirsin siirron laskemisen vertical blankin ulkopuolelle, jotta näppäimistö toimisi paremmin. 17.8 Visualisoin koneen tekemät siirrot. Nyt peliä on huomattavasti selkeämpi palata. Tein myös siirtovinkin. Löytyi kohtalokas taulukon ylivuoto. Kävin testaamassa ohjelmaa AGA koneessa. Mielenkiintoinen yhteensattuma oli se, että juuri koneen omistaja oli aikoinaan ehdottanut MikroBitille ohjelmointikilpailua. 18.8 Kirjoitin dokumentit loppuun ja suljin koko tuotoksen kirjekuoreen lähettämistä varten. Oli tullut aika päättää tämä episodi ja jatkaa matkaa kohti uusia seikkailuja. ----- 22.8 klo 16:44 Sittenkin ennenaikaista riemua. Palattuani takaisin viikonlopun vietosta ja kokeilessani peliä oli järkytys melkoinen. Aivan viimeisenä päivänä olin tehnyt muutoksia, joilla oli ikäviä sivuvaikutuksia. Olin unohtanut _yhden_ rivin (move d0,suunta_old) rutiinista find_pos, sillä seurauksella, että nappulaa ei tarvinnut siirtää uuteen paikkaan! Kilpailun kannalta oli myöhäistä enää lähettää korjattua versiota. Luvassa oli syvää alakuloa. 27.8 Järkytyksestä ja masennuksesta edes hieman toivuttuani lisäsin tuon yhden rivin (samalla oikaisin pari muuta virhettä) ja kokosin paketin 'LPELI11E.LHA'. Sen kohtalo jää nähtäväksi.
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Dimensions | User | Comment | |
---|---|---|---|---|
current | 17:42, 18 September 2017 | (63 KB) | Admin (Talk | contribs) |
- You cannot overwrite this file.
File usage
There are no pages that link to this file.