Pelaajan pisteetKeckuli kirjoitti: ↑09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
182
Koneen pisteet
176
Pelaajan pisteetKeckuli kirjoitti: ↑09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
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,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?
Jep. Ohjelmassa ei ole mitään tekoalyä. Kone ottaa ahneesti aina suuriman laatan.Stadin öljylanne kirjoitti: ↑10 Joulu 2022, 01:21Pelaajan pisteetKeckuli kirjoitti: ↑09 Joulu 2022, 21:52 Mulla on itseasiassa javascript versio: https://petke.info/numeropeli/
182
Koneen pisteet
176
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.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?
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();