Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Arvauspeli-Konsolisovelluksen Rakentaminen | Konsolisovellusten Rakentaminen Node.js:llä
Backend-kehitys Node.js:llä ja Express.js:llä

bookArvauspeli-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ä (minNumbermaxNumber).

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();

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 8

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 2.56

bookArvauspeli-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ä (minNumbermaxNumber).

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();

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 8
some-alt