2小时完成HTML5拼图小游戏

本文记录了作者如何在2小时内使用lufylegend游戏引擎重新开发一个HTML5拼图小游戏的过程,包括准备素材、创建开始界面、实现游戏主体功能以及完善细节。通过实例详细讲解了游戏开发的各个环节,适合前端开发者学习。
摘要由CSDN通过智能技术生成

当时初学游戏开发,经验浅薄,所以没有好好专研游戏里的算法和代码的缺陷,导致游戏出现了很多bug,甚至拼图打乱后很可能无法复原。最近经常有朋友问起这个游戏,希望我能把代码里的bug改一下方便初学者学习,顺便我也打算测试一下自己写这种小游戏的速度,所以就抽出了一些时间将这个游戏从头到尾重新写了一遍,计算了一下用时,从准备、修改素材到最后完成游戏,一共用了大约2h的时间。

这是我的游戏记录,欢迎各位挑战:

接下来就来讲讲如何开发完成这款游戏的。(按“编年体”)

准备阶段

准备lufylegend游戏引擎,大家可以去官方网站下载:

lufylegend.com/lufylegend

引擎文档地址:

lufylegend.com/lufylegend/api

可以说,如果没有强大的lufylegend引擎,这种html5小游戏用原生canvas制作,少说要一天呢。

0~30min

准备素材(10min) + 修改素材(20min)。由于在下实在手残,不善于P图,修改图片用了大约20min,囧……

30~50min

开发开始界面。游戏不能没有开始界面所以我们首先实现这部分代码。在此之前是index.html里的代码,代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>Puzzle</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <script type="text/javascript" src="./lib/lufylegend-1.10.1.simple.min.js"></script>
    <script type="text/javascript" src="./js/Main.js"></script>
</head>
<body style="margin: 0px; font-size: 0px; background: #F2F2F2;">
    <div id="mygame"></div>
</body>
</html>
web前端开发学习Q-q-u-n: 767273102 ,分享开发工具,零基础,进阶视频教程,希望新手少走弯路 

主要是引入一些js文件,不多说。然后准备一个Main.js文件,在这个文件里添加初始化界面和加载资源的代码:


/** 初始化游戏 */
LInit(60, "mygame", 390, 580, main);

var imgBmpd;
/** 游戏层 */
var stageLayer, gameLayer, overLayer;
/** 拼图块列表 */
var blockList;
/** 是否游戏结束 */
var isGameOver;
/** 用时 */
var startTime, time, timeTxt;
/** 步数 */
var steps, stepsTxt;

function main () {
    /** 全屏设置 */
    if (LGlobal.mobile) {
        LGlobal.stageScale = LStageScaleMode.SHOW_ALL;
    }
    LGlobal.screen(LGlobal.FULL_SCREEN);

    /** 添加加载提示 */
    var loadingHint = new LTextField();
    loadingHint.text = "资源加载中……";
    loadingHint.size = 20;
    loadingHint.x = (LGlobal.width - loadingHint.getWidth()) / 2;
    loadingHint.y = (LGlobal.height - loadingHint.getHeight()) / 2;
    addChild(loadingHint);

    /** 加载图片 */
    LLoadManage.load(
        [
            {path : "./js/Block.js"},
            {name : "img", path : "./images/img.jpg"}
        ],
        null,
        function (result) {
            /** 移除加载提示 */
            loadingHint.remove();

            /** 保存位图数据,方便后续使用 */
            imgBmpd = new LBitmapData(result["img"]);

            gameInit();
        }
    );
}

