quarta-feira, 31 de julho de 2024

Almost finished game

 If you want, copy all that is below, paste on notepad and save as anything.html

Then just go to windows explorer and click on the file you created!


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

   

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>CauseNumber</title>

    <link rel="stylesheet" href="causenumber.css">

   

    

</head>

<style>

h1 {

 text-align: center;

}


body {

font-family: "Fonarto";

background-color: #fefed2;

}


@font-face {

    font-family: 'Fonarto';

   

    src: url('shaky-hand-some-comic.regular.otf')  format('truetype'), 

        

}


@font-face {

    font-family: 'FonartoMore';

   

    src: url('shaky-hand-some-comic.3d.otf')  format('truetype'), 

        

}


#Title {

font-family: "FonartoMore";

font-size: 3.5em;

}

#instruc {

font-size: 1.5em;

text-align: center;

width: 200;

display: block;

margin: auto;

align-items: center;

}


#game-board {

  display: flex;

  align-items: center;

  flex-direction: column;

  color: #202000;

}


.letter-box {

  border: 2px solid gray;

  border-radius: 3px;

  margin: 2px;

  font-size: 2.5rem;

  font-weight: 700;

  height: 3rem;

  width: 3rem;

  display: flex;

  justify-content: center;

  align-items: center;

  text-transform: uppercase;

}


.filled-box {

  border: 2px solid black;

}


.selected-box {

  border: 3px solid black;

}


.letter-row {

  display: flex;

}


.buttons {

  margin: 1rem 0;

  display: flex;

  flex-direction: column;

  align-items: center;

}


#keyboard-cont div {

  display: flex;

}


#upper_buttons div {

   display: flex;

}


.second-row {

  margin: 0.5rem 0;

}


.keyboard-button {

  font-size: 1.5rem;

  font-family: "Fonarto";

  padding: 0.5rem;

  margin: 0 2px;

  cursor: pointer;

  color: #202000;

  background-color: #f1b04c;

}


.keyboard-buttonC {

  font-size: 1rem;

  font-weight: 700;

  padding: 0.5rem;

  margin: 0 2px;

  cursor: pointer;

  width: 2em; 

  

}



#snackbar {

  visibility: hidden; /* Hidden by default. Visible on click */

  min-width: 250px; /* Set a default minimum width */

  margin-left: -125px; /* Divide value of min-width by 2 */

  background-color: #333; /* Black background color */

  color: #fff; /* White text color */

  text-align: center; /* Centered text */

  border-radius: 2px; /* Rounded borders */

  padding: 16px; /* Padding */

  position: fixed; /* Sit on top of the screen */

  z-index: 1; /* Add a z-index if needed */

  left: 50%; /* Center the snackbar */

  bottom: 50%; /* 30px from the bottom */

}


/* Show the snackbar when clicking on a button (class added with JavaScript) */

#snackbar.show {

  visibility: visible; /* Show the snackbar */

  /* Add animation: Take 0.5 seconds to fade in and out the snackbar.

  However, delay the fade out process for 2.5 seconds */

  -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;

  animation: fadein 0.5s, fadeout 0.5s 2.5s;

}


/* Animations to fade the snackbar in and out */

@-webkit-keyframes fadein {

  from {bottom: 0; opacity: 0;}

  to {bottom: 50%; opacity: 1;}

}


@keyframes fadein {

  from {bottom: 0; opacity: 0;}

  to {bottom: 50%; opacity: 1;}

}


@-webkit-keyframes fadeout {

  from {bottom: 50%; opacity: 1;}

  to {bottom: 0; opacity: 0;}

}


@keyframes fadeout {

  from {bottom: 50%; opacity: 1;}

  to {bottom: 0; opacity: 0;}

}




</style>

<body>

    <h1 id="Title"> Cause Number </h1>

    

    <div id="upper_buttons" class="buttons">

<div class="first-row">

            <button class="keyboard-button">New Game</button>

            <button class="keyboard-button">Instructions</button>

           

        </div>

    </div>


    <div id="game-board">


    </div>


   <div id="keyboard-cont" class="buttons">

 

   

        <div class="second-row">

            <button class="keyboard-button">Del</button>

            <button class="keyboard-button">1</button>

            <button class="keyboard-button">2</button>

            <button class="keyboard-button">4</button>

    <button class="keyboard-button">8</button>

    <button class="keyboard-button">16</button>

            <button class="keyboard-button">Enter</button>

        </div>


    </div>



<div id="snackbar">Some text some message..</div>


<div>

<p id="instruc">

Instructions:

<br>

Click on the squares to enter the numbers.

Click twice to make it orange, if it helps thinking.

<br>

Every number that will appear below is the division of 2 other numbers on the row above,

<br>

always the big divided by the smaller.

<br>

No rule that every number will be used, 

<br>

or that one can't be used twice.

<br>

So, try to cause the numbers asked!

</p>


<script>



const NUMBER_OF_GUESSES = 5;

let guessesRemaining = NUMBER_OF_GUESSES;

let currentGuess = [];

let nextLetter = 0;

let numberNumber = 5;


let theTransforms = undefined;

let theGoalNumbers = undefined;


let theNumbers = [1, 2, 4, 8, 16];


var currentBox = undefined;


var theColor = "#febf7e"; //"#ff8533"

var wrongColor = "#6e0280";

var rightColor = "#03C03C";


var lastClickedTarget;


window.onload = function() {

initBoard();

}


function initBoard() {


setGame();


    let board = document.getElementById("game-board");


    for (let i = 0; i < NUMBER_OF_GUESSES*2; i++) {

        let row = document.createElement("div")

        row.className = "letter-row"

        

        for (let j = 0; j < numberNumber; j++) {

            let box = document.createElement("div")

            box.className = "letter-box"

            box.id = "" + i + j;

            row.appendChild(box)

        }


        board.appendChild(row)

if (i%2 != 0) row.style.visibility = "hidden";

    }

}


document.getElementById("keyboard-cont").addEventListener("click", (e) => {

    const target = e.target

    

    if (!target.classList.contains("keyboard-button")) {

        return

    }

    let key = target.textContent


    if (key === "Del") {

        key = "Backspace"

    } 

if (key != "  ") {

pressedButton(key);

} else {

clickColor(target);

}

    getInput(key);

})


document.getElementById("game-board").addEventListener("click", (e) => {

    const target = e.target

    

    window.console.log(target);

    if(!target.classList.contains("letter-box")) {

    window.console.log("nem pah");

    return;

    }

    let row = getCurrentRow();

    window.console.log("current row: " + row);

    var boxRowIndex = target.id[0];

    var boxRow = document.getElementsByClassName("letter-row")[boxRowIndex];

    window.console.log("ROW DO NEGOCIO : " + boxRow);

    changeColor(target);

    if (row != boxRow) {

    return;

    }

    currentBox = target;

    target.classList.add("selected-box");

    deselectOtherBoxes(boxRow, target);

    window.console.log("clicou no baguio");

    

    

})


function changeColor(target) {

if(lastClickedTarget != target) {

lastClickedTarget = target;

return;

}

lastClickedTarget = undefined;

window.console.log("cor do garotinho: " + target.style.backgroundColor);

if (target.style.backgroundColor == "") {

target.style.backgroundColor = theColor;

window.console.log("should change");

} else {

target.style.backgroundColor = "";

}

}


deselectOtherBoxes = function(boxRow, target) {

for(var i = 0; i < boxRow.children.length; i++) {

var child = boxRow.children[i];

if (child != target) {

child.classList.remove("selected-box");

}

}

}


document.getElementById("upper_buttons").addEventListener("click", (e) => {

    const target = e.target

    

    if (!target.classList.contains("keyboard-button")) {

        return

    }

    let key = target.textContent


    if (key === "Del") {

        key = "Backspace"

    } 

pressedButton(key);

 

    

})


clickColor = function(target) {

window.console.log("ai garotinhgo, clicou na cor");

}



pressedButton = function(theButton) {

window.console.log("you pressed button " + theButton);

if (theButton == "New Game") {

newGameAction();

}

 }

getInput = function(pressedKey) {

window.console.log("the key is " + pressedKey);


    if (pressedKey === "Backspace" && nextLetter !== 0) {

        deleteLetter()

        return

    }


    if (pressedKey === "Enter") {

        checkGuess()

        return

    }

    

   


   if(nextLetter != numberNumber && pressedKey !== "Backspace") {

   

    insertLetter(pressedKey);

   }

        

   

}


function deleteLetter () {

    let row = getCurrentRow();

    let box = row.children[nextLetter - 1]

    box.textContent = ""

    box.classList.remove("filled-box")

    currentGuess.pop()

    nextLetter -= 1

}


function insertLetter (pressedKey) {

/*

    if (nextLetter === numberNumber) {

        return

    }

*/

    

    pressedKey = pressedKey.toLowerCase()

let box = undefined;

  if (currentBox == undefined && !isRowFilled(getCurrentRow())) {

  let row = getCurrentRow();

    box = row.children[nextLetter]

 

  } else {

 

  box = currentBox;

  }

   

    if (currentBox == undefined) {

    return;

    }

   

    box.textContent = pressedKey

    box.classList.add("filled-box")

    box.classList.remove("selected-box")

    currentGuess.push(pressedKey)

  //  nextLetter += 1

}


function isRowFilled(row) {

var counted = 0;

for(var i = 0; i < row.children.length; i++) {

if(row.children[i].textContent != undefined) counted++;

}

window.console.log("checker counted: " + counted);

return counted == numberNumber;

}


function getCurrentRow() {

var rawIndex = NUMBER_OF_GUESSES - guessesRemaining;

var theIndex = rawIndex * 2;

return document.getElementsByClassName("letter-row")[theIndex];

}


function getNextRow() {

var rawIndex = NUMBER_OF_GUESSES - guessesRemaining;

var theIndex = rawIndex * 2 +1;

return document.getElementsByClassName("letter-row")[theIndex];

}




function talkToThem(stringText) {

// Get the snackbar DIV

  var x = document.getElementById("snackbar");

x.innerHTML = stringText;

  // Add the "show" class to DIV

  x.className = "show";


  // After 3 seconds, remove the show class from DIV

  setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000);

}


/******

NUMBER TRANSFORMATIONS

***************/


transformNumbers = function(numberArray, transGroup) {

var newNumbers = new Array();

for(var i = 0; i < numberNumber; i++) {

var numberTransf = transGroup.transformations[i];

var thisResult = getANumberTransform(numberArray, numberTransf);

newNumbers.push(thisResult);

}

return newNumbers;

}


getANumberTransform = function(oldNumbers, numberTransformation) {

var op1 = oldNumbers[numberTransformation.operand1];

var op2 = oldNumbers[numberTransformation.operand2];

if(op2 > op1) {

var hold = op1;

op1 = op2;

op2 = hold;

}

var result = op1 / op2;

return result;

}


function numberTransformationGroup() {

this.transformations = new Array();

for(var i = 0; i < numberNumber; i++) {

var newTransf = new numberTransformation();

this.transformations.push(newTransf);

}


function numberTransformation() {

this.operand1 = getOperand();

this.operand2 = getOperand();

while (this.operand1 == this.operand2) {

this.operand2 = getOperand();

}

}


function getOperand() {

var index = getRandomInt(numberNumber);

return index;

}






function getRandomInt(max) {

  return Math.floor(Math.random() * max);

}


/******

SETTING UP A GAME

**********/


function setGame() {

var haveGame = false;


while(!haveGame) {

theTransforms = new numberTransformationGroup();

theGoalNumbers = getGoalN(theTransforms);

if (theGoalNumbers.indexOf(16) < 0) {

haveGame = true;

}

}

window.console.log("THE GOAL Ns");

window.console.log(theGoalNumbers);

var nString = getNumberStrings(theGoalNumbers);

var titleH = document.getElementById("Title");

titleH.innerHTML = "Cause The Numbers " + nString;

}


function getGoalN(transGroup) {

var possibleNumbers = new Array();

for(var i = 0; i < numberNumber; i++) {

var index = getRandomInt(5);

var thisN = theNumbers[index];

possibleNumbers.push(thisN);

}

var goalNs = transformNumbers(possibleNumbers, transGroup);

return goalNs;

}


function getNumberStrings(numberArray) {

var theString = "";

for(var i = 0; i < numberArray.length; i++) {

theString += numberArray[i];

theString += "  ";

}

window.console.log("theString: ");

window.console.log(theString);

return theString;

}


/**********

PLAYING THE GAME

***********/


checkGuess = function() {

// alert("This is barely a game yet");


if (!isRowFilled(getCurrentRow())) {

        talkToThem("fill the numbers");

        return;

    }


var resulted = makeResult();

if (isGoalNumber(resulted)) {

dealWin();

}

guessesRemaining --;

nextLetter = 0;

currentBox = undefined;

}


function isGoalNumber(resulted) {

var isWin = true;

for(var i = 0; i < resulted.length; i++) {

if(resulted[i] != theGoalNumbers[i]) {

isWin = false;

}

}

return isWin;

}


function dealWin() {

window.console.log("seems you won");

changeLastRowColor();

guessesRemainig = 0;

talkToThem("CONGRATS!");

}


changeLastRowColor = function() {

var lastRow = getNextRow();

for(var i = 0; i < numberNumber; i++) {

let box = lastRow.children[i];

box.style.color = rightColor;

}

}


makeResult = function() {

var currentRow = getCurrentRow();

var thisNumbers = new Array();

for(var i = 0; i < numberNumber; i++) {

let box = currentRow.children[i];

var thisNumber = Number(box.textContent);

thisNumbers.push(thisNumber);

}

var transformedNumbers = transformNumbers(thisNumbers, theTransforms);

var nextRow = getNextRow();

for(var i = 0; i < numberNumber; i++) {

let box = nextRow.children[i];

var thisNumber = transformedNumbers[i];

box.textContent = thisNumber;

}

    nextRow.style.visibility = "visible";

    nextRow.style.color = wrongColor;


return transformedNumbers;

}


/****

ACTIONS

*****/


newGameAction = function() {

window.location.reload();

}



</script>



</body>

</html>

Nenhum comentário:

Postar um comentário