一、序言

  不知大家是不是和我一样,当初都有个梦想。学编程,就是想开发游戏。结果进入大学学习之后,才知道搞的是数据库应用程序开发!在此,本人就分享下业余时间做的几个小游戏吧!本打算想用winform或wpf做,可又考虑到运行需要.net环境,所以选择了js,为此特意去学了html5中canvas绘图!先上预览吧:(浏览器需支持html5,英文状态下输入法)

  贪吃蛇          坦克        打字游戏

二、原理简单说明-需理解js基于面向对象编程(context:绘图上下文,定时器刷新重绘)

1、贪吃蛇:

  绘制地图(GameController控制器类):(现在明白了,当时学hello world的时候,老师让我们控制台输出三角形,长方形等的用意了。没想到这里就用上了)

drawMap: function() {
for (var i = 0; i < 41; i++) {
for (var j = 0; j < 41; j++) {
this.context.lineWidth = 1;
this.context.strokeStyle = "#222";
this.context.strokeRect(i * 20, j * 20, 20, 20);
}
}
},

  Parent类:Snake,Food的基类,包含他们的共同属性;继承主要使用call()/apply()这两个方法,其实就是改变Parent函数当中this的作用域,动态添加属性。

  Snake类:把贪吃蛇的每一节看成一个Snake实例,保存在GameController实例的snakes数组中,便于管理。

  贪吃蛇移动实现(GameController类refresh方法里面):从最后一个开始遍历数组snakes,第m节的坐标等于第m-1节的坐标,第一节移动;

for (var m = this.snakes.length - 1; m >= 0; m--) {
if (m === 0) {
this.checkSnakeHitFood(this.snakes[m].run());
} else {
this.snakes[m].x = this.snakes[m - 1].x;
this.snakes[m].y = this.snakes[m - 1].y;
this.snakes[m].direction = this.snakes[m - 1].direction;
this.checkSnakeHitFood(this.snakes[m].draw());
}
}

  贪吃蛇吃到食物:碰撞检测,遍历判断每一节与食物的x,y坐标。

2、坦克:(和贪吃蛇差不多,都是绘图,刷新重绘)

  GameController:游戏控制类,主要类,游戏碰撞,定时重绘等等。  

  Bullet:子弹类。

  Bomb:炸弹类。

  Tank:Hero,Enemy的基类,包含他们的共同属性;继承主要使用call()/apply()这两个方法。

  Hero:英雄类,(绘图,移动根据四个方向分别改变x,y坐标)

  Enemy:敌人类

3、打字游戏:(原理也差不多,只是逻辑稍复杂一点,这里只能做一个简单介绍了)

  字母产生(Math.random() * (上限 - 下限+ 1) + 下限,产生{上限,下限}之间的一个随机数):刚好英文a-z对应的ascii码在{64,91}之间,

使用Math.random() * (64 - 91 + 1) + 91得到一个随机ascii码值,再利用String.fromCharCode(ascii码)(js爱好者,这个方法不知道的有没有?)获取对应的字母;

  子弹跟踪(如下图):通过A,B在水平,垂直方向的距离计算出夹角,再根据速度和夹角分别计算A在x,y轴移动的坐标。(三角函数计算)

三:结束语

  更具体的说明,表达不出来了,这大概就是只可意会不可言传吧!感兴趣的可以私下交流,共同进步!源码下载:html5games

分享几个原生javascript面向对象设计小游戏的更多相关文章

  1. JavaScript面向对象编程小游戏---贪吃蛇

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. ​ 2 这个demo是采用了 ...

  2. 用原生javascript模拟经典FC游戏公路争霸

    #用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...

  3. 分享10个原生JavaScript技巧

    首先在这里要非常感谢无私分享作品的网友们,这些代码片段主要由网友们平时分享的作品代码里面和经常去逛网站然后查看源文件收集到的.把平时网站上常用的一些实用功能代码片段通通收集起来,方便网友们学习使用,利 ...

  4. JQuery&原生js ——实现剪刀石头布小游戏

    前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write L ...

  5. HTML+CSS+JavaScript实现2048小游戏

    相信很多人都玩过2048小游戏,规则易懂.操作简单,我曾经也“痴迷”于它,不到2048不罢休,最高成绩合成了4096,现在正好拿它来练练手. 我对于2048的实现,除了使用了现有2048小游戏的配色, ...

  6. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  7. Javascript贪食蛇小游戏

    试玩:http://hovertree.com/game/9/ 贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长.只要蛇头碰到屏幕四周,或者碰到自己的身子, ...

  8. 一个简单用原生js实现的小游戏----FlappyBird

    这是一个特别简单的用原生js实现的一个小鸟游戏,比较简单,适合新手练习 这是html结构 <!DOCTYPE html><html lang="en">&l ...

  9. 原生js做h5小游戏之打砖块

    前言 首先,先说明一下做这个系列的目的:其实主要源于博主希望熟练使用 canvas 的相关 api ,同时对小游戏的实现逻辑比较感兴趣,所以希望通过这一系列的小游戏来提升自身编程能力:关于 es6 语 ...

随机推荐

  1. [翻译].NET随机数

    原文链接:http://csharpindepth.com/Articles/Chapter12/Random.aspx   随机数 当你在Stack Overflow上看到看到某个问题标题当中有“随 ...

  2. jeechart

    个人网站地址:http://blog.niubua.com jeechart(1)——普通的分页查询 :http://blog.niubua.com/2014/09/18/jeechart(1)-普通 ...

  3. web系统架构设计中需要知道的点(前端篇)

    上周没写东西,这周写点互联网系统开发中需要了解的技术点,每个点都可以发散出去,连接更多的知识点,打算做个逐步细化的记录. 一个应用的整个生命周期中(生,老,病,死)都需要有一个整体规划. 前期 评估需 ...

  4. Java程序员的日常 —— 响应式导航Demo

    这两天想要做响应式的页面,于是本着重复造轮子的想法,模仿Bootstrap官网,精简了一个响应式导航的Demo. 效果 代码 <!DOCTYPE html> <html> &l ...

  5. MyBatis学习总结(三)——优化MyBatis配置文件中的配置

    一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: 1 <?xml version=" ...

  6. 关于页面查询多数据查询问题(foreach)

    最近纠结的一个问题,就是页面综合查询总报错,之前用过传参用list传就没问题,但现在用map总是报错,缓释直接贴图吧,希望对遇到问题的朋友有帮助页面传来参数,之前是 这样写的,直接将拿来的数据封装成一 ...

  7. 在Ubuntu搭建.NET Core环境

    Ubuntu16.04配置.net core环境   Ubuntu 16.04 desktop下载地址:http://www.ubuntu.com/desktop 本次是用vmware安装该系统.   ...

  8. Nokia Lumia通过电脑来升级Windows Phone 8.1

    现在基本上所有lumia都推送了WP 8.1了,不过,有些朋友说在更新过程中常常断线,导致要重新下载.不知道是不是我的人品比较正能量,我从预览版升级,到正式版升级,都没有出现断网现象,每次都能顺利更新 ...

  9. hibernate(五)核心开发接口与对象的三种状态

    本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...

  10. javaweb -- 获取请求IP(附实现源码)

    实现步骤如下: (1)新建一个java web工程 (2)新建servers包,新建类GetRequestIp,用来处理获取请求IP,GetRequestIp类完整代码如下: package serv ...