├── o.png
├── x.png
├── ♡ Anime pfp♡.jpeg
├── README.md
├── index.html
├── style.css
└── script.js
/o.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raffneptune/game9/HEAD/o.png
--------------------------------------------------------------------------------
/x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raffneptune/game9/HEAD/x.png
--------------------------------------------------------------------------------
/♡ Anime pfp♡.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raffneptune/game9/HEAD/♡ Anime pfp♡.jpeg
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
game 9
2 | tap link
3 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Raff | Tic Tac Toe
9 |
10 |
11 |
12 |
13 |
tic tac toe
14 |
15 |
20 |
25 |
30 |
31 |
Score
32 |
33 |
X : 0
34 | O : 0
35 |
36 |
37 |
Draws
38 | 0
39 |
40 |
41 |
42 |
text
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Poppins:100,100italic,200,200italic,300,300italic,regular,italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic);
2 |
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | font-family: "Poppins", sans-serif;
8 | }
9 | body {
10 | min-height: 100vh;
11 | display: flex;
12 | align-items: center;
13 | justify-content: center;
14 | color: #fff;
15 | background-color: #33383f;
16 | }
17 | .heading {
18 | text-transform: uppercase;
19 | text-align: center;
20 | margin-bottom: 50px;
21 | font-size: 40px;
22 | border-radius: 5px;
23 | padding: 0 10px;
24 | background-color: #555;
25 | }
26 | .cells {
27 | display: flex;
28 | }
29 | .cell {
30 | width: 100px;
31 | height: 100px;
32 | display: flex;
33 | align-items: center;
34 | justify-content: center;
35 | border: 10px solid #05ccab;
36 | }
37 | .cell img {
38 | width: 90%;
39 | }
40 | .cell.one {
41 | border-top: none;
42 | border-left: none;
43 | }
44 | .cell.two {
45 | border-top: none;
46 | }
47 | .cell.three {
48 | border-top: none;
49 | border-right: none;
50 | }
51 | .cell.four {
52 | border-left: none;
53 | }
54 | .cell.six {
55 | border-right: none;
56 | }
57 | .cell.seven {
58 | border-left: none;
59 | border-bottom: none;
60 | }
61 | .cell.eight {
62 | border-bottom: none;
63 | }
64 | .cell.nine {
65 | border-bottom: none;
66 | border-right: none;
67 | }
68 | .score {
69 | margin-top: 20px;
70 | text-align: center;
71 | }
72 | .score-inner {
73 | display: flex;
74 | justify-content: space-between;
75 | align-items: center;
76 | width: 100%;
77 | padding: 0 20px;
78 | }
79 | .resetBtn {
80 | text-transform: uppercase;
81 | margin: 20px auto;
82 | display: block;
83 | font-size: 20px;
84 | padding: 10px 20px;
85 | background-color: #555;
86 | border-radius: 5px;
87 | cursor: pointer;
88 | border: none;
89 | color: #fff;
90 | transition: all 0.3s ease;
91 | }
92 | .resetBtn:hover {
93 | background-color: #333;
94 | }
95 | .toast {
96 | text-transform: uppercase;
97 | background-color: #555;
98 | color: #fff;
99 | padding: 10px;
100 | border-radius: 5px;
101 | font-size: 30px;
102 | font-weight: 700;
103 | text-align: center;
104 | position: fixed;
105 | top: 20px;
106 | left: 50%;
107 | opacity: 0;
108 | transition: top 0.3s ease, opacity 0.3s ease;
109 | transform: translateX(-50%);
110 | }
111 | .toast.show {
112 | opacity: 1;
113 | top: 50px;
114 | }
115 |
--------------------------------------------------------------------------------
/script.js:
--------------------------------------------------------------------------------
1 | const cells = document.querySelectorAll(".cell");
2 | const playerXScoreSpan = document.querySelector("#playerXScore");
3 | const playerOScoreSpan = document.querySelector("#playerOScore");
4 | const resetBtn = document.querySelector(".resetBtn");
5 | const toastDiv = document.querySelector(".toast");
6 | const draws = document.querySelector("#draws");
7 |
8 | const playerX = "X";
9 | const playerO = "O";
10 | let playerXScore = 0;
11 | let playerOScore = 0;
12 | let currentLevel = 1;
13 | let flag = true;
14 | let currentPlayer = playerX;
15 |
16 | const winCombos = [
17 | [0, 1, 2],
18 | [3, 4, 5],
19 | [6, 7, 8],
20 | [0, 3, 6],
21 | [1, 4, 7],
22 | [2, 5, 8],
23 | [0, 4, 8],
24 | [2, 4, 6],
25 | ];
26 |
27 | for (let i = 0; i < cells.length; i++) {
28 | cells[i].addEventListener("click", cellClicked);
29 | }
30 | function cellClicked(e) {
31 | if (flag) {
32 | if (e.target.innerHTML === "") {
33 | e.target.appendChild(addImg(currentPlayer));
34 | checkWinner();
35 | checkDraw();
36 | if (currentPlayer === playerX) {
37 | currentPlayer = playerO;
38 | } else {
39 | currentPlayer = playerX;
40 | }
41 | }
42 | }
43 | }
44 |
45 | function addImg(type) {
46 | const img = document.createElement("img");
47 | img.src = `${type}.png`;
48 | return img;
49 | }
50 |
51 | function checkWinner() {
52 | for (let i = 0; i < winCombos.length; i++) {
53 | const winCombo = winCombos[i];
54 | const cell1 = cells[winCombo[0]];
55 | const cell2 = cells[winCombo[1]];
56 | const cell3 = cells[winCombo[2]];
57 | if (
58 | cell1.innerHTML !== "" &&
59 | cell1.innerHTML === cell2.innerHTML &&
60 | cell1.innerHTML === cell3.innerHTML
61 | ) {
62 | toast(`Player ${currentPlayer} wins!`);
63 | updateScore();
64 | flag = false;
65 | currentLevel++;
66 | setTimeout(() => {
67 | reset();
68 | toast(`level ${currentLevel}`);
69 | }, 2000);
70 | }
71 | }
72 | }
73 |
74 | function checkDraw() {
75 | if ([...cells].every((cell) => cell.innerHTML !== "")) {
76 | toast("its a draw");
77 | currentLevel++;
78 | setTimeout(() => {
79 | reset();
80 | toast(`level ${currentLevel}`);
81 | }, 2000);
82 | }
83 | }
84 |
85 | function toast(msg) {
86 | toastDiv.classList.add("show");
87 | toastDiv.textContent = msg;
88 | setTimeout(() => {
89 | toastDiv.classList.remove("show");
90 | }, 1000);
91 | }
92 |
93 | function updateScore() {
94 | if (currentPlayer === playerX) {
95 | playerXScore++;
96 | playerXScoreSpan.textContent = playerXScore;
97 | } else {
98 | playerOScore++;
99 | playerOScoreSpan.textContent = playerOScore;
100 | }
101 | }
102 |
103 | function reset() {
104 | cells.forEach((cell) => {
105 | cell.innerHTML = "";
106 | });
107 | flag = true;
108 | }
109 |
110 | resetBtn.addEventListener("click", () => {
111 | flag = false;
112 | reset();
113 | currentLevel = 1;
114 | playerOScore = 0;
115 | playerXScore = 0;
116 | playerOScoreSpan.textContent = playerOScore;
117 | playerXScoreSpan.textContent = playerXScore;
118 | toast("game reset!");
119 | setTimeout(() => {
120 | toast(`level ${currentLevel}`);
121 | flag = true;
122 | }, 2000);
123 | });
124 |
--------------------------------------------------------------------------------