diff --git a/src/data/content.js b/src/data/content.js index 61515f2..fd08275 100644 --- a/src/data/content.js +++ b/src/data/content.js @@ -9,117 +9,116 @@ import { Jitter } from "../pages/games/Jitter"; import { RandomMeme } from "../pages/activities/RandomMemes"; import { RandomJoke } from "../pages/activities/RandomJoke"; import { RandomAnimeQuote } from "../pages/activities/RandomAnimeQuote"; -import meme from "../assets/activities/meme.jpg" -import dog from "../assets/activities/dogimage.jpeg" -import cat from "../assets/activities/cat.jpg" -import numberblocs from "../assets/numberblocks.png" -import wordleicon from "../assets/games/Wordle/wordlejpg.png" -import flagger from "../assets/games/flag guess/flagger.png" -import Calculator from "../pages/activities/Calculator" +import meme from "../assets/activities/meme.jpg"; +import dog from "../assets/activities/dogimage.jpeg"; +import cat from "../assets/activities/cat.jpg"; +import numberblocs from "../assets/numberblocks.png"; +import wordleicon from "../assets/games/Wordle/wordlejpg.png"; +import flagger from "../assets/games/flag guess/flagger.png"; +import Calculator from "../pages/activities/Calculator"; import { DogHttpCode } from "../pages/activities/DogHttpCode"; import { CatHttpCode } from "../pages/activities/CatHttpCode"; export const activities = [ - { - title: "Random quotes", - description: "Get random quotes", - icon: "https://cdn-icons-png.flaticon.com/512/2541/2541991.png", - urlTerm: "random-quotes", - element: - }, - { - title: "Random Anime Quotes", - description: "Get random anime quotes", - icon: "https://64.media.tumblr.com/7b526ba246f48e294ebc87fe2cbd8e1b/1a4bdb8275a18adc-c7/s250x400/94d6c7e70601111ba79b8801cd939694d0000018.jpg", // Add the path to the anime icon image - urlTerm: "random-anime-quotes", - element: , // Assuming you have a RandomQuote component for anime quotes - }, - { - title: "Random memes", - description: "Get random meme", - icon: meme, - urlTerm: "random-memes", - element: - }, - { - title: "Fortune Card", - description: "Get your fortune", - icon: "https://aws.astrotalk.com/assets/images/wheel_of_fortune.webp", - urlTerm: "get-your-fortune", - element: - }, - { - title: "Search Words", - description: "Get any definition", - icon: "https://www.i2symbol.com/pictures/emojis/f/2/0/4/f2042fedcbc0cdaee2967c4449b62845.png", - urlTerm: "search-any-word", - element: - }, - { - title: "Random Jokes", - description: "Get random jokes", - icon: "https://www.troublefreepool.com/media/joke-png.127455/full", - urlTerm: "random-jokes", - element: - }, - { - title: "Calculator", - description: "A Simple Calculator", - icon: "https://cdn2.iconfinder.com/data/icons/ios7-inspired-mac-icon-set/512/Calculator_512.png", - urlTerm: "calculator", - element: - }, - { - title: "Dog Http Status Code", - description: "Get random dog images or meme", - icon: dog, - urlTerm: "dog-http-status", - element: - }, - { - title: "Cat Http Status Code", - description: "Get random cat images or meme", - icon: cat, - urlTerm: "cat-http-status", - element: - }, + { + title: "Random quotes", + description: "Get random quotes", + icon: "https://cdn-icons-png.flaticon.com/512/2541/2541991.png", + urlTerm: "random-quotes", + element: , + }, + { + title: "Random Anime Quotes", + description: "Get random anime quotes", + icon: "https://64.media.tumblr.com/7b526ba246f48e294ebc87fe2cbd8e1b/1a4bdb8275a18adc-c7/s250x400/94d6c7e70601111ba79b8801cd939694d0000018.jpg", + urlTerm: "random-anime-quotes", + element: , + }, + { + title: "Random memes", + description: "Get random meme", + icon: meme, + urlTerm: "random-memes", + element: , + }, + { + title: "Fortune Card", + description: "Get your fortune", + icon: "https://aws.astrotalk.com/assets/images/wheel_of_fortune.webp", + urlTerm: "get-your-fortune", + element: , + }, + { + title: "Search Words", + description: "Get any definition", + icon: "https://www.i2symbol.com/pictures/emojis/f/2/0/4/f2042fedcbc0cdaee2967c4449b62845.png", + urlTerm: "search-any-word", + element: , + }, + { + title: "Random Jokes", + description: "Get random jokes", + icon: "https://www.troublefreepool.com/media/joke-png.127455/full", + urlTerm: "random-jokes", + element: , + }, + { + title: "Calculator", + description: "A Simple Calculator", + icon: "https://cdn2.iconfinder.com/data/icons/ios7-inspired-mac-icon-set/512/Calculator_512.png", + urlTerm: "calculator", + element: , + }, + { + title: "Dog Http Status Code", + description: "Get random dog images or meme", + icon: dog, + urlTerm: "dog-http-status", + element: , + }, + { + title: "Cat Http Status Code", + description: "Get random cat images or meme", + icon: cat, + urlTerm: "cat-http-status", + element: , + }, ]; export const games = [ - { - urlTerm: "magicsquares", - title: "Magic Squares", - description: "Magic Squares > contribution by y-ashaswini :)", - icon: numberblocs, - element: , - }, - { - title: "Tic-Tac-Toe", - description: "Lets beat opponent's ass in TicTacToe", - icon: "https://cdn-icons-png.flaticon.com/512/2076/2076261.png", - urlTerm: "tic-tac-toe", - element: , - }, - { - title: "Jitter Click Game", - description: "Click as fast as possible to reach 5 stars.... lakshya", - icon: "https://i.kym-cdn.com/entries/icons/original/000/036/070/cover5.jpg", - urlTerm: "jitter-game", - element: , - }, - { - title: "Wordle Game", - description: "The normal wordle but you can play as much as you want", - icon: wordleicon, - urlTerm: "Wordle", - element: - }, - { - title: "Guess The Flag", - description: "Learn geography in fun way", - icon: flagger, - urlTerm: "GuessTheFlag", - element: - } + { + urlTerm: "magicsquares", + title: "Magic Squares", + description: "Magic Squares > contribution by y-ashaswini :)", + icon: numberblocs, + element: , + }, + { + title: "Tic-Tac-Toe", + description: "Lets beat opponent in TicTacToe", + icon: "https://cdn-icons-png.flaticon.com/512/2076/2076261.png", + urlTerm: "tic-tac-toe", + element: , + }, + { + title: "Jitter Click Game", + description: "Click as fast as possible to reach 5 stars.... lakshya", + icon: "https://i.kym-cdn.com/entries/icons/original/000/036/070/cover5.jpg", + urlTerm: "jitter-game", + element: , + }, + { + title: "Wordle Game", + description: "The normal wordle but you can play as much as you want", + icon: wordleicon, + urlTerm: "Wordle", + element: , + }, + { + title: "Guess The Flag", + description: "Learn geography in fun way", + icon: flagger, + urlTerm: "GuessTheFlag", + element: , + }, ]; - diff --git a/src/pages/games/TicTacToe.js b/src/pages/games/TicTacToe.js index 834337b..5319d1f 100644 --- a/src/pages/games/TicTacToe.js +++ b/src/pages/games/TicTacToe.js @@ -1,7 +1,70 @@ -import { useEffect, useState } from "react"; -import axios from "axios"; -import "../../styles/pages/activities/RandomQuote.css"; +import React, { useState } from "react"; +import "../../styles/pages/games/TicTacToe.css"; export const TicTacToe = () => { - return
Hello
; + const initialBoard = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]; + const [board, setBoard] = useState(initialBoard); + const [playerTurn, setPlayerTurn] = useState("X"); + const [message, setMessage] = useState(""); + + const isWinner = (b) => { + const winCombos = [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], + [0, 3, 6], + [1, 4, 7], + [2, 5, 8], + [0, 4, 8], + [2, 4, 6], + ]; + return winCombos.some(([a, b1, c]) => b[a] === b[b1] && b[b1] === b[c]); + }; + + const handleMove = (index) => { + if (message || board[index] === "X" || board[index] === "O") return; + + const newBoard = [...board]; + newBoard[index] = playerTurn; + setBoard(newBoard); + + if (isWinner(newBoard)) { + setMessage(`Player ${playerTurn} wins!`); + return; + } + + if (newBoard.every((c) => c === "X" || c === "O")) { + setMessage("DRAW.."); + return; + } + + setPlayerTurn(playerTurn === "X" ? "O" : "X"); + }; + + const resetGame = () => { + setBoard(initialBoard); + setPlayerTurn("X"); + setMessage(""); + }; + + return ( +
+

Tic Tac Toe

+
+ {board.map((cell, i) => ( +
handleMove(i)}> + {cell === "X" || cell === "O" ? cell : ""} +
+ ))} +
+

+ {message ? message : `Player ${playerTurn}'s turn`} +

+ {message && ( + + )} +
+ ); }; diff --git a/src/styles/pages/games/TicTacToe.css b/src/styles/pages/games/TicTacToe.css new file mode 100644 index 0000000..0d81c28 --- /dev/null +++ b/src/styles/pages/games/TicTacToe.css @@ -0,0 +1,47 @@ +.tictactoe-container { + text-align: center; + padding: 1rem; +} + +.board { + display: grid; + grid-template-columns: repeat(3, 80px); + gap: 5px; + justify-content: center; + margin: 1rem auto; +} + +.cell { + width: 80px; + height: 80px; + font-size: 2rem; + display: flex; + align-items: center; + justify-content: center; + border: 2px solid #333; + cursor: pointer; + background: #f9f9f9; +} + +.cell:hover { + background: #e0e0e0; +} + +.status { + font-weight: bold; + margin-top: 10px; +} + +.reset-btn { + margin-top: 10px; + padding: 0.5rem 1rem; + background: #007bff; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} + +.reset-btn:hover { + background: #0056b3; +}