在华为开发者空间,基于鲲鹏服务器快速开发打砖块小游戏

news/2024/12/2 19:01:51/文章来源:https://www.cnblogs.com/huaweiyun/p/18582491

本文分享自华为云社区《基于鲲鹏服务器的打砖块小游戏部署》,作者: 开发者空间小蜜蜂。

1.1 案例介绍

鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲鹏服务器具有高性能、低功耗、灵活的扩展能力,适合大数据分析、软件定义存储、Web等应用场景。

本案例将指导开发者如何在鲲鹏服务器部署并运行web小游戏。

1.2 免费领取云主机

如您还没有云主机,可点击链接,领取专属云主机后进行操作。

如您已领取云主机,可直接开始实验。

1.3 实验流程

说明:

①      在案例中心下载项目;

②      使用终端连接鲲鹏服务器;

③      创建html文件;

④      启动Web服务器;

⑤      体验游戏。

 

1.4 自动部署鲲鹏服务器

在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。

执行自动部署命令如下:

hcd deploy --password 远端服务器密码 --time 1800
# --password    待部署项目所在ECS的root用户密码(至少8个字符)
# --time value   待部署资源的保留期(单位为秒,至少600秒,默认600秒)。当前实验预估需要20分钟,可以配置time为半小时保留期。

该命令会自动部署鲲鹏服务器。首次部署会直接执行,旧资源未到期时重复部署,会提示是否删除前面创建的资源,可以删除旧资源再次部署。

记录部署远端服务器公网IP,如截图中对应的就是:113.44.86.210。

1.5 拷贝代码

新打开一个命令窗口,在命令窗口中输入命令登录远端服务器,命令如下:

ssh root@远端服务器公网IP

输入密码(密码不会显示)。

登录成功后创建文件夹用于存放html文件,命令如下:

mkdir game
cd game
vi game.html

进入到Vim编辑器,按下键盘的“i”键进入到插入模式下,复制下列代码粘贴到编辑器中。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Arkanoid game</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #f0f0f0;}canvas {border: 5px solid #3498db;border-radius: 10px;}/* game start cues */.game-start-text {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);font-size: 24px;color: green;background-color: rgba(255, 255, 255, 0.8);padding: 10px;border-radius: 5px;}/* score display style */.score-display {position: absolute;top: 20px;left: 50%;transform: translateX(-50%);font-size: 18px;color: #333;font-weight: bold;background-color: rgba(255, 255, 255, 0.7);padding: 5px 10px;border-radius: 5px;}</style>
</head><body>
<canvas id="gameCanvas" width="800" height="600"></canvas>
<div class="score-display" id="scoreDisplay">score:0</div>
<div id="gameStartText" class="game-start-text">start</div><audio id="hitBrickSound" preload="auto"><source src="hitBrick.mp3" type="audio/mpeg">Your browser does not support the audio element.
</audio>
<audio id="hitPaddleSound" preload="auto"><source src="hitPaddle.mp3" type="audio/mpeg">Your browser does not support the audio element.
</audio>
<audio id="gameOverSound" preload="auto"><source src="gameOver.mp3" type="audio/mpeg">Your browser does not support the audio element.
</audio><script>const canvas = document.getElementById('gameCanvas');const ctx = canvas.getContext('2d');const ballRadius = 10;let x = canvas.width / 2;let y = canvas.height - 30;let dx = 3;let dy = -3;const paddleHeight = 10;const paddleWidth = 100;let paddleX = (canvas.width - paddleWidth) / 2;const brickRowCount = 10;const brickColumnCount = 15;const brickWidth = 48;const brickHeight = 20;const bricks = [];let score = 0;let gameStarted = false;for (let c = 0; c < brickColumnCount; c++) {bricks[c] = [];for (let r = 0; r < brickRowCount; r++) {bricks[c][r] = { x: 0, y: 0, status: 1 };}}document.addEventListener('mousemove', mouseMoveHandler, false);document.addEventListener('click', startGame, false);function mouseMoveHandler(e) {if (gameStarted) {const relativeX = e.clientX - canvas.offsetLeft;if (relativeX > 0 && relativeX < canvas.width) {paddleX = relativeX - paddleWidth / 2;}}}function startGame() {if (!gameStarted) {gameStarted = true;document.getElementById('gameStartText').style.display = 'none';draw();}}function drawBall() {ctx.beginPath();ctx.arc(x, y, ballRadius, 0, Math.PI * 2);ctx.fillStyle = '#0095DD';ctx.fill();ctx.closePath();}function drawPaddle() {ctx.beginPath();ctx.rect(paddleX, canvas.height - paddleHeight, paddleWidth, paddleHeight);ctx.fillStyle = '#0095DD';ctx.fill();ctx.closePath();}function drawBricks() {for (let c = 0; c < brickColumnCount; c++) {for (let r = 0; r < brickRowCount; r++) {if (bricks[c][r].status === 1) {const brickX = c * (brickWidth + 2) + 20;const brickY = r * (brickHeight + 2) + 20;bricks[c][r].x = brickX;bricks[c][r].y = brickY;ctx.beginPath();ctx.rect(brickX, brickY, brickWidth, brickHeight);ctx.fillStyle = '#0095DD';ctx.fill();ctx.closePath();}}}}function collisionDetection() {for (let c = 0; c < brickColumnCount; c++) {for (let r = 0; r < brickRowCount; r++) {const b = bricks[c][r];if (b.status === 1) {if (x > b.x && x < b.x + brickWidth && y > b.y && y < b.y + brickHeight) {dy = -dy;b.status = 0;score++;document.getElementById('scoreDisplay').textContent = 'score:' + score;const hitBrickSound = document.getElementById('hitBrickSound');hitBrickSound.play();}}}}}function draw() {ctx.clearRect(0, 0, canvas.width, canvas.height);if (gameStarted) {drawBricks();drawBall();drawPaddle();collisionDetection();x += dx;y += dy;if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) {dx = -dx;}if (y + dy < ballRadius) {dy = -dy;} else if (y + dy > canvas.height - ballRadius) {if (x > paddleX && x < paddleX + paddleWidth) {dy = -dy;const hitPaddleSound = document.getElementById('hitPaddleSound');hitPaddleSound.play();} else {const gameOverSound = document.getElementById('gameOverSound');gameOverSound.play();document.location.reload();}}}requestAnimationFrame(draw);}draw();
</script>
</body>
</html>

