Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【小三传奇】这是一个关于游戏的故事

【小三传奇】这是一个关于游戏的故事

作者头像
IMWeb前端团队
发布于 2019-12-04 04:40:29
发布于 2019-12-04 04:40:29
54000
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb moonye 原文出处:IMWeb社区 未经同意,禁止转载

咳咳,如果你是被标题吸引过来的,只能说明你思想不太纯洁。

其实,这里要讲的,是关于一个游戏的故事,这个游戏的名字叫做小三传奇,曾经在ios平台上面很火的一款游戏。网上2048方面的教程很多,于是动了自己弄一个小三传奇的教程,附上源码,这样大家就可以一起high了。其实写之前会觉得还挺复杂的,但是基本的逻辑想通之后,会发现思路还是比较清晰简单的。

演示地址看这里 完整代码可以看这里

介绍

这是一款益智类的小游戏,最开始出现在ios平台上,还是收费的(6元),操作简单,需要动脑经才能得高分。一局快则几分钟,慢则二十分钟甚至更久。在它出来之后的几个月后,android平台上才出了一款类似的益智游戏,2048.虽然类似,但习惯了原来游戏的风格和规则之后,对2048的兴趣不大。 以下介绍一些基本的规则:

  1. 游戏初始界面是一个4*4的表格,游戏开始时,在最外层(0行,3行,0列,3列)随机位置生成两个数字,分别是1和2。
  2. 用户可以操作的按键是方向键(上下左右),按下方向键一次,则界面上的数字会朝指定方向移动,并且在界面上指定的一行或一列随机生成一个数字。如果指定方向上的数字不能移动,则此时会触发数字的合并。合并的条件是是1和2可以合并,合并结果为3,或者大于或等于3的两个数,如果相等也可以合并,合并的结果为两个数之和。
  3. 如果最后界面上填满了数字,且没有数字可以合并了,则游戏结束。可以在界面上看到用户的得分。合并的次数越多,得分越高。 原游戏图

效果图

代码

这里代码只取了部分代码,完整的可以看这里

html方面

这里准备了一个容器,中间放置16个块,用来放置数字的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     <div class="box-container clear">
         <div class="cell" id ="pos_0_0"></div>
         <div class="cell" id ="pos_0_1"></div>
         <div class="cell" id ="pos_0_2"></div>
         <div class="cell" id ="pos_0_3"></div>
         <div class="cell" id ="pos_1_0"></div>
         <div class="cell" id ="pos_1_1"></div>
         <div class="cell" id ="pos_1_2"></div>
         <div class="cell" id ="pos_1_3"></div>
         <div class="cell" id ="pos_2_0"></div>
         <div class="cell" id ="pos_2_1"></div>
         <div class="cell" id ="pos_2_2"></div>
         <div class="cell" id ="pos_2_3"></div>
         <div class="cell" id ="pos_3_0"></div>
         <div class="cell" id ="pos_3_1"></div>
         <div class="cell" id ="pos_3_2"></div>
         <div class="cell" id ="pos_3_3"></div>
     </div>
css方面

这里直接是在搜索引擎中找了一张游戏截图,基于这张图来配的颜色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.box-container {
    width: 256px;
    margin: 0 auto;
    background-color: #eaeaea;
    position: relative;
}
.cell {
    border-radius: 6px;
    background-color: #dbdbdb;
    width: 60px;
    height: 90px;
    margin: 2px;
    float: left;
    overflow: hidden;
}
.num {
    display: inline-block;
    vertical-align: middle;
    width: 100%;
    line-height: 90px;
    text-align: center;
    font-weight: bold;
    font-size: 38px;

}
.num-2 {
    background-color: #ff6680;
    color: white;
}
.num-1 {
    background-color: #66ccff;
    color: white;
}
.num-x {
    background-color: #fcfcfc;
    color: black;
}
js逻辑

首先初始化数据点阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(var i = 0; i < r; i ++) {
        this.points[i] = [];
        for(var j = 0; j < c; j++) {
            this.points[i][j] = 0;
        }
    }

生成随机的数字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return Math.random() < 0.5? 1:2;

生成随机的位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Points.prototype.getRandomPos = function (direct, v) {
    var row, col,count = 0;
    do{
        switch(direct) {
            case UP:
                row = 3;
                col = getPos();
                break;
                ...
            default:
                break;
        }
    } while(!this.isValidPosAndValue(row, col));

    ...
    this.setValue(row, col, v);
    // this.toString();
    return {row: row, col: col};    
}

位置有了,数字有了,将数字显示到指定位置就好

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
domId = points.getDomId(pos.row, pos.col);
$(domId).html(wrapNum(n));

然后我们就绑定事件,让它能够移动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).on('keyup',  function(evt) {
        switch(evt.keyCode) {
            case KEYUP:
                moveUp();
                updateScore();
                generateNum([1,2], UP);
                break;
            ...
            default:
            break;
        }
    });

能够移动了,那还要看它能不能合并,能不能够得分,对吧。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function canMerge(fx, fy, tx, ty) {
    if(points.getValue(fx, fy) > 0) {
        if(points.getValue(tx, ty) === 0 
            || (points.getValue(fx, fy) + points.getValue(tx, ty) === 3) 
            || (points.getValue(fx, fy) === points.getValue(tx, ty) && points.getValue(tx, ty) >= 3)) {
            return true;
        }
    }
    return false;
}

最后,看看游戏结束没,算了得了多少分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var cur,right, down;
    console.log("--------------------------------");
    points.toString();
    if(IS_OVER) {
        return true;
    }
    for (var i = 0; i <= 3; i++) {
        for (var j = 0; j <= 3; j++) {
            if(this.points.getValue(i, j) === 0) {
                return false;
            }
            //判断右边能否merge
            if(j <=2 && canMerge(i, j, i, j+ 1)) {
                return false;
            }
            //判断下边能否merge
            if(i <=2 && canMerge(i, j, i+ 1, j)) {
                return false;
            }
        };
    };

    //游戏结束
    IS_OVER = true;
    alert('Game Over');
    return true;

小结

抽空写写小游戏还是挺好的,这里的dom和css比较简单,复杂的地方在逻辑那里。完成一个小游戏,里面可以填充的东西太多了,也可以实现自己的一些想法。 比如上面的游戏,如果在手机端,如何展示,可以考虑接入rem方案。比如合并时的动画,这个代码里面留了位置,还未实现。也还可以多加一点趣味性的东西,比如下个会出现哪个数字,可以给出提示。比如出现数字的算法,其实可以设计得复杂些,这样玩起来会更有意思。 最后一句,写写还是挺有意思的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
在正文开始之前,先引入一下故事背景:其实,自己最初选择编程行业,也是想自己开发一个小游戏啥的,主要是为了娱乐。没想到进入了编程行业之后,就变成了后端Java 开发者,虽然可能和自己期望的有点差距,但是在Java 语言行业待久了,也就习惯了。只是心里对于做一个小游戏的念想一直还在。恰逢中国版Cursor—- 腾讯云CodeBuddy 来了,对于小游戏的实现也看到了曙光,下面闲话少说,先来介绍一下我们今天的主角。什么是CodeBuddy?
六月的雨在Tencent
2025/05/13
7660
键码经典游戏:快速实现可运行的 2048
首先,玩过 2048 的都知道:基础版本是一个 4x4 的网格,作为游戏的主界面;
掘金安东尼
2023/10/27
3410
键码经典游戏:快速实现可运行的 2048
星辰秘典:揭开Python项目的神秘密码——2048游戏
前言:你好,欢迎来到我的博客。我是一个热爱编程的人,特别喜欢用Python这门语言来创造一些有趣的图形项目。在这篇博客中,我将和你分享一些我用Python写的小的图形项目,包括它们的原理,代码和效果。我希望你能从中学到一些有用的知识,也能感受到编程的乐趣。如果你对我的项目有任何问题或建议,欢迎在评论区留言,我会尽快回复你。让我们开始吧!
命运之光
2024/03/20
2000
星辰秘典:揭开Python项目的神秘密码——2048游戏
致敬1024程序员节:用JavaScript编写一个简单的1024小游戏
在每年的10月24日,我们都会庆祝程序员节,这是一个向所有辛勤工作、创造出无数令人惊叹应用和系统的程序员们致敬的日子。为了纪念这个特殊的日子,我们将通过编写一个简单的1024小游戏来向所有程序员们表示敬意。本文将详细解释如何使用JavaScript编写这个小游戏,并对代码进行分段讲解。
can4hou6joeng4
2023/11/17
4330
​.NET手撸2048小游戏
2048是一款益智小游戏,得益于其规则简单,又和 2的倍数有关,因此广为人知,特别是广受程序员的喜爱。
梁规晓
2019/11/07
1.4K0
​.NET手撸2048小游戏
一个简单的卡动车排队系统
一、效果图 image.png image.png 二、代码 1、admin.html <html> <head> <meta charset="UTF-8"> <title>卡丁车</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> <sty
week
2018/08/27
2790
一个简单的卡动车排队系统
AI——五子棋网页端小游戏全附代码
五子棋是一种双人对战的棋类游戏。游戏的棋盘是一个15行15列的网格,双方玩家轮流在网格的空位上落子。目标是先在横线、竖线、斜线或对角线上形成连续的五个自己的棋子。
此星光明
2025/02/06
8550
AI——五子棋网页端小游戏全附代码
ES6 手写一个“辨色”小游戏
依稀记得几年前朋友圈流行的辨色小游戏,找出颜色不同的矩形。前些天突发奇想,打算自己手写一个类似的游戏,话不多说,先上 Demo . --项目源码
小皮咖
2019/11/05
9680
【 数字游戏 2048 】原生 JavaScript 做小游戏
原生 JavaScript 2048 源码 : <!doctype html> <html> <head> <title>2048</title> <meta charset="utf-8"> <style type="text/css"> body{ margin: 0; padding: 0; } #gridPanel { width: 480px; height: 480px; margin: 0 auto; position: relative; background:
QUXINGDONG.COM
2018/04/17
1.2K0
【 数字游戏 2048 】原生 JavaScript 做小游戏
手把手教你使用CanvasAPI打造一款拼图游戏
我们今天的目标是使用HTML5画布技术制作一款拼图小游戏,要求将图像划分为3*3的9块方块并打乱排序,用户可以移动方块拼成完整图片。
前端皮皮
2021/11/02
1.7K0
手把手教你使用CanvasAPI打造一款拼图游戏
用CodeBuddy打造儿童拼图游戏:AI如何让创意编程更简单
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
小Q圈圈
2025/05/28
950
用CodeBuddy打造儿童拼图游戏:AI如何让创意编程更简单
JS贪吃蛇
  儿时的经典游戏,无非俄罗斯方块、贪吃蛇、推箱子,之后才有了智能拼图、麻将、象棋、连连看、消消乐。今天拿出来一款JS贪吃蛇供大家学习、参考。   游戏玩法不多做赘述,可以调整关卡,可以调整爬行速度,祝您游戏愉快。
