PHP :: Aufgabe #248

1 Lösung Lösung öffentlich

Zufällige Buchstaben für Stadt-Land-Fluss

Anfänger - PHP von charlyP - 26.03.2020 um 00:24 Uhr
Es soll ein beliebiger Buchstabe des Alphabets (ohne Umlaute) ausgegeben werden und dann auf Anforderung des Nutzers immer wieder ein weiterer Buchstabe, wobei jeder Buchstabe des Alphabets nur ein Mal ausgegeben werden darf.

Viel Spaß

Lösungen:

vote_ok
von Exception (7090 Punkte) - 11.05.2020 um 19:51 Uhr
How it works:
Der User führt das Skript aus.
Es wird - sofern noch nicht geschehn die "letters.json" Datei dupliziert ("game.json").
Aus der "game.json" Datei wird dann ein zufälliger Buchstabe entfernt und ausgegeben.
Sollten alle Buchstaben aufgebraucht sein, so wird automatisch ein neues Spiel begonnen.
Der User hat zudem die Möglichkeit als Parameter "reset" zu übergeben für einen manuellen Neustart des Spiels.

main.php
Quellcode ausblenden PHP-Code
<?php

// remove script name
array_shift($argv); 

// Handle missing file
if (!file_exists('letters.json')) {
  die('Error: "letters.json" does not exist.' . PHP_EOL);
}

// Manual restarting the game or missing game.json file
if ((isset($argv[0]) && $argv[0] === 'reset') || !file_exists('game.json')) {
  echo 'Manual restart.' , PHP_EOL;
  copy('letters.json', 'game.json');
}

// get json object
$str = file_get_contents('game.json');
$json = json_decode($str);

// Starting new game if no letters are left.
if (sizeof($json->{'letters'}) === 0) {
  echo 'All letters were used. Starting new game.' , PHP_EOL;
  copy('letters.json', 'game.json');
  $str = file_get_contents('game.json');
  $json = json_decode($str);
}

// get next random letter
$key = array_rand($json->{'letters'});
$letter = $json->{'letters'}[$key];

// remove used letter 
unset($json->{'letters'}[$key]);
$json->{'letters'} = array_values($json->{'letters'});
file_put_contents('game.json', json_encode($json));

// output
echo 'Next letter is: "' , $letter , '" ' , PHP_EOL , 'Remaining: ' , sizeof($json->{'letters'}) , PHP_EOL;

letters.json
Quellcode ausblenden JavaScript-Code
{
  "letters": [
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S",
    "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z"
  ]
}

Konsolenausgabe:

php main.php
Next letter is: "X"
Remaining: 24

php main.php
Next letter is: "L"
Remaining: 23

php main.php
Next letter is: "M"
Remaining: 22

php main.php
Next letter is: "J"
Remaining: 21

php main.php reset
Manual restart.
Next letter is: "H"
Remaining: 25

php main.php
Next letter is: "S"
Remaining: 24

php main.php
Next letter is: "K"
Remaining: 23