PHP Classes

File: index.html

Recommend this page to a friend!
  Classes of Rodrigo Faustino   PHP Crypto Currency Exchange   index.html   Download  
File: index.html
Role: Auxiliary data
Content type: text/plain
Description: Application page
Class: PHP Crypto Currency Exchange
Simulate the selling and buying of cryptocurrency
Author: By
Last change:
Date: 6 months ago
Size: 22,553 bytes
 

Contents

Class file image Download
<!DOCTYPE html> <html> <head> <title>Cripto Wallet</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="js/sha256.min.js"></script> <link rel="stylesheet" href="css/style.css"> </head> <body> <div id="splashScreen"> <div id="loading"> <p>Carregando...</p> <div id="loadingBar"> <div id="loadingPercentage"></div> </div> </div> </div> <div class="container" id="conteudo"> <h1>Cripto Wallet</h1> <div class="container"> <div hidden id="score-display"></div> <div class="graph"> <canvas id="myChart"></canvas> </div> <div class="prices"> <div hidden id="purchase-price">Preço de Compra: -</div> </div> <div class="actions" hidden> <button class="btn sell">Venda</button> <input type="text" placeholder="Nome do Ativo" required > <button class="btn buy">Compre</button> <div id="current-price">Preço Atual: -</div> <p>BTC - LTC - ETH - COS</p> </div> </div> <div class="container" id="cont-opera"> <h3 id="money"></h3> <h2>Operação</h2> <select id="crypto" onchange="updatePrice()"> <option value="">Selecione a cripto</option> <option value="btc">BTC</option> <option value="ltc">LTC</option> <option value="eth">ETH</option> </select> <button onclick="updatePrice()" hidden>Atualizar</button> <div> <button onclick="handleTransaction('buy')" class="btn-compra">Comprar</button> <input type="text" id="amount" placeholder="Quantidade"> <input type="text" id="price" placeholder="Preço" disabled> <button onclick="handleTransaction('sell')" class="btn-venda">Vender</button> <p id="total"></p> </div> </div> <div class="container"> <div> <h2>Operações de Carteira</h2> <button onclick="getCarteira()">Ver carteira</button> <button onclick="deleteCarteira()">Deletar carteira</button> </div> <div id="response"></div> </div> <script src="js/chart.js"></script> <script src="js/jquery-3.6.0.min.js"></script> <script src="js/grafic.js"></script> <div id="overlay"></div> <div id="message" class="message-box"> <div class="message-header" id="titulo"></div> <div class="message-body" id="message-text"></div> <button class="close-button" onclick="hideMessage()">OK</button> </div> </div> <script> window.addEventListener("load", function () { const loadingPercentage = document.getElementById("loadingPercentage"); const splashScreen = document.getElementById("splashScreen"); const conteudo = document.getElementById("conteudo"); let percentage = 0; const interval = setInterval(() => { percentage += 5; loadingPercentage.style.width = `${percentage}%`; if (percentage >= 100) { clearInterval(interval); splashScreen.style.display = "none"; conteudo.style.display = "block"; showMessage() } }, 50); }); function showMessage() { let resultado = ''; let messageText = document.getElementById("message-text"); let messagetitulo = document.getElementById("titulo"); if (resultado == '' || resultado == null) { messagetitulo.innerText = "Como Funciona."; messageText.innerText = 'Este sistema é um simulador de corretora de criptomoedas, você recebe um valor ficticio "sem valor para operar a compra ou venda de três das principais criptomoedas, vendo sua evolução, ** todos os dados são simulados e ficticios".'; } else { messagetitulo.innerText = "LOGIN."; messageText.innerText = resultado; } var message = document.getElementById("message"); var overla = document.getElementById("overlay"); message.style.display = "block"; overla.style.display = "block"; } function hideMessage() { var overla = document.getElementById("overlay"); var message = document.getElementById("message"); message.style.display = "none"; overla.style.display = "none"; } var saldo; const amountInput = document.querySelector('#amount'); const totalDisplay = document.querySelector('#total'); amountInput.addEventListener('input', function (event) { const amount = event.target.value; const total = amount * document.querySelector('#price').value;; totalDisplay.innerText = `Total: ${total}`; }); if (!localStorage.getItem('token')) { const token = sha256(String(new Date().getTime())); localStorage.setItem('token', token); async function iniciaMoney() { const response = await fetch(`cotacoes.php/money`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ money: 13000 , token:token}) }); const data = await response.json(); alert('Bem-vindo ao aplicativo! Você foi inicializado com ' + data.money + ' de dinheiro virtual.'); } iniciaMoney(); } async function updatePrice() { let container = document.getElementById('cont-opera'); container.style.border = '2px solid #18f727'; const crypto = document.querySelector('#crypto').value; const response = await fetch(`cotacoes.php/quote/${crypto}`, { method: 'GET' }); const data = await response.json(); document.querySelector('#price').value = data.preco; assetData= { name: data.nome, symbol: data.crypto, lastPrice: data.preco, }; purchasePrice = assetData.lastPrice; if (!assetData) return; if (!chart) { chart = new Chart(canvas, { type: 'line', annotation: { annotations: [{ type: 'line', mode: 'horizontal', scaleID: 'y-axis-0', value: '25', borderColor: 'red', borderWidth: 2 }] }, data: { labels: [dateToTimeString(new Date())], datasets: [ { label: 'Atualização', data: [assetData.lastPrice], fill: true, lineTension: 0.3, borderColor: 'rgba(75, 192, 192, 1)', backgroundColor: 'rgba(75, 0, 0, 0.2)', borderDash: [], borderDashOffset: 0.3, borderJoinStyle: 'miter', pointBorderColor: "green", pointBackgroundColor: "white", pointBorderWidth: 1, pointHoverRadius: 8, pointHoverBackgroundColor: "brown", pointHoverBorderColor: "yellow", pointHoverBorderWidth: 2, pointRadius: 4, pointHitRadius: 10, }, ], }, }); } else { chart.data.labels.push(dateToTimeString(new Date())); chart.data.datasets[0].data.push(assetData.lastPrice); chart.update(); } currentPrice = assetData.lastPrice; //currentPriceDisplay.textContent = `Preço Atual: $${currentPrice.toFixed(2)}`; //return { // name: data.nome, // symbol: data.crypto, // lastPrice: data.preco, //}; } async function handleTransaction(type) { const token = localStorage.getItem('token'); const crypto = document.querySelector('#crypto').value; const amount = document.querySelector('#amount').value; const preco = document.querySelector('#price').value; const total = amount * preco; const data = { token, crypto, preco, amount, type }; const response = await fetch(`cotacoes.php/carteira`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); const responseData = await response.json(); if (responseData.status== 'success') { updateMoney(total, type); loadMoney(); getCarteira(); } else { document.querySelector('#response').innerText = responseData.message; let container = document.getElementById('cont-opera'); container.style.border = '2px solid #fa0404'; } } async function getCarteira() { const token = localStorage.getItem('token'); const response = await fetch(`cotacoes.php/carteira/${token}`, { method: 'GET' }); const data = await response.json(); let output = ''; for (let item of data) { output += `Criptomoeda: ${item.crypto}\nPreço médio: ${item.preco}\nQuantidade: ${item.amount}\nTotal: ${item.amount * item.preco}\n\n`; } document.querySelector('#response').innerText = output || "Carteira vazia."; } async function deleteCarteira() { const token = localStorage.getItem('token'); const response = await fetch(`cotacoes.php/carteira/${token}`, { method: 'DELETE' }); const data = await response.json(); document.querySelector('#response').innerText = data.message; loadMoney(); } // Chame essa função sempre que uma transação for feita. async function updateMoney(amount, type) { const token = localStorage.getItem('token'); const response = await fetch(`cotacoes.php/moneycompra/${token}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ amount, type }) }); const data = await response.json(); document.querySelector('#money').innerText = 'Dinheiro disponível: ' + data.money; } async function loadMoney() { const token = localStorage.getItem('token'); const response = await fetch(`cotacoes.php/money/${token}`, { method: 'GET' }); const data = await response.json(); document.querySelector('#money').innerText = 'Dinheiro disponível: ' + data.money[0].money; saldo= data.money[0].money } // Chame essa função quando o aplicativo for iniciado. loadMoney(); setInterval(() => { updatePrice(); }, 1 * 10 * 1000); const sellButton = document.querySelector('.sell'); const buyButton = document.querySelector('.buy'); const assetInput = document.getElementById('crypto'); const priceDisplay = document.createElement('div'); const graphDiv = document.querySelector('.graph'); const canvas = document.getElementById('myChart'); const purchasePriceDisplay = document.getElementById('purchase-price'); const currentPriceDisplay = document.getElementById('current-price'); document.querySelector('.actions').appendChild(priceDisplay); let score = 200; // Adicione a variável score let buttonsDisabled = false; // Adicione um elemento para exibir a pontuação na interface const scoreDisplay = document.getElementById('score-display'); scoreDisplay.textContent = `Pontuação: ${score}`; let chart; let currentPrice; let userChoice; let purchasePrice; let assetData; let newPrice; let nome; const cryptoArray = [ { name: "Bitcoin", symbol: "BTC" }, { name: "Ethereum", symbol: "ETH" }, { name: "Litecoin", symbol: "LTC" }, { name: "Contentos", symbol: "COS" }, ]; function updateCryptoData(symbol) { switch (symbol) { case 'BTC': cryptoArray.forEach((crypto) => { crypto.lastPrice = getRandomPrice(10000, 60000); }); break; case 'LTC': cryptoArray.forEach((crypto) => { crypto.lastPrice = getRandomPrice(100, 1000); }); break; case 'ETH': cryptoArray.forEach((crypto) => { crypto.lastPrice = getRandomPrice(500, 10000); }); break; case 'COS': cryptoArray.forEach((crypto) => { crypto.lastPrice = getRandomPrice(0.01, 1); }); break; } } function getRandomPrice(min, max) { return Math.random() * (max - min) + min; } function disableButtons(disable) { buttonsDisabled = disable; const buttons = document.querySelectorAll('.btn'); buttons.forEach((button) => { button.disabled = disable; }); } function generateHorizontalLineData(price, numPoints = 9) { const lineData = Array(numPoints).fill(price); return lineData; } // async function getAssetData(assetSymbol) { // const crypto = document.querySelector('#crypto').value; // const response = await fetch(`cotacoes.php/quote/${crypto}`, { method: 'GET' }); // const data = await response.json(); // return { // name: data.nome, // symbol: data.crypto, // lastPrice: data.preco, // }; // } async function updateChart(assetName) { assetData = await updatePrice(); console.log(assetData); purchasePrice = assetData.lastPrice; if (!assetData) return; if (!chart) { chart = new Chart(canvas, { type: 'line', annotation: { annotations: [{ type: 'line', mode: 'horizontal', scaleID: 'y-axis-0', value: '25', borderColor: 'red', borderWidth: 2 }] }, data: { labels: [dateToTimeString(new Date())], datasets: [ { label: assetData.symbol.toUpperCase(), data: [assetData.lastPrice], fill: true, lineTension: 0.3, borderColor: 'rgba(75, 192, 192, 1)', backgroundColor: 'rgba(75, 0, 0, 0.2)', borderDash: [], borderDashOffset: 0.3, borderJoinStyle: 'miter', pointBorderColor: "green", pointBackgroundColor: "white", pointBorderWidth: 1, pointHoverRadius: 8, pointHoverBackgroundColor: "brown", pointHoverBorderColor: "yellow", pointHoverBorderWidth: 2, pointRadius: 4, pointHitRadius: 10, }, ], }, }); } else { chart.data.labels.push(dateToTimeString(new Date())); chart.data.datasets[0].data.push(assetData.lastPrice); chart.update(); } currentPrice = assetData.lastPrice; currentPriceDisplay.textContent = `Preço Atual: $${currentPrice.toFixed(2)}`; } function setUserChoice(choice) { assetInput.disabled = true; if (buttonsDisabled) return; // Ignora cliques quando os botões estiverem desabilitados disableButtons(true); userChoice = choice; let count = 0; sellButton.classList.toggle('selectered', choice === 'sell'); buyButton.classList.toggle('selected', choice === 'buy'); // Atualiza o preço de compra/venda purchasePrice = newPrice > 0 ? newPrice : currentPrice; if (choice === 'sell') { purchasePriceDisplay.textContent = `Venda: $${purchasePrice.toFixed(2)}`; } else { purchasePriceDisplay.textContent = `Compra: $${purchasePrice.toFixed(2)}`; } const { futurePoints, futureLabels } = generateFuturePoints(purchasePrice); if (chart.data.datasets.length < 2) { chart.data.datasets.push({ label: 'Preço de Compra/Venda', data: futurePoints, borderColor: 'rgba(255, 99, 132, 1)', backgroundColor: 'rgba(255, 99, 132, 0)', pointBorderColor: "red", pointBackgroundColor: "white", pointBorderWidth: 1, pointHoverRadius: 8, borderDash: [7, 7], }); } else { chart.data.datasets[1].data = futurePoints; } // Remove os pontos e labels anteriores chart.data.labels.splice(0, chart.data.labels.length - 1); chart.data.datasets[0].data.splice(0, chart.data.datasets[0].data.length - 1); // Atualiza os labels e os pontos do gráfico chart.data.labels = [dateToTimeString(new Date())].concat(futureLabels); chart.data.datasets[0].data.push(currentPrice); //chart.update(); const interval = setInterval(() => { checkResult(); count++; sellButton.classList.toggle('selectered', choice === 'sell'); buyButton.classList.toggle('selected', choice === 'buy'); if (count >= 11) { clearInterval(interval); disableButtons(false); // Atualiza a linha horizontal de preço de compra/venda após o intervalo purchasePrice = currentPrice; const { futurePoints } = generateFuturePoints(purchasePrice); chart.data.datasets[1].data = futurePoints; chart.update(); } }, 3000); } function generateFuturePoints(currentPrice, numPoints = 13) { const futurePoints = Array(numPoints).fill(currentPrice); const futureLabels = Array(numPoints).fill(0).map((_, index) => { const futureTime = new Date(); futureTime.setSeconds(futureTime.getSeconds() + (index + 1) * numPoints); // Adiciona 5 segundos para cada ponto futuro return dateToTimeString(futureTime); }); return { futurePoints, futureLabels }; } function dateToTimeString(date) { const hours = date.getHours().toString().padStart(2, '0'); const minutes = date.getMinutes().toString().padStart(2, '0'); const seconds = date.getSeconds().toString().padStart(2, '0'); return `${hours}:${minutes}:${seconds}`; } function checkResult() { assetData = getAssetData(nome); newPrice = assetData.lastPrice; chart.data.labels.push(dateToTimeString(new Date())); chart.data.datasets[0].data.push(newPrice); chart.update(); const message = document.createElement('div'); if ((userChoice === 'buy' && newPrice > purchasePrice) || (userChoice === 'sell' && newPrice < purchasePrice)) { //message.textContent = 'Você ganhou! '; currentPriceDisplay.textContent = `Preço Atual: $${newPrice.toFixed(2)}`; score++; // Incrementa a pontuação do jogador scoreDisplay.textContent = `Pontuação: ${score}`; // Atualiza a pontuação na interface updatePlayerBalance(score, true); } else { //message.textContent = 'Você perdeu. '; currentPriceDisplay.textContent = `Preço Atual: $${newPrice.toFixed(2)}`; score--; // Decrementa a pontuação do jogador scoreDisplay.textContent = `Pontuação: ${score}`; updatePlayerBalance(score, true); } document.body.appendChild(message); } function updatePlayerBalance(newScore, isWinner) { const delta = isWinner ? newScore : -newScore; const apiUrl = 'index.php?action=updateUserBalance'; // Substitua pela URL da rota que você criou const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: `new_balance=${encodeURIComponent(delta)}`, }; fetch(apiUrl, requestOptions) .then((response) => response.text()) .then((data) => { // console.log('Saldo do jogador atualizado:', data); }) .catch((error) => { console.error('Erro ao atualizar o saldo do jogador:', error); }); } sellButton.addEventListener('click', () => setUserChoice('sell')); buyButton.addEventListener('click', () => setUserChoice('buy')); //assetInput.addEventListener('input', (e) => updateChart(e.target.value)); </script> </body> </html>