new_drawing_game

This commit is contained in:
2023-08-30 21:30:02 +05:30
parent b48a2e2fdf
commit 35c4c21b30
11 changed files with 620 additions and 36 deletions

View File

@@ -0,0 +1,97 @@
---
import Layout from '../layouts/Layout.astro';
---
<Layout title='Drawing Game'>
<main>
<div>
<p>Drawing Game</p>
<div id="game-container"></div>
</div>
<script is:inline src="/assets/js/phaser_3.60.0.js"></script>
</main>
</Layout>
<script is:inline>
// Create a new Phaser game
var config = {
type: Phaser.AUTO,
width: 800,
height: 600,
scene: {
preload: preload,
create: create,
update: update
}
};
var game = new Phaser.Game(config);
// Declare global variables
var graphics;
var lastPointer;
var color = 0xff0000;
var thickness = 5;
// Load assets
function preload() {
// Preload any assets you need for the game, such as images or sounds
}
// Create the game world
function create() {
// Create the graphics object
graphics = this.add.graphics();
// Set up the input events for the game
this.input.on('pointerdown', function(pointer) {
lastPointer = pointer;
});
this.input.on('pointermove', function(pointer) {
if (lastPointer) {
graphics.lineStyle(thickness, color);
graphics.beginPath();
graphics.moveTo(lastPointer.x, lastPointer.y);
graphics.lineTo(pointer.x, pointer.y);
graphics.strokePath();
lastPointer = pointer;
}
});
this.input.on('pointerup', function(pointer) {
lastPointer = null;
});
// Set up the UI for the game
var colorPicker = this.add.rectangle(50, 50, 40, 40, color);
colorPicker.setInteractive();
colorPicker.on('pointerdown', function() {
// Open a color picker dialog to select a color
var input = document.createElement('input');
input.type = 'color';
input.oninput = function() {
color = Phaser.Display.Color.ValueToColor(input.value).color;
colorPicker.fillColor = color;
};
input.click();
});
var thicknessText = this.add.text(150, 50, 'Thickness: ' + thickness, { font: '24px Arial', fill: '#ffffff' });
var increaseButton = this.add.text(150, 100, '+', { font: '24px Arial', fill: '#ffffff' });
increaseButton.setInteractive();
increaseButton.on('pointerdown', function() {
thickness++;
thicknessText.setText('Thickness: ' + thickness);
});
var decreaseButton = this.add.text(200, 100, '-', { font: '24px Arial', fill: '#ffffff' });
decreaseButton.setInteractive();
decreaseButton.on('pointerdown', function() {
if (thickness > 1) {
thickness--;
thicknessText.setText('Thickness: ' + thickness);
}
});
}
// Update the game world
function update() {
// Update any game logic or animations here
}
</script>

View File

@@ -0,0 +1,258 @@
---
import Layout from '../../layouts/Layout.astro';
---
<Layout title='Drawing Game'>
<main>
<div>
</div>
<script is:inline src="/assets/js/phaser_3.60.0.js"></script>
</main>
</Layout>
<script is:inline>
const config = {
type: Phaser.AUTO,
width: window.innerWidth,
height: window.innerHeight,
backgroundColor: '#05b3a4',
scale: {
mode: Phaser.Scale.FIT,
autoCenter: Phaser.Scale.CENTER_HORIZONTALLY,
},
scene: {
preload: preload,
create: create,
update: update,
},
};
const game = new Phaser.Game(config);
const displayW = window.innerWidth;
const displayH = window.innerHeight;
let graphics;
let outlineImage;
let isDrawing = false;
let selectedColor = '#ff0000'; // Default color
let brushSize = 5; // Default brush size
function preload() {
this.load.image('outline', '/assets/cow.png');
}
function create() {
outlineImage = this.add.image(displayW / 2, displayH / 2, 'outline');
graphics = this.add.graphics();
// Create a color picker using HTML input type color
const colorPicker = document.createElement('input');
colorPicker.type = 'color';
colorPicker.value = selectedColor;
colorPicker.className = 'color-picker';
colorPicker.addEventListener('input', (event) => {
selectedColor = event.target.value;
});
document.body.appendChild(colorPicker);
// Create a brush size slider using HTML input type range
const sliderContainer = document.createElement('div');
sliderContainer.className = 'slider-container';
document.body.appendChild(sliderContainer);
const slider = document.createElement('input');
slider.type = 'range';
slider.min = '2';
slider.max = '20';
slider.value = brushSize.toString(); // Set initial value to brushSize
slider.className = 'slider';
sliderContainer.appendChild(slider);
slider.addEventListener('input', (event) => {
brushSize = parseInt(event.target.value);
slider.style.backgroundSize = `calc(${(brushSize - 2) * 100 / 18}% + 20px) 100%`;
});
const clearButton = document.createElement('button');
clearButton.textContent = 'Clear';
clearButton.className = 'clear-button';
clearButton.addEventListener('click', () => {
clearDrawing();
});
document.body.appendChild(clearButton);
this.input.on('pointerdown', () => {
isDrawing = true;
startDrawing(this.input.x, this.input.y);
});
this.input.on('pointermove', () => {
if (isDrawing) {
continueDrawing(this.input.x, this.input.y);
}
});
this.input.on('pointerup', () => {
if (isDrawing) {
finishDrawing();
}
isDrawing = false;
});
}
function startDrawing(x, y) {
graphics.lineStyle(brushSize * 2, Phaser.Display.Color.HexStringToColor(selectedColor).color);
graphics.beginPath();
graphics.moveTo(x, y);
}
function continueDrawing(x, y) {
graphics.lineTo(x, y);
graphics.strokePath();
}
function finishDrawing() {
// No need for additional actions here
}
function clearDrawing() {
graphics.clear();
}
function update() {
// Update the slider position based on the pointer's movement
const slider = document.querySelector('input[type="range"]');
if (slider && !isDrawing) {
const sliderValue = parseInt(slider.value);
const max = parseInt(slider.max);
const width = slider.offsetWidth;
const offsetX = (sliderValue - 2) / (max - 2) * width;
slider.style.background = `linear-gradient(to right, #000 0%, #000 ${offsetX}px, #fff ${offsetX}px, #fff 100%)`;
}
}
// const config = {
// type: Phaser.AUTO,
// width: window.innerWidth,
// height: window.innerHeight,
// backgroundColor: '#05b3a4',
// scale: {
// mode: Phaser.Scale.FIT,
// autoCenter: Phaser.Scale.CENTER_HORIZONTALLY,
// },
// scene: {
// preload: preload,
// create: create,
// update: update
// }
// };
// const game = new Phaser.Game(config);
// const displayW = window.innerWidth;
// const displayH = window.innerHeight;
// let graphics;
// let outlineImage;
// let isDrawing = false;
// let selectedColor = 0xff0000; // Default color
// let brushSize = 5; // Default brush size
// function preload() {
// this.load.image('outline', '/assets/cow.png');
// }
// function create() {
// outlineImage = this.add.image(displayW / 2, displayH / 2, 'outline');
// graphics = this.add.graphics();
// // Create color palette buttons
// const colorPalette = [0xff0000, 0x00ff00, 0x0000ff]; // Example colors
// colorPalette.forEach((color, index) => {
// const button = this.add.rectangle(50 + index * 70, 500, 50, 50, color);
// button.setInteractive();
// button.on('pointerdown', () => {
// selectedColor = color;
// });
// });
// // Create a brush size slider using HTML input type range
// const sliderContainer = document.createElement('div');
// sliderContainer.className = 'slider-container';
// document.body.appendChild(sliderContainer);
// const slider = document.createElement('input');
// slider.type = 'range';
// slider.min = '2';
// slider.max = '20';
// slider.value = brushSize.toString(); // Set initial value to brushSize
// slider.className = 'slider';
// sliderContainer.appendChild(slider);
// slider.addEventListener('input', (event) => {
// brushSize = parseInt(event.target.value);
// slider.style.backgroundSize = `calc(${(brushSize - 2) * 100 / 18}% + 20px) 100%`;
// });
// const clearButton = document.createElement('button');
// clearButton.textContent = 'Clear';
// clearButton.className = 'clear-button';
// clearButton.addEventListener('click', () => {
// clearDrawing();
// });
// document.body.appendChild(clearButton);
// this.input.on('pointerdown', () => {
// isDrawing = true;
// startDrawing(this.input.x, this.input.y);
// });
// this.input.on('pointermove', () => {
// if (isDrawing) {
// continueDrawing(this.input.x, this.input.y);
// }
// });
// this.input.on('pointerup', () => {
// if (isDrawing) {
// finishDrawing();
// }
// isDrawing = false;
// });
// }
// function startDrawing(x, y) {
// graphics.lineStyle(brushSize * 2, selectedColor);
// graphics.beginPath();
// graphics.moveTo(x, y);
// }
// function continueDrawing(x, y) {
// graphics.lineTo(x, y);
// graphics.strokePath();
// }
// function finishDrawing() {
// // No need for additional actions here
// }
// function clearDrawing() {
// graphics.clear();
// }
// function update() {
// // Update the slider position based on the pointer's movement
// const slider = document.querySelector('input[type="range"]');
// if (slider && !isDrawing) {
// const sliderValue = parseInt(slider.value);
// const max = parseInt(slider.max);
// const width = slider.offsetWidth;
// const offsetX = (sliderValue - 2) / (max - 2) * width;
// slider.style.background = `linear-gradient(to right, #000 0%, #000 ${offsetX}px, #fff ${offsetX}px, #fff 100%)`;
// }
// }
</script>
<style>
.clear-button {
background-color: blue;
}
/* .clearButton */
</style>

