HTML5 canvas游戏开发实战 5 : 石头剪刀布
2018-02-07 11:23
736 查看
5.1 游戏分析
游戏画面<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" src="./js/lufylegend-1.7.6.min.js"></script> <script type="text/javascript" src="./js/Main.js"></script> </head> <body> <div id="mylegend">loading...</div> </body> </html>
5.2 必要的JavaScript知识
随机数:Math.random()生成0到1的小数,如果需要随机生成一个5到10之间的整数,Math.floor(5 + 5*Math.random());
条件分支:if ... else if ... else ... 和switch
5.3 分层实现
整个游戏界面作为一个层,然后将选择出拳部分和结果显示部分分离成为另外两个层。5.4 各个层的基本功能
基本画面显示:利用静态类LLoadManage的load函数来一次性读取多张图片。LLoadManage.load($list, $onupdate, $oncomplete);
$list : 要读取的图片数组
$onupdate : 每读取一张图片后调用的函数
$oncomplete : 读完所有图片后调用的函数
5.5 出拳
initClickLayer()5.6 结果判定
init(50, "mylegend", 800, 400, main); var backLayer; var resultLayer; var clickLayer; var imglist = {}; var imgData = new Array( {name:"title",path:"./images/title.png"}, {name:"shitou",path:"./images/shitou.png"}, {name:"jiandao",path:"./images/jiandao.png"}, {name:"bu",path:"./images/bu.png"}, ); var showList = new Array(); var nameText, playerNameText; var selfBitmap, enemyBitmap, selfTextAll, selfTextWin, selfTextLoss, selfTextDraw, win = 0, loss = 0, draw = 0; var checkList = [ [0, 1, -1], [-1, 0, 1], [1, -1, 0] ]; function main() { backLayer = new LSprite(); addChild(backLayer); loadingLayer = new LoadingSample3(); backLayer.addChild(loadingLayer); LLoadManage.load( imgData, function(progress) { loadingLayer.setProgress(progress); console.log(progress); }, function(result) { imglist = result; backLayer.removeChild(loadingLayer); loadingLayer = null; gameInit(); } ); } function gameInit() { showList.push(new LBitmapData(imglist["shitou"])); showList.push(new LBitmapData(imglist["jiandao"])); showList.push(new LBitmapData(imglist["bu"])); backLayer.graphics.drawRect(10, '#008800', [0,0,LGlobal.width, LGlobal.heigth], true, '#000000'); //显示游戏标题 var titleBitmap = new LBitmap(new LBitmapData(imglist["title"])); titleBitmap.x = (LGlobal.width - titleBitmap.width)/2; titleBitmap.y = 10; backLayer.addChild(titleBitmap); //玩家方出拳图片 selfBitmap = new LBitmap(showList[0]); selfBitmap.x = 400 - selfBitmap.width - 50; selfBitmap.y = 130; backLayer.addChild(selfBitmap); //电脑方出拳图片 enemyBitmap = new LBitmap(showList[0]); enemyBitmap.x = 400 + 50; enemyBitmap.y = 130; backLayer.addChild(enemyBitmap); //玩家、电脑名称设定 playerNameText = new LTextField(); playerNameText.text = "玩家"; playerNameText.weight = "bolder"; playerNameText.color = "#ffffff"; playerNameText.size = 24; playerNameText.x = selfBitmap.x + (selfBitmap.width - playerNameText.getWidth())/2; playerNameText.y = 95; console.log(playerNameText); backLayer.addChild(playerNameText); console.log(backLayer); nameText = new LTextField(); nameText.text = "电脑"; nameText.weight = "bolder"; nameText.color = "#ffffff"; nameText.size = 24; nameText.x = enemyBitmap.x + (enemyBitmap.width - nameText.getWidth())/2; nameText.y = 95; backLayer.addChild(nameText); //结果显示层初始化 initResultLayer(); //操作层初始化 initClickLayer(); } function initResultLayer() { resultLayer = new LSprite(); resultLayer.graphics.drawRect(4,'#ff8800',[0,0,150,110],true,'#ffffff'); resultLayer.x = 10; resultLayer.y = 100; backLayer.addChild(resultLayer); selfTextAll = new LTextField(); selfTextAll.text = "猜拳次数:0"; selfTextAll.weight = "bolder"; selfTextAll.x = 10; selfTextAll.y = 20; resultLayer.addChild(selfTextAll); selfTextWin = new LTextField(); selfTextWin.text = "胜利次数:0"; selfTextWin.weight = "bolder"; selfTextWin.x = 10; selfTextWin.y = 40; resultLayer.addChild(selfTextWin); selfTextLoss = new LTextField(); selfTextLoss.text = "失败次数:0"; selfTextLoss.weight = "bolder"; selfTextLoss.x = 10; selfTextLoss.y = 60; resultLayer.addChild(selfTextLoss); selfTextDraw = new LTextField(); selfTextDraw.text = "平局次数:0"; selfTextDraw.weight = "bolder"; selfTextDraw.x = 10; selfTextDraw.y = 80; resultLayer.addChild(selfTextDraw); } function initClickLayer() { clickLayer = new LSprite(); clickLayer.graphics.drawRect(4,'#ff8800',[0,0,300,110],true,'#ffffff'); var msgText = new LTextField(); msgText.text = "请出拳:"; msgText.weight = "bolder"; msgText.x = 10; msgText.y = 10; clickLayer.addChild(msgText); var btnShitou = getButton("shitou"); btnShitou.x = 30; btnShitou.y = 35; clickLayer.addChild(btnShitou); btnShitou.addEventListener(LMouseEvent.MOUSE_UP,onclick) var btnJiandao = getButton("jiandao"); btnJiandao.x = 115; btnJiandao.y = 35; clickLayer.addChild(btnJiandao); btnJiandao.addEventListener(LMouseEvent.MOUSE_UP,onclick) var btnBu = getButton("bu"); btnBu.x = 200; btnBu.y = 35; clickLayer.addChild(btnBu); btnBu.addEventListener(LMouseEvent.MOUSE_UP,onclick) clickLayer.x = 250; clickLayer.y = 275; backLayer.addChild(clickLayer); } //创建按钮 function getButton(value) { var btnUp = new LBitmap(new LBitmapData(imglist[value])); btnUp.scaleX = 0.5; btnUp.scaleY = 0.5; var btnOver = new LBitmap(new LBitmapData(imglist[value])); btnOver.scaleX = 0.5; btnOver.scaleY = 0.5; btnOver.x = 2; btnOver.y = 2; var btn = new LButton(btnUp, btnOver); btn.name = value; return btn; } //出拳 function onclick(event, display) { var selfValue, enemyValue; if (display.name == "shitou") { selfValue = 0; } else if (display.name == "jiandao") { selfValue = 1; } else if (display.name == "bu") { selfValue = 2; } enemyValue = Math.floor(Math.random()*3); selfBitmap.bitmapData = showList[selfValue]; enemyBitmap.bitmapData = showList[enemyValue]; // var result = checkList[selfValue][enemyValue]; if (result == -1) { loss += 1; } else if (result == 1) { win += 1; } else { draw += 1; } selfTextWin.text = "胜利次数:" + win; selfTextLoss.text = "失败次数:" + loss; selfTextDraw.text = "平局次数:" + draw; selfTextAll.text = "猜拳次数:" + (win+loss+draw); }
相关文章推荐
- HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角
- HTML5 canvas游戏开发实战 3 : canvas高级功能
- HTML5 canvas游戏开发实战 7 : "是男人就下一百层“游戏
- 【Canvas】HTML5游戏开发的基本流程+P2.js物理引擎实战开发
- HTML5 Canvas游戏开发实战
- HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角
- 我的新书《HTML5 Canvas游戏开发实战》
- HTML5 canvas游戏开发实战 2 : canvas基础
- HTML5 canvas游戏开发实战 4 : lufylegend开源库件
- HTML5 canvas游戏开发实战 6 : 俄罗斯方块
- HTML5 2D Canvas手机游戏开发经验谈
- HTML5开发 页游/手游动画及游戏系列教程(Game Tutorial):(二)基本动画(canvas先生很忙)
- HTML5吃豆豆游戏开发实战(三)2d碰撞检测、重构
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf4
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf3
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf5
- HTML5 Canvas核心技术:图形.动画与游戏开发
- HTML5 Canvas核心技术 图形、动画与游戏开发学习总结
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf7
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf2