Google首页的pacman
很有意思,可pacman对我似乎太遥远,不由想起了7年前没有电脑的时候,唯一的智能电器就是文曲星,而且下载游戏超级麻烦,当时一个比较著名的游戏:电脑蛙蛙GvBasic开发的精灵岛
挺好玩,我就一段段地把代码输进去了,那时候真是很佩服能写那么长代码的大虾:),虽然Basic,Goto看得晕头转向....
这两天受google影响,就把精灵岛移植到浏览器下了。
演示:
p 键:开始/暂停游戏
方向键控制方向
注释源码
精灵岛演示(非IE)
截图:
对应文曲星下:
代码:
难度主要不在算法,而在于如何用面向对象的设计来改造Basic,我采用YUI3的OOP架构,主要就是利用Attribute的apo以及事件支持
调用:
<script type="text/javascript" src="http://yui.yahooapis.com/3.1.0/build/yui/yui-min.js"></script>
<script type="text/javascript">
YUI({
modules: {
EidolonGame: {
fullpath: 'eidolon.js',
requires: ['event', 'base', 'node']
}
}
}).use("node", "event", "base","EidolonGame",
function(Y) {
//game canvas中渲染游戏
var g=Y.EidolonGame("game");
});
结构:
YUI.add('EidolonGame', function (Y) {
/*
缩放倍数
*/
var ZOOM = 3;
/*
底层图形引擎
*/
var GraphicUtils = {
initCanvas: function (id) {
},
unDraw: function (XX, YY, l) {
},
drawEidolon: function (XX, YY) {
},
drawDevil: function (XX, YY) {
}
..........
}
/*
地图字典
*/
var MapConfig = (function () {
return {
/**
插入关卡
@map:关
**/
insertMap: function (map) {
},
/**
@gen{Function} 对应关标志处理函数
**/
insertGens: function (gen) {
Y.mix(mapGen, gen);
},
/**
选择制定关卡
**/
drawMap: function (level) {
}
};
})();
/**
生物,恶魔,精灵公共父类
**/
function Creature(config) {
}
Creature.NAME = "Creature";
Creature.ATTRS = {
/*
位置属性
*/
pos: {
},
/*
所在游戏
*/
game: {},
/*
当前移动方位
*/
direction: {
}
};
Y.extend(Creature, Y.Base, {
/*
渲染生物
*/
draw: function () {
},
/*
搽除
*/
unDraw: function () {
}
});
/*
精灵
*/
function Eidolon(config) {
}
Y.extend(Eidolon, Creature, {
initializer: function (cfg) {
/*
位置属性改变处理
*/
this.after("posChange", this._posChange, this);
},
/*
根据当前方移动
*/
move: function () {
}
});
/*
恶魔
*/
function Devil(config) {
}
Y.extend(Devil, Creature, {
initializer: function (cfg) {
/*
位置属性改变处理函数
*/
this.after("posChange", this._posChange, this);
},
/*
撞墙或者到了思考点,就思考下
*/
think: function () {
},
/*
AI 移动
*/
move: function () {
}
});
/*
心
*/
function Heart(config) {
}
Y.extend(Heart, Y.Base, {
/*
随机位置显示
*/
show: function () {
}
});
/*
游戏引擎
*/
function Game(config) {
}
Game.NAME = "Game";
Game.ATTRS = {
//地图
map: {
},
//当前关
level: {
},
//当前精灵
eidolon: {
},
//当前恶魔
devil: {
},
//精灵生命
life: {
},
//最多生命数
max_life: {
},
//收集心数
eats: {
},
//过关收集心上限
max_eat: {
},
//是否暂停
waitFlag: {
},
//心产生器
heart: {
}
}
};
Y.extend(Game, Y.Base, {
/*
游戏缩放
*/
zoomAdjust: function (z) {
},
initializer: function () {
/*
对应属性变化处理
*/
this.after("waitFlagChange", this._waitFlagChange, this);
this.after("lifeChange", this._lifeChange, this);
this.after("eatsChange", this._eatsChange, this);
this.on("eatsChange", this._onEatsChange, this);
this.after("levelChange", this._levelChange, this);
this.on("levelChange", this._onLevelChange, this);
this.on("lifeChange", this._onLifeChange, this);
/*
键盘操作初始化
*/
Y.one(document).on("keydown", function (e) {
},
this);
this.start();
},
/*
开始游戏
*/
start: function () {
},
/*
死了?继续游戏
*/
startLife: function () {
},
/*
恶魔回调,吃精灵
*/
die: function () {
//全部死光,才reset eats
},
/*
精灵回调,收集心
*/
eat: function () {
},
/*
模拟时钟
*/
tick: function () {
}
});
Y.EidolonGame = function (id, cfg) {
if (GraphicUtils.initCanvas(id)) {
return new Game(cfg);
} else {
alert("Browser too old,do not use ie.");
}
};
});
扩展性考虑:
1.可以设置各种游戏属性:
可以设置 zoom,可以设置 level,可以传递 config 来生成 game 实例
Y.EidolonGame(canvasId,{
//设置 Game 属性
//查看 Game.ATTRS
//可以设置 life 生命数,max_eat 过关条件
//也可以 对实例 set(attr,value)设置,与 yui3 attribute 保持一致
})
2.可以定制地图:
g=Y.EidolonGame(cavasId,cfg)
// 为地图配置
map =g.get("map")
//map 包含操作:
/**
插入关卡
@map:关
**/
insertMap
/**
@gen{Function} 对应关标志处理函数
**/
insertGens
问题:
1.暂不支持 IE,有空试试 excanvas
2.关卡暂时只有15个,很容易扩展,查看 MapConfig 对象即可。
3.直接做一个GvBasic解释器不知可行否,很有难度,渲染屏幕到 canvas,basic的文件操作映射到 localStorage
- 大小: 42.5 KB
- 大小: 22.6 KB
分享到:
相关推荐
YUI框架API为开发者提供了丰富的功能和强大的工具,使得前端开发变得更加高效。 1. **模块化设计** YUI的核心理念之一就是模块化。每个功能或组件都被封装为独立的模块,如Event(事件)、Animation(动画)、Node...
在"YUI-ajax框架开发文档"中,我们可以深入探讨YUI如何通过其Ajax组件实现异步数据通信。 YUI中的Ajax框架主要由`YAHOO.util.Connect`和`YAHOO.widget.DataSource`两个关键部分组成。`YAHOO.util.Connect`是YUI的...
在“yui3-master.zip”中,我们可以看到不同模块的源代码文件,如“build”目录下的“node”, “event”, “dom”等,这些都是YUI3的核心模块。 2. **事件系统** YUI3的事件系统是其强大功能之一,它允许开发者...
YUI3沙盒下的多模块交互实践是指利用YUI3框架所提供的沙盒模式实现多个模块之间的交互。YUI3是Yahoo公司开发的一款前端JavaScript框架,旨在帮助开发者创建高度可扩展和模块化的网络应用程序。在YUI3中,沙盒...
YUI3 引入了粒度更细的模块管理方式,通过异步 HTTP 请求加载模块、然后执行回调来加载和使用模块。现场有很多人提出疑问,大家无非关心的是“效率”二字。个人以为在现阶段,这种方式有一点激进,否能为广大用户所...
**YUI3 Dialog组件详解** YUI3是Yahoo!推出的一款强大的JavaScript库,它提供了丰富的UI组件和工具,用于构建高性能、跨平台的Web应用程序。Dialog组件是YUI3中的一个重要部分,它允许开发者创建可交互的弹出窗口,...
这篇博文“YUI3 中tree的两种实现”探讨了如何在YUI3中创建和管理树形结构。 1. **YUI3 TreeView组件** YUI3 TreeView组件是YUI3核心库的一部分,它允许开发者创建交互式的树结构。这个组件支持节点的添加、删除、...
在实际使用YUI 3.17.2时,开发者可以通过`yui3-3.17.2`这个压缩包文件获取所有必要的资源。这个压缩包中包含了库的源码、示例、文档和其他辅助工具。开发者可以按照项目需求,选择合适的模块和组件进行集成。 在...
3. **动画效果**:YUI的动画模块可以实现各种复杂的动画效果,包括平滑的元素移动、改变透明度、旋转等。这些动画可以通过配置参数进行定制,如速度、缓动函数和动画结束时的回调函数。 4. **CSS样式管理**:YUI ...
从YUI2到YUI3看前端的演变
5. **Ajax交互(Ajax Interactions)**:YUI-EXT集成了YUI的Ajax功能,允许在不刷新页面的情况下与服务器进行异步通信。这使得用户界面能够实时更新,提高了用户体验。 6. **工具提示(Tooltips)**:YUI-EXT还提供...
1. **模块系统**:YUI3引入了模块化设计,允许开发者按需加载组件,降低页面的初始化时间。模块可以通过`YUI.use()`方法来加载,实现了代码的异步加载和依赖管理。 2. **事件系统**:YUI的事件处理机制强大且灵活,...
本教程将深入探讨Jquery、YUI和ExtJs这三大JavaScript框架在表单验证和提示功能方面的应用。 **jQuery** jQuery是一款轻量级、高性能的JavaScript库,以其简洁的API和跨浏览器兼容性闻名。在表单验证方面,jQuery...
Yahoo! UI Library (YUI) 是一个开放源代码的 JavaScript 函数库,为了能建立一个高互动的网页,它采用了AJAX, DHTML 和 DOM 等程式码技术。它也包含了许多 CSS 资源。
例如,`yui-min.js`就是YUI3的最小核心模块,它包含了YUI的基本框架,你可以通过添加额外的模块来扩展功能。 **加载器** YUI3的加载器(Loader)是其模块化系统的关键部分,它可以动态地按需加载所需的模块。只需...
1. **模块系统**:YUI3引入了CommonJS风格的模块系统,允许开发者通过`YUI.use()`方法加载所需模块,实现按需加载,减少页面初始化时的加载量。 2. **事件处理**:YUI3提供了强大的事件系统,支持DOM事件、自定义...
UI Library (YUI) 3.0版本的一个实例集合,旨在帮助开发者理解和应用这一强大的JavaScript和CSS框架。YUI是一个开源的前端开发工具集,用于构建高性能、可扩展的Web应用程序。这个压缩包很可能是包含了一系列的代码...
总结,YUI 3.9.0 r2是一个强大的前端开发框架,它提供了一整套工具和组件,以应对复杂的界面设计挑战,并通过优化资源加载和管理,提升了Web应用的性能和用户体验。无论是初学者还是经验丰富的开发者,都能从中找到...
JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools