Ristinolla

Olen aivan aloittelija tässä ohjelmointijutussa. Tein ohjelman, jolla voi pelata ristinollaa konetta vastaan. Laudan muodostin tyyliin char[3][3]. Aluksi tein tietokoneen siirrot satunnaisiksi, mutta koska sitä vastaan oli tylsä pelata, ajattelin lisätä hieman tekoalyä. Kaikkien mahdollisten variaatioiden kirjoittaminen on niin suuritöistä, että ajattelin että helpompikin tapa saattaisi löytyä.

Eli saanko jotenkin tietokoneen pelaamaan kahden peräkkäisen saman merkin perään siirron, ilman että kirjoitan kaikki mahdolliset variaatiot, missä tällainen tilanne on mahdollinen?
2905
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

Noin yksinkertaisen pelilaudan ollessa kyseessä on mahdollista luoda täydellinen tekoäly, joka ei voi hävitä.

Yksinkertainen tekoäly voisi ensi vaiheessa tarkistaa onko vastustajalla jossain voittosuoraa tulossa, eli kaksi samalla suoralla ja tyhjä keskellä. Tuohon voi tehdä vaikka kolme metodia, joista yksi tarkistaa kaikki rivit, yksi sarakkeet ja yksi vinot suorat.

esim:
int tarkistaRivi(const char taulu[3][3], char merkki) {
for (int y = 0; y < 3; y ) {
int tulos = 0;
for (int x = 0; x < 3; x ) {
if (taulu[y][x] == merkki) tulos ;
}
if (tulos == 2) return y;
}
return 0;
}

Jos joku näistä funktioista löytää tällaisen paikan niin siirto tehdään sen mukaan, muuten voidaan käyttää vaikka satunnaisuutta koska voittamaton ristinollakin on aika tylsä :)

Äänestä

Merkitään O_n on sellaisten rivien, sarakkeiden ja diagonaalien määrä, joilla on n kappaletta ympyröitä. Vastaavasti X_n sellaisille joissa on n kappaletta ristejä. Laske jokaiselle ruudulle (siirtovaihtoehdolle) "hyvyys" kaavalla
3*X_2 X_1 - ( 3*O_2 O_1) ja piirrä seuraava rasti sellaiseen kohtaan missä saat suurimman arvon.

En tiedä miten toimii käytännössä, mutta olen kiinnostunut kuulemaan miten kävi :) (kyseinen kaava on vanhoista tekoälykurssin laskuharjoitustehtävistä poimittu).

Äänestä

Kommentoi aloitusta


Kalle kirjoitti:

Olen aivan aloittelija tässä ohjelmointijutussa. Tein ohjelman, jolla voi pelata ristinollaa konetta vastaan. Laudan muodostin tyyliin char[3][3]. Aluksi tein tietokoneen siirrot satunnaisiksi, mutta koska sitä vastaan oli tylsä pelata, ajattelin lisätä hieman tekoalyä. Kaikkien mahdollisten variaatioiden kirjoittaminen on niin suuritöistä, että ajattelin että helpompikin tapa saattaisi löytyä.

Eli saanko jotenkin tietokoneen pelaamaan kahden peräkkäisen saman merkin perään siirron, ilman että kirjoitan kaikki mahdolliset variaatiot, missä tällainen tilanne on mahdollinen?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu