Sivu 3/3

Re: Haasta tekoälyni! :)

Lähetetty: 10 Joulu 2022, 01:21
Kirjoittaja Stadin öljylanne
Keckuli kirjoitti: 09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
Pelaajan pisteet
182
Koneen pisteet
176

Re: Haasta tekoälyni! :)

Lähetetty: 10 Joulu 2022, 01:24
Kirjoittaja Keckuli
KultaKikkare kirjoitti: 10 Joulu 2022, 00:49 Käykö se läpi mun kaikki mahdolliset siirrot 5 siirtoa eteenpäin ja olettaa että teen optimaalisen siirron miettien myös 5 siirtoa eteenpäin, vai olettaako että valitsen sen mistä saa yhdellä siirrolla eniten pisteitä, vai pyrkiikö strategiaan missä mun siirrolla ei ole merkitystä, vai miten?
Se käy läpi kaikki mahdolliset siirrot ja nostaa omaksi siirroksi sen haaran siirron, missä lehtisolmun pelitilanne on sille edullisin. Se ei siis oleta sun tekevän optimaalista siirtoa vaan se pyrkii itse tekemään optimalisen siirron. Tilanteissa, jotka ovat päätössolmuja se kertoo pelitilanteen arvon 10:llä. Jos se siis voittaa päätössolmussa, niin se pyrkii pelipuun siihen haaraan,

Re: Haasta tekoälyni! :)

Lähetetty: 10 Joulu 2022, 01:25
Kirjoittaja Keckuli
Stadin öljylanne kirjoitti: 10 Joulu 2022, 01:21
Keckuli kirjoitti: 09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
Pelaajan pisteet
182
Koneen pisteet
176
Jep. Ohjelmassa ei ole mitään tekoalyä. Kone ottaa ahneesti aina suuriman laatan.

Re: Haasta tekoälyni! :)

Lähetetty: 10 Joulu 2022, 01:37
Kirjoittaja Stadin öljylanne
Eikös javascriptin muuntamisessa typescriptiksi riitä ihan vain muuttujien tietotyyppien määrittäminen ja var ehkä pitää korvata sanalla let jos muuttujan arvo muuttuu tai const jos se ei muutu? Vai onko typescriptissä jotain muitakin huomionarvoisia hienouksia?

Re: Haasta tekoälyni! :)

Lähetetty: 10 Joulu 2022, 02:02
Kirjoittaja KultaKikkare
Stadin öljylanne kirjoitti: 10 Joulu 2022, 01:37 Eikös javascriptin muuntamisessa typescriptiksi riitä ihan vain muuttujien tietotyyppien määrittäminen ja var ehkä pitää korvata sanalla let jos muuttujan arvo muuttuu tai const jos se ei muutu? Vai onko typescriptissä jotain muitakin huomionarvoisia hienouksia?
Ei siinä mitään muuntamista tarvitse tehdä, typescript on javascriptin supersetti ja muuttujien tyypitys on vapaaehtoista. Typescript tarjoaa optionaalista extraa javascriptiin nähden mutta javascript sinällään on aina myös validia typescriptiä. Muuttujien tyypitys kai se isoin juttu on, vähentää bugeja monimutkaisemmissa projekteissa.

Re: Haasta tekoälyni! :)

Lähetetty: 10 Joulu 2022, 04:11
Kirjoittaja Stadin öljylanne
En nyt ole täysin varma, onko tämä täysin speksien mukainen, mutta mun vs code ei ilmoittanut virheistä. Tosin tässä on vain tuo Keckulin javascript-pelisivun javascript-koodi muutettuna typescriptiksi eli mahdolliset tekoälyt hänen tarttee lisätä tähän sitten erikseen.

Koodi: Valitse kaikki