我不是费圆
2020/09/22
1.7K0
JS贪吃蛇
【CodeBuddy】三分钟开发一个实用小功能之:数字华容道拼图
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接: 腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
Jimaks
2025/05/20
1200
【CodeBuddy】三分钟开发一个实用小功能之:数字华容道拼图
【java】百行代码 实现2048小游戏
https://git.nowcoder.com/11000160/2048-java/blob/master/Game2048.java
韩旭051
2020/06/23
2.1K0
gemini1.5pro
https://aistudio.google.com/app/prompts/new_chat
阿超
2024/03/25
1500
gemini1.5pro
如何用html+css+js做一个跳跃逃离坍塌房子
这次我们做动画特效,我们来整个小游戏! 我先把跳跃逃离坍塌房子运行结果放在下面
海曈
2022/11/14
8490
如何用html+css+js做一个跳跃逃离坍塌房子
日语单词学习小游戏(待完善)
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
用户7124419
2023/08/06
2680
AI编程助手写面试题----写个五子棋
2017年,当时大学三本毕业前端工作一年,去深圳找工作面试,在拉勾上海投,接到腾讯前端开发团队回复询问邮箱账号,喜滋滋的以为可以有面试了。一看邮箱,抛给我一道面试题,写完发到对方邮箱。。
一起重学前端
2024/09/20
1490
无聊的人用JS实现了一个简单的打地鼠游戏
如果点击颜色比较深的那个(俗称坏老鼠),将扣分50;如果点击颜色比较浅的那个(俗称好老鼠),将得分100
书童小二
2018/09/03
1.9K0
无聊的人用JS实现了一个简单的打地鼠游戏
【CodeBuddy】三分钟开发一个实用小功能之:记忆翻牌配对游戏
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接: 腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
Jimaks
2025/05/20
1070
【CodeBuddy】三分钟开发一个实用小功能之:记忆翻牌配对游戏
推荐阅读
相关推荐
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验