File:L peli.lha

From Zak
Revision as of 11:21, 19 September 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
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}}}

Screenshots

L-peli Gameplay screen.png
L-peli Main menu.png

[[{{{More screenshots}}}|More screenshots]]

Strategia
Lautapeli
L_peli.lha
{{{Competition}}}
{{{Tag_featured}}}
{{{Tag_bloody}}}
{{{Tag_level_editor}}}
Yes
{{{Tag_short}}}
Yes
{{{Tag_play}}}
{{{Tag_christmas}}}
{{{Tag_finnish_summer}}}
{{{Platform2}}}
{{{Platform3}}}
{{{Platform4}}}
{{{Platform5}}}
{{{Platform6}}}
{{{Platform7}}}
{{{Platform8}}}
{{{Platform9}}}

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/TimeDimensionsUserComment
current17:42, 18 September 2017 (63 KB)Admin (Talk | contribs)
  • You cannot overwrite this file.

There are no pages that link to this file.