分享几个原生javascript面向对象设计小游戏
一、序言
不知大家是不是和我一样,当初都有个梦想。学编程,就是想开发游戏。结果进入大学学习之后,才知道搞的是数据库应用程序开发!在此,本人就分享下业余时间做的几个小游戏吧!本打算想用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面向对象设计小游戏的更多相关文章
- JavaScript面向对象编程小游戏---贪吃蛇
1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. 2 这个demo是采用了 ...
- 用原生javascript模拟经典FC游戏公路争霸
#用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...
- 分享10个原生JavaScript技巧
首先在这里要非常感谢无私分享作品的网友们,这些代码片段主要由网友们平时分享的作品代码里面和经常去逛网站然后查看源文件收集到的.把平时网站上常用的一些实用功能代码片段通通收集起来,方便网友们学习使用,利 ...
- JQuery&原生js ——实现剪刀石头布小游戏
前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write L ...
- HTML+CSS+JavaScript实现2048小游戏
相信很多人都玩过2048小游戏,规则易懂.操作简单,我曾经也“痴迷”于它,不到2048不罢休,最高成绩合成了4096,现在正好拿它来练练手. 我对于2048的实现,除了使用了现有2048小游戏的配色, ...
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- Javascript贪食蛇小游戏
试玩:http://hovertree.com/game/9/ 贪吃蛇是一种风靡全球的小游戏,就是一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,越吃越长.只要蛇头碰到屏幕四周,或者碰到自己的身子, ...
- 一个简单用原生js实现的小游戏----FlappyBird
这是一个特别简单的用原生js实现的一个小鸟游戏,比较简单,适合新手练习 这是html结构 <!DOCTYPE html><html lang="en">&l ...
- 原生js做h5小游戏之打砖块
前言 首先,先说明一下做这个系列的目的:其实主要源于博主希望熟练使用 canvas 的相关 api ,同时对小游戏的实现逻辑比较感兴趣,所以希望通过这一系列的小游戏来提升自身编程能力:关于 es6 语 ...
随机推荐
- gtest 1.7编译错误:std:tr1:tuple模板参数过多的解决方案
在gtest/gtest.h文件中添加如下代码 #define _VARIADIC_MAX 10
- HTML5 history API实践
一.history API知识点总结 在HTML4中,我们已经可以使用window.history对象来控制历史记录的跳转,可以使用的方法包括: history.forward();//在历史记录中前 ...
- C++ 引用
本文主要记录了C++中的引用特性,总结了一下代码示例和错误. 简单的引用 引用是C++的特性,指针是C语言的特性.上面代码结果如下: 20 20 100 20 true 引用和被引用的对象是占用同一个 ...
- EF架构~引入规约(Specification)模式,让程序扩展性更强
回到目录 规约(Specification)模式:第一次看到这东西是在microsoft NLayer项目中,它是微软对DDD的解说,就像petshop告诉了我们MVC如何使用一样,这个规约模式最重要 ...
- vs如何在C++中调用Lua
最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...
- fildder 使用方法汇总
作为网络开发人员,怎能不使用一些抓包工具呢?fildder是个不错的选择. 不过,一般情况下,我们往往使用浏览器自带的控制台的[网络]选项就可以达到查看数据的通信情况了,当然,一些浏览器不容易捕捉的事 ...
- 180分钟的python学习之旅
最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...
- 关于移动开发的一些想法和认识--Android和iOS
微信公众账号很久没更新了,发一点自己最近的想法和内容. 之前和朋友做了一个项目,现在在跟一些风投,大公司里面的几家在谈合作和投资的事宜,从这个过程中也了解到了一些信息. 关于移动平台的应用开发与游戏开 ...
- 【WP开发】实现“摇一摇”功能
尽管我的微信是每八个月登录一次,但我相信各位玩得比我多.微信有一个“摇一摇”功能,这个功能其实是利用了加速度传感器来实现的,这个传感器,我估计再低端的手机都会有的,这是严重基本的传感器. 重力加速度既 ...
- JS 关于(function( window, undefined ) {})(window)写法的理解
JS 关于(function( window, undefined ) {})(window)写法的理解 [网络整理] (function( window, undefined ) {})(windo ...