3D灌篮高手

news2024/11/24 9:54:28

欢迎来到程序小院

3D灌篮高手

玩法:
鼠标左键点击按住屏幕,左边力度条在红色区域时松开鼠标投篮,30秒内完成投篮,统计投中次数,快去成为灌篮高手吧^^。

开始游戏icon-default.png?t=N7T8https://www.ormcc.com/play/gameStart/186

html

<div class="gameBox">
    <h2 class="title" style="margin-top: 60px;">3D灌篮高手</h2>
    <div style="text-align:center;">
        <canvas id="linkScreen"></canvas>
    </div>
</div>

css

h2.title{
    display: block;
    margin: 50px auto;
    text-align: center;
}
#linkScreen canvas {
    -ms-content-zooming:none;
    -ms-touch-action:none;
}

js

pageLoad: function(a) {
  null == n.pageLoad && (n.pageLoad = a, window.addEventListener("load",
  function() {
    w.main(n.pageLoad)
  },
  !1));
  return w
},
menu: function(a) {
  "function" == typeof a && (n.menu = a);
  return this
},
run: function(a) {
  "function" == typeof a && (n.runFn = a);
  return this
},
stop: function(a) {
  "function" == typeof a && (n.stop = a);
  return this
},
over: function(a) {
  "function" == typeof a && (n.over = a);
  return this
},
zone: function(a) {
  "function" == typeof a && (n.zone = a);
  return this
},
active: function(a) {
  "function" == typeof a && (n.active = a);
  return this
},
gameFlow: {
  menu: function() {
    null != n.menu && (n.gameFlow = B.menu, w.resetKeys());
    return this
  },
  run: function() {
    null != n.runFn && (n.gameFlow = B.run, w.resetKeys());
    return this
  },
  stop: function() {
    null != n.stop && (n.gameFlow = B.stop, w.resetKeys());
    return this
  },
  over: function() {
    null != n.over && (n.gameFlow = B.over, w.resetKeys());
    return this
  },
  zone: function(a) {
    null != n.zone && (n.gameFlow = B.zone, n.zoneArgs = a, w.resetKeys());
    return this
  },
  active: function(a) {
    null != n.active && (n.gameFlow = B.active, n.activeArgs = a, w.resetKeys());
    return this
  },
  isIn: function(a) {
    return n.gameFlow == B[a]
  },
  base: function() {
    return w
  }
},
keyRepeated: function(a) {
  j.keyDownGo || (j.keyDownGo = !0);
  return j.keys[a]
},
keyPressed: function(a) {
  j.keyPressedGo || (j.keyPressedGo = !0);
  var b = j.pressedKey[a];
  j.pressedKey[a] = !1;
  return b
},
keyReleased: function(a) {
  j.keyUpGo || (j.keyUpGo = !0);
  var b = j.lastKey[a];
  j.lastKey[a] = !1;
  return b
},
setKeyCode: function(a, b) {
  j.keys[a] = !1;
  j.lastKey[a] = !1;
  j.pressedKey[a] = !1;
  j.keyPressCtrl[a] = !0;
  $[a] = b;
  return this
},
resetKeys: function() {
  for (var a in j.keys) j.keys[a] = !1;
  for (a in j.lastKey) j.lastKey[a] = !1;
  for (a in j.pressedKey) j.pressedKey[a] = !1;
  for (a in j.keyPressCtrl) j.keyPressCtrl[a] = !0;
  return this
},
canvas: {
  init: function() {
    D = {
      x: 0,
      y: 0
    };
    d = c = "#000000";
    M = {
      x: 0,
      y: 0
    };
    N = {
      x: 0,
      y: 0
    };
    h = g = 0;
    a = "#FFFFFF";
    b = "#CCCCCC";
    return this.pass()
  },
  initDevice: function() {
    Q = q.getDeviceConfig();
    t = Q.device;
    v = Q.fps;
    z = Q.touch;
    u = Q.zoom;
    return this
  },
  font: function(a) {
    k = a;
    p.font = k;
    return this
  },
  del: function(a) {
    s[a] && (s[a] = null, delete s[a], m[a] = null, delete m[a]);
    return this
  },
  setCurrent: function(a) {
    return _canvas.pass(a)
  },
  screen: {
    setId: function(a) {
      s[a] && (i = a);
      return this
    },
    getId: function() {
      return i
    },
    getWidth: function() {
      return O
    },
    setWidth: function(a) {
      x = a;
      E && (E.width = x, E.style.width = E.width + "px", O = parseInt(E.width));
      return this
    },
    getHeight: function() {
      return R
    },
    setHeight: function(a) {
      l = a;
      E && (E.height = l, E.style.height = E.height + "px", R = parseInt(E.height));
      return this
    },
    getDevice: function() {
      return t
    },
    getFps: function() {
      return v
    },
    setFps: function(a) {
      0 < a && (v = a);
      return this
    },
    getTouch: function() {
      return z
    },
    getZoom: function() {
      return u
    }
  },
  fillStyle: function(a) {
    p.fillStyle = a;
    return this
  },
  fillRect: function(a, b, c, f, d) {
    c = c ? c: 0;
    f = f ? f: 0;
    d ? N = q.getAnchor(a, b, c, f, d) : (N.x = a, N.y = b);
    p.fillRect(N.x, N.y, c, f);
    return this
  },
  fillText: function(a, b, c, f) {
    p.font = f || k;
    p.fillText(a, b, c);
    return this
  },
  clearRect: function(a, b, c, f) {
    p.clearRect(a, b, c, f);
    return this
  },
  clearScreen: function() {
    return this.clearRect(0, 0, O, R)
  },
  fillScreen: function() {
    return this.fillRect(0, 0, O, R)
  },
  strokeStyle: function(a) {
    p.strokeStyle = a;
    return this
  },
  lineWidth: function(a) {
    p.lineWidth = a || 1;
    return this
  },
  strokeRect: function(a, b, c, f, d) {
    d ? M = q.getAnchor(a, b, c, f, d) : (M.x = a, M.y = b);
    p.strokeRect(M.x, M.y, c, f);
    return this
  },
  strokeText: function(a, b, c, f) {
    p.font = f || k;
    p.strokeText(a, b, c);
    return this
  },
  setColor: function(a, b, f) {
    null == f ? (c = a, d = b ? b: a) : d = c = "rgb(" + a + ", " + b + ", " + f + ")";
    return this.fillStyle(c).strokeStyle(d)
  },
  drawRotate: function(a, b, c, f, d, e, i, k, g, h) {
    var l = parseInt(k >> 1),
    x = parseInt(g >> 1),
    j = w.getImage(a),
    a = j.src ? j: m[a],
    e = e - l,
    i = i - x;
    p.save();
    p.translate(e + l, i + x);
    p.rotate(h * Math.PI / 180);
    p.translate( - (e + l), -(i + x));
    p.drawImage(a, b, c, f, d, e, i, k, g);
    p.restore();
    return this
  },
  drawRegion: function(a, b, c, f, d, e, i, k) {
    switch (e) {
    default:
      p.transform(1, 0, 0, 1, i, k);
      break;
    case 5:
      p.transform(0, 1, -1, 0, d + i, k);
      break;
    case 3:
      p.transform( - 1, 0, 0, -1, f + i, d + k);
      break;
    case 6:
      p.transform(0, -1, 1, 0, i, f + k);
      break;
    case 2:
      p.transform( - 1, 0, 0, 1, f + i, k);
      break;
    case 7:
      p.transform(0, -1, -1, 0, d + i, f + k);
      break;
    case 1:
      p.transform(1, 0, 0, -1, i, d + k);
      break;
    case 4:
      p.transform(0, 1, 1, 0, i, k)
    } (!w.getImage(a).cache ? this.drawImage: this.drawCache)(a, b, c, f, d, 0, 0, f, d);
    p.setTransform(1, 0, 0, 1, 0, 0);
    return this
  },
  drawRegionAndZoom: function(a, b, c, f, d, e, i, k, g, h, l) {
    switch (e) {
    default:
      p.transform(1, 0, 0, 1, i, k);
      break;
    case 5:
      p.transform(0, 1, -1, 0, l + i, k);
      break;
    case 3:
      p.transform( - 1, 0, 0, -1, h + i, l + k);
      break;
    case 6:
      p.transform(0, -1, 1, 0, i, h + k);
      break;
    case 2:
      p.transform( - 1, 0, 0, 1, h + i, k);
      break;
    case 7:
      p.transform(0, -1, -1, 0, l + i, h + k);
      break;
    case 1:
      p.transform(1, 0, 0, -1, i, l + k);
      break;
    case 4:
      p.transform(0, 1, 1, 0, i, k)
    } (!w.getImage(a).cache ? this.drawImage: this.drawCache)(a, b, c, f, d, 0, 0, h, l);
    p.setTransform(1, 0, 0, 1, 0, 0);
    return this
  },
  moveTo: function(a, b) {
    p.moveTo(a, b);
    return this
  },
  lineTo: function(a, b) {
    p.lineTo(a, b);
    return this
  },
  stroke: function() {
    p.stroke();
    return this
  },
  fill: function() {
    p.fill();
    return this
  },
  beginPath: function() {
    p.beginPath();
    return this
  },
  closePath: function() {
    p.closePath();
    return this
  },
  arc: function(a, b, c, f, d, i) {
    p.arc(a, b, c, f, d, i);
    return this
  },
  quadraticCurveTo: function(a, b, c, f) {
    p.quadraticCurveTo(a, b, c, f);
    return this
  },
  bezierCurveTo: function(a, b, c, f, d, i) {
    p.bezierCurveTo(a, b, c, f, d, i);
    return this
  },
  measureText: function(a) {
    var b = p.measureText(a),
    c = b.width,
    b = b.height ? b.height: parseInt(p.font);
    return {
      width: "j2me" == this.screen.getDevice() ? p.measureText(a) : c,
      height: b
    }
  },
  translate: function(a, b) {
    p.translate(a, b);
    return this
  },
  drawLine: function(a, b, c, f) {
    return this.beginPath().moveTo(a, b).lineTo(c, f).closePath().stroke()
  },
  drawRect: function(a, b, c, f, d) {
    return this.strokeRect(a, b, c, f, d)
  },
  clip: function() {
    p.clip();
    return this
  },
  save: function() {
    p.save();
    return this
  },
  restore: function() {
    p.restore();
    return this
  },
  rect: function(a, b, c, f) {
    p.rect(a, b, c, f);
    return this
  },
  rotate: function(a) {
    p.rotate(a);
    return this
  },
  setTransform: function(a, b, c, f, d, i) {
    p.setTransform(a, b, c, f, d, i);
    return this
  },
  scale: function(a, b) {
    p.scale(a, b);
    return this
  },
  globalAlpha: function(a) {
    p.globalAlpha = a;
    return this
  },
  getContext: function() {
    return p
  },
  base: function() {
    return w
  }
},
pushImage: function(a, b) {
  if (S) return this;
  for (var c, f = 0,
  d = a.length; f < d; f++) if ((c = a[f]) && !J[c.id]) J[c.id] = !0,
  G.push(a[f]);
  this.loadingEndCallBack(b);
  return this
},
loadImage: function(a, b) {
  if (n.gameFlow != B.loadImage && 0 < a.length) {
    n.loadedImageToGameFlow = n.gameFlow;
    n.gameFlow = B.loadImage;
    G = a;
    P = G.length;
    for (var c = K = 0,
    f; f = G[c]; c++) r[f.id] ? K++:q.setImage(f.id, f.src, f.benchId);
    this.loadingEndCallBack(b)
  }
  return this
},
asyncImage: function(a) {
  for (var b, c = 0,
  f = a.length; c < f; c++) b = a[c] || {},
  H[b.id] || (H[b.id] = b);
  return this
},
verImage: function(a) {
  "" == L && (L = a);
  return this
},
loadingCallBack: function(a) {
  "function" === typeof a && (q.loadingCallBack = a);
  return this
},
loadingEndCallBack: function(a) {
  "function" === typeof a && (q.loadingEndCallBack = a);
  return this
},
addImage: function(a, b) {
  a && (b && !r[a]) && (r[a] = b);
  return this
},
getImage: function(a) {
  return r[a] ? r[a] : {
    src: null
  }
},
delImage: function(a, b) {
  r[a] && (r[a] = null, delete r[a], b && (r[a] = {
    id: a,
    loaded: !0,
    cache: !0,
    refreshed: !0
  }));
  return this
},
getAsyncImage: function(a) {
  return H[a] ? H[a] : {
    src: null
  }
},
clearAsyncImageCache: function() {
  try {
    var a, b, c;
    for (c in r) if (a = r[c]) if (b = H[c]) b.inited = !1,
    this.delImage(c).canvas.del(c)
  } catch(f) {}
  return this
},