function gameInit (e) {
    /** 初始化舞台层 */
    stageLayer = new LSprite();
    stageLayer.graphics.drawRect(0, "", [0, 0, LGlobal.width, LGlobal.height], true, "#EFEFEF");
    addChild
好的,下面是用HTML5和JavaScript编写的简单拼图小游戏,供参考: HTML代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>拼图小游戏</title> <style> #game-board { width: 360px; height: 360px; margin: 0 auto; border: 1px solid #ccc; position: relative; } .game-tile { width: 120px; height: 120px; position: absolute; background-color: #fff; border: 1px solid #ccc; box-sizing: border-box; transition: all 0.5s ease-in-out; } .game-tile img { width: 100%; height: 100%; } .game-tile.col-1.row-1 { top: 0; left: 0; } .game-tile.col-2.row-1 { top: 0; left: 120px; } .game-tile.col-3.row-1 { top: 0; left: 240px; } .game-tile.col-1.row-2 { top: 120px; left: 0; } .game-tile.col-2.row-2 { top: 120px; left: 120px; } .game-tile.col-3.row-2 { top: 120px; left: 240px; } .game-tile.col-1.row-3 { top: 240px; left: 0; } .game-tile.col-2.row-3 { top: 240px; left: 120px; } .game-tile.col-3.row-3 { top: 240px; left: 240px; } .game-tile.blank { background-color: transparent; border: none; } </style> </head> <body> <h1>拼图小游戏</h1> <div id="game-board"> <div class="game-tile col-1 row-1"><img src="tile-1.png"></div> <div class="game-tile col-2 row-1"><img src="tile-2.png"></div> <div class="game-tile col-3 row-1"><img src="tile-3.png"></div> <div class="game-tile col-1 row-2"><img src="tile-4.png"></div> <div class="game-tile col-2 row-2"><img src="tile-5.png"></div> <div class="game-tile col-3 row-2"><img src="tile-6.png"></div> <div class="game-tile col-1 row-3"><img src="tile-7.png"></div> <div class="game-tile col-2 row-3"><img src="tile-8.png"></div> <div class="game-tile col-3 row-3 blank"></div> </div> <button id="shuffle-btn">打乱拼图</button> <script src="puzzle.js"></script> </body> </html> ``` 上面的代码中,我们创建了一个`div`元素作为游戏面板,其中包含9个小格子,每个小格子里面放置了一个图片,同时给每个小格子分配了一个`col-x`和`row-x`的类名,用于控制它们的位置。其中最后一个小格子是空白的,用于实现拼图游戏。 JavaScript代码: ```javascript window.onload = function() { var board = document.getElementById('game-board'); var tiles = board.children; var shuffleBtn = document.getElementById('shuffle-btn'); var blankTile = tiles[tiles.length - 1]; var blankTilePos = { col: 3, row: 3 }; // 将拼图打乱 shuffleBtn.onclick = function() { shuffleTiles(); } // 移动拼图 for (var i = 0; i < tiles.length; i++) { tiles[i].onclick = function() { var clickedTile = this; var clickedTilePos = getTilePos(clickedTile); var isMovable = checkMovable(clickedTilePos); if (isMovable) { moveTile(clickedTile, clickedTilePos); } } } // 获取拼图位置 function getTilePos(tile) { var classes = tile.className.split(' '); for (var i = 0; i < classes.length; i++) { if (classes[i].indexOf('col-') === 0) { var col = classes[i].split('-')[1]; } if (classes[i].indexOf('row-') === 0) { var row = classes[i].split('-')[1]; } } return { col: parseInt(col), row: parseInt(row) }; } // 检查拼图是否可移动 function checkMovable(tilePos) { var colDiff = Math.abs(tilePos.col - blankTilePos.col); var rowDiff = Math.abs(tilePos.row - blankTilePos.row); if ((colDiff === 1 && rowDiff === 0) || (colDiff === 0 && rowDiff === 1)) { return true; } else { return false; } } // 移动拼图 function moveTile(tile, tilePos) { var blankTileNewPos = { col: tilePos.col, row: tilePos.row }; var blankTileNewClasses = 'game-tile col-' + blankTileNewPos.col + ' row-' + blankTileNewPos.row + ' blank'; var blankTileOldClasses = 'game-tile col-' + blankTilePos.col + ' row-' + blankTilePos.row; blankTile.className = blankTileNewClasses; tile.className = blankTileOldClasses; blankTilePos = blankTileNewPos; } // 随机打乱拼图 function shuffleTiles() { for (var i = 0; i < 100; i++) { var movableTiles = []; for (var j = 0; j < tiles.length; j++) { var tilePos = getTilePos(tiles[j]); var isMovable = checkMovable(tilePos); if (isMovable) { movableTiles.push(tiles[j]); } } var randomTile = movableTiles[Math.floor(Math.random() * movableTiles.length)]; var randomTilePos = getTilePos(randomTile); moveTile(randomTile, randomTilePos); } } } ``` 上面的JavaScript代码中,我们首先获取了拼图面板、所有小格子、打乱按钮和空白小格子,然后通过循环给每个小格子添加了`onclick`事件,当小格子被点击时,会检查该小格子是否可移动,如果可以移动,则调用`moveTile`函数移动拼图。`moveTile`函数会将空白小格子和当前小格子的位置互换,同时更新空白小格子的位置。最后,我们还实现了一个`shuffleTiles`函数,用于随机打乱拼图。 完整的拼图小游戏代码已经完成,可以下载图片和JavaScript文件,将它们放在同一个文件夹下运行游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值