consolidate all repos to one for archive
This commit is contained in:
1
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/TEST.txt
Normal file
1
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/TEST.txt
Normal file
@@ -0,0 +1 @@
|
||||
http://localhost/hangman.php?new=TRUE
|
BIN
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/USS_vaja7_demo.zip
Normal file
BIN
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/USS_vaja7_demo.zip
Normal file
Binary file not shown.
74
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/hangman.php
Normal file
74
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/hangman.php
Normal 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));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
12
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/header.php
Normal file
12
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/header.php
Normal 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>
|
63
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/index.php
Normal file
63
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/index.php
Normal 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>
|
90
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/script.js
Normal file
90
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/script.js
Normal 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
|
||||
});
|
||||
}
|
19
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/styles.css
Normal file
19
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/styles.css
Normal 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;
|
||||
}
|
42
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/utils.php
Normal file
42
semester_1/uvod_v_svetovni_splet/Vaja_7/Demo/utils.php
Normal 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;
|
||||
}
|
||||
?>
|
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
$words = array("odbojka", "nogomet", "plavanje", "golf", "tenis", "hokej", "rokomet");
|
||||
?>
|
Reference in New Issue
Block a user