JS实现2048代码
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>cwl's 2048</title>
- <style>
- *{
- margin: 0;
- padding: 0;
- }
- body{
- background-color: #5ad9ff;
- }
- </style>
- </head>
- <body>
- <script>
- function canvas_node() {
- /**
- var canvas = document.getElementById('tutorial');
- var ctx = canvas.getContext('2d');
- ctx.fillStyle = "rgb(200,0,0)";
- ctx.fillRect(25,25,100,100);
- ctx.clearRect(45,45,60,60);
- ctx.strokeRect(50,50,50,50);
- ctx.beginPath();
- ctx.moveTo(75,50);
- ctx.lineTo(100,75);
- ctx.lineTo(100,25);
- ctx.fill();
- */
- }
- function rand_num(l,r) {
- l = Math.min(l,r);
- r = Math.max(l,r);
- return Math.floor(Math.random()*(r-l+1)+l);
- }
- function draw_num(num,x,y,x0,y0) {
- var ctx = document.getElementById('canvas').getContext('2d');
- ctx.fillStyle = "black";
- ctx.font = "30px serif";
- ctx.textAlign = "center";
- ctx.textBaseline = "middle"
- ctx.fillText(num.toString(),x0+x*100+40,y0+y*100+40,100);
- }
- function show_map(arr) {
- var ctx = document.getElementById('canvas').getContext('2d');
- var width = window.innerWidth;
- var height = window.innerHeight;
- var x0 = width/2 - 200;
- var y0 = window.innerHeight/5;
- ctx.fillStyle = "#8ece44";
- ctx.fillRect(x0-25,y0-25,430,430);
- ctx.fillStyle = "#ffe945";
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- ctx.fillRect(x0+i*100,y0+j*100,80,80);
- }
- }
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- if(arr[i][j]!=0) {
- draw_num(arr[i][j],i,j,x0,y0);
- }
- }
- }
- }
- function init_game() {
- var arr = new Array(4);
- for(var i = 0; i < 4; i ++ ) {
- arr[i] = new Array(4);
- }
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- arr[i][j] = 0;
- }
- }
- new_num(arr);
- new_num(arr);
- show_map(arr);
- return arr;
- }
- function new_num(arr) {
- var ok = 0;
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- if(!arr[i][j]) {
- ok = 1;
- }
- }
- if(ok) {
- break;
- }
- }
- while(ok) {
- var x = rand_num(0,3);
- var y = rand_num(0,3);
- var t = rand_num(1,2);
- if(arr[x][y] == 0) {
- arr[x][y] = t*2;
- break;
- }
- }
- }
- function is_end(arr) {
- var xx = [-1, 1, 0, 0];
- var yy = [ 0, 0,-1, 1];
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- if(arr[i][j] == 0) {
- return false;
- }
- else {
- for(var k = 0; k < 4; k ++ ) {
- var next_x = i + xx[k];
- var next_y = j + yy[k];
- if(is_in(next_x,next_y) && arr[next_x][next_y] == arr[i][j]) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
- function is_in(x,y) {
- return x >= 0 && y >= 0 && x < 4 && y < 4;
- }
- function join(arr,dir,x,y) {
- var xx = [-1, 1, 0, 0];
- var yy = [ 0, 0,-1, 1];
- var flag = 0;//判断是否能继续合并
- while(is_in(x,y)) {
- var next_x = x+xx[dir];
- var next_y = y+yy[dir];
- if(!is_in(next_x,next_y)) {
- break;
- }
- if(arr[next_x][next_y] == 0) {
- arr[next_x][next_y] = arr[x][y];
- arr[x][y] = 0;
- }
- else if(arr[next_x][next_y] == arr[x][y] && !flag) {
- arr[next_x][next_y] *= 2;
- arr[x][y] = 0;
- flag = 1;
- }
- else break;
- x = next_x;
- y = next_y;
- }
- }
- function change(arr,dir) {
- if(dir == 2) { // up
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- join(arr,dir,i,j);
- }
- }
- }
- else if(dir == 3) { //down
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 3; j >= 0; j -- ) {
- join(arr,dir,i,j);
- }
- }
- }
- else if(dir == 0) {
- for(var i = 0; i < 4; i ++ ) {
- for(var j = 0; j < 4; j ++ ) {
- join(arr,dir,i,j);
- }
- }
- }
- else if(dir == 1) {
- for(var i = 3; i >= 0; i -- ) {
- for(var j = 0; j < 4; j ++ ) {
- join(arr,dir,i,j);
- }
- }
- }
- //console.log(arr);
- if(is_end(arr)) {
- alert("end");
- return 1;
- }
- new_num(arr);
- show_map(arr);
- return 0;
- }
- function main() {
- document.body.style.overflow="hidden";
- var can = document.createElement('canvas');
- can.id = "canvas";
- can.width = window.innerWidth;
- can.height = window.innerHeight;
- document.body.appendChild(can);
- var arr = init_game();
- var keyIsDown = 0;
- window.addEventListener('mousemove', function(event) {
- console.log(event)
- })
- window.addEventListener('keydown',function(event){
- var key = event.keyCode;
- var ret = 0;
- if(keyIsDown == 0) {
- keyIsDown = 1;
- if(key == 38) {//up
- ret = change(arr,2);
- }
- else if(key == 40) {//down
- ret = change(arr,3);
- }
- else if(key == 37) {//left
- ret = change(arr,0);
- }
- else if(key == 39) {//right
- ret = change(arr,1);
- }
- if(ret) {
- arr = init_game();
- show_map(arr);
- }
- }
- })
- window.addEventListener('keyup',function(){
- keyIsDown = 0;
- })
- window.onresize = function()
- {
- var can = document.getElementById("canvas");
- var height = window.innerHeight;
- var width = window.innerWidth;
- can.height = height;
- can.width = width;
- show_map(arr);
- }
- }
- main();
- </script>
- </body>
- </html>
2048
JS实现2048代码的更多相关文章
- 使用JS实现2048小游戏
JS实现2048小游戏源码 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器.) &l ...
- JS Nice – JavaScript 代码美化和格式化工具
JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...
- ios-UIWebView中js和oc代码的互调
webview是ios中显示远程数据的网页控件,webview能显示的内容很多,MP4.文本.pdf等等: 关于js和oc代码的互相调用 1:oc中调用js代码; >>oc中调用js代码很 ...
- 关于JS的一些代码效果图
关于JS的一些代码效果图 1.几乎所有DOM元素都有innerText.innerHTML属性(注意大小写),分别是元素标签内内容的文本表示形式和HTML源代码,这两个属性是可读可写的. 需要注意的是 ...
- js基础 - 兼容代码
js基础 - 兼容代码 . scrollTop . chrome document.body.scrollTop . IE && firefox document.documentEl ...
- [转]Asp.Net调用前台js调用后台代码分享
1.C#前台js调用后台代码 前台js <script type="text/javascript" language="javascript"> ...
- JS软键盘代码
页面代码如下: <HTML> <HEAD> <TITLE>一个不错的js软键盘代码</TITLE> <meta http-equiv=" ...
- 用js实现2048小游戏
用js实现2048小游戏 笔记仓库:https://github.com/nnngu/LearningNotes 1.游戏简介 2048是一款休闲益智类的数字叠加小游戏.(文末给出源代码和演示地址) ...
- asp.net调用前台js调用后台代码分享
asp.net调用前台js调用后台代码分享 C#前台js调用后台代码前台js<script type="text/javascript" language="jav ...
随机推荐
- [SHOI2009] 会场预约 - Treap
Description PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也 ...
- 如何从0开发一个Atom组件
最近用Atom写博客比较多,然后发现一个很严重的问题..没有一个我想要的上传图片的方式,比如某乎上边就可以直接copy/paste文件,然后进行上传.然而在Atom上没有找到类似的插件,最接近的一个, ...
- python/零起点(一、字典)
python/零起点(一.字典) dict( )字典 dict()强型转换成字典类型的数据类型: 字典的键(Key)必须是唯一不可变的 字典是无序,字典可变数据类型,且是可迭代的对象 字典清空操作案例 ...
- *args和**kwargs
#coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值,**kwargs有key值 ...
- SourceTree 01 - git 客户端介绍
SourceTree - git客户端介绍 SourceTree系列第1篇 --->> SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/g ...
- Django中的可复用模板
将文件转换成可复用的模板,便可以通过模板的基本布局来设计未来项目. startproject的模板是一个目录或zip文件,当命令运行时形成Django模板. 默认情况下,所有Python源文件都会被制 ...
- HTML5中meta属性大集合
1.声明文档的字符编码 <meta charset='utf-8'> 2.声明文档的兼容模式 <meta http-equiv="X-UA-Compatible" ...
- No mapping found for HTTP request with URI [/user/login.do] in DispatcherServlet with name 'dispatcher'错误
1.警告的相关信息 七月 24, 2017 3:53:04 下午 org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: ...
- 【Swift】UIPresentationController的使用方法
UIPresentationController是ios8.0的新特性哦,使用需要注意 先上一个效果图 第一步: 连线选择segue类型为,present Modally 第二步:需要演示的控制器,自 ...
- linux 基本使用命令
arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI ...