Arvauspeli-Konsolisovelluksen Rakentaminen
Tässä luvussa pääset kehittämään konsolisovellustaitojasi, kun sukellamme jännittävän 🎮 Arvaa luku 🔢 -pelisovelluksen rakentamiseen. Tämä interaktiivinen peli haastaa pelaajat käyttämään vaistoaan arvaamalla satunnaisesti luodun luvun ennalta määritellyltä väliltä. Matkan varrella perehdymme keskeisiin käsitteisiin, kuten
- 🎲 Satunnaislukujen generointi;
- ✅ Syötteen validointi;
- 🤝 Käyttäjän vuorovaikutus;
- 💾 Pelitulosten tallentaminen tiedostoon.
🏆 Haaste odottaa
Kuvittele sovellus, joka lupaa jännitystä ja arvoituksellisuutta. Pelaajat kutsutaan arvaamaan salaperäisesti valittu luku ennalta määritellyltä väliltä. Sovellus antaa välittömän palautteen jokaisesta arvauksesta ja pitää tarkkaa kirjaa yrityksistä.
Tämä käytännön esimerkki tarjoaa mahdollisuuden hioa taitojasi CLI-sovellusten rakentamisessa ja esittelee interaktiivisten ohjelmien toteutuksen taidon.
🚀 Valmis sovellus
Katso, miten taika syntyy! Alla oleva GIF havainnollistaa jännittävää Arvaa luku -peliä, jonka tulet rakentamaan:
Arvauspeli-konsolisovelluksen rakentaminen
Sinulle tarjotaan kaksi polkua. Ensimmäinen vaihtoehto kutsuu sinut aloittamaan matkan ilman apua, kun taas toinen tarjoaa hyödyllisen oppaan menestyksen varmistamiseksi. Valitsitpa rohkean etenemisen tai rakenteellisen ohjeen seuraamisen, edessäsi on kiehtova kokemus, jonka lopputuloksena on toimiva ja mukaansatempaava konsolisovellus.
Pääsuunnitelma
- 👉 Vaihe 1: Alustukset ja valmistelut;
- 👉 Vaihe 2: Pelin parametrien määrittely;
- 👉 Vaihe 3: Apufunktioiden määrittely;
- 👉 Vaihe 4: Pelilogiikka;
- 👉 Vaihe 5: Pelituloksen tallennus;
- 👉 Vaihe 6: Pelin käynnistys;
- 🎉 Yhteenveto;
- 🏁 Koko sovelluksen koodi.
Vaihe 1: Alustukset ja valmistelut
Valmistele pohja luomalla uusi hakemisto ja tiedosto nimeltä app.js. Tässä tiedostossa otetaan käyttöön tarvittavat moduulit:
const readline = require('readline');
const fs = require('fs').promises;
Luo Readline-rajapinta:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Selitys: Tarvittavat moduulit tuodaan: readline käyttäjän vuorovaikutukseen ja fs.promises tiedostojen käsittelyyn. Tämän jälkeen luodaan Readline-rajapinta nimeltä rl syötteen ja tulosteen hallintaan.
Vaihe 2: Pelin parametrien määrittely
Aseta pienin ja suurin numero:
const minNumber = 1;
const maxNumber = 100;
Arvotun salaisen numeron luominen:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Alusta yritysten laskuri:
let attempts = 0;
Selitys: Määritellään lukujen alue (minNumber ja maxNumber), jonka sisällä salainen numero arvotaan. Salainen numero luodaan satunnaisesti käyttäen Math.random()-funktiota ja tallennetaan muuttujaan secretNumber. Muuttuja attempts alustetaan käyttäjän yritysten seuraamiseksi.
Vaihe 3: Apufunktioiden määrittely
Varustaudu apufunktiolla virheettömään validointiin:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Selitys: isValidGuess-funktio tarkistaa, onko käyttäjän arvaus kelvollinen numero määritellyllä välillä (minNumber–maxNumber).
Vaihe 4: Pelilogiikka
Pelin ydinmekaniikka playGame-funktion kautta:
function playGame() {
rl.question(`Guess a number between ${minNumber} and ${maxNumber}: `, guess => {
if (isValidGuess(guess)) {
attempts++;
const guessNumber = parseInt(guess);
if (guessNumber === secretNumber) {
console.log(`Congratulations! You guessed the number in ${attempts} attempts.`);
saveGameResult(`Player won in ${attempts} attempts.`);
rl.close();
} else if (guessNumber < secretNumber) {
console.log('Try higher.');
playGame();
} else {
console.log('Try lower.');
playGame();
}
} else {
console.log('Please enter a valid number within the specified range.');
playGame();
}
});
}
Selitys: playGame-funktio muodostaa pelin ydinsilmukan. Se käyttää rl.question-metodia pyytääkseen käyttäjältä arvausta. Jos arvaus on kelvollinen, funktio tarkistaa, vastaako arvaus salaisuutta numeroa. Muussa tapauksessa se antaa palautetta käyttäjälle ja jatkaa pelisilmukkaa rekursiivisesti.
Vaihe 5: Pelituloksen tallentaminen
Toteuta logiikka, jolla käyttäjän pelisaavutukset tallennetaan tiedostoon game_results.txt.
async function saveGameResult(result) {
try {
await fs.appendFile('game_results.txt', `${result}\n`);
console.log('Game result saved.');
} catch (err) {
console.log('Failed to save game result.');
}
}
Selitys: saveGameResult-funktio käyttää fs.promises-kirjastoa lisätäkseen pelituloksen tiedostoon nimeltä game_results.txt. Funktio antaa palautteen tallennuksen onnistumisesta tai epäonnistumisesta.
Vaihe 6: Pelin käynnistäminen
Luo tervetuloviesti ja käynnistä peli:
console.log('Welcome to the Guess the Number game!');
playGame();
Selitys: Näytetään tervetuloviesti ja käynnistetään pelisilmukka kutsumalla playGame-funktiota.
🎉 Yhteenveto: Voiton juhla
Kehittämällä Arvaa numero -peli -sovelluksen olet saanut arvokasta kokemusta interaktiivisten ja mukaansatempaavien konsolisovellusten suunnittelusta. Tämä esimerkki havainnollistaa käyttäjän syötteen, satunnaislukugeneroinnin, validoinnin ja tiedostojen käsittelyn yhdistämistä, mikä tuottaa houkuttelevan pelikokemuksen.
👨💻 Sovelluksen koko koodi
const readline = require("readline");
const fs = require("fs").promises;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const minNumber = 1;
const maxNumber = 100;
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
let attempts = 0;
function isValidGuess(guess) {
return !isNaN(guess) && guess >= minNumber && guess <= maxNumber;
}
function playGame() {
rl.question(
`Guess a number between ${minNumber} and ${maxNumber}: `,
(guess) => {
if (isValidGuess(guess)) {
attempts++;
const guessNumber = parseInt(guess);
if (guessNumber === secretNumber) {
console.log(
`Congratulations! You guessed the number in ${attempts} attempts.`
);
saveGameResult(`Player won in ${attempts} attempts.`);
rl.close();
} else if (guessNumber < secretNumber) {
console.log("Try higher.");
playGame();
} else {
console.log("Try lower.");
playGame();
}
} else {
console.log("Please enter a valid number within the specified range.");
playGame();
}
}
);
}
async function saveGameResult(result) {
try {
await fs.appendFile("game_results.txt", `${result}\n`);
console.log("Game result saved.");
} catch (err) {
console.log("Failed to save game result.");
}
}
console.log("Welcome to the Guess the Number game!");
playGame();
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 2.56
Arvauspeli-Konsolisovelluksen Rakentaminen
Pyyhkäise näyttääksesi valikon
Tässä luvussa pääset kehittämään konsolisovellustaitojasi, kun sukellamme jännittävän 🎮 Arvaa luku 🔢 -pelisovelluksen rakentamiseen. Tämä interaktiivinen peli haastaa pelaajat käyttämään vaistoaan arvaamalla satunnaisesti luodun luvun ennalta määritellyltä väliltä. Matkan varrella perehdymme keskeisiin käsitteisiin, kuten
- 🎲 Satunnaislukujen generointi;
- ✅ Syötteen validointi;
- 🤝 Käyttäjän vuorovaikutus;
- 💾 Pelitulosten tallentaminen tiedostoon.
🏆 Haaste odottaa
Kuvittele sovellus, joka lupaa jännitystä ja arvoituksellisuutta. Pelaajat kutsutaan arvaamaan salaperäisesti valittu luku ennalta määritellyltä väliltä. Sovellus antaa välittömän palautteen jokaisesta arvauksesta ja pitää tarkkaa kirjaa yrityksistä.
Tämä käytännön esimerkki tarjoaa mahdollisuuden hioa taitojasi CLI-sovellusten rakentamisessa ja esittelee interaktiivisten ohjelmien toteutuksen taidon.
🚀 Valmis sovellus
Katso, miten taika syntyy! Alla oleva GIF havainnollistaa jännittävää Arvaa luku -peliä, jonka tulet rakentamaan:
Arvauspeli-konsolisovelluksen rakentaminen
Sinulle tarjotaan kaksi polkua. Ensimmäinen vaihtoehto kutsuu sinut aloittamaan matkan ilman apua, kun taas toinen tarjoaa hyödyllisen oppaan menestyksen varmistamiseksi. Valitsitpa rohkean etenemisen tai rakenteellisen ohjeen seuraamisen, edessäsi on kiehtova kokemus, jonka lopputuloksena on toimiva ja mukaansatempaava konsolisovellus.
Pääsuunnitelma
- 👉 Vaihe 1: Alustukset ja valmistelut;
- 👉 Vaihe 2: Pelin parametrien määrittely;
- 👉 Vaihe 3: Apufunktioiden määrittely;
- 👉 Vaihe 4: Pelilogiikka;
- 👉 Vaihe 5: Pelituloksen tallennus;
- 👉 Vaihe 6: Pelin käynnistys;
- 🎉 Yhteenveto;
- 🏁 Koko sovelluksen koodi.
Vaihe 1: Alustukset ja valmistelut
Valmistele pohja luomalla uusi hakemisto ja tiedosto nimeltä app.js. Tässä tiedostossa otetaan käyttöön tarvittavat moduulit:
const readline = require('readline');
const fs = require('fs').promises;
Luo Readline-rajapinta:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
Selitys: Tarvittavat moduulit tuodaan: readline käyttäjän vuorovaikutukseen ja fs.promises tiedostojen käsittelyyn. Tämän jälkeen luodaan Readline-rajapinta nimeltä rl syötteen ja tulosteen hallintaan.
Vaihe 2: Pelin parametrien määrittely
Aseta pienin ja suurin numero:
const minNumber = 1;
const maxNumber = 100;
Arvotun salaisen numeron luominen:
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
Alusta yritysten laskuri:
let attempts = 0;
Selitys: Määritellään lukujen alue (minNumber ja maxNumber), jonka sisällä salainen numero arvotaan. Salainen numero luodaan satunnaisesti käyttäen Math.random()-funktiota ja tallennetaan muuttujaan secretNumber. Muuttuja attempts alustetaan käyttäjän yritysten seuraamiseksi.
Vaihe 3: Apufunktioiden määrittely
Varustaudu apufunktiolla virheettömään validointiin:
function isValidGuess(guess) {
return !isNaN(guess)
&& guess >= minNumber
&& guess <= maxNumber;
}
Selitys: isValidGuess-funktio tarkistaa, onko käyttäjän arvaus kelvollinen numero määritellyllä välillä (minNumber–maxNumber).
Vaihe 4: Pelilogiikka
Pelin ydinmekaniikka playGame-funktion kautta:
function playGame() {
rl.question(`Guess a number between ${minNumber} and ${maxNumber}: `, guess => {
if (isValidGuess(guess)) {
attempts++;
const guessNumber = parseInt(guess);
if (guessNumber === secretNumber) {
console.log(`Congratulations! You guessed the number in ${attempts} attempts.`);
saveGameResult(`Player won in ${attempts} attempts.`);
rl.close();
} else if (guessNumber < secretNumber) {
console.log('Try higher.');
playGame();
} else {
console.log('Try lower.');
playGame();
}
} else {
console.log('Please enter a valid number within the specified range.');
playGame();
}
});
}
Selitys: playGame-funktio muodostaa pelin ydinsilmukan. Se käyttää rl.question-metodia pyytääkseen käyttäjältä arvausta. Jos arvaus on kelvollinen, funktio tarkistaa, vastaako arvaus salaisuutta numeroa. Muussa tapauksessa se antaa palautetta käyttäjälle ja jatkaa pelisilmukkaa rekursiivisesti.
Vaihe 5: Pelituloksen tallentaminen
Toteuta logiikka, jolla käyttäjän pelisaavutukset tallennetaan tiedostoon game_results.txt.
async function saveGameResult(result) {
try {
await fs.appendFile('game_results.txt', `${result}\n`);
console.log('Game result saved.');
} catch (err) {
console.log('Failed to save game result.');
}
}
Selitys: saveGameResult-funktio käyttää fs.promises-kirjastoa lisätäkseen pelituloksen tiedostoon nimeltä game_results.txt. Funktio antaa palautteen tallennuksen onnistumisesta tai epäonnistumisesta.
Vaihe 6: Pelin käynnistäminen
Luo tervetuloviesti ja käynnistä peli:
console.log('Welcome to the Guess the Number game!');
playGame();
Selitys: Näytetään tervetuloviesti ja käynnistetään pelisilmukka kutsumalla playGame-funktiota.
🎉 Yhteenveto: Voiton juhla
Kehittämällä Arvaa numero -peli -sovelluksen olet saanut arvokasta kokemusta interaktiivisten ja mukaansatempaavien konsolisovellusten suunnittelusta. Tämä esimerkki havainnollistaa käyttäjän syötteen, satunnaislukugeneroinnin, validoinnin ja tiedostojen käsittelyn yhdistämistä, mikä tuottaa houkuttelevan pelikokemuksen.
👨💻 Sovelluksen koko koodi
const readline = require("readline");
const fs = require("fs").promises;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const minNumber = 1;
const maxNumber = 100;
const secretNumber =
Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber;
let attempts = 0;
function isValidGuess(guess) {
return !isNaN(guess) && guess >= minNumber && guess <= maxNumber;
}
function playGame() {
rl.question(
`Guess a number between ${minNumber} and ${maxNumber}: `,
(guess) => {
if (isValidGuess(guess)) {
attempts++;
const guessNumber = parseInt(guess);
if (guessNumber === secretNumber) {
console.log(
`Congratulations! You guessed the number in ${attempts} attempts.`
);
saveGameResult(`Player won in ${attempts} attempts.`);
rl.close();
} else if (guessNumber < secretNumber) {
console.log("Try higher.");
playGame();
} else {
console.log("Try lower.");
playGame();
}
} else {
console.log("Please enter a valid number within the specified range.");
playGame();
}
}
);
}
async function saveGameResult(result) {
try {
await fs.appendFile("game_results.txt", `${result}\n`);
console.log("Game result saved.");
} catch (err) {
console.log("Failed to save game result.");
}
}
console.log("Welcome to the Guess the Number game!");
playGame();
Kiitos palautteestasi!