`
yeahoo
  • 浏览: 14359 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用JavaScript实现的小游戏

阅读更多
以前在做Flash游戏的时候,想看看Javascript下的效果。就用JavaScript仿Flash做了两个小游戏,可以看到在Javascript下的运行效果还是很不错的。

图片加载延迟的问题没有处理,所以在第一次打开的时候会有点问题,按F5再刷一次就行了。
myMap = [
    [1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 1, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  1, 1, 0, 0, 1,  1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 1, 0, 0,  0, 0, 0, 0, 0,  1, 1, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],

    [1, 0, 0, 0, 0,  0, 0, 0, 1, 1,  0, 0, 1, 1, 1,  0, 0, 0, 0, 0,  0, 0, 1, 1, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 1, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 1, 1, 1,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 1, 1, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 1, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],

    [1, 0, 0, 0, 0,  0, 0, 1, 1, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 1, 1, 0,  1, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 1, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 1, 1, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  1, 0, 1, 1, 0,  1, 1, 0, 0, 0,  0, 1, 1, 1, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],

    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 0,  0, 0, 0, 0, 1],
    [1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1,  1, 1, 1, 1, 1]
    ];
game = {tileW:30, tileH:30};
game.Tile0 = function () { };
game.Tile0.prototype.walkable = true;
game.Tile0.prototype.frame = 0;
game.Tile1 = function () { };
game.Tile1.prototype.walkable = false;
game.Tile1.prototype.frame = 1;

var hero = {xtile: 2, ytile: 2, speed: 4, jumpstart:-15, gravity: 1.0, jump: false};

function main(){
    buildMap(myMap);
    document.onkeydown = keyDown;
    document.onkeyup = keyUp;
    //document.addEventListener('keydown', detectKeys);
    fall(hero);
    var loop = function(){
        walk();
    }
    setInterval(loop, 12);
}
function walk(){
    if (hero.jump) {
        jump(hero);
    }
    if (39 == hero.dir) { //left
        moveChar(hero, 1, 0);
    } else if (37 == hero.dir) { //right
        moveChar(hero, -1, 0);
    }
    //hero.dir = 0;
}

function buildMap(map) {
    game.clip = document.getElementById('map');
    var mapWidth = map[0].length;
    var mapHeight = map.length;
    for (var i = 0; i<mapHeight; ++i) {
        for (var j = 0; j<mapWidth; ++j) {
            var name = "t_"+i+"_"+j;
            game[name] = new game["Tile"+map[i][j]]();

            var tile = document.createElement('img');
            tile.src = 'imgs/tiles/' + game[name].frame + '.gif';
            tile.style.left = (j * game.tileW) + 'px';
            tile.style.top = (i * game.tileH) + 'px';
            tile.style.position = 'absolute';
            game.clip.appendChild(tile);
        }
    }

    hero.width = 12.5; 
    hero.height = 12.5;
    var h = document.createElement('img');
    hero.x = (hero.xtile * game.tileW) + game.tileW/2 - 12.5;
    //hero.y = (hero.ytile * game.tileW) + game.tileH/2 - 12.5;
    hero.y = ( (hero.ytile + 1) * game.tileW) - 25;
    h.src = 'imgs/hero.gif';
    h.style.position = 'absolute';
    h.style.left = hero.x + 'px';
    h.style.top = hero.y + 'px';

    hero.clip = h;

    game.clip.appendChild(h);
}

function getMyCorners(x, y, ob) {
    ob.downY = parseInt( (y+ob.height-1) / game.tileH );
    ob.upY = parseInt( (y-ob.height) / game.tileH );
    ob.leftX = parseInt( (x-ob.width) / game.tileW );
    ob.rightX = parseInt( (x+ob.width-1)/game.tileW );

    ob.upleft = game["t_"+ob.upY+"_"+ob.leftX].walkable;
    ob.downleft = game["t_"+ob.downY+"_"+ob.leftX].walkable;
    ob.upright = game["t_"+ob.upY+"_"+ob.rightX].walkable;
    ob.downright = game["t_"+ob.downY+"_"+ob.rightX].walkable;
}


function moveChar(ob, dirx, diry, jump) {
    if (Math.abs(jump) == 1) {
        speed = ob.jumpspeed*jump;
    } else {
        speed = ob.speed;
    }
    getMyCorners(ob.x, ob.y+speed*diry, ob);
    if (diry == -1) {
        if (ob.upleft && ob.upright) {
            ob.y += speed*diry;
        } else {
            ob.y = ob.ytile*game.tileH+ob.height;
            ob.jumpspeed = 0;
        }
    }
    if (diry == 1) {
        if (ob.downleft && ob.downright) {
            ob.y += speed*diry;
        } else {
            ob.y = (ob.ytile+1)*game.tileH-ob.height;
            ob.jump = false;
        }
    }
    getMyCorners(ob.x+speed*dirx, ob.y, ob);
    if (dirx == -1) {
        if (ob.downleft && ob.upleft) {
            ob.x += speed*dirx;
            fall(ob);
        } else {
            ob.x = ob.xtile*game.tileW+ob.width;
        }
    }
    if (dirx == 1) {
        if (ob.upright && ob.downright) {
            ob.x += speed*dirx;
            fall(ob);
        } else {
            ob.x = (ob.xtile+1)*game.tileW-ob.width;
        }
    }

    ob.clip.style.left = ob.x - 12.5 + 'px';
    ob.clip.style.top = ob.y - 12.5 + 'px';

    ob.xtile = parseInt(ob.x / game.tileW);
    ob.ytile = parseInt(ob.y / game.tileH);
    return (true);
}
function jump(ob) {
    ob.jumpspeed = ob.jumpspeed + ob.gravity;
    if (ob.jumpspeed > game.tileH) {
        ob.jumpspeed = game.tileH;
    }
    if (ob.jumpspeed < 0) {
        moveChar(ob, 0, -1, -1);
    } else if (ob.jumpspeed>0) {
        moveChar(ob, 0, 1, 1);
    }
    return (true);
}
function fall(ob) {
    if (!ob.jump) {
        getMyCorners(ob.x, ob.y+1, ob);
        if (ob.downleft && ob.downright) {
            ob.jumpspeed = 0;
            ob.jump = true;
        }
    }
}

function keyUp(e) {
    //var keyCode = e.keyCode || e.which;
    var keyCode;
    if (window.event){
        keyCode = event.keyCode;
    }else{
        keyCode = e.which;
    }
    if (39 == keyCode && 39 == hero.dir) { //left
        hero.dir = 0;
    }else if (37 == keyCode && 37 == hero.dir) { //right
        hero.dir = 0;
    }
}
function keyDown(e) {
    //var keyCode = e.keyCode || e.which;
    var keyCode;
    if (window.event){
        keyCode = event.keyCode;
    }else{
        keyCode = e.which;
    }
    //alert(keyCode);
    var ob = hero;
    if (32 == keyCode &&  !ob.jump) {
        ob.jump = true;
        ob.jumpspeed = ob.jumpstart;
    }

    if (39 == keyCode) { //left
        hero.dir = 39;
        //moveChar(ob, 1, 0);
    } else if (37 == keyCode) { //right
        hero.dir = 37;
        //moveChar(ob, -1, 0);
    }

    /*
    if (!keyPressed) {
            ob.clip.char.gotoAndStop(1);
    } else {
            ob.clip.char.play();
    }
    */
}
main();
  • jsgame2.rar (6.2 KB)
  • 描述: 方向键移动,空格键跳
  • 下载次数: 169
  • jsgame.rar (14.6 KB)
  • 描述: 方向键移动,Ctrl开火
  • 下载次数: 184
分享到:
评论
4 楼 rkihabara 2008-04-04  
一个游戏下来,精通了~~
3 楼 wutao8818 2008-04-03  
我看过一个js做的星际争霸,太强了。
2 楼 dboylx 2008-04-03  
佩服LZ技术,更佩服LZ闲情逸致~~~
1 楼 yeahoo 2008-04-03  
补上一张截图<img src='../../../../../images/smiles/icon_biggrin.gif' alt=''/><p> </p>

相关推荐

    基于原生JavaScript实现的扫雷小游戏.zip

    基于原生JavaScript实现的扫雷小游戏 基于原生JavaScript实现的扫雷小游戏 基于原生JavaScript实现的扫雷小游戏 基于原生JavaScript实现的扫雷小游戏 基于原生JavaScript实现的扫雷小游戏 基于原生JavaScript实现的...

    JavaScript 小游戏代码汇总

    JavaScript 小游戏代码汇总 JavaScript 是一种广泛使用的脚本语言,常用于开发 web 应用程序尤其是游戏开发。以下是 JavaScript 小游戏代码汇总的知识点: 1. HTML 基础:代码开头使用的 `&lt;!DOCTYPE html&gt;` 声明...

    JavaScript实现2048小游戏

    JavaScript实现的2048小游戏是一款基于HTML5、CSS3和原生JavaScript的轻量级游戏,它通过简单的数字合并规则提供了一种富有挑战性的娱乐方式。在这个项目中,我们将探讨JavaScript的核心概念以及如何利用它们来创建...

    javaScript小游戏

    通过实践,开发者可以更好地理解如何用JavaScript实现游戏逻辑,如碰撞检测、计分系统和动画效果。 以下是JavaScript小游戏可能涉及的一些关键知识点: 1. **基础语法**:包括变量声明(var, let, const)、数据...

    javascript 2048小游戏

    3. **CSS动画**:可能使用CSS3动画或JavaScript实现方块的移动效果。 4. **数据结构**:游戏可能使用二维数组来存储和操作方块,理解数组操作对于实现游戏逻辑至关重要。 5. **递归与循环**:在寻找可合并的数字...

    基于Javascript 实现的2048小游戏

    【作品名称】:基于Javascript 实现的2048小游戏 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于Javascript ...

    JavaScript跑酷小游戏源代码

    通过分析这个JavaScript跑酷小游戏源代码,我们可以深入理解如何用JavaScript构建一个完整的交互式应用,这对于提升JavaScript编程技能,尤其是游戏开发方面的能力大有裨益。同时,这也为开发者提供了动手实践的机会...

    JavaScript跑酷小游戏html源代码

    总结起来,JavaScript跑酷小游戏的开发涉及HTML构建基础结构,CSS实现视觉效果,以及JavaScript编写动态游戏逻辑。通过学习和实践这样的项目,开发者可以深入理解这三个核心技术的协同工作方式,为未来更复杂的Web...

    Javascript实现的2048游戏

    《JavaScript实现的2048游戏详解》 2048是一款广受欢迎的数字拼图游戏,玩家通过上下左右滑动屏幕,使相同数字的方块合并,目标是达到2048这个数字。本篇文章将深入探讨如何使用JavaScript语言实现2048游戏的完整...

    JavaScript拼图小游戏实现

    JavaScript拼图小游戏是一种常见的网页互动应用,它利用了JavaScript这一前端编程语言的强大功能,为用户提供了一种娱乐和学习的方式。JavaScript是一种轻量级的解释型编程语言,常用于网页动态效果的开发,使得用户...

    JavaScript实现打气球的游戏

    JavaScript实现的打气球游戏是一种常见的网页互动小游戏,它结合了HTML、CSS和JavaScript技术,为用户提供了一种娱乐和学习编程的机会。在这个项目中,主要的知识点包括: 1. **HTML结构**:游戏界面的构建通常由...

    javascript实现有趣的架子鼓小游戏

    javascript实现有趣的架子鼓小游戏 javascript实现有趣的架子鼓小游戏 javascript实现有趣的架子鼓小游戏 javascript实现有趣的架子鼓小游戏 javascript实现有趣的架子鼓小游戏 javascript实现有趣的架子鼓小...

    JavaScript贪吃蛇小游戏.zip

    9. 用户交互:除了基本的键盘控制,还可以添加开始、暂停、重置等按钮,通过JavaScript实现这些功能。 10. 错误处理:良好的错误处理机制能确保游戏在遇到异常情况时仍能正常运行或提供友好的提示信息。 通过学习...

    javascript拼图小游戏

    JavaScript拼图小游戏是一种基于网页的互动游戏,利用了JavaScript这门客户端编程语言的强大功能来实现。JavaScript,简称JS,是Web开发中不可或缺的一部分,主要用于控制网页的动态行为,包括用户交互、页面动画...

    javascript编写的小游戏

    JavaScript 编写的小游戏是一种利用Web技术实现的互动娱乐应用,它们可以在网页上直接运行,无需安装任何额外软件。这种技术基于JavaScript,一种广泛应用于网页开发的编程语言,结合HTML和CSS,构成了Web开发的三大...

    五个javascript小游戏

    这个压缩包包含了五个基于JavaScript的小游戏,旨在提供一个学习和交流JavaScript编程技巧的平台。接下来,我们将深入探讨这些小游戏可能涉及的JavaScript知识点。 1. **基本语法与数据类型**: JavaScript的基础...

    Javascript小游戏(原创)

    JavaScript小游戏是一种基于Web的互动娱乐应用,完全使用JavaScript编程语言实现。JavaScript,作为网页开发中的主要脚本语言,被广泛用于实现动态交互效果和增强用户体验。在这个“原创”的JavaScript游戏中,...

    2048小游戏 - 原生JavaScript实现

    《2048小游戏 - 原生JavaScript实现》 2048是一款风靡全球的数字拼图游戏,由19岁的意大利开发者Gabriele Cirulli在2014年创造。这款游戏的目标是通过合并相同数字的方块,最终达到2048这个数字。原生JavaScript...

    javascript迷宫小游戏源码

    JavaScript迷宫小游戏是一种基于网页的互动游戏,利用JavaScript编程语言实现。JavaScript是Web开发中的重要脚本语言,常用于处理用户交互、动态内容更新以及页面的逻辑控制。在这个项目中,我们将探讨JavaScript...

Global site tag (gtag.js) - Google Analytics