const laatat: number[] = new Array();
let valittusarake: number = 0;
let valitturivi: number = 0;
let valittulaatta: number = 0;
let tahti: number = 0;
let edellinen: number = 0;
let konevalitsiarvon: number = 0;
let konevalitsirivin: number = 0;
let ppisteet: number = 0;
let kpisteet: number = 0;
function voikokonevalita() {
  let voi: boolean = false;
  for (let rivi: number = 1; rivi <= 10; rivi++) {
    if (!voi) {
      if (laatat[10 * (rivi - 1) + valittusarake] != 99) {
        voi = true;
      }
    }
  }
  return voi;
}
function voikopelaajavalita() {
  let voi: boolean = false;
  for (let sara: number = 1; sara <= 10; sara++) {
    if (!voi) {
      if (laatat[10 * (konevalitsirivin - 1) + sara] != 99) {
        voi = true;
      }
    }
  }
  return voi;
}
function konesiirtaa() {
  // kone valitsee raa'asti suurimman laatan
  let maxarvo: number = -16;
  let konevalitsi: number = 99; // Stadin Öljylanne lisäsi tämän muuttujan alustuksen kun muuten ilmoittaa virheestä. Kandee laittaa tilalle numero, joka on turvallinen tässä kohtaa koodia.
  for (let rivi: number = 1; rivi <= 10; rivi++) {
    const ind: number = (rivi - 1) * 10 + valittusarake;
    if (laatat[ind] > maxarvo && laatat[ind] != 99) {
      maxarvo = laatat[ind];
      konevalitsi = ind;
    }
  }
  konevalitsiarvon = laatat[konevalitsi];
  kpisteet = kpisteet + konevalitsiarvon - 15;
  const kone: HTMLElement|undefined = document.getElementById("kone") || undefined;
  if(kone) kone.innerHTML = `${kpisteet}`;
  laatat[konevalitsi] = 99;
  const img: HTMLImageElement|undefined = document.getElementById(`${konevalitsi}`) as HTMLImageElement || undefined;
  if(img) img.src = "tahti.png";
  tahti = konevalitsi;
  konevalitsirivin = Math.floor((konevalitsi - 1) / 10) + 1;
  if (!voikopelaajavalita()) {
    let apus: string = "Tasapeli!";
    if (ppisteet > kpisteet) {
      apus = "Onneksi olkoon! Voitit :)";
    }
    if (ppisteet < kpisteet) {
      apus = "Hah hah! Hävisit.";
    }
    alert("Peli päättyi. Et voi valita enää." + apus);
    return;
  }
}
function changeImage(param: number) {
  valitturivi = Math.floor((param - 1) / 10) + 1;
  if (valitturivi == konevalitsirivin || konevalitsirivin == 0) {
    const img: HTMLImageElement|undefined = document.getElementById(`${param}`) as HTMLImageElement || undefined;
    if (laatat[param] == 99) {
      alert("Et voi valita tyhjää laattaa etkä tähtilaattaa.");
    } else {
      if (tahti != 0) {
        //koneen valinnan merkkinä oleva tähtilaatta muutetaan tyhjäksi. Alussa sillä on arvo 0.
        const tahtiimg: HTMLImageElement|undefined = document.getElementById(`${tahti}`) as HTMLImageElement || undefined;
        if(tahtiimg) tahtiimg.src = "empty.png";
      }
      if(img) img.src = "empty.png";
      valittusarake = ((param - 1) % 10) + 1;
      valittulaatta = laatat[param] - 15;
      ppisteet = ppisteet + valittulaatta;
	  const pelaaja: HTMLElement|undefined = document.getElementById("pelaaja") || undefined;
      if(pelaaja) pelaaja.innerHTML = `${ppisteet}`;
      laatat[param] = 99;

      if (voikokonevalita()) {
        konesiirtaa();
      } else {
        alert("Kone ei voi enää valita");
        return;
      }
    }
  } else {
    alert(
      "Valitse siltä samalta riviltä numerolaatta, millä rivillä tähtilaatta on."
    );
  }
}
function arvolaatat() {
  document.write("<table align='center' width='500'><tr><td>");
  document.write("<h1>Numeropeli</h1>");
  document.write(
    "<p>Valitse haluamasi numerolaatta joltain riviltä klikkaamalla sitä. Tietokone valitsee sitten siltä pystysarakkeelta, mistä sinä olit valinnut numeron, jonka jälkeen sinä valitset taas numeron siltä riviltä, mistä tietokone oli laatan valinnut. Tietokoneen valinnasta merkkinä on <img src='tahtiohje.png'> laatta. Pelin voittaa se kummalla valittujen laattojen arvojen summa on suurin kun ei enää pystytä valitsemaan. Aloita uusi peli lataamalla sivu uudestaan, jolloin laattojen arvot arvotaan uudestaan.<p>"
  );
  let ind: number = 1;
  for (let rivi: number = 1; rivi <= 10; rivi++) {
    for (let sara: number = 1; sara <= 10; sara++) {
      const laatta: number = Math.floor(Math.random() * 31);
      laatat[ind] = laatta;
      ind++;
    }
  }
}

function tulostalaatat() {
  let i: number = 1;
  document.write("<table>");
  for (let r: number = 1; r <= 10; r++) {
    document.write("<tr>");
    for (let s: number = 1; s <= 10; s++) {
      document.write(
        '<td><img src="laatta' +
          laatat[i] +
          '.png" id="' +
          i +
          '" onclick="changeImage(' +
          i +
          ')"></td>'
      );
      i++;
    }
    document.write("</tr>");
  }
  document.write("</table>");
}
arvolaatat();
tulostalaatat();

Re: Haasta tekoälyni! :)

Lähetetty: 27 Joulu 2022, 16:19
Kirjoittaja Stadin öljylanne
Testailin hieman ChatGPT-tekoälyä ja sillä pascalin konvertointi typescriptiksi onnistuisi todennäköisesti käden käänteessä. Kun kokeilin, niin ihan koko koodia se ei yhdeltä istumalta kääntänyt, mutta proseduuri kerallaan kääntäminen mahdollisesti onnistuu.