consolidate all repos to one for archive

This commit is contained in:
2025-01-28 13:46:42 +01:00
commit a6610fbc7a
5350 changed files with 2705721 additions and 0 deletions

View File

@@ -0,0 +1 @@
http://localhost/hangman.php?new=TRUE

View File

@@ -0,0 +1,74 @@
<?php
session_start();
if($_SERVER['REQUEST_METHOD'] == 'GET'){
include('words_db.php'); //$words
include('utils.php'); // funkcije
// /hangman.php?new=true
if(isset($_GET['new'])) // pricetek nove igre
{
//izberemo random besedo
$randomWordIndex = array_rand($words);
$randomWord = $words[$randomWordIndex]; //hokej
//pridobime vse unikatne crke
$availableUniqueChars = array_unique(str_split($randomWord)); // [h,o,k,e,j]
// izbermo unikatno crko
$randomUniqueCharIndex = array_rand($availableUniqueChars); // 1
$randomUniqueChar = $availableUniqueChars[$randomUniqueCharIndex]; // o
unset($availableUniqueChars[$randomUniqueCharIndex]); // izverisemo unikatno crko -> [h,k,e,j]
// delamo razkrita beseda
$revealedWord = str_repeat('_',strlen($randomWord)); // hokej -> ___
$revealedWord = revealCharactersInWord($revealedWord, $randomWord, $randomUniqueChar); // _o__
$_SESSION['availableUniqueChars'] = $availableUniqueChars;
$_SESSION['word'] = $randomWord; // hokej
$_SESSION['revealedWord'] = $revealedWord; // _o__
$_SESSION['tries'] = 0;
$obj = createResponseObject($revealedWord, $_SESSION['tries'], FALSE);
// vrnemo JSON
header('Content-Type: application/json');
echo(json_encode($obj));
}
else if(isset($_GET['check']) && isset($_GET['char'])){
// hangman.php?check=true&char=a
$guessedChar = $_GET['char'];
$word = $_SESSION['word'];
$availableUniqueChars = $_SESSION['availableUniqueChars'];
$revealedWord = $_SESSION['revealedWord'];
$_SESSION['tries'] = $_SESSION['tries'] + 1;
if(in_array($guessedChar, $availableUniqueChars)){ //Ugotovili smo crko v besedi
//odstranimo novo uganjeno črko iz polja
$guessedCharIndex = array_search($guessedChar, $availableUniqueChars);
unset($availableUniqueChars[$guessedCharIndex]);
$revealedWord = revealCharactersInWord($revealedWord, $word, $guessedChar); // hokey -> _o__ -> (k) -> _ok__
$_SESSION['availableUniqueChars'] = $availableUniqueChars;
$_SESSION['revealedWord'] = $revealedWord;
$obj = createResponseObject($revealedWord, $_SESSION['tries'], $word == $revealedWord); // _ok__ == hokej => FALSE
header('Content-type: application/json');
echo(json_encode($obj));
}
else // nismo ugotovili prave crke v besedi
{
$obj = createResponseObject($revealedWord, $_SESSION['tries'], FALSE);
header('Content-type: application/json');
echo(json_encode($obj));
}
}
}
?>

View File

@@ -0,0 +1,12 @@
<?php
session_start();
?>
<nav class="navbar navbar-expand-md navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Demo vaja 7 - AJAX in JSON</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>

View File

@@ -0,0 +1,63 @@
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="sl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo vaja 7 - AJAX in JSON</title>
<!-- Bootstrap v5.1.3 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- jQuery v3.6.0 -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="script.js"></script>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<?php
require('header.php');
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-12 p-4">
<button type="button" class="btn btn-primary" id="beginGameButton" onclick="startGame()">Prični igro vislic</button>
<div id="wordContainer" style="visibility: hidden;">
<br>
<!-- Črke uganke -->
<div class="row">
<div class="col-12" id="charsDiv"></div>
</div>
<!-- Vnosna polja za reševanje uganke -->
<div class="row">
<div class="col-md-5">
<br>
<div class="input-group" style="padding-bottom: 10px;">
<input type="text" class="form-control" id="guessCharInput" maxlength="1" placeholder="Ugani črko">
</div>
<button type="button" class="btn btn-primary" id="guessCharButton" onclick="sendChar()" disabled>Pošlji</button>
<h2 style="float: right;"><span class="badge badge-secondary" id="numOfTriesSpan">Št. poizkusov: 0</span></h2>
</div>
</div>
<!-- Obvestilo, da se je uganka rešila -->
<div class="row">
<div class="col-md-5">
<div class="alert alert-success" role="alert" id="successSolved">
<strong>Pravilno ste rešili uganko! </strong>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Bootstrap v5.1.3 Javascript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</body>
</html>

View File

@@ -0,0 +1,90 @@
var beginGameButton;
var guessCharButton;
var guessCharInput;
var numOfTriesSpan;
const hangmanURL = "hangman.php";
var guessedChar = ''; // globalna spremenljivka črke, ki smo jo vnesli v vnosno polje
$(document).ready(() => {
beginGameButton = $("#beginGameButton");
guessCharButton = $('#guessCharButton');
guessCharInput = $('#guessCharInput');
numOfTriesSpan = $('#numOfTriesSpan');
$("#successSolved").hide(); // skritje obvestila o uspešno ugotovljeni besedi
guessCharInput.on('input', (e) => { // če je vnešena črka, omogoči gumb za pošiljanje
guessedChar = guessCharInput.val();
if (guessedChar.length > 0)
{
guessCharButton.prop('disabled', false);
}
else
{
guessCharButton.prop('disabled', true);
}
});
});
function startGame(){
guessCharInput.prop("disabled", false);
guessCharInput.val("");
$("#successSolved").hide();
// klic na /hangman.php?new=true
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", hangmanURL + "?new=true", true);
xmlhttp.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200){
const json = JSON.parse(this.responseText);
$("#wordContainer").css('visibility','visible');
beginGameButton.text("Znova zazeni igro vislic");
beginGameButton.removeClass('btn-primary');
beginGameButton.addClass('btn-warning');
drawRevealedWord(json.revealedWord);
numOfTriesSpan.text("Št. poizkusov: " + jason.tries);
}
};
xmlhttp.send(null);
}
function sendChar(){
guessCharInput.val("");
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", hangmanURL + "?check=true&char=" + guessedChar, true);
xmlhttp.onreadystatechange = function(){
if(this.readyState == 4 && this.status == 200){
const json = JSON.parse(this.responseText);
drawRevealedWord(json.revealedWord);
numOfTriesSpan.text("St. poizkusov: " + json.tries);
if(json.solved){ //boolean
guessCharButton.prop("disabled", true);
guessCharInput.prop("disabled", true);
$("#successSolved").show();
}
}
}
xmlhttp.send(null);
}
function drawRevealedWord(revealedWord) // izris črk
{
const charsDiv = $('#charsDiv');
charsDiv.empty(); // zbrišemo prejšnje črke
revealedWord.split('').forEach(char => { // razdelimo do zdaj vidno besedo na znake (char-e)
charsDiv.append('<h1 class="char"><span class="badge badge-light">'+ char +'</span></h1>'); // za vsak char ustvarimo badge s črko
});
}

View File

@@ -0,0 +1,19 @@
html {
min-height: 100%;
height: 100%;
overflow: hidden;
}
body
{
box-sizing: border-box;
min-height: 100%;
height: 100%;
background-color: skyblue;
}
.char
{
float: left;
padding-right: 5px;
}

View File

@@ -0,0 +1,42 @@
<?php
// pridobimo indekse znaka, kjer se nahaja znotraj niza
function getCharacterIndicesInWord($string, $char)
{
$charIndices = array();
for ($i = 0; $i < strlen($string); $i++)
{
$tmp_char = $string[$i];
if ($tmp_char == $char)
{
array_push($charIndices, $i);
}
}
return $charIndices;
}
// zapišemo črko v dosedaj razkrito besedo
function revealCharactersInWord($revealedWord, $fullWord, $char)
{
$charIndices = getCharacterIndicesInWord($fullWord, $char); // pridobimo indekse črke v besedi
$newRevealedWord = $revealedWord;
foreach($charIndices as $charIndex)
{
$newRevealedWord[$charIndex] = $char;
}
return $newRevealedWord;
}
// ustvarimo objekt s podatki, ki jih vrnemo na spletno stran
function createResponseObject($revealedWord, $tries, $solved)
{
$obj = new stdClass(); // ustvarimo objekt praznega razreda
$obj->revealedWord = $revealedWord; // razkrita beseda
$obj->tries = $tries; // št. poizkusov
$obj->solved = $solved; // ali smo že ugotovili besedo
return $obj;
}
?>

View File

@@ -0,0 +1,3 @@
<?php
$words = array("odbojka", "nogomet", "plavanje", "golf", "tenis", "hokej", "rokomet");
?>