源码icon-default.png?t=N7T8https://www.ormcc.com/

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vcruntime140.dll找不到的解决方法-vcruntime140.dll日常修复方法分享

大家好&#xff01;今天&#xff0c;非常荣幸地向大家分享一个与我们日常生活息息相关的话题——电脑计算机突然出现vcruntime140.dll丢失如何修复。作为一名学生 &#xff0c;我们每天都在使用电脑&#xff0c;而这个问题可能会时不时地困扰我们。那么&#xff0c;面对这个问…

用友U8-OA getSessionList.jsp信息泄露 复现

文章目录 用友U8-OA getSessionList.jsp信息泄露 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现4.漏洞进一步利用 用友U8-OA getSessionList.jsp信息泄露 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从…

js高级(代理,浅拷贝深拷贝,节流和防抖,闭包.hasOwnProperty)

1.代理 1.问题:如何定义一个对象,不会被修改,也不能被遍历? 通过Object.defineProperty(对象,属性名,option)定义默认属性 无法被修改无法被删除无法被遍历 注意:Object.Property传入的值与返回的值是同一个地址 可以配置一下属性 value:初始值writable:true (true允许被修改…

sylar高性能服务器-日志(P1-P6)代码解析+调试分析

文章目录 一、整体结构二、LogEvent三、LogLevel四、LogFormatter五、LogAppender六、Logger七、调试7.1调试步骤7.2尝试使用gdb调试 八、附录8.1log.h8.2log.cc8.3test.cc8.4Cmakelists.txt8.4Cmakelists.txt ​ 本篇文章主要针对一下sylar高性能服务器项目视频p1-p6的代码分析…

大华智慧园区管理平台任意密码读取漏洞 复现

文章目录 大华智慧园区管理平台任意密码读取漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 大华智慧园区管理平台任意密码读取漏洞 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&…

shell定时清理日志文件、及crontab说明

服务器日志文件一般是每天一个或多个文件&#xff0c;如果日志文件不清理&#xff0c;时间久了就会将磁盘空间占满&#xff0c;从而影响系统的正常运行。 1、分析磁盘空间占用情况 1.1、df 命令 df 命令以磁盘分区为单位查看文件系统中磁盘空间的使用情况。 语法&#xff1a;…

python基础教程:类class

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 class 定义一个类 class 定义一个类, 后面的类别首字母推荐以 大写 的形式定义&#xff0c;比如Calculator. 冒号不能缺 class可以先定义自己的属性&#xff0c…

Java 面向对象的三大特性

面向对象编程有三大特征: 封装、继承和多态。 1.封装 1&#xff09;封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起数据被保护在内部.程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。 2&#xff09;封装的理解和好处 隐…

Windows安装Node.js

1、Node.js介绍 ①、Node.js简介 Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;它允许开发者使用JavaScript语言来构建高性能的网络应用程序和服务器端应用。Node.js的核心特点包括&#xff1a; 1. 事件驱动: Node.js采用了事件驱动的编程模型&#xff0c;通…

美股游戏股分析:微软收购游戏公司动视暴雪将迎来一个重要里程碑

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;微软(MSFT)收购动视暴雪(ATVI)的交易在做出重大让步后目前已经获得了欧盟和美国的监管批准。 &#xff08;2&#xff09;英国英国竞争和市场管理局(CMA)最初对微软收购动视暴雪…

SpringCloud Alibaba - 分布式事务理论(CAP 定理 和 BASE 理论)

目录 一、分布式事务理论 1.1、分布式事务问题 1.2、什么是分布式事务 1.3、解决分布式事务思路 1.3.1、CAP 定理 a&#xff09;Consistency&#xff08;一致性&#xff09; b&#xff09;Availability&#xff08;可用性&#xff09; c&#xff09;Partition tolerance…

反向生成:根据mybatis生成的Class实体类对象反向生成建表语句

微信公众号&#xff1a;大数据高性能计算 针对数据库不小心被删除的情况&#xff0c;以及需要逆向查看某个开源项目数据库表的情况时&#xff0c;往往需要逆向工程。 在这里我们假设 id 字段为主键。在生成 SQL 建表语句时&#xff0c;我们添加了 PRIMARY KEY (id) 来定义 i…

温控仪工作原理

温控仪的工作原理&#xff0c;是通过温度探头或热电偶反馈的电信号&#xff0c;温控仪将得到的电信号转化成温度值&#xff0c;根据设定的温度值&#xff0c;控制加热器的接通和断开来达到控制温度范围的&#xff1a; 1、温度探头或热电偶受温度变化时&#xff0c;会产生微弱的…

CDN技术与企业网站建设:解决疑问与明智选择

介绍CDN技术与疑问 在数字时代&#xff0c;网站是企业线上存在的门户&#xff0c;因此网站的性能和安全至关重要。为了解决一些与网站建设和性能相关的疑问&#xff0c;让我们首先来了解CDN技术。 什么是CDN技术&#xff1f; CDN&#xff0c;即内容分发网络&#xff08;Conte…

Langchain-Chatchat项目:1.2-Baichuan2项目整体介绍

由百川智能推出的新一代开源大语言模型&#xff0c;采用2.6万亿Tokens的高质量语料训练&#xff0c;在多个权威的中文、英文和多语言的通用、领域benchmark上取得同尺寸最佳的效果&#xff0c;发布包含有7B、13B的Base和经过PPO训练的Chat版本&#xff0c;并提供了Chat版本的4b…

【重拾C语言】六、批量数据组织(四)线性表—栈和队列

目录 前言 六、批量数据组织——数组 6.1~3 数组基础知识 6.4 线性表——分类与检索 6.5~7 数组初值&#xff1b;字符串、字符数组、字符串数组&#xff1b;类型定义 typedef 6.8 线性表—栈和队列 6.8.1 栈&#xff08;Stack&#xff09; 全局变量 isEmpty() isFull…

TCP原理特性详解

文章目录 可靠传输机制1.确认应答2.超时重传2.连接管理1.三次握手2.四次挥手 传输效率1.滑动窗口2.流量控制3.拥塞控制4.延时应答5.捎带应答 面向字节流粘包问题 TCP异常情况 可靠传输机制 可靠性&#xff1a;即发送方知道数据是发送成功了&#xff0c;还是失败了。 1.确认应答…

Github-使用2FA验证:使用python实现TOTP验证,python实现github的2FA验证

github新增了2FA验证了&#xff0c; 1、扫描二维码&#xff0c;获取对应字符串 或点击setup key ,获取字符串 2、使用python来生成校验码 安装&#xff1a; pip install pytop import pyotp key XKDRR4WH3LY2WXPH print(pyotp.TOTP(key).now()) 3、将生成的6个验证码&…

第一章 概述 | 计算机网络(谢希仁 第八版)

文章目录 第一章 概述重要内容计算机网络的一些相关知识互联网概述因特网的标准化工作互联网的组成计算机网络的类别计算机网络的性能指标计算机网络的体系结构——-分层次的体系结构 第一章 概述 重要内容 互联网边缘部分和核心部分的作用&#xff0c;以及分组交换的概念 计…

学习记忆——宫殿篇——记忆宫殿——记忆桩——身体——记忆星座

我们在与人攀谈的时候&#xff0c;可以从以下几个维度入手&#xff0c;如&#xff1a;年龄、星座、爱好、工作等。 两点记忆的技巧以及一点知识延伸 两点记忆技巧&#xff1a; 1、第一次见面时要创建回忆线索 2、脑中回忆交流画面&#xff0c;加深线索 一点知识延伸&#xff1…