View File

View File

@@ -1,25 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<title>Checkbox Example</title>
<title>Checkbox Array</title>
</head>
<body>
<label>
<input type="checkbox" id="myCheckbox"> Check me
</label>
<script>
const checkbox = document.getElementById('myCheckbox');
<input type="checkbox" class="myCheckbox" value="Value 1"> Checkbox 1
<input type="checkbox" class="myCheckbox" value="Value 2"> Checkbox 2
<input type="checkbox" class="myCheckbox" value="Value 3"> Checkbox 3
<input type="checkbox" class="myCheckbox" value="Value 4"> Checkbox 4
<input type="checkbox" class="myCheckbox" value="Value 5"> Checkbox 5
<input type="checkbox" class="myCheckbox" value="Value 6"> Checkbox 6
<button id="saveButton">Save</button>
checkbox.addEventListener('change', function() {
if (checkbox.checked) {
console.log('Checkbox is checked - true');
// Do something when the checkbox is checked
} else {
console.log('Checkbox is not checked - false');
// Do something when the checkbox is not checked
}
});
</script>
<script>
// Get a reference to the "Save" button
const saveButton = document.getElementById('saveButton');
// Add a click event listener to the "Save" button
saveButton.addEventListener('click', function() {
// Get all checkboxes with the class "myCheckbox"
const checkboxes = document.querySelectorAll('.myCheckbox');
// Create an array to store the values of checked checkboxes
const checkedValues = [];
// Loop through the checkboxes and check if they are checked
checkboxes.forEach(function(checkbox) {
if (checkbox.checked) {
// If checked, push the value to the array
checkedValues.push(checkbox.value);
}
});
// Log the array of checked values
console.log('Checked Values:', checkedValues);
});
</script>
</body>
</html>

View File

@@ -12,26 +12,26 @@
<div id="itemForm" class="flex flex-row place-content-between">
<div class="flex flex-col gap-6 place-items-center">
<img id="image1" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a1" class="round-checkbox-input" value="a1"/>
<input type="checkbox" id="a1" class="round-checkbox-input myCheckbox" value="a1"/>
<label for="a1" class="round-checkbox-label"></label>
<img id="image2" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a2" class="round-checkbox-input" value="a2"/>
<input type="checkbox" id="a2" class="round-checkbox-input myCheckbox" value="a2"/>
<label for="a2" class="round-checkbox-label"></label>
</div>
<div class="flex flex-col gap-6 place-items-center">
<img id="image3" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a3" class="round-checkbox-input" value="a3"/>
<input type="checkbox" id="a3" class="round-checkbox-input myCheckbox" value="a3"/>
<label for="a3" class="round-checkbox-label"></label>
<img id="image4" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a4" class="round-checkbox-input" value="a4"/>
<input type="checkbox" id="a4" class="round-checkbox-input myCheckbox" value="a4"/>
<label for="a4" class="round-checkbox-label"></label>
</div>
<div class="flex flex-col gap-6 place-items-center">
<img id="image5" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a5" class="round-checkbox-input" value="a5"/>
<input type="checkbox" id="a5" class="round-checkbox-input myCheckbox" value="a5"/>
<label for="a5" class="round-checkbox-label"></label>
<img id="image6" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a6" class="round-checkbox-input" value="a6"/>
<input type="checkbox" id="a6" class="round-checkbox-input myCheckbox" value="a6"/>
<label for="a6" class="round-checkbox-label"></label>
</div>
</div>
@@ -60,25 +60,39 @@
document.getElementById("image5").src = assetsURL + gameData.image5;
document.getElementById("image6").src = assetsURL + gameData.image6;
});
// const saveButton = document.getElementById('saveButton');
// saveButton.addEventListener('click', function() {
// const checkboxes = document.querySelectorAll('.myCheckbox');
// const checkedValues = [];
// console.log(checkedValues)
// if(checkedValues == gameData.a1){
// console.log(gameData.a1)
// }
// checkboxes.forEach(function(checkbox) {
// if (checkbox.checked) {
// checkedValues.push(checkbox.value);
// // console.log(checkedValues);
// // console.log(gameData.a1)
// // let value1 = checkedValues = 'a1';
// }
// });
// // if(checkedValues == gameData.a1) {
// // console.log("Matched")
// // }
// // console.log('Checked Values:', checkedValues);
// });
var checkBoxes = itemForm.querySelectorAll('input[type="checkbox"]');
function getData() { // this function will get called when the save button is clicked
result = [];
// console.log(result)
console.log(result);
checkBoxes.forEach(item => { // loop all the checkbox item
if (item.checked) { //if the check box is checked
let data = { // create an object
item: item.value,
selected: item.checked
}
console.log(data)
let data1 = gameData.a1 = true;
let input1 = data.item = 'a1';
if(input1 = data1){
console.log("its Matched")
} else {
console.log("Its Unmatched")
}
item: item.value,
selected: item.checked
}
console.log(data.selected);
result.push(data); //stored the objects to result array
}
})

View File

