FantomClans commited on
Commit
bcae056
·
verified ·
1 Parent(s): 76be617

Сделай сайт который позволяет человек создавать свой мир, в 2д или же в 3д

Browse files
Files changed (2) hide show
  1. index.html +0 -452
  2. world-builder.html +263 -0
index.html CHANGED
@@ -1,452 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Interactive Desk Game</title>
7
- <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
- <script src="https://cdn.tailwindcss.com"></script>
9
- <script src="https://unpkg.com/feather-icons"></script>
10
- <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
- <script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
12
- <style>
13
- :root {
14
- --primary-color: #8B5CF6;
15
- --secondary-color: #EC4899;
16
- }
17
-
18
- body {
19
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
20
- background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
21
- color: #f0f0f0;
22
- min-height: 100vh;
23
- }
24
-
25
- .game-board {
26
- display: grid;
27
- grid-template-columns: repeat(3, 1fr);
28
- gap: 15px;
29
- max-width: 500px;
30
- margin: 0 auto;
31
- }
32
-
33
- .game-cell {
34
- aspect-ratio: 1;
35
- background: rgba(255, 255, 255, 0.1);
36
- border-radius: 12px;
37
- display: flex;
38
- align-items: center;
39
- justify-content: center;
40
- font-size: 3rem;
41
- font-weight: bold;
42
- cursor: pointer;
43
- transition: all 0.3s ease;
44
- backdrop-filter: blur(10px);
45
- border: 1px solid rgba(255, 255, 255, 0.1);
46
- }
47
-
48
- .game-cell:hover {
49
- background: rgba(255, 255, 255, 0.2);
50
- transform: translateY(-5px);
51
- }
52
-
53
- .game-cell.x {
54
- color: var(--primary-color);
55
- }
56
-
57
- .game-cell.o {
58
- color: var(--secondary-color);
59
- }
60
-
61
- .winning-cell {
62
- animation: pulse 1.5s infinite;
63
- box-shadow: 0 0 15px currentColor;
64
- }
65
-
66
- @keyframes pulse {
67
- 0% { transform: scale(1); }
68
- 50% { transform: scale(1.05); }
69
- 100% { transform: scale(1); }
70
- }
71
-
72
- .score-card {
73
- background: rgba(255, 255, 255, 0.1);
74
- border-radius: 16px;
75
- padding: 20px;
76
- backdrop-filter: blur(10px);
77
- border: 1px solid rgba(255, 255, 255, 0.1);
78
- }
79
-
80
- .btn-primary {
81
- background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
82
- color: white;
83
- border: none;
84
- padding: 12px 24px;
85
- border-radius: 50px;
86
- font-weight: bold;
87
- cursor: pointer;
88
- transition: all 0.3s ease;
89
- box-shadow: 0 4px 15px rgba(139, 92, 246, 0.3);
90
- }
91
-
92
- .btn-primary:hover {
93
- transform: translateY(-3px);
94
- box-shadow: 0 6px 20px rgba(139, 92, 246, 0.5);
95
- }
96
-
97
- .btn-primary:active {
98
- transform: translateY(1px);
99
- }
100
-
101
- .player-indicator {
102
- display: inline-block;
103
- width: 20px;
104
- height: 20px;
105
- border-radius: 50%;
106
- margin-right: 8px;
107
- }
108
-
109
- .player-x-indicator {
110
- background: var(--primary-color);
111
- }
112
-
113
- .player-o-indicator {
114
- background: var(--secondary-color);
115
- }
116
-
117
- .notification {
118
- position: fixed;
119
- top: 20px;
120
- right: 20px;
121
- padding: 15px 25px;
122
- border-radius: 12px;
123
- background: rgba(255, 255, 255, 0.15);
124
- backdrop-filter: blur(10px);
125
- border-left: 4px solid var(--primary-color);
126
- transform: translateX(150%);
127
- transition: transform 0.3s ease;
128
- z-index: 1000;
129
- }
130
-
131
- .notification.show {
132
- transform: translateX(0);
133
- }
134
- </style>
135
- </head>
136
- <body class="min-h-screen flex flex-col">
137
- <!-- Background Animation -->
138
- <div id="background-animation" class="fixed inset-0 z-0"></div>
139
-
140
- <!-- Header -->
141
- <header class="relative z-10 py-6 px-4 sm:px-8">
142
- <div class="container mx-auto flex justify-between items-center">
143
- <h1 class="text-3xl font-bold flex items-center">
144
- <i data-feather="grid" class="mr-3 text-purple-400"></i>
145
- DeskGame<span class="text-pink-500">.io</span>
146
- </h1>
147
- <nav>
148
- <ul class="flex space-x-6">
149
- <li><a href="#" class="hover:text-purple-400 transition">Play</a></li>
150
- <li><a href="#" class="hover:text-purple-400 transition">Leaderboard</a></li>
151
- <li><a href="#" class="hover:text-purple-400 transition">About</a></li>
152
- </ul>
153
- </nav>
154
- </div>
155
- </header>
156
-
157
- <!-- Main Content -->
158
- <main class="flex-grow relative z-10 py-12 px-4">
159
- <div class="container mx-auto max-w-4xl">
160
- <div class="text-center mb-12">
161
- <h2 class="text-4xl font-bold mb-4">Interactive Desk Game</h2>
162
- <p class="text-xl text-gray-300 max-w-2xl mx-auto">
163
- Challenge your friends in this classic strategy game. Play against AI or invite a friend for an epic battle!
164
- </p>
165
- </div>
166
-
167
- <div class="flex flex-col lg:flex-row gap-8 items-center">
168
- <!-- Game Board -->
169
- <div class="flex-1">
170
- <div class="bg-gray-800 bg-opacity-50 rounded-2xl p-6 backdrop-blur-sm border border-gray-700">
171
- <div class="flex justify-between items-center mb-6">
172
- <div class="text-xl font-semibold">
173
- Current Player:
174
- <span id="current-player" class="ml-2">
175
- <span class="player-indicator player-x-indicator"></span>
176
- Player X
177
- </span>
178
- </div>
179
- <button id="reset-btn" class="btn-primary flex items-center">
180
- <i data-feather="refresh-ccw" class="mr-2"></i>
181
- Reset Game
182
- </button>
183
- </div>
184
-
185
- <div class="game-board mb-6">
186
- <div class="game-cell" data-cell-index="0"></div>
187
- <div class="game-cell" data-cell-index="1"></div>
188
- <div class="game-cell" data-cell-index="2"></div>
189
- <div class="game-cell" data-cell-index="3"></div>
190
- <div class="game-cell" data-cell-index="4"></div>
191
- <div class="game-cell" data-cell-index="5"></div>
192
- <div class="game-cell" data-cell-index="6"></div>
193
- <div class="game-cell" data-cell-index="7"></div>
194
- <div class="game-cell" data-cell-index="8"></div>
195
- </div>
196
-
197
- <div class="text-center">
198
- <div id="game-status" class="text-2xl font-bold mb-4">Player X's turn</div>
199
- <button id="new-game-btn" class="btn-primary hidden">
200
- <i data-feather="plus-circle" class="mr-2"></i>
201
- New Game
202
- </button>
203
- </div>
204
- </div>
205
- </div>
206
-
207
- <!-- Score & Info Panel -->
208
- <div class="w-full lg:w-80">
209
- <div class="score-card mb-6">
210
- <h3 class="text-2xl font-bold mb-4 flex items-center">
211
- <i data-feather="award" class="mr-2 text-yellow-400"></i>
212
- Scoreboard
213
- </h3>
214
- <div class="space-y-4">
215
- <div class="flex justify-between items-center p-3 bg-gray-700 bg-opacity-50 rounded-lg">
216
- <div class="flex items-center">
217
- <span class="player-indicator player-x-indicator"></span>
218
- <span>Player X</span>
219
- </div>
220
- <span id="score-x" class="text-2xl font-bold">0</span>
221
- </div>
222
- <div class="flex justify-between items-center p-3 bg-gray-700 bg-opacity-50 rounded-lg">
223
- <div class="flex items-center">
224
- <span class="player-indicator player-o-indicator"></span>
225
- <span>Player O</span>
226
- </div>
227
- <span id="score-o" class="text-2xl font-bold">0</span>
228
- </div>
229
- <div class="flex justify-between items-center p-3 bg-gray-700 bg-opacity-50 rounded-lg">
230
- <div class="flex items-center">
231
- <i data-feather="minus" class="mr-2"></i>
232
- <span>Draws</span>
233
- </div>
234
- <span id="score-draw" class="text-2xl font-bold">0</span>
235
- </div>
236
- </div>
237
- </div>
238
-
239
- <div class="score-card">
240
- <h3 class="text-2xl font-bold mb-4 flex items-center">
241
- <i data-feather="info" class="mr-2 text-blue-400"></i>
242
- How to Play
243
- </h3>
244
- <ul class="space-y-3">
245
- <li class="flex items-start">
246
- <i data-feather="check-circle" class="mr-2 mt-1 text-green-400 flex-shrink-0"></i>
247
- <span>Players take turns placing X or O marks</span>
248
- </li>
249
- <li class="flex items-start">
250
- <i data-feather="check-circle" class="mr-2 mt-1 text-green-400 flex-shrink-0"></i>
251
- <span>First to get 3 in a row wins</span>
252
- </li>
253
- <li class="flex items-start">
254
- <i data-feather="check-circle" class="mr-2 mt-1 text-green-400 flex-shrink-0"></i>
255
- <span>Row can be horizontal, vertical, or diagonal</span>
256
- </li>
257
- </ul>
258
- </div>
259
- </div>
260
- </div>
261
- </div>
262
- </main>
263
-
264
- <!-- Notification -->
265
- <div id="notification" class="notification">
266
- <div id="notification-message"></div>
267
- </div>
268
-
269
- <!-- Footer -->
270
- <footer class="relative z-10 py-8 px-4 border-t border-gray-800">
271
- <div class="container mx-auto text-center">
272
- <p class="text-gray-400">
273
- © 2023 DeskGame.io - The Ultimate Interactive Gaming Experience
274
- </p>
275
- <div class="mt-4 flex justify-center space-x-6">
276
- <a href="#" class="text-gray-400 hover:text-purple-400 transition">
277
- <i data-feather="github"></i>
278
- </a>
279
- <a href="#" class="text-gray-400 hover:text-purple-400 transition">
280
- <i data-feather="twitter"></i>
281
- </a>
282
- <a href="#" class="text-gray-400 hover:text-purple-400 transition">
283
- <i data-feather="facebook"></i>
284
- </a>
285
- </div>
286
- </div>
287
- </footer>
288
-
289
- <script>
290
- // Initialize Feather Icons
291
- feather.replace();
292
-
293
- // Initialize Vanta.js Background
294
- VANTA.GLOBE({
295
- el: "#background-animation",
296
- mouseControls: true,
297
- touchControls: true,
298
- gyroControls: false,
299
- minHeight: 200.00,
300
- minWidth: 200.00,
301
- scale: 1.00,
302
- scaleMobile: 1.00,
303
- color: 0x8b5cf6,
304
- color2: 0xec4899,
305
- backgroundColor: 0x16213e,
306
- size: 1.00,
307
- lineWidth: 1.00,
308
- spacing: 17.00,
309
- points: 19.00
310
- });
311
-
312
- // Game Logic
313
- document.addEventListener('DOMContentLoaded', () => {
314
- const cells = document.querySelectorAll('.game-cell');
315
- const currentPlayerDisplay = document.getElementById('current-player');
316
- const gameStatus = document.getElementById('game-status');
317
- const resetBtn = document.getElementById('reset-btn');
318
- const newGameBtn = document.getElementById('new-game-btn');
319
- const scoreX = document.getElementById('score-x');
320
- const scoreO = document.getElementById('score-o');
321
- const scoreDraw = document.getElementById('score-draw');
322
- const notification = document.getElementById('notification');
323
- const notificationMessage = document.getElementById('notification-message');
324
-
325
- let currentPlayer = 'X';
326
- let gameBoard = ['', '', '', '', '', '', '', '', ''];
327
- let gameActive = true;
328
- let scores = { X: 0, O: 0, draw: 0 };
329
-
330
- const winningConditions = [
331
- [0, 1, 2], [3, 4, 5], [6, 7, 8], // rows
332
- [0, 3, 6], [1, 4, 7], [2, 5, 8], // columns
333
- [0, 4, 8], [2, 4, 6] // diagonals
334
- ];
335
-
336
- // Show notification
337
- function showNotification(message) {
338
- notificationMessage.textContent = message;
339
- notification.classList.add('show');
340
- setTimeout(() => {
341
- notification.classList.remove('show');
342
- }, 3000);
343
- }
344
-
345
- // Update score display
346
- function updateScore() {
347
- scoreX.textContent = scores.X;
348
- scoreO.textContent = scores.O;
349
- scoreDraw.textContent = scores.draw;
350
- }
351
-
352
- // Handle cell click
353
- function handleCellClick(e) {
354
- const cell = e.target;
355
- const cellIndex = parseInt(cell.getAttribute('data-cell-index'));
356
-
357
- if (gameBoard[cellIndex] !== '' || !gameActive) return;
358
-
359
- // Update board state
360
- gameBoard[cellIndex] = currentPlayer;
361
- cell.textContent = currentPlayer;
362
- cell.classList.add(currentPlayer.toLowerCase());
363
-
364
- // Check for win or draw
365
- if (checkWin()) {
366
- gameStatus.textContent = `Player ${currentPlayer} wins!`;
367
- scores[currentPlayer]++;
368
- updateScore();
369
- gameActive = false;
370
- newGameBtn.classList.remove('hidden');
371
- showNotification(`Player ${currentPlayer} wins the round!`);
372
- } else if (isDraw()) {
373
- gameStatus.textContent = "Game ended in a draw!";
374
- scores.draw++;
375
- updateScore();
376
- gameActive = false;
377
- newGameBtn.classList.remove('hidden');
378
- showNotification("It's a draw!");
379
- } else {
380
- // Switch player
381
- currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
382
- updateCurrentPlayerDisplay();
383
- gameStatus.textContent = `Player ${currentPlayer}'s turn`;
384
- }
385
- }
386
-
387
- // Check for win
388
- function checkWin() {
389
- for (let condition of winningConditions) {
390
- const [a, b, c] = condition;
391
- if (
392
- gameBoard[a] &&
393
- gameBoard[a] === gameBoard[b] &&
394
- gameBoard[a] === gameBoard[c]
395
- ) {
396
- // Highlight winning cells
397
- cells[a].classList.add('winning-cell');
398
- cells[b].classList.add('winning-cell');
399
- cells[c].classList.add('winning-cell');
400
- return true;
401
- }
402
- }
403
- return false;
404
- }
405
-
406
- // Check for draw
407
- function isDraw() {
408
- return gameBoard.every(cell => cell !== '');
409
- }
410
-
411
- // Update current player display
412
- function updateCurrentPlayerDisplay() {
413
- currentPlayerDisplay.innerHTML = `
414
- <span class="player-indicator player-${currentPlayer.toLowerCase()}-indicator"></span>
415
- Player ${currentPlayer}
416
- `;
417
- }
418
-
419
- // Reset game board
420
- function resetGame() {
421
- gameBoard = ['', '', '', '', '', '', '', '', ''];
422
- gameActive = true;
423
- currentPlayer = 'X';
424
-
425
- cells.forEach(cell => {
426
- cell.textContent = '';
427
- cell.classList.remove('x', 'o', 'winning-cell');
428
- });
429
-
430
- updateCurrentPlayerDisplay();
431
- gameStatus.textContent = "Player X's turn";
432
- newGameBtn.classList.add('hidden');
433
- }
434
-
435
- // Initialize game
436
- function initGame() {
437
- cells.forEach(cell => {
438
- cell.addEventListener('click', handleCellClick);
439
- });
440
-
441
- resetBtn.addEventListener('click', resetGame);
442
- newGameBtn.addEventListener('click', resetGame);
443
-
444
- updateCurrentPlayerDisplay();
445
- updateScore();
446
- }
447
-
448
- initGame();
449
- });
450
- </script>
451
- </body>
452
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
world-builder.html ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Создание Мира | World Builder</title>
7
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/animejs/lib/anime.iife.min.js"></script>
11
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel="stylesheet">
12
+ <style>
13
+ body {
14
+ font-family: 'Inter', sans-serif;
15
+ background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
16
+ min-height: 100vh;
17
+ }
18
+ .world-card {
19
+ transition: all 0.3s ease;
20
+ background: rgba(255, 255, 255, 0.05);
21
+ backdrop-filter: blur(10px);
22
+ border: 1px solid rgba(255, 255, 255, 0.1);
23
+ }
24
+ .world-card:hover {
25
+ transform: translateY(-5px);
26
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3);
27
+ background: rgba(255, 255, 255, 0.08);
28
+ }
29
+ .dimension-btn {
30
+ transition: all 0.2s ease;
31
+ }
32
+ .dimension-btn:hover {
33
+ transform: scale(1.05);
34
+ }
35
+ .dimension-btn.active {
36
+ box-shadow: 0 0 0 3px #6366f1;
37
+ }
38
+ .tool-btn {
39
+ transition: all 0.2s ease;
40
+ }
41
+ .tool-btn:hover {
42
+ background: rgba(99, 102, 241, 0.2);
43
+ }
44
+ .tool-btn.active {
45
+ background: #4f46e5;
46
+ }
47
+ </style>
48
+ </head>
49
+ <body class="text-gray-100">
50
+ <!-- Header -->
51
+ <header class="bg-gray-900 border-b border-gray-800">
52
+ <div class="container mx-auto px-4 py-4 flex justify-between items-center">
53
+ <div class="flex items-center space-x-2">
54
+ <i data-feather="globe" class="text-indigo-400"></i>
55
+ <h1 class="text-2xl font-bold">World<span class="text-indigo-400">Builder</span></h1>
56
+ </div>
57
+ <nav class="hidden md:flex space-x-8">
58
+ <a href="index.html" class="hover:text-indigo-400 transition">Главная</a>
59
+ <a href="#" class="text-indigo-400 font-medium">Создание</a>
60
+ <a href="#" class="hover:text-indigo-400 transition">Галерея</a>
61
+ <a href="#" class="hover:text-indigo-400 transition">Сообщество</a>
62
+ </nav>
63
+ <div class="flex items-center space-x-4">
64
+ <button class="bg-indigo-600 hover:bg-indigo-700 px-4 py-2 rounded-lg transition">Войти</button>
65
+ <button class="border border-gray-700 hover:bg-gray-800 px-4 py-2 rounded-lg transition">Регистрация</button>
66
+ </div>
67
+ </div>
68
+ </header>
69
+
70
+ <!-- Main Content -->
71
+ <main class="container mx-auto px-4 py-8">
72
+ <div class="text-center mb-12">
73
+ <h1 class="text-4xl md:text-5xl font-bold mb-4">Создайте свой уникальный мир</h1>
74
+ <p class="text-xl text-gray-300 max-w-3xl mx-auto">Выберите размерность, инструменты и начните строить фэнтезийные ландшафты, города или целые вселенные</p>
75
+ </div>
76
+
77
+ <!-- Dimension Selector -->
78
+ <div class="bg-gray-800 rounded-xl p-6 mb-10">
79
+ <h2 class="text-2xl font-bold mb-6 text-center">Выберите размерность мира</h2>
80
+ <div class="flex flex-wrap justify-center gap-6">
81
+ <button class="dimension-btn active bg-gray-700 border-2 border-indigo-500 rounded-xl p-6 w-64 flex flex-col items-center">
82
+ <i data-feather="square" class="w-12 h-12 mb-3 text-indigo-400"></i>
83
+ <h3 class="text-xl font-bold mb-2">2D Мир</h3>
84
+ <p class="text-gray-300 text-center text-sm">Создавайте плоские миры с тайлами, спрайтами и изометрическими ландшафтами</p>
85
+ </button>
86
+ <button class="dimension-btn bg-gray-700 border-2 border-gray-600 rounded-xl p-6 w-64 flex flex-col items-center">
87
+ <i data-feather="box" class="w-12 h-12 mb-3 text-indigo-400"></i>
88
+ <h3 class="text-xl font-bold mb-2">3D Мир</h3>
89
+ <p class="text-gray-300 text-center text-sm">Стройте объемные миры с ландшафтами, зданиями и детализированными объектами</p>
90
+ </button>
91
+ </div>
92
+ </div>
93
+
94
+ <!-- Tools Panel -->
95
+ <div class="grid grid-cols-1 lg:grid-cols-4 gap-8 mb-10">
96
+ <div class="lg:col-span-1">
97
+ <div class="bg-gray-800 rounded-xl p-6">
98
+ <h2 class="text-2xl font-bold mb-6">Инструменты</h2>
99
+ <div class="space-y-3">
100
+ <button class="tool-btn active w-full text-left p-3 rounded-lg flex items-center">
101
+ <i data-feather="mountain" class="w-5 h-5 mr-3"></i>
102
+ <span>Ландшафт</span>
103
+ </button>
104
+ <button class="tool-btn w-full text-left p-3 rounded-lg flex items-center">
105
+ <i data-feather="home" class="w-5 h-5 mr-3"></i>
106
+ <span>Здания</span>
107
+ </button>
108
+ <button class="tool-btn w-full text-left p-3 rounded-lg flex items-center">
109
+ <i data-feather="users" class="w-5 h-5 mr-3"></i>
110
+ <span>Персонажи</span>
111
+ </button>
112
+ <button class="tool-btn w-full text-left p-3 rounded-lg flex items-center">
113
+ <i data-feather="droplet" class="w-5 h-5 mr-3"></i>
114
+ <span>Вода</span>
115
+ </button>
116
+ <button class="tool-btn w-full text-left p-3 rounded-lg flex items-center">
117
+ <i data-feather="tree" class="w-5 h-5 mr-3"></i>
118
+ <span>Растения</span>
119
+ </button>
120
+ <button class="tool-btn w-full text-left p-3 rounded-lg flex items-center">
121
+ <i data-feather="sun" class="w-5 h-5 mr-3"></i>
122
+ <span>Погода</span>
123
+ </button>
124
+ </div>
125
+ </div>
126
+ </div>
127
+
128
+ <!-- Canvas Area -->
129
+ <div class="lg:col-span-3">
130
+ <div class="bg-gray-800 rounded-xl p-6">
131
+ <div class="flex justify-between items-center mb-6">
132
+ <h2 class="text-2xl font-bold">Рабочая область</h2>
133
+ <div class="flex space-x-3">
134
+ <button class="bg-gray-700 hover:bg-gray-600 px-4 py-2 rounded-lg transition flex items-center">
135
+ <i data-feather="save" class="w-4 h-4 mr-2"></i>
136
+ Сохранить
137
+ </button>
138
+ <button class="bg-indigo-600 hover:bg-indigo-700 px-4 py-2 rounded-lg transition flex items-center">
139
+ <i data-feather="play" class="w-4 h-4 mr-2"></i>
140
+ Запустить
141
+ </button>
142
+ </div>
143
+ </div>
144
+ <div class="bg-gray-900 rounded-lg h-96 flex items-center justify-center border-2 border-dashed border-gray-700">
145
+ <div class="text-center">
146
+ <i data-feather="edit-3" class="w-12 h-12 mx-auto mb-4 text-gray-500"></i>
147
+ <p class="text-gray-400">Выберите инструменты и начните создавать ваш мир</p>
148
+ <p class="text-gray-500 text-sm mt-2">Кликните на рабочую область для начала рисования</p>
149
+ </div>
150
+ </div>
151
+ </div>
152
+ </div>
153
+ </div>
154
+
155
+ <!-- Recent Worlds -->
156
+ <div class="mb-12">
157
+ <div class="flex justify-between items-center mb-6">
158
+ <h2 class="text-2xl font-bold">Ваши миры</h2>
159
+ <button class="text-indigo-400 hover:text-indigo-300 flex items-center">
160
+ <i data-feather="plus" class="w-5 h-5 mr-1"></i>
161
+ Создать новый
162
+ </button>
163
+ </div>
164
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
165
+ <div class="world-card rounded-xl p-5">
166
+ <img src="http://static.photos/nature/640x360/1" alt="Мир" class="rounded-lg mb-4 w-full h-40 object-cover">
167
+ <h3 class="text-xl font-bold mb-2">Фэнтезийный лес</h3>
168
+ <p class="text-gray-400 text-sm mb-4">2D мир с магическими существами</p>
169
+ <div class="flex justify-between">
170
+ <span class="text-xs bg-indigo-900 text-indigo-300 px-2 py-1 rounded">2D</span>
171
+ <span class="text-xs text-gray-500">Обновлен: 2 дня назад</span>
172
+ </div>
173
+ </div>
174
+ <div class="world-card rounded-xl p-5">
175
+ <img src="http://static.photos/cityscape/640x360/2" alt="Мир" class="rounded-lg mb-4 w-full h-40 object-cover">
176
+ <h3 class="text-xl font-bold mb-2">Киберпанк город</h3>
177
+ <p class="text-gray-400 text-sm mb-4">3D мегаполис будущего</p>
178
+ <div class="flex justify-between">
179
+ <span class="text-xs bg-purple-900 text-purple-300 px-2 py-1 rounded">3D</span>
180
+ <span class="text-xs text-gray-500">Обновлен: 1 неделю назад</span>
181
+ </div>
182
+ </div>
183
+ <div class="world-card rounded-xl p-5">
184
+ <img src="http://static.photos/abstract/640x360/3" alt="Мир" class="rounded-lg mb-4 w-full h-40 object-cover">
185
+ <h3 class="text-xl font-bold mb-2">Пустынный оазис</h3>
186
+ <p class="text-gray-400 text-sm mb-4">2D мир в стиле арт-нуво</p>
187
+ <div class="flex justify-between">
188
+ <span class="text-xs bg-indigo-900 text-indigo-300 px-2 py-1 rounded">2D</span>
189
+ <span class="text-xs text-gray-500">Обновлен: 3 дня назад</span>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </main>
195
+
196
+ <!-- Footer -->
197
+ <footer class="bg-gray-900 border-t border-gray-800 py-12">
198
+ <div class="container mx-auto px-4">
199
+ <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
200
+ <div>
201
+ <div class="flex items-center space-x-2 mb-4">
202
+ <i data-feather="globe" class="text-indigo-400"></i>
203
+ <h2 class="text-xl font-bold">World<span class="text-indigo-400">Builder</span></h2>
204
+ </div>
205
+ <p class="text-gray-400">Создавайте уникальные миры в 2D и 3D для ваших игр, историй и фантазий</p>
206
+ </div>
207
+ <div>
208
+ <h3 class="text-lg font-bold mb-4">Продукт</h3>
209
+ <ul class="space-y-2 text-gray-400">
210
+ <li><a href="#" class="hover:text-indigo-400 transition">Возможности</a></li>
211
+ <li><a href="#" class="hover:text-indigo-400 transition">Примеры</a></li>
212
+ <li><a href="#" class="hover:text-indigo-400 transition">Тарифы</a></li>
213
+ <li><a href="#" class="hover:text-indigo-400 transition">API</a></li>
214
+ </ul>
215
+ </div>
216
+ <div>
217
+ <h3 class="text-lg font-bold mb-4">Ресурсы</h3>
218
+ <ul class="space-y-2 text-gray-400">
219
+ <li><a href="#" class="hover:text-indigo-400 transition">Документация</a></li>
220
+ <li><a href="#" class="hover:text-indigo-400 transition">Блог</a></li>
221
+ <li><a href="#" class="hover:text-indigo-400 transition">Сообщество</a></li>
222
+ <li><a href="#" class="hover:text-indigo-400 transition">Поддержка</a></li>
223
+ </ul>
224
+ </div>
225
+ <div>
226
+ <h3 class="text-lg font-bold mb-4">Компания</h3>
227
+ <ul class="space-y-2 text-gray-400">
228
+ <li><a href="#" class="hover:text-indigo-400 transition">О нас</a></li>
229
+ <li><a href="#" class="hover:text-indigo-400 transition">Карьера</a></li>
230
+ <li><a href="#" class="hover:text-indigo-400 transition">Контакты</a></li>
231
+ <li><a href="#" class="hover:text-indigo-400 transition">Партнеры</a></li>
232
+ </ul>
233
+ </div>
234
+ </div>
235
+ <div class="border-t border-gray-800 mt-8 pt-8 text-center text-gray-500">
236
+ <p>&copy; 2023 WorldBuilder. Все права защищены.</p>
237
+ </div>
238
+ </div>
239
+ </footer>
240
+
241
+ <script>
242
+ feather.replace();
243
+
244
+ // Dimension selector
245
+ const dimensionBtns = document.querySelectorAll('.dimension-btn');
246
+ dimensionBtns.forEach(btn => {
247
+ btn.addEventListener('click', () => {
248
+ dimensionBtns.forEach(b => b.classList.remove('active', 'border-indigo-500'));
249
+ btn.classList.add('active', 'border-indigo-500');
250
+ });
251
+ });
252
+
253
+ // Tool selector
254
+ const toolBtns = document.querySelectorAll('.tool-btn');
255
+ toolBtns.forEach(btn => {
256
+ btn.addEventListener('click', () => {
257
+ toolBtns.forEach(b => b.classList.remove('active'));
258
+ btn.classList.add('active');
259
+ });
260
+ });
261
+ </script>
262
+ </body>
263
+ </html>