按下ESC按钮退出编辑模式,输入“:wq”,退出并保存game.html文件。

实验代码也可以到案例中心下载该文档项目,其中包含实验手册和代码。

1.6 安装软件包

首先安装EPEL(Extra Packages for Enterprise Linux)仓库,因为CentOS默认仓库中的Python3版本可能比较旧,EPEL仓库提供了较新的版本,命令如下:

sudo yum install epel-release

安装Python3,命令如下:

sudo yum install python3

安装成功后检查Python3版本确认是否安装成功。

python3 --version

1.7 浏览器访问绍

在当前存放代码的路径下,使用Python3启动一个简单的Web服务器,命令如下:

python3 -m http.server

如下图所示,代表当前Web服务器已经启动。

打开火狐浏览器,在地址栏输入“弹性云服务器IP:8000/game.html”即可体验游戏。

至此实验全部完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845567.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5-文件上传漏洞

1、文件上传漏洞原理 1.1 一句话木马 <?php @eval($_POST[xu]); ?> 其中@表示忽略错误,eval()函数表示把传进去的字符串作为php代码执行 从http post里面拿到参数叫xu的value,然后作为代码去执行,并忽略错误 2、Webshell介绍 一句话木马、大马、小马、图片马都是web…

纯血鸿蒙进程加速,混合app开发迎来又一波新机会

对于开发者来说,未来相当一段时间,将来会为鸿蒙,安卓,IOS三个系统同时开发APP上架,其中面对全新的鸿蒙系统,百万APP在未来几年会重新开发上架。 鸿蒙SDK厂商及App开发团队,迎来新的市场机遇。时间不知不觉又来到了2024年最后一个月,又到了辞旧迎新,复盘今年,放眼明年…

实验五 继承和多态

实验一: 代码: publisher.hpp:1 #pragma once2 3 #include<iostream>4 #include<string>5 6 using std::cout;7 using std::endl;8 using std::string;9 10 class Publisher { 11 public: 12 Publisher(const string& s = ""); 13 14 public…

博客园-添加统计图

💖简介 通过WPS在线列表构建博客园每日相关数据统计图。 👉效果📖实现前往WPShttps://www.kdocs.cn/latest新建多维表格 创建表格视图新建仪表盘 新建卡片、折线图卡片配置示例折线图配置示例点击分享获取链接⭐链接配置在config中配置link{icon: <svg t="173313…

华为技术专家出品,《华为开发者空间案例指南》带你玩转云上20+场景应用开发

免费领取云主机,开启你的云上开发之旅,分享体验将有机会赢取精美礼品。 关键词:开发者空间、AI、鲲鹏、Serverless随时随地都能开启开发之旅,这是一种怎样奇妙的体验?想象一下,无需安装繁琐的 IDE,也不用搭建复杂的开发环境,只需开机,就能迅速投入项目开发。在华为开发…

jQuery和CSS3折叠卡片式下拉列表框特效

这是一款使用JQUERY和CSS3制作的效果非常炫酷的折叠卡片式下拉列表框特效。该下拉列表框特效将每一个列表项都制作为卡片的样式,打开和关闭它有打开和关闭百叶窗的感觉,效果非常不错。预览 下载使用方法HTML结构 该下拉列表框特效的列表项使用一个无序列表来制作,用于切换…

幂等设计:确保操作的安全与可靠

目录一、概述1.1、什么是幂等1.2、为什么需要幂等?二、幂等如何设计实现幂等的8 种方案select+insert+主键/唯一索引冲突状态机幂等抽取防重表token令牌悲观锁(如select for update)乐观锁分布式锁三、HTTP的幂等 一、概述 在分布式系统和微服务架构中,确保操作的安全性和可靠…

从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇,前面几篇文章的链接如下:MongoDB 监控(一) MongoDB 监控(二) MongoDB 监控(三) MongoDB 监控(四) MongoDB 监控(五) MongoDB 监控(六)按照前面系列文章,我们已经采集到 MongoDB 的监控数据了,并且通过 Grafana 和 Nightinga…

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态

20222425 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 本周学习内容:本周我们学了web安全的章节,首先我们了解了前端和后端技术,其次我们学习了一些web安全攻防的内容,例如SQL注入和XSS跨站脚本攻击、CSRF以及安全防范的内容。在实验的过程中我们学到了网络欺诈与防范技术。 2.实验过程 主机IP:192.168.35.1 kali(…

基于Bootstrap3的简单柱状图表插件

jchart是一款简单小巧的基于Bootstrap3.x的jquery柱状图表插件。该柱状图片表插件通过简单的设置,就可以生成非常漂亮的水平柱状图,并带有水平和垂直标签以及图表的头部和尾部。 在线演示 下载 使用方法 该jQuery柱状图插件可以通过javascript来调用,也可以直接使用HTML标…