@@ -0,0 +1,185 @@
<main>
<div>
<!-- bg-[url('/assets/background.jpg')] -->
<section class="bg-white bg-center bg-no-repeat bg-cover h-screen">
<div class="container mx-auto px-4">
<div class="flex flex-row place-content-between pt-6">
<p class="text-5xl text-[#5ac6c8] font-bold select-none">Tick</p>
<img src="/assets/top_logo.png" alt="" draggable="false" class="select-none">
</div>
<p class="text-4xl text-center font-[600] text-[#7c4c23] my-16 select-none" id="gameDescription"></p>
<form id="contactForm">
<div id="itemForm" class="flex flex-row place-content-between">
<div class="flex flex-col gap-6 place-items-center">
<img id="image1" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a1" class="round-checkbox-input myCheckbox" value="a1"/>
<label for="a1" class="round-checkbox-label"></label>
<img id="image2" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a2" class="round-checkbox-input myCheckbox" value="a2"/>
<label for="a2" class="round-checkbox-label"></label>
<img id="image3" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a3" class="round-checkbox-input myCheckbox" value="a3"/>
<label for="a3" class="round-checkbox-label"></label>
</div>
<div class="flex flex-col gap-6 place-items-center">
<img id="image4" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a4" class="round-checkbox-input myCheckbox" value="a4"/>
<label for="a4" class="round-checkbox-label"></label>
<img id="image5" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a5" class="round-checkbox-input myCheckbox" value="a5"/>
<label for="a5" class="round-checkbox-label"></label>
<img id="image6" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a6" class="round-checkbox-input myCheckbox" value="a6"/>
<label for="a6" class="round-checkbox-label"></label>
</div>
<div class="flex flex-col gap-6 place-items-center">
<img id="image7" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a4" class="round-checkbox-input myCheckbox" value="a7"/>
<label for="a4" class="round-checkbox-label"></label>
<img id="image8" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a5" class="round-checkbox-input myCheckbox" value="a8"/>
<label for="a5" class="round-checkbox-label"></label>
<img id="image9" src="" alt="" draggable="false" class="select-none" />
<input type="checkbox" id="a6" class="round-checkbox-input myCheckbox" value="a9"/>
<label for="a6" class="round-checkbox-label"></label>
</div>
</div>
<div class="flex justify-center pt-8">
<input onclick="getData()" class="bg-blue-700 px-8 py-2 rounded-lg shadow-lg font-bold text-white cursor-pointer" type="submit" value="Save">
</div>
</form>
</div>
</section>
</div>
</main>
<script is:inline>
const params = new URLSearchParams(window.location.search);
const paramsID = params.get('id');
fetch(`https://management.beanstalkedu.com/items/game_tick_variant2/${encodeURIComponent(paramsID)}?filter[status][_eq]=published`)
.then(res => res.json())
.then(data => {
gameData = data.data;
// console.log(gameData);
document.getElementById("gameDescription").innerHTML = gameData.description;
const assetsURL = 'https://management.beanstalkedu.com/assets/';
document.getElementById("image1").src = assetsURL + gameData.image1;
document.getElementById("image2").src = assetsURL + gameData.image2;
document.getElementById("image3").src = assetsURL + gameData.image3;
document.getElementById("image4").src = assetsURL + gameData.image4;
document.getElementById("image5").src = assetsURL + gameData.image5;
document.getElementById("image6").src = assetsURL + gameData.image6;
document.getElementById("image7").src = assetsURL + gameData.image7;
document.getElementById("image8").src = assetsURL + gameData.image8;
document.getElementById("image9").src = assetsURL + gameData.image9;
});
// const saveButton = document.getElementById('saveButton');
// saveButton.addEventListener('click', function() {
// const checkboxes = document.querySelectorAll('.myCheckbox');
// const checkedValues = [];
// console.log(checkedValues)
// if(checkedValues == gameData.a1){
// console.log(gameData.a1)
// }
// checkboxes.forEach(function(checkbox) {
// if (checkbox.checked) {
// checkedValues.push(checkbox.value);
// // console.log(checkedValues);
// // console.log(gameData.a1)
// // let value1 = checkedValues = 'a1';
// }
// });
// // if(checkedValues == gameData.a1) {
// // console.log("Matched")
// // }
// // console.log('Checked Values:', checkedValues);
// });
var checkBoxes = itemForm.querySelectorAll('input[type="checkbox"]');
function getData() { // this function will get called when the save button is clicked
result = [];
console.log(result);
checkBoxes.forEach(item => { // loop all the checkbox item
if (item.checked) { //if the check box is checked
let data = { // create an object
item: item.value,
selected: item.checked
}
console.log(data.selected);
result.push(data); //stored the objects to result array
}
})
};
document.addEventListener('DOMContentLoaded', function () {
const contactForm = document.getElementById('contactForm');
contactForm.addEventListener('submit', async function (event) {
event.preventDefault();
// const formData = {
// f1: result[0],
// f2: result[1],
// f3: result[2],
// f4: result[3],
// f5: result[4],
// f6: result[5]
// };
// console.log("Form Data", formData)
// try {
// const response = await fetch('https://management.beanstalkedu.com/items/game_result', {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json'
// },
// body: JSON.stringify(formData)
// });
// if (response.ok) {
// console.log('Form data submitted successfully');
// } else {
// console.error('Failed to submit form data');
// }
// } catch (error) {
// console.error('An error occurred:', error);
// }
});
});
</script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Lobster&family=Quicksand:wght@500;700&display=swap');
body{
font-family: quicksand;
}
#image1, #image2, #image3, #image4, #image5, #image6, #image7, #image8, #image9{
width: 200px;
/* border: 4px solid red;
border-radius: 5%; */
}
.round-checkbox-input {
display: none;
}
.round-checkbox-label {
display: inline-block;
width: 30px;
height: 30px;
border-radius: 10%;
background-color: #ccc;
border: 2px solid #007bff;
cursor: pointer;
position: relative;
transition: background-color 0.3s, border-color 0.3s, transform 0.3s;
}
.round-checkbox-input:checked + .round-checkbox-label {
background-color: #007bff;
border-color: #007bff;
transform: scale(1.2);
border-radius: 30%;
}
.round-checkbox-input:checked + .round-checkbox-label::after {
content: '\2713';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 40px;
color: white;
display: block;
}
</style>