p5实现射击虫子类小游戏代码

代码语言:html

所属分类:游戏

代码描述:p5实现射击虫子类小游戏代码

代码标签: p5 射击 虫子 游戏 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  


  
  
  
<style>
@import url("https://fonts.googleapis.com/css2?family=Pixelify+Sans:wght@700&display=swap");

html,
body {
	margin: 0;
	padding: 0;
}

canvas {
	display: block;
	cursor: crosshair;
	overflow: none;
}

.footer {
	position: fixed;
	bottom: 10px;
	right: 10px;
	color: white;
	font-size: 12px;
	text-align: right;
	font-family: monospace;
	pointer-events: none;
}

.footer a {
	color: white;
	text-decoration: none;
}
</style>

  
</head>

<body>
  <div class="footer">
	Made with ❤️ by Marcus | Visit <a href="h" target="_blank">Shopblocks</a>
</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/p5.1.4.0.js"></script>
      <script >
const tileSize = 32;

let isGamePaused = false;
let spiders = [];
let player;
let spiderSpawnTime = 300;
let spiderMaxSpeed = 1.2;
let frame = 0;
let score = 0;
let highScore = 0;

// Preload images
let playerSprite;
let spiderSprite;

function preload() {
	playerSprite = loadImage(
		"//repo.bfw.wiki/bfwrepo/images/shoot/spiritsone.png"
	);
	spiderSprite = loadImage(
		"//repo.bfw.wiki/bfwrepo/images/shoot/spiritstwo.png"
	);
}

let touches = [];
let isMobileDevice = false;

function setup() {
	canvas = createCanvas(windowWidth, windowHeight);
	canvas.elt.setAttribute("style", "display: block");
	pixelDensity(1);
	player = new Player();

	for (let i = 0; i < 42; i++) {
		spiders.push(new Spider(random(spiderMaxSpeed)));
	}

	// Detect if it's a mobile device
	detectMobile();

	if (isMobileDevice) {
		// Add touch event listeners for player movement and shooting
		canvas.mousePressed(() => {
			// Trigger shooting on touch (for mobile devices)
			if (mouseButton === LEFT) {
				player.shoot();
			}
		});

		// Add touch event listeners for player movement
		canvas.touchStarted(handleTouch);
		canvas.touchMoved(handleTouch);
		canvas.touchEnded(handleTouch);
	}

	const savedHighScore = localStorage.getItem("highScore");
	if (savedHighScore) {
		highScore = parseInt(savedHighScore);
	}
}

function handleTouch(event) {
	touches = event.touches;
}

// Detect if it's a mobile device
function detectMobile() {
	if (
		/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
			navigator.userAgent
		)
	) {
		isMobileDevice = true;
	}
}

function windowResized() {
	resizeCanvas(windowWidth, windowHeight);
}

function handleGameOver() {
	isGamePaused = true;

	if (score > highScore) {
		highScore = score; // Update the high score
		localStorage.setItem("highScore", highScore); // Save the high score to local storage
	}
}

function draw() {
	if (isGamePaused) {
		// Display the pause screen with a transparent background
		background(0, 0, 0, 200); // Transparent black background
		textSize(32);
		fill(255);
		textAlign(CENTER);
		text("Game Over", width / 2, height / 2 - 100);
		text("Current Score: " + score, width / 2, height / 2);
		text("High Score: " + highScore, width / 2, height / 2 + 50);

		// Draw the "Restart" button (you can customize the appearance)
		fill(100, 100, 200);
		rectMode(CENTER); // Set the rectangle mode to CENTER
		rect(width / 2, height / 2 + 117, 150, 50);
		fill(255);
		textSize(24); // Adjust text size
		text("Restart", width / 2, height / 2 + 125); // Center the text
		textSize(32); // Restore the text size for other text

		// Handle player input to restart the game
		if (mouseIsPressed) {
			// Check if the mouse is over the "Restart" button
			if (
				mouseX > width / 2 - 75 &&
				mouseX < width / 2 + 75 &&
				mouseY > height / 2 + 75 &&
				mouseY < height / 2 + 125
			) {
				restart();
				isGamePaused = false; // Unpause the game
			}
		}
	} else {
		// Normal game loop
		background(97, 87, 97);
		rectMode(CENTER);

		player.draw();
		player.update();
		player.animate();

		for (let i = spiders.length - 1; i >= 0; i--) {
			spiders[i].draw();
			spiders[i].update();

			if (spiders[i].ateYou()) {
				restart();
				break;
			}

			if (player.hasShot(spiders[i])) {
				score++;
				spiders.splice(i, 1);
			}
		}

		if (frame >= random(spiderSpawnTime, spiderSpawnTime * 1.2)) {
			spiders.push(new Spider(random(spiderMaxSpeed)));
			spiderSpawnTime *= 0.95;
			frame = 0;
		}

		if (frameCount % 1000 == 0) {
			spiderMaxSpeed += 0.1;
		}

		frame++;

		// Draw the score.........完整代码请登录后点击上方下载按钮下载查看

网友评论0