Gra kamień, papier, nożyce

P1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 640
0

Robie sobie gierke kamień, papier, nożyce jako ćwiczenie z algorytmiki za pomocą schematów blokowych. Wypisałem listę kroków jaką moim zdaniem powinienem uczynić żeby napisać "podstawową" mechanike tej gry:

  1. Określenie liczby graczy.
  2. Co wybrał dany gracz(w jaki sposób będziesz przechowywał rzecz wybraną przez danego gracza? Można przechowywać np. w tablicy.)?
  3. Porównanie rzeczy wybranych przez poszczególnych graczy.
  4. Zliczanie punktów dla poszczególnych graczy.
  5. Zdecydowanie kto wygrał, ewentualnie czy mamy remis?
  6. Jeżeli mamy remis to dogrywka lub koniec gry.

Czy dodalibyście coś tutaj jeszcze albo ewentualnie zmienili?

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
1
piotrek1998 napisał(a):

Czy dodalibyście coś tutaj jeszcze albo ewentualnie zmienili?

DODAŁBYM że dziwne po 5 latach zajmowac sie schematami blokowymi ?
Musisz czy chcesz ?

Obok jest wątek o nożycach (chyba w Javie), wykazuje, że jedyne co naprawdę twórcze można powiedzieć o tej grze, to akurat jest niewyrażalne schematem blokowym (obiekt, czyli przedmiot gry, z fajnym porównaniem cyklicznym).
Powyżej pewnego poziomu, przerobu lekcji, schematy już nic nowego nie nauczą. Przedmiotem schematów jest nie ta przestrzeń, nie ten wymiar, co jest naprawdę ważny we współczesnych programach
Już prędzej "pseudokod"

Jessica Anderson
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
1
piotrek1998 napisał(a):

Robie sobie gierke kamień, papier, nożyce jako ćwiczenie z algorytmiki za pomocą schematów blokowych. Wypisałem listę kroków jaką moim zdaniem powinienem uczynić żeby napisać "podstawową" mechanike tej gry:

  1. Określenie liczby graczy.
  2. Co wybrał dany gracz(w jaki sposób będziesz przechowywał rzecz wybraną przez danego gracza? Można przechowywać np. w tablicy.)?
  3. Porównanie rzeczy wybranych przez poszczególnych graczy.
  4. Zliczanie punktów dla poszczególnych graczy.
  5. Zdecydowanie kto wygrał, ewentualnie czy mamy remis?
  6. Jeżeli mamy remis to dogrywka lub koniec gry.

Czy dodalibyście coś tutaj jeszcze albo ewentualnie zmienili?

Lista jest sensowna dla podstawowej mechaniki. Można ewentualnie dodać lub doprecyzować:

  • Walidację wejścia (czy gracz wybrał poprawną opcję).
  • Określenie liczby rund lub warunku zakończenia gry.
  • Inicjalizację/reset punktów przed startem.
  • Obsługę trybu gracz vs komputer (jeśli planowane).

Poza tym kolejność kroków i zakres są OK jak na ćwiczenie z algorytmiki.

FO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Ja bym napisał to tak.

Kopiuj
// ROCK PAPER SCISSORS game
#include <cstdlib>
#include <iostream>
#include <print>
using namespace std;

char getUserChoice();
char getComputerChoice();
void showChoice(char choice);
void chooseWinner(char player, char computer);

int main() {
  // srand(static_cast<unsigned int>(time(0))); // Użycie time() do
  // inicjalizacji tylko raz
  char playAgain;

  do {
    char player;
    char computer;

    player = getUserChoice();
    print("You choice: ");
    showChoice(player);

    computer = getComputerChoice();
    print("Computer's choice: ");
    showChoice(computer);

    chooseWinner(player, computer);

    // Zapytaj użytkownika, czy chce zagrać jeszcze raz
    print("Do you want to play again? (y/n): ");
    cin >> playAgain;

  } while (playAgain == 'y' || playAgain == 'Y');

  println("Thank you for playing!");

  return 0;
}

char getUserChoice() {
  char player;
  println("Rock-Paper-Scissors Game!");

  do {
    println("Choose one of the following");
    println("*************************");
    println("'r' for rock");
    println("'p' for paper");
    println("'s' for scissors");
    cin >> player;
  } while (player != 'r' && player != 'p' && player != 's');

  println("{}", player);

  return player;
}

char getComputerChoice() {
  srand(time(0));
  int num = rand() % 3 + 1;

  switch (num) {
  case 1:
    return 'r';
  case 2:
    return 'p';
  case 3:
    return 's';
  }

  return 0;
}

void showChoice(char choice) {
  switch (choice) {
  case 'r':
    println("Rock");
    break;
  case 'p':
    println("Paper");
    break;
  case 's':
    println("Scissors");
    break;
  }
}

void chooseWinner(char player, char computer) {
  switch (player) {
  case 'r':
    if (computer == 'r') {
      println("It's a tie!");
    } else if (computer == 'p') {
      println("You lose!");
    } else {
      println("You win!");
    }
    break;
  case 'p':
    if (computer == 'r') {
      println("You win!");
    } else if (computer == 'p') {
      println("It's a tie!");
    } else {
      println("You lose!");
    }
    break;
  case 's':
    if (computer == 'r') {
      println("You lose!");
    } else if (computer == 'p') {
      println("You win!");
    } else {
      println("It's a tie!");
    }
    break;
  }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.