Formandl commited on
Commit
06ade7f
·
verified ·
1 Parent(s): 86dde2c

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +1090 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Wertq
3
- emoji: 📊
4
- colorFrom: blue
5
- colorTo: purple
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: wertq
3
+ emoji: 🐳
4
+ colorFrom: pink
5
+ colorTo: pink
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,1090 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>South Park: Кликер Битва</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ @import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@400;700&display=swap');
11
+
12
+ :root {
13
+ --sp-red: #FF0000;
14
+ --sp-blue: #0096FF;
15
+ --sp-yellow: #FFDE00;
16
+ --sp-green: #00A550;
17
+ --sp-orange: #FF8C00;
18
+ --sp-purple: #800080;
19
+ --sp-brown: #8B4513;
20
+ --sp-pink: #FF69B4;
21
+ }
22
+
23
+ body {
24
+ font-family: 'Comic Neue', cursive;
25
+ background-color: #f0f0f0;
26
+ background-image: url('https://i.imgur.com/XWQ5BQa.png');
27
+ background-size: cover;
28
+ background-attachment: fixed;
29
+ min-height: 100vh;
30
+ }
31
+
32
+ .character-card {
33
+ transition: all 0.3s ease;
34
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
35
+ border: 3px solid #000;
36
+ }
37
+
38
+ .character-card:hover {
39
+ transform: translateY(-5px);
40
+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.2);
41
+ }
42
+
43
+ .kenny {
44
+ position: relative;
45
+ overflow: hidden;
46
+ }
47
+
48
+ .kenny::after {
49
+ content: "О боже! Они убили Кенни!";
50
+ position: absolute;
51
+ top: 0;
52
+ left: 0;
53
+ width: 100%;
54
+ height: 100%;
55
+ background-color: rgba(255, 0, 0, 0.8);
56
+ color: white;
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ font-weight: bold;
61
+ opacity: 0;
62
+ transition: opacity 0.3s;
63
+ }
64
+
65
+ .kenny.dead::after {
66
+ opacity: 1;
67
+ }
68
+
69
+ .attack-animation {
70
+ animation: attack 0.3s ease;
71
+ }
72
+
73
+ @keyframes attack {
74
+ 0% { transform: translateX(0); }
75
+ 50% { transform: translateX(10px); }
76
+ 100% { transform: translateX(0); }
77
+ }
78
+
79
+ .progress-bar {
80
+ height: 15px;
81
+ border-radius: 10px;
82
+ overflow: hidden;
83
+ background-color: #e5e7eb;
84
+ border: 2px solid #000;
85
+ }
86
+
87
+ .progress-fill {
88
+ height: 100%;
89
+ transition: width 0.3s ease;
90
+ }
91
+
92
+ .south-park-modal {
93
+ background-color: #fff;
94
+ border: 4px solid #000;
95
+ border-radius: 0;
96
+ box-shadow: 8px 8px 0 rgba(0, 0, 0, 0.2);
97
+ }
98
+
99
+ .south-park-btn {
100
+ background-color: var(--sp-red);
101
+ color: white;
102
+ border: 2px solid #000;
103
+ border-radius: 0;
104
+ font-weight: bold;
105
+ padding: 8px 16px;
106
+ transition: all 0.2s;
107
+ font-family: 'Comic Neue', cursive;
108
+ text-transform: uppercase;
109
+ letter-spacing: 1px;
110
+ }
111
+
112
+ .south-park-btn:hover {
113
+ transform: translate(-2px, -2px);
114
+ box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.2);
115
+ }
116
+
117
+ .south-park-btn:active {
118
+ transform: translate(0, 0);
119
+ box-shadow: none;
120
+ }
121
+
122
+ .speech-bubble {
123
+ position: relative;
124
+ background: #fff;
125
+ border: 2px solid #000;
126
+ border-radius: 0;
127
+ padding: 10px;
128
+ margin: 10px 0;
129
+ font-size: 14px;
130
+ }
131
+
132
+ .speech-bubble:after {
133
+ content: '';
134
+ position: absolute;
135
+ bottom: -10px;
136
+ left: 20px;
137
+ border-width: 10px 10px 0;
138
+ border-style: solid;
139
+ border-color: #fff transparent;
140
+ display: block;
141
+ width: 0;
142
+ }
143
+
144
+ .speech-bubble:before {
145
+ content: '';
146
+ position: absolute;
147
+ bottom: -12px;
148
+ left: 19px;
149
+ border-width: 11px 11px 0;
150
+ border-style: solid;
151
+ border-color: #000 transparent;
152
+ display: block;
153
+ width: 0;
154
+ }
155
+
156
+ /* Адаптация для мобильных устройств */
157
+ @media (max-width: 768px) {
158
+ .container {
159
+ padding: 10px;
160
+ }
161
+
162
+ header {
163
+ flex-direction: column;
164
+ text-align: center;
165
+ margin-bottom: 15px;
166
+ }
167
+
168
+ header img {
169
+ margin: 0 auto 10px;
170
+ }
171
+
172
+ .grid-cols-1 {
173
+ grid-template-columns: 1fr;
174
+ }
175
+
176
+ .lg\:grid-cols-3 {
177
+ grid-template-columns: 1fr;
178
+ }
179
+
180
+ .character-card {
181
+ padding: 10px;
182
+ }
183
+
184
+ .character-card img {
185
+ width: 60px;
186
+ height: 60px;
187
+ }
188
+
189
+ #battle-log {
190
+ height: 150px;
191
+ font-size: 13px;
192
+ }
193
+
194
+ .south-park-btn {
195
+ padding: 6px 12px;
196
+ font-size: 14px;
197
+ }
198
+
199
+ .progress-bar {
200
+ height: 12px;
201
+ }
202
+ }
203
+
204
+ /* Цвета персонажей */
205
+ .stan-bg { background-color: var(--sp-blue); }
206
+ .cartman-bg { background-color: var(--sp-red); }
207
+ .kyle-bg { background-color: var(--sp-green); }
208
+ .kenny-bg { background-color: var(--sp-orange); }
209
+ .butters-bg { background-color: var(--sp-yellow); }
210
+ .wendy-bg { background-color: var(--sp-pink); }
211
+ .randy-bg { background-color: var(--sp-brown); }
212
+
213
+ /* Анимации */
214
+ @keyframes pulse {
215
+ 0% { transform: scale(1); }
216
+ 50% { transform: scale(1.05); }
217
+ 100% { transform: scale(1); }
218
+ }
219
+
220
+ .pulse-animation {
221
+ animation: pulse 1.5s infinite;
222
+ }
223
+
224
+ /* Эффект бумаги */
225
+ .paper-effect {
226
+ background-color: white;
227
+ border: 2px solid black;
228
+ box-shadow: 5px 5px 0 rgba(0,0,0,0.2);
229
+ }
230
+ </style>
231
+ </head>
232
+ <body class="min-h-screen">
233
+ <div class="container mx-auto px-2 py-4">
234
+ <!-- Шапка -->
235
+ <header class="flex flex-col md:flex-row justify-between items-center mb-4 md:mb-8">
236
+ <div class="flex flex-col md:flex-row items-center mb-4 md:mb-0">
237
+ <img src="https://i.imgur.com/8ZT7ZQm.png" alt="Логотип South Park" class="h-12 md:h-16 mr-0 md:mr-4 mb-2 md:mb-0">
238
+ <h1 class="text-2xl md:text-4xl font-bold text-red-600 text-center md:text-left">South Park: Кликер Битва</h1>
239
+ </div>
240
+ <div class="flex items-center space-x-2 md:space-x-4">
241
+ <div class="paper-effect p-2 md:p-3 flex items-center">
242
+ <i class="fas fa-star text-yellow-400 text-xl md:text-2xl mr-1 md:mr-2"></i>
243
+ <span id="stars" class="text-xl md:text-2xl font-bold">0</span>
244
+ </div>
245
+ <div class="paper-effect p-2 md:p-3">
246
+ <span class="text-xs md:text-sm block">Уровень</span>
247
+ <span id="level" class="text-xl md:text-2xl font-bold">1</span>
248
+ </div>
249
+ </div>
250
+ </header>
251
+
252
+ <!-- Основная игровая зона -->
253
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-4 md:gap-6">
254
+ <!-- Зона игрока -->
255
+ <div class="paper-effect p-4 md:p-6 rounded-xl">
256
+ <h2 class="text-xl md:text-2xl font-bold mb-3 text-center text-blue-600">Ваш персонаж</h2>
257
+ <div id="player-character" class="character-card stan-bg p-3 md:p-4 rounded-lg text-center">
258
+ <img id="player-image" src="https://i.imgur.com/JQ6XgGX.png" alt="Стэн" class="w-20 h-20 md:w-32 md:h-32 mx-auto mb-2">
259
+ <h3 id="player-name" class="text-lg md:text-xl font-bold">Стэн Марш</h3>
260
+ <div class="progress-bar mb-2">
261
+ <div id="player-health" class="progress-fill bg-green-500" style="width: 100%"></div>
262
+ </div>
263
+ <div class="flex justify-between text-xs md:text-sm mb-2">
264
+ <span>Здоровье: <span id="player-current-hp">100</span>/<span id="player-max-hp">100</span></span>
265
+ <span>Уровень: <span id="player-level">1</span></span>
266
+ </div>
267
+ <div class="progress-bar mb-2">
268
+ <div id="player-xp" class="progress-fill bg-blue-500" style="width: 0%"></div>
269
+ </div>
270
+ <div class="text-xs md:text-sm mb-3">Опыт: <span id="player-current-xp">0</span>/<span id="player-next-level-xp">100</span></div>
271
+ <div class="grid grid-cols-2 gap-2 mb-3">
272
+ <div class="bg-blue-50 p-1 md:p-2 rounded">
273
+ <span class="block text-xs md:text-sm">Атака</span>
274
+ <span id="player-attack" class="font-bold">10</span>
275
+ </div>
276
+ <div class="bg-blue-50 p-1 md:p-2 rounded">
277
+ <span class="block text-xs md:text-sm">Защита</span>
278
+ <span id="player-defense" class="font-bold">5</span>
279
+ </div>
280
+ </div>
281
+ <button id="upgrade-btn" class="w-full south-park-btn bg-green-600 hover:bg-green-700 text-white py-1 md:py-2 rounded-lg font-bold mb-2">
282
+ Улучшить ($<span id="upgrade-cost">50</span>)
283
+ </button>
284
+ <button id="heal-btn" class="w-full south-park-btn bg-red-600 hover:bg-red-700 text-white py-1 md:py-2 rounded-lg font-bold">
285
+ Лечение ($<span id="heal-cost">30</span>)
286
+ </button>
287
+ </div>
288
+
289
+ <div class="mt-4 md:mt-6">
290
+ <h3 class="text-base md:text-lg font-bold mb-2">Инвентарь</h3>
291
+ <div class="grid grid-cols-3 gap-2">
292
+ <div class="bg-yellow-100 p-1 md:p-2 rounded text-center border border-yellow-300">
293
+ <i class="fas fa-utensils text-lg md:text-xl mb-1"></i>
294
+ <span class="block text-xs md:text-sm">Сырные шарики</span>
295
+ <span id="cheesy-poofs" class="font-bold">0</span>
296
+ </div>
297
+ <div class="bg-purple-100 p-1 md:p-2 rounded text-center border border-purple-300">
298
+ <i class="fas fa-gem text-lg md:text-xl mb-1"></i>
299
+ <span class="block text-xs md:text-sm">Тигрида Виид</span>
300
+ <span id="tegridy-weed" class="font-bold">0</span>
301
+ </div>
302
+ <div class="bg-red-100 p-1 md:p-2 rounded text-center border border-red-300">
303
+ <i class="fas fa-ghost text-lg md:text-xl mb-1"></i>
304
+ <span class="block text-xs md:text-sm">Души Кенни</span>
305
+ <span id="kenny-souls" class="font-bold">0</span>
306
+ </div>
307
+ </div>
308
+ </div>
309
+ </div>
310
+
311
+ <!-- Боевая зона -->
312
+ <div class="paper-effect p-4 md:p-6 rounded-xl">
313
+ <h2 class="text-xl md:text-2xl font-bold mb-3 text-center text-red-600">Арена битв</h2>
314
+ <div id="battle-log" class="bg-gray-100 p-3 rounded-lg h-40 md:h-64 overflow-y-auto mb-3">
315
+ <div class="speech-bubble">
316
+ <p>Добро пожаловать в South Park: Кликер Битва! Выберите персонажа для боя!</p>
317
+ </div>
318
+ </div>
319
+
320
+ <div class="flex flex-col md:flex-row justify-center mb-3 space-y-2 md:space-y-0 md:space-x-3">
321
+ <button id="attack-btn" class="south-park-btn mr-0 md:mr-4">
322
+ <i class="fas fa-fist-raised mr-1 md:mr-2"></i>Атака
323
+ </button>
324
+ <button id="special-btn" class="south-park-btn bg-yellow-500 hover:bg-yellow-600">
325
+ <i class="fas fa-bolt mr-1 md:mr-2"></i>Ульта (<span id="special-charges">0</span>/3)
326
+ </button>
327
+ </div>
328
+
329
+ <div class="text-center mb-3">
330
+ <button id="collect-stars-btn" class="south-park-btn bg-purple-600 hover:bg-purple-700 pulse-animation">
331
+ <i class="fas fa-star mr-1 md:mr-2"></i>Собирать звёзды (<span id="star-timer">5</span>с)
332
+ </button>
333
+ </div>
334
+
335
+ <div id="enemy-area" class="character-card bg-red-100 p-3 md:p-4 rounded-lg text-center">
336
+ <p class="text-gray-500 italic">Выберите противника для боя</p>
337
+ </div>
338
+ </div>
339
+
340
+ <!-- Зона противников -->
341
+ <div class="paper-effect p-4 md:p-6 rounded-xl">
342
+ <h2 class="text-xl md:text-2xl font-bold mb-3 text-center text-green-600">Персонажи</h2>
343
+ <div class="grid grid-cols-2 gap-3">
344
+ <div class="character-card cartman-bg p-2 md:p-3 rounded-lg text-center cursor-pointer enemy-select" data-enemy="cartman">
345
+ <img src="https://i.imgur.com/3tTQxQk.png" alt="Картман" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1">
346
+ <h3 class="font-bold text-sm md:text-base">Эрик Картман</h3>
347
+ <div class="text-xs">Уровень 1</div>
348
+ </div>
349
+ <div class="character-card kyle-bg p-2 md:p-3 rounded-lg text-center cursor-pointer enemy-select" data-enemy="kyle">
350
+ <img src="https://i.imgur.com/9vGjZQ7.png" alt="Кайл" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1">
351
+ <h3 class="font-bold text-sm md:text-base">Кайл Брофловски</h3>
352
+ <div class="text-xs">Уровень 1</div>
353
+ </div>
354
+ <div class="character-card kenny kenny-bg p-2 md:p-3 rounded-lg text-center cursor-pointer enemy-select" data-enemy="kenny">
355
+ <img src="https://i.imgur.com/5QYrWQk.png" alt="Кенни" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1">
356
+ <h3 class="font-bold text-sm md:text-base">Кенни Маккормик</h3>
357
+ <div class="text-xs">Уровень 1</div>
358
+ </div>
359
+ <div class="character-card butters-bg p-2 md:p-3 rounded-lg text-center cursor-pointer enemy-select" data-enemy="butters">
360
+ <img src="https://i.imgur.com/7JvYQxQ.png" alt="Баттерс" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1">
361
+ <h3 class="font-bold text-sm md:text-base">Баттерс Стотч</h3>
362
+ <div class="text-xs">Уровень 1</div>
363
+ </div>
364
+ <div class="character-card wendy-bg p-2 md:p-3 rounded-lg text-center cursor-pointer enemy-select" data-enemy="wendy">
365
+ <img src="https://i.imgur.com/8vYQxQk.png" alt="Венди" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1">
366
+ <h3 class="font-bold text-sm md:text-base">Венди Тестабургер</h3>
367
+ <div class="text-xs">Уровень 1</div>
368
+ </div>
369
+ <div class="character-card randy-bg p-2 md:p-3 rounded-lg text-center cursor-pointer enemy-select" data-enemy="randy">
370
+ <img src="https://i.imgur.com/9vYQxQk.png" alt="Рэнди" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1">
371
+ <h3 class="font-bold text-sm md:text-base">Рэнди Марш</h3>
372
+ <div class="text-xs">Уровень 1</div>
373
+ </div>
374
+ </div>
375
+
376
+ <div class="mt-4 md:mt-6">
377
+ <h3 class="text-base md:text-lg font-bold mb-2">Магазин</h3>
378
+ <div class="space-y-2">
379
+ <button class="w-full bg-yellow-200 hover:bg-yellow-300 p-2 rounded-lg flex justify-between items-center shop-item" data-item="cheesy-poofs" data-cost="20">
380
+ <span class="text-xs md:text-sm">Сырные шарики (+5 HP)</span>
381
+ <span class="font-bold">$20</span>
382
+ </button>
383
+ <button class="w-full bg-purple-200 hover:bg-purple-300 p-2 rounded-lg flex justify-between items-center shop-item" data-item="tegridy-weed" data-cost="50">
384
+ <span class="text-xs md:text-sm">Тигрида Виид (+2 к атаке)</span>
385
+ <span class="font-bold">$50</span>
386
+ </button>
387
+ <button class="w-full bg-red-200 hover:bg-red-300 p-2 rounded-lg flex justify-between items-center shop-item" data-item="kenny-souls" data-cost="100">
388
+ <span class="text-xs md:text-sm">Душа Кенни (Воскрешение)</span>
389
+ <span class="font-bold">$100</span>
390
+ </button>
391
+ </div>
392
+ </div>
393
+ </div>
394
+ </div>
395
+ </div>
396
+
397
+ <!-- Модальное окно выбора персонажа -->
398
+ <div id="character-select-modal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center hidden z-50">
399
+ <div class="south-park-modal p-4 md:p-6 w-full max-w-md mx-4">
400
+ <h2 class="text-xl md:text-2xl font-bold mb-3 md:mb-4 text-center">Выберите своего персонажа</h2>
401
+ <div class="grid grid-cols-2 gap-3 mb-4 md:mb-6">
402
+ <div class="character-card stan-bg p-2 md:p-4 rounded-lg text-center cursor-pointer character-select" data-character="stan">
403
+ <img src="https://i.imgur.com/JQ6XgGX.png" alt="Стэн" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1 md:mb-2">
404
+ <h3 class="font-bold text-sm md:text-base">Стэн Марш</h3>
405
+ <p class="text-xs md:text-sm">Сбалансированные характеристики</p>
406
+ </div>
407
+ <div class="character-card cartman-bg p-2 md:p-4 rounded-lg text-center cursor-pointer character-select" data-character="cartman">
408
+ <img src="https://i.imgur.com/3tTQxQk.png" alt="Картман" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1 md:mb-2">
409
+ <h3 class="font-bold text-sm md:text-base">Эрик Картман</h3>
410
+ <p class="text-xs md:text-sm">Высокая атака, низкая защита</p>
411
+ </div>
412
+ <div class="character-card kyle-bg p-2 md:p-4 rounded-lg text-center cursor-pointer character-select" data-character="kyle">
413
+ <img src="https://i.imgur.com/9vGjZQ7.png" alt="Кайл" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1 md:mb-2">
414
+ <h3 class="font-bold text-sm md:text-base">Кайл Брофловски</h3>
415
+ <p class="text-xs md:text-sm">Высокая защита, низкая атака</p>
416
+ </div>
417
+ <div class="character-card kenny kenny-bg p-2 md:p-4 rounded-lg text-center cursor-pointer character-select" data-character="kenny">
418
+ <img src="https://i.imgur.com/5QYrWQk.png" alt="Кенни" class="w-16 h-16 md:w-20 md:h-20 mx-auto mb-1 md:mb-2">
419
+ <h3 class="font-bold text-sm md:text-base">Кенни Маккормик</h3>
420
+ <p class="text-xs md:text-sm">Случайные бонусы</p>
421
+ </div>
422
+ </div>
423
+ <button id="confirm-character" class="south-park-btn w-full">Начать игру</button>
424
+ </div>
425
+ </div>
426
+
427
+ <script>
428
+ // Состояние игры
429
+ const gameState = {
430
+ stars: 0,
431
+ level: 1,
432
+ money: 0,
433
+ selectedCharacter: null,
434
+ currentEnemy: null,
435
+ battleInProgress: false,
436
+ starTimer: 5,
437
+ starInterval: null,
438
+ specialCharges: 0,
439
+ inventory: {
440
+ 'cheesy-poofs': 0,
441
+ 'tegridy-weed': 0,
442
+ 'kenny-souls': 0
443
+ },
444
+ characters: {
445
+ 'stan': { name: 'Стэн Марш', image: 'https://i.imgur.com/JQ6XgGX.png', attack: 10, defense: 5, maxHp: 100, hp: 100, level: 1, xp: 0, nextLevelXp: 100 },
446
+ 'cartman': { name: 'Эрик Картман', image: 'https://i.imgur.com/3tTQxQk.png', attack: 15, defense: 3, maxHp: 90, hp: 90, level: 1, xp: 0, nextLevelXp: 100 },
447
+ 'kyle': { name: 'Кайл Брофловски', image: 'https://i.imgur.com/9vGjZQ7.png', attack: 8, defense: 8, maxHp: 110, hp: 110, level: 1, xp: 0, nextLevelXp: 100 },
448
+ 'kenny': { name: 'Кенни Маккормик', image: 'https://i.imgur.com/5QYrWQk.png', attack: 12, defense: 4, maxHp: 80, hp: 80, level: 1, xp: 0, nextLevelXp: 100 }
449
+ },
450
+ enemies: {
451
+ 'cartman': { name: 'Эрик Картман', image: 'https://i.imgur.com/3tTQxQk.png', attack: 8, defense: 3, maxHp: 50, hp: 50, level: 1, xpReward: 20, moneyReward: 15 },
452
+ 'kyle': { name: 'Кайл Брофловски', image: 'https://i.imgur.com/9vGjZQ7.png', attack: 7, defense: 5, maxHp: 60, hp: 60, level: 1, xpReward: 25, moneyReward: 20 },
453
+ 'kenny': { name: 'Кенни Маккормик', image: 'https://i.imgur.com/5QYrWQk.png', attack: 9, defense: 2, maxHp: 40, hp: 40, level: 1, xpReward: 30, moneyReward: 25, special: "Легко умирает, но возвращается сильнее" },
454
+ 'butters': { name: 'Баттерс Стотч', image: 'https://i.imgur.com/7JvYQxQ.png', attack: 5, defense: 7, maxHp: 70, hp: 70, level: 1, xpReward: 35, moneyReward: 30 },
455
+ 'wendy': { name: 'Венди Тестабургер', image: 'https://i.imgur.com/8vYQxQk.png', attack: 6, defense: 6, maxHp: 65, hp: 65, level: 1, xpReward: 40, moneyReward: 35 },
456
+ 'randy': { name: 'Рэнди Марш', image: 'https://i.imgur.com/9vYQxQk.png', attack: 10, defense: 4, maxHp: 80, hp: 80, level: 1, xpReward: 50, moneyReward: 50, special: "Сила Тигрида Фармс" }
457
+ },
458
+ enemyLevelMultipliers: [1, 1.2, 1.5, 2, 2.5, 3]
459
+ };
460
+
461
+ // DOM элементы
462
+ const elements = {
463
+ characterSelectModal: document.getElementById('character-select-modal'),
464
+ playerCharacter: document.getElementById('player-character'),
465
+ playerImage: document.getElementById('player-image'),
466
+ playerName: document.getElementById('player-name'),
467
+ playerHealth: document.getElementById('player-health'),
468
+ playerCurrentHp: document.getElementById('player-current-hp'),
469
+ playerMaxHp: document.getElementById('player-max-hp'),
470
+ playerLevel: document.getElementById('player-level'),
471
+ playerXp: document.getElementById('player-xp'),
472
+ playerCurrentXp: document.getElementById('player-current-xp'),
473
+ playerNextLevelXp: document.getElementById('player-next-level-xp'),
474
+ playerAttack: document.getElementById('player-attack'),
475
+ playerDefense: document.getElementById('player-defense'),
476
+ stars: document.getElementById('stars'),
477
+ level: document.getElementById('level'),
478
+ battleLog: document.getElementById('battle-log'),
479
+ enemyArea: document.getElementById('enemy-area'),
480
+ attackBtn: document.getElementById('attack-btn'),
481
+ specialBtn: document.getElementById('special-btn'),
482
+ collectStarsBtn: document.getElementById('collect-stars-btn'),
483
+ starTimer: document.getElementById('star-timer'),
484
+ specialCharges: document.getElementById('special-charges'),
485
+ upgradeBtn: document.getElementById('upgrade-btn'),
486
+ upgradeCost: document.getElementById('upgrade-cost'),
487
+ healBtn: document.getElementById('heal-btn'),
488
+ healCost: document.getElementById('heal-cost'),
489
+ cheesyPoofs: document.getElementById('cheesy-poofs'),
490
+ tegridyWeed: document.getElementById('tegridy-weed'),
491
+ kennySouls: document.getElementById('kenny-souls')
492
+ };
493
+
494
+ // Инициализация игры
495
+ function initGame() {
496
+ elements.characterSelectModal.classList.remove('hidden');
497
+
498
+ // Выбор персонажа
499
+ document.querySelectorAll('.character-select').forEach(btn => {
500
+ btn.addEventListener('click', function() {
501
+ document.querySelectorAll('.character-select').forEach(b => b.classList.remove('ring-4', 'ring-blue-500'));
502
+ this.classList.add('ring-4', 'ring-blue-500');
503
+ gameState.selectedCharacter = this.dataset.character;
504
+ });
505
+ });
506
+
507
+ document.getElementById('confirm-character').addEventListener('click', startGame);
508
+
509
+ // Выбор противника
510
+ document.querySelectorAll('.enemy-select').forEach(btn => {
511
+ btn.addEventListener('click', function() {
512
+ if (gameState.battleInProgress) return;
513
+
514
+ const enemyType = this.dataset.enemy;
515
+ const enemyLevel = Math.min(Math.floor(gameState.level / 2) + 1, 5);
516
+ selectEnemy(enemyType, enemyLevel);
517
+ });
518
+ });
519
+
520
+ // Кнопка атаки
521
+ elements.attackBtn.addEventListener('click', playerAttack);
522
+
523
+ // Кнопка ульты
524
+ elements.specialBtn.addEventListener('click', specialAttack);
525
+
526
+ // Кнопка сбора звёзд
527
+ elements.collectStarsBtn.addEventListener('click', startStarCollection);
528
+
529
+ // Кнопка улучшения
530
+ elements.upgradeBtn.addEventListener('click', upgradeCharacter);
531
+
532
+ // Кнопка лечения
533
+ elements.healBtn.addEventListener('click', healCharacter);
534
+
535
+ // Предметы магазина
536
+ document.querySelectorAll('.shop-item').forEach(item => {
537
+ item.addEventListener('click', function() {
538
+ const itemType = this.dataset.item;
539
+ const cost = parseInt(this.dataset.cost);
540
+ buyItem(itemType, cost);
541
+ });
542
+ });
543
+ }
544
+
545
+ // Начать игру
546
+ function startGame() {
547
+ if (!gameState.selectedCharacter) {
548
+ addToBattleLog("Пожалуйста, сначала выберите персонажа!");
549
+ return;
550
+ }
551
+
552
+ elements.characterSelectModal.classList.add('hidden');
553
+
554
+ // Установить персонажа игрока
555
+ const character = gameState.characters[gameState.selectedCharacter];
556
+ updatePlayerStats();
557
+
558
+ // Установить цвет фона в зависимости от персонажа
559
+ const bgClasses = ['stan-bg', 'cartman-bg', 'kyle-bg', 'kenny-bg'];
560
+ elements.playerCharacter.classList.remove(...bgClasses);
561
+
562
+ switch(gameState.selectedCharacter) {
563
+ case 'stan': elements.playerCharacter.classList.add('stan-bg'); break;
564
+ case 'cartman': elements.playerCharacter.classList.add('cartman-bg'); break;
565
+ case 'kyle': elements.playerCharacter.classList.add('kyle-bg'); break;
566
+ case 'kenny': elements.playerCharacter.classList.add('kenny-bg'); break;
567
+ }
568
+
569
+ addToBattleLog(`Добро пожаловать в Саут Парк, ${character.name}!`);
570
+ addToBattleLog("Выберите противника для боя и начинайте собирать звёзды!");
571
+
572
+ // Обновить интерфейс
573
+ updateUI();
574
+ }
575
+
576
+ // Выбрать противн��ка
577
+ function selectEnemy(enemyType, level) {
578
+ if (gameState.battleInProgress) return;
579
+
580
+ const baseEnemy = gameState.enemies[enemyType];
581
+ const multiplier = gameState.enemyLevelMultipliers[level - 1];
582
+
583
+ gameState.currentEnemy = {
584
+ ...baseEnemy,
585
+ attack: Math.floor(baseEnemy.attack * multiplier),
586
+ defense: Math.floor(baseEnemy.defense * multiplier),
587
+ maxHp: Math.floor(baseEnemy.maxHp * multiplier),
588
+ hp: Math.floor(baseEnemy.maxHp * multiplier),
589
+ level: level,
590
+ xpReward: Math.floor(baseEnemy.xpReward * multiplier),
591
+ moneyReward: Math.floor(baseEnemy.moneyReward * multiplier)
592
+ };
593
+
594
+ // Обновить зону противника
595
+ elements.enemyArea.innerHTML = `
596
+ <img src="${gameState.currentEnemy.image}" alt="${gameState.currentEnemy.name}" class="w-20 h-20 md:w-32 md:h-32 mx-auto mb-2">
597
+ <h3 class="text-lg md:text-xl font-bold">${gameState.currentEnemy.name}</h3>
598
+ <div class="progress-bar mb-2">
599
+ <div id="enemy-health" class="progress-fill bg-red-500" style="width: 100%"></div>
600
+ </div>
601
+ <div class="flex justify-between text-xs md:text-sm mb-2">
602
+ <span>HP: <span id="enemy-current-hp">${gameState.currentEnemy.hp}</span>/<span id="enemy-max-hp">${gameState.currentEnemy.maxHp}</span></span>
603
+ <span>Уровень: ${gameState.currentEnemy.level}</span>
604
+ </div>
605
+ <div class="grid grid-cols-2 gap-2">
606
+ <div class="bg-red-50 p-1 rounded">
607
+ <span class="block text-xs">Атака</span>
608
+ <span class="font-bold">${gameState.currentEnemy.attack}</span>
609
+ </div>
610
+ <div class="bg-red-50 p-1 rounded">
611
+ <span class="block text-xs">Защита</span>
612
+ <span class="font-bold">${gameState.currentEnemy.defense}</span>
613
+ </div>
614
+ </div>
615
+ `;
616
+
617
+ gameState.battleInProgress = true;
618
+ addToBattleLog(`Вы сражаетесь с ${gameState.currentEnemy.name} (Уровень ${gameState.currentEnemy.level})!`);
619
+
620
+ // Заряды ульты
621
+ gameState.specialCharges = 0;
622
+ updateSpecialButton();
623
+ }
624
+
625
+ // Атака игрока
626
+ function playerAttack() {
627
+ if (!gameState.battleInProgress || !gameState.currentEnemy) {
628
+ addToBattleLog("Сначала выберите противника для боя!");
629
+ return;
630
+ }
631
+
632
+ const player = gameState.characters[gameState.selectedCharacter];
633
+ const enemy = gameState.currentEnemy;
634
+
635
+ // Рассчитать урон
636
+ let damage = Math.max(1, player.attack - Math.floor(enemy.defense / 2));
637
+
638
+ // Применить урон
639
+ enemy.hp = Math.max(0, enemy.hp - damage);
640
+
641
+ // Обновить интерфейс
642
+ updateEnemyHealth();
643
+ addToBattleLog(`${player.name} атакует ${enemy.name} и наносит ${damage} урона!`);
644
+
645
+ // Проверить, побеждён ли противник
646
+ if (enemy.hp <= 0) {
647
+ enemyDefeated();
648
+ return;
649
+ }
650
+
651
+ // Контратака противника
652
+ setTimeout(() => {
653
+ enemyAttack();
654
+ }, 500);
655
+
656
+ // Добавить заряд ульты
657
+ gameState.specialCharges = Math.min(gameState.specialCharges + 1, 3);
658
+ updateSpecialButton();
659
+ }
660
+
661
+ // Ультимейт атака
662
+ function specialAttack() {
663
+ if (!gameState.battleInProgress || !gameState.currentEnemy) {
664
+ addToBattleLog("Сначала выберите противника для боя!");
665
+ return;
666
+ }
667
+
668
+ if (gameState.specialCharges < 3) {
669
+ addToBattleLog("Нужно 3 заряда для ультимейт атаки!");
670
+ return;
671
+ }
672
+
673
+ const player = gameState.characters[gameState.selectedCharacter];
674
+ const enemy = gameState.currentEnemy;
675
+
676
+ // Ультимейт атака в зависимости от персонажа
677
+ let damage = 0;
678
+ let specialName = "";
679
+
680
+ switch(gameState.selectedCharacter) {
681
+ case 'stan':
682
+ damage = player.attack * 2;
683
+ specialName = "Сила кофе Тв��ка";
684
+ break;
685
+ case 'cartman':
686
+ damage = player.attack * 3;
687
+ specialName = "Уважайте мою авторитетность!";
688
+ break;
689
+ case 'kyle':
690
+ damage = player.attack + (enemy.maxHp - enemy.hp);
691
+ specialName = "Ярость мамы Кайла";
692
+ break;
693
+ case 'kenny':
694
+ damage = Math.floor(Math.random() * (player.attack * 4)) + 5;
695
+ specialName = "Сила Мистериона";
696
+ break;
697
+ }
698
+
699
+ // Применить урон
700
+ enemy.hp = Math.max(0, enemy.hp - damage);
701
+
702
+ // Обновить интерфейс
703
+ updateEnemyHealth();
704
+ addToBattleLog(`${player.name} использует ${specialName} и наносит ${damage} урона ${enemy.name}!`);
705
+
706
+ // Сбросить заряды
707
+ gameState.specialCharges = 0;
708
+ updateSpecialButton();
709
+
710
+ // Проверить, побеждён ли противник
711
+ if (enemy.hp <= 0) {
712
+ enemyDefeated();
713
+ return;
714
+ }
715
+
716
+ // Контратака противника
717
+ setTimeout(() => {
718
+ enemyAttack();
719
+ }, 500);
720
+ }
721
+
722
+ // Атака противника
723
+ function enemyAttack() {
724
+ const player = gameState.characters[gameState.selectedCharacter];
725
+ const enemy = gameState.currentEnemy;
726
+
727
+ // Рассчитать урон
728
+ let damage = Math.max(1, enemy.attack - Math.floor(player.defense / 2));
729
+
730
+ // Применить урон
731
+ player.hp = Math.max(0, player.hp - damage);
732
+
733
+ // Обновить интерфейс
734
+ updatePlayerStats();
735
+ addToBattleLog(`${enemy.name} атакует ${player.name} и наносит ${damage} урона!`);
736
+
737
+ // Проверить, побеждён ли игрок
738
+ if (player.hp <= 0) {
739
+ playerDefeated();
740
+ return;
741
+ }
742
+
743
+ // Особенность Кенни
744
+ if (gameState.selectedCharacter === 'kenny' && player.hp <= player.maxHp * 0.3) {
745
+ const kennyElement = document.querySelector('.kenny.character-select');
746
+ if (kennyElement) {
747
+ kennyElement.classList.add('dead');
748
+ setTimeout(() => {
749
+ kennyElement.classList.remove('dead');
750
+ }, 2000);
751
+ }
752
+
753
+ if (Math.random() < 0.5) {
754
+ const healAmount = Math.floor(player.maxHp * 0.5);
755
+ player.hp = Math.min(player.maxHp, player.hp + healAmount);
756
+ addToBattleLog(`О боже! Они убили Кенни! Но он возвращается с ${healAmount} HP!`);
757
+ updatePlayerStats();
758
+ }
759
+ }
760
+ }
761
+
762
+ // Противник побеждён
763
+ function enemyDefeated() {
764
+ const player = gameState.characters[gameState.selectedCharacter];
765
+ const enemy = gameState.currentEnemy;
766
+
767
+ addToBattleLog(`Вы победили ${enemy.name}!`);
768
+
769
+ // Награда: опыт и деньги
770
+ player.xp += enemy.xpReward;
771
+ gameState.money += enemy.moneyReward;
772
+
773
+ addToBattleLog(`+${enemy.xpReward} опыта и $${enemy.moneyReward}!`);
774
+
775
+ // Проверить повышение уровня
776
+ checkLevelUp();
777
+
778
+ // Случайный дроп предмета
779
+ if (Math.random() < 0.3) {
780
+ const items = ['cheesy-poofs', 'tegridy-weed', 'kenny-souls'];
781
+ const randomItem = items[Math.floor(Math.random() * items.length)];
782
+ gameState.inventory[randomItem]++;
783
+ updateInventory();
784
+
785
+ let itemName = '';
786
+ switch(randomItem) {
787
+ case 'cheesy-poofs': itemName = 'Сырные шарики'; break;
788
+ case 'tegridy-weed': itemName = 'Тигрида Виид'; break;
789
+ case 'kenny-souls': itemName = "Душа Кенни"; break;
790
+ }
791
+
792
+ addToBattleLog(`Вы нашли ${itemName}!`);
793
+ }
794
+
795
+ // Завершить бой
796
+ gameState.battleInProgress = false;
797
+ gameState.currentEnemy = null;
798
+
799
+ // Обновить интерфейс
800
+ updateUI();
801
+ }
802
+
803
+ // Иг��ок побеждён
804
+ function playerDefeated() {
805
+ const player = gameState.characters[gameState.selectedCharacter];
806
+
807
+ addToBattleLog(`Вы были побеждены ${gameState.currentEnemy.name}!`);
808
+
809
+ // Проверить, есть ли у игрока Душа Кенни для воскрешения
810
+ if (gameState.inventory['kenny-souls'] > 0) {
811
+ gameState.inventory['kenny-souls']--;
812
+ player.hp = Math.floor(player.maxHp * 0.5);
813
+ addToBattleLog("Вы использовали Душу Кенни и воскресли с 50% HP!");
814
+ updatePlayerStats();
815
+ updateInventory();
816
+ return;
817
+ }
818
+
819
+ // Иначе, восстановить HP и завершить бой
820
+ player.hp = player.maxHp;
821
+ gameState.battleInProgress = false;
822
+ gameState.currentEnemy = null;
823
+
824
+ // Обновить интерфейс
825
+ updatePlayerStats();
826
+ updateUI();
827
+
828
+ addToBattleLog("Вы были воскрешены с полным HP. Попробуйте снова!");
829
+ }
830
+
831
+ // Проверить повышение уровня
832
+ function checkLevelUp() {
833
+ const player = gameState.characters[gameState.selectedCharacter];
834
+
835
+ if (player.xp >= player.nextLevelXp) {
836
+ player.level++;
837
+ player.xp -= player.nextLevelXp;
838
+ player.nextLevelXp = Math.floor(player.nextLevelXp * 1.5);
839
+
840
+ // Увеличить характеристики
841
+ player.maxHp = Math.floor(player.maxHp * 1.2);
842
+ player.hp = player.maxHp;
843
+ player.attack = Math.floor(player.attack * 1.1);
844
+ player.defense = Math.floor(player.defense * 1.1);
845
+
846
+ // Глобальный уровень
847
+ gameState.level = Math.max(gameState.level, player.level);
848
+
849
+ addToBattleLog(`Повышение уровня! Теперь вы ${player.level} уровня!`);
850
+ addToBattleLog(`Характеристики увеличены: +20% HP, +10% к атаке и защите`);
851
+
852
+ updatePlayerStats();
853
+ updateUI();
854
+ }
855
+ }
856
+
857
+ // Начать сбор звёзд
858
+ function startStarCollection() {
859
+ if (gameState.starInterval) return;
860
+
861
+ gameState.starTimer = 5;
862
+ elements.starTimer.textContent = gameState.starTimer;
863
+ elements.collectStarsBtn.disabled = true;
864
+
865
+ gameState.starInterval = setInterval(() => {
866
+ gameState.starTimer--;
867
+ elements.starTimer.textContent = gameState.starTimer;
868
+
869
+ if (gameState.starTimer <= 0) {
870
+ collectStars();
871
+ clearInterval(gameState.starInterval);
872
+ gameState.starInterval = null;
873
+ elements.collectStarsBtn.disabled = false;
874
+ }
875
+ }, 1000);
876
+ }
877
+
878
+ // Собрать звёзды
879
+ function collectStars() {
880
+ const starsCollected = Math.floor(Math.random() * 5) + 1;
881
+ gameState.stars += starsCollected;
882
+
883
+ addToBattleLog(`Вы собрали ${starsCollected} звёзд!`);
884
+ updateUI();
885
+ }
886
+
887
+ // Улучшить персонажа
888
+ function upgradeCharacter() {
889
+ const player = gameState.characters[gameState.selectedCharacter];
890
+ const cost = parseInt(elements.upgradeCost.textContent);
891
+
892
+ if (gameState.money < cost) {
893
+ addToBattleLog("Недостаточно денег!");
894
+ return;
895
+ }
896
+
897
+ gameState.money -= cost;
898
+
899
+ // Случайное улучшение
900
+ const upgradeType = Math.floor(Math.random() * 3);
901
+ let upgradeAmount = 0;
902
+ let upgradeStat = '';
903
+
904
+ switch(upgradeType) {
905
+ case 0: // Атака
906
+ upgradeAmount = Math.floor(player.attack * 0.2) + 1;
907
+ player.attack += upgradeAmount;
908
+ upgradeStat = 'Атака';
909
+ break;
910
+ case 1: // Защита
911
+ upgradeAmount = Math.floor(player.defense * 0.2) + 1;
912
+ player.defense += upgradeAmount;
913
+ upgradeStat = 'Защита';
914
+ break;
915
+ case 2: // Макс. HP
916
+ upgradeAmount = Math.floor(player.maxHp * 0.15) + 5;
917
+ player.maxHp += upgradeAmount;
918
+ player.hp += upgradeAmount;
919
+ upgradeStat = 'Макс. HP';
920
+ break;
921
+ }
922
+
923
+ // Увеличить стоимость улучшения
924
+ elements.upgradeCost.textContent = Math.floor(cost * 1.3);
925
+
926
+ addToBattleLog(`Улучшена ${upgradeStat} на ${upgradeAmount}!`);
927
+ updatePlayerStats();
928
+ updateUI();
929
+ }
930
+
931
+ // Лечение персонажа
932
+ function healCharacter() {
933
+ const player = gameState.characters[gameState.selectedCharacter];
934
+ const cost = parseInt(elements.healCost.textContent);
935
+
936
+ if (gameState.money < cost) {
937
+ addToBattleLog("Недостаточно денег!");
938
+ return;
939
+ }
940
+
941
+ if (player.hp >= player.maxHp) {
942
+ addToBattleLog("У вас уже полное здоровье!");
943
+ return;
944
+ }
945
+
946
+ gameState.money -= cost;
947
+
948
+ // Лечение 50% от макс. HP
949
+ const healAmount = Math.floor(player.maxHp * 0.5);
950
+ player.hp = Math.min(player.maxHp, player.hp + healAmount);
951
+
952
+ // Увеличить стоимость лечения
953
+ elements.healCost.textContent = Math.floor(cost * 1.2);
954
+
955
+ addToBattleLog(`Вылечено ${healAmount} HP!`);
956
+ updatePlayerStats();
957
+ updateUI();
958
+ }
959
+
960
+ // Купить предмет
961
+ function buyItem(itemType, cost) {
962
+ if (gameState.money < cost) {
963
+ addToBattleLog("Недостаточно денег!");
964
+ return;
965
+ }
966
+
967
+ gameState.money -= cost;
968
+ gameState.inventory[itemType]++;
969
+
970
+ let message = '';
971
+ switch(itemType) {
972
+ case 'cheesy-poofs':
973
+ message = "Куплены Сырные шарики! Используйте их для лечения 5 HP в любое время.";
974
+ break;
975
+ case 'tegridy-weed':
976
+ message = "Куплена Тигрида Виид! Даёт +2 к атаке постоянно.";
977
+ gameState.characters[gameState.selectedCharacter].attack += 2;
978
+ break;
979
+ case 'kenny-souls':
980
+ message = "Куплена Душа Кенни! Может воскресить вас при поражении.";
981
+ break;
982
+ }
983
+
984
+ addToBattleLog(message);
985
+ updatePlayerStats();
986
+ updateInventory();
987
+ updateUI();
988
+ }
989
+
990
+ // Использовать предмет
991
+ function useItem(itemType) {
992
+ if (gameState.inventory[itemType] <= 0) return;
993
+
994
+ const player = gameState.characters[gameState.selectedCharacter];
995
+
996
+ switch(itemType) {
997
+ case 'cheesy-poofs':
998
+ player.hp = Math.min(player.maxHp, player.hp + 5);
999
+ addToBattleLog("Использованы Сырные шарики! Вылечено 5 HP.");
1000
+ break;
1001
+ case 'kenny-souls':
1002
+ // Обрабатывается в функции playerDefeated
1003
+ break;
1004
+ }
1005
+
1006
+ gameState.inventory[itemType]--;
1007
+ updatePlayerStats();
1008
+ updateInventory();
1009
+ }
1010
+
1011
+ // Обновить статистику игрока
1012
+ function updatePlayerStats() {
1013
+ const player = gameState.characters[gameState.selectedCharacter];
1014
+
1015
+ elements.playerImage.src = player.image;
1016
+ elements.playerName.textContent = player.name;
1017
+ elements.playerHealth.style.width = `${(player.hp / player.maxHp) * 100}%`;
1018
+ elements.playerCurrentHp.textContent = player.hp;
1019
+ elements.playerMaxHp.textContent = player.maxHp;
1020
+ elements.playerLevel.textContent = player.level;
1021
+ elements.playerXp.style.width = `${(player.xp / player.nextLevelXp) * 100}%`;
1022
+ elements.playerCurrentXp.textContent = player.xp;
1023
+ elements.playerNextLevelXp.textContent = player.nextLevelXp;
1024
+ elements.playerAttack.textContent = player.attack;
1025
+ elements.playerDefense.textContent = player.defense;
1026
+
1027
+ // Добавить анимацию атаки
1028
+ elements.playerCharacter.classList.add('attack-animation');
1029
+ setTimeout(() => {
1030
+ elements.playerCharacter.classList.remove('attack-animation');
1031
+ }, 300);
1032
+ }
1033
+
1034
+ // Обновить здоровье противника
1035
+ function updateEnemyHealth() {
1036
+ const enemy = gameState.currentEnemy;
1037
+ if (!enemy) return;
1038
+
1039
+ const enemyHealthElement = document.getElementById('enemy-health');
1040
+ const enemyCurrentHpElement = document.getElementById('enemy-current-hp');
1041
+
1042
+ if (enemyHealthElement) {
1043
+ enemyHealthElement.style.width = `${(enemy.hp / enemy.maxHp) * 100}%`;
1044
+ }
1045
+
1046
+ if (enemyCurrentHpElement) {
1047
+ enemyCurrentHpElement.textContent = enemy.hp;
1048
+ }
1049
+ }
1050
+
1051
+ // Обновить интерфейс
1052
+ function updateUI() {
1053
+ elements.stars.textContent = gameState.stars;
1054
+ elements.level.textContent = gameState.level;
1055
+ }
1056
+
1057
+ // Обновить инвентарь
1058
+ function updateInventory() {
1059
+ elements.cheesyPoofs.textContent = gameState.inventory['cheesy-poofs'];
1060
+ elements.tegridyWeed.textContent = gameState.inventory['tegridy-weed'];
1061
+ elements.kennySouls.textContent = gameState.inventory['kenny-souls'];
1062
+ }
1063
+
1064
+ // Обновить кнопку ульты
1065
+ function updateSpecialButton() {
1066
+ elements.specialCharges.textContent = gameState.specialCharges;
1067
+
1068
+ if (gameState.specialCharges >= 3) {
1069
+ elements.specialBtn.classList.add('bg-yellow-500', 'hover:bg-yellow-600');
1070
+ elements.specialBtn.classList.remove('bg-gray-400', 'hover:bg-gray-500');
1071
+ } else {
1072
+ elements.specialBtn.classList.add('bg-gray-400', 'hover:bg-gray-500');
1073
+ elements.specialBtn.classList.remove('bg-yellow-500', 'hover:bg-yellow-600');
1074
+ }
1075
+ }
1076
+
1077
+ // Добавить в журнал битвы
1078
+ function addToBattleLog(message) {
1079
+ const logEntry = document.createElement('div');
1080
+ logEntry.className = 'speech-bubble';
1081
+ logEntry.innerHTML = `<p>${message}</p>`;
1082
+ elements.battleLog.appendChild(logEntry);
1083
+ elements.battleLog.scrollTop = elements.battleLog.scrollHeight;
1084
+ }
1085
+
1086
+ // Инициализировать игру
1087
+ initGame();
1088
+ </script>
1089
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Formandl/wertq" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
1090
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ стиль кликира должен быть одаптирован под экраны мобильный устройств а также цветовая схема должна быть как в сереале южный парк дизайн должен быть привлекательный доброжелюбным и интуитивно понятным