您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
плохое настроение? сыграйте в меня!
当前为
- // ==UserScript==
- // @name Snake Game!
- // @version 3.6
- // @description плохое настроение? сыграйте в меня!
- // @autor Minish
- // @namespace drawaria.snake.game
- // @match drawaria.online
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // Create the game canvas
- const canvas = document.createElement('canvas');
- canvas.width = 800; // Increased width
- canvas.height = 600; // Increased height
- document.body.appendChild(canvas);
- const ctx = canvas.getContext('2d');
- // Load images
- const appleImage = new Image();
- appleImage.src = 'https://w7.pngwing.com/pngs/381/179/png-transparent-apple-green-apple-green-apple-food-granny-smith-asian-pear-thumbnail.png'; // Transparent background apple
- const goldenAppleImage = new Image();
- goldenAppleImage.src = 'https://w7.pngwing.com/pngs/534/248/png-transparent-minecraft-computer-icons-golden-apple-golden-orange-fruit-apple-thumbnail.png'; // Transparent background golden apple
- const backgroundImage = new Image();
- backgroundImage.src = 'https://avatars.mds.yandex.net/i?id=d7ddea51bc660760175ae06837721008ec22c13e3c0bd198-10786048-images-thumbs&n=13'; // Указанная текстура фона
- // Game variables
- const box = 40; // Increased size of apples
- const initialPosition = { x: 9 * box, y: 9 * box }; // Initial spawn position
- let snake = [initialPosition]; // Start with initial snake position
- let direction = null;
- let apple = spawnApple();
- let goldenApple = null; // Variable for golden apple
- let score = 0;
- let skins = ['green', 'blue', 'red', 'yellow', 'purple'];
- let currentSkin = 0; // Index for the current skin
- let isPaused = false; // Game pause state
- let appleCount = 0; // Count of regular apples collected
- // Load sound
- const soundEffect = new Audio('https://www.myinstants.com/en/instant/snake-game-food-65186/?utm_source=copy&utm_medium=share'); // URL to sound effect
- // Create skin selection section
- const shopContainer = document.createElement('div');
- shopContainer.style.margin = '20px';
- shopContainer.style.textAlign = 'center';
- shopContainer.style.backgroundColor = 'lightgray';
- shopContainer.style.padding = '10px';
- shopContainer.style.borderRadius = '5px';
- const title = document.createElement('h2');
- title.innerHTML = 'Shop - Choose Your Skin';
- shopContainer.appendChild(title);
- skins.forEach((color, index) => {
- const button = document.createElement('button');
- button.innerHTML = `Buy ${color} Skin`;
- button.style.margin = '5px';
- button.onclick = () => {
- currentSkin = index; // Change skin index
- };
- shopContainer.appendChild(button);
- });
- document.body.appendChild(shopContainer);
- // Control the snake with arrow keys
- document.addEventListener('keydown', (event) => {
- if (event.key === 'ArrowUp' && direction !== 'DOWN') {
- direction = 'UP';
- soundEffect.play(); // Play sound on key press
- }
- else if (event.key === 'ArrowDown' && direction !== 'UP') {
- direction = 'DOWN';
- soundEffect.play(); // Play sound on key press
- }
- else if (event.key === 'ArrowLeft' && direction !== 'RIGHT') {
- direction = 'LEFT';
- soundEffect.play(); // Play sound on key press
- }
- else if (event.key === 'ArrowRight' && direction !== 'LEFT') {
- direction = 'RIGHT';
- soundEffect.play(); // Play sound on key press
- }
- else if (event.key === ' ') {
- isPaused = !isPaused; // Toggle pause on space
- soundEffect.play(); // Play sound on key press
- }
- });
- // Game loop
- function game() {
- if (!isPaused) {
- ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas for redrawing
- // Draw the background texture
- ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.height);
- // Draw the snake
- for (let i = 0; i < snake.length; i++) {
- ctx.fillStyle = (i === 0) ? skins[currentSkin] : 'lightgreen'; // Change head color based on current skin
- ctx.fillRect(snake[i].x, snake[i].y, box, box);
- ctx.strokeStyle = 'darkgreen';
- ctx.strokeRect(snake[i].x, snake[i].y, box, box);
- }
- // Draw the apple
- ctx.drawImage(appleImage, apple.x, apple.y, box, box);
- // Draw the golden apple if it exists
- if (goldenApple) {
- ctx.drawImage(goldenAppleImage, goldenApple.x, goldenApple.y, box, box);
- }
- // Move the snake
- let snakeX = snake[0].x;
- let snakeY = snake[0].y;
- if (direction === 'LEFT') snakeX -= box;
- if (direction === 'UP') snakeY -= box;
- if (direction === 'RIGHT') snakeX += box;
- if (direction === 'DOWN') snakeY += box;
- // Check if the snake eats the apple
- if (snakeX === apple.x && snakeY === apple.y) {
- score++;
- appleCount++; // Increment apple count
- apple = spawnApple(); // Spawn a new apple
- // Check if the apple count reached 100
- if (appleCount === 100) {
- goldenApple = spawnGoldenApple(); // Spawn golden apple
- }
- } else {
- snake.pop();
- }
- // Check if the snake eats the golden apple
- if (goldenApple && snakeX === goldenApple.x && snakeY === goldenApple.y) {
- score += 500; // Add 500 points for golden apple
- goldenApple = null; // Remove golden apple after eaten
- appleCount = 0; // Reset apple count after golden apple
- }
- // Add the new head
- const newHead = { x: snakeX, y: snakeY };
- // Check for collisions with walls or itself
- if (collision(newHead, snake) || snakeX < 0 || snakeX >= canvas.width || snakeY < 0 || snakeY >= canvas.height) {
- alert('Game Over! Your score: ' + score + '. Click OK to respawn.');
- teleportToSpawn(); // Teleport to spawn
- } else {
- snake.unshift(newHead);
- }
- ctx.fillStyle = 'black';
- ctx.font = '20px Arial';
- ctx.fillText('Score: ' + score, box, box);
- ctx.fillText('Apples Collected: ' + appleCount, box, box + 20); // Display collected apples
- } else {
- ctx.fillStyle = 'black';
- ctx.font = '30px Arial';
- ctx.fillText('Game Paused', canvas.width / 2 - 70, canvas.height / 2);
- }
- }
- // Check for collision with the snake itself
- function collision(head, array) {
- for (let i = 0; i < array.length; i++) {
- if (head.x === array[i].x && head.y === array[i].y) {
- return true;
- }
- }
- return false;
- }
- // Teleport to spawn position
- function teleportToSpawn() {
- snake = [initialPosition]; // Reset snake to spawn position
- direction = null; // Reset direction
- apple = spawnApple(); // Spawn a new apple
- goldenApple = null; // Remove golden apple if it exists
- appleCount = 0; // Reset apple count
- }
- // Function to spawn apple in a valid location
- function spawnApple() {
- let newApple;
- let isValidPosition = false;
- while (!isValidPosition) {
- newApple = {
- x: Math.floor(Math.random() * (canvas.width / box)) * box,
- y: Math.floor(Math.random() * (canvas.height / box)) * box
- };
- // Check if the apple spawns on the snake
- isValidPosition = !collision(newApple, snake);
- }
- return newApple;
- }
- // Function to spawn golden apple in a valid location
- function spawnGoldenApple() {
- let newGoldenApple;
- let isValidPosition = false;
- while (!isValidPosition) {
- newGoldenApple = {
- x: Math.floor(Math.random() * (canvas.width / box)) * box,
- y: Math.floor(Math.random() * (canvas.height / box)) * box
- };
- // Check if the golden apple spawns on the snake or regular apple
- isValidPosition = !collision(newGoldenApple, snake) && !(newGoldenApple.x === apple.x && newGoldenApple.y === apple.y);
- }
- return newGoldenApple;
- }
- // Start the game loop
- setInterval(game, 100);
- })();