用js做一个小游戏平台 (一)


Posted in Javascript onDecember 29, 2009

记得上班写代码时,我们技术总监总说是要先“设计”,那就先“设计”吧。
ps:我是新手大家多多见谅。

.网页游戏区域。就是说需要知道游戏在网页上的区域,如下:
在网页中插入一个div,设定宽高和id,
<div id="GameFrame" style="width:400;height:400"></div>
然后再js中得到该对象,
var _GameFrame = document.getElementById("GameFrame");

.键盘参数对象:在游戏中会经常获取键盘的值,设定一个键值对应的对象:
var _KeyParameters = { KeyEnter: 13, KeySpace: 32, KeyLeft: 37, KeyUp: 38, KeyRight: 39, KeyDown: 40, KeyESC: 27 };

.标签控制对象:用于控制、产生html标签,辅助生成对应样式的"控件":

var _HtmlControl = 
{ 
//清空网页游戏区域 
_ClearArea: function() { 
}, 
//创建一个div 
newDiv: function() { 
var div = document.createElement("div"); 
return div; 
}, 
//创建一个指定宽高的按钮样式标签 
newButton: function(w, h) { 
var div = this.newDiv(); 
div.style.width = w + "px"; 
div.style.height = h + "px"; 
div.select = function() { 
//被选中时的变化 
}; 
div.unselect = function() { 
//没选中时的样子 
}; 
return div; 
} 
//继续... 
};

.动画类:用于播放一些游戏跳转动画:

var Animation = function(endFn) { 
//播放动画 
this._play = function() { 

//具体怎么放没有想好。 
}; 
//播放结束事件 
this._palyEnd = endFn || function() { 
alert("动画播放结束"); 
}; 
};

.游戏类:要有一个游戏名,
a.控制:1.逻辑控制、2.键盘控制
b.主界面:1.标题、2.游戏区域、3.状态显示区、4.控制区
c.动画:1.开场动画、2.过关动画、3.通关动画
d:事件:1.开始、2.结束。

代码大致如下:
代码

var Game = function(name, logicalFn, keyFn) { 
//游戏名 
this._name = name || "未命名"; 
this._LControl = logicalFn || function() { 
//简单游戏逻辑控制 
}; 
this._KControl = keyFn || function(event) { 
//简单键盘逻辑 
}; 
//开场动画 
this._AnmLoad = new Animation(null); 
//过关动画 
this._AnmNext = new Animation(null); 
//通关动画 
this._AnmEnd = new Animation(null); 
};

.游戏列表:就是游戏类的对象列表。

.游戏选择器:可以是一个游戏类对象。
var _GameChoose = new Game("选择器", null, null);
.页面控制:用于注册页面事件,接受用户响应,并传递给游戏选择器;
代码

var _PageControl = { 
//8.a:线程控制 
_ThreadControl: function() { 
_GameChoose._LControl(); 
}, 
//8.b:键盘控制 
_KeyControl: function(event) { 
_GameChoose._KControl(event); 
}, 
//8.cc.事件注册 
_StartRegedit: function() { 
//把this._ThreadControl添加到循环线程 
//把this._KeyControl注册到document的键盘单击 
} 
}

最后,到了这一步,貌似就“设计”完了?暂且不管这是不是设计,姑且说是一种边敲代码边设计的设计吧。不过貌似真的就可行了。当然它现在是不能运行的。我们先把总体代码贴出来看一下:
整体代码

<script type="text/javascript"language="javascript"> 
/*** 
* 1.网页游戏区域: 
* 2.键盘参数类 
* 3.标签类:用于控制、产生html标签 
* 4.动画类:播放动画,播放结束事件 
* 5.游戏类:游戏名 
* a.控制:1.逻辑控制、2.键盘控制 
* b.主界面:1.标题、2.游戏区域、3.状态显示区、4.控制区 
* c.动画:1.开场动画、2.过关动画、3.通关动画 
* d:事件:1.开始、2.结束 
* 6.游戏列表 
* 7.游戏选择器 
* 8.页面控制:a.线程控制、b.键盘控制、c.事件注册 
***/ window.onload = function() { 
//---------------------------------------------------- 
//1.网页游戏区域: 
var _GameFrame = document.getElementById("GameFrame"); 
//---------------------------------------------------- 
//2.键盘参数类:可以根据需要把键值添加进来 
var _KeyParameters = { KeyEnter: 13, KeySpace: 32, KeyLeft: 37, KeyUp: 38, KeyRight: 39, KeyDown: 40, KeyESC: 27 }; 
//---------------------------------------------------- 
//3.标签类:用于控制、产生html标签 
var _HtmlControl = 
{ 
//清空网页游戏区域 
_ClearArea: function() { 
}, 
//创建一个div 
newDiv: function() { 
var div = document.createElement("div"); 
return div; 
}, 
//创建一个指定宽高的按钮样式标签 
newButton: function(w, h) { 
var div = this.newDiv(); 
div.style.width = w + "px"; 
div.style.height = h + "px"; 
div.select = function() { 
//被选中时的变化 
}; 
div.unselect = function() { 
//没选中时的样子 
}; 
return div; 
} 
//继续... 
}; 
//---------------------------------------------------- 
//4.动画类:播放动画,播放结束事件 
var Animation = function(endFn) { 
//播放动画 
this._play = function() { 
}; 
//播放结束事件 
this._palyEnd = endFn || function() { 
alert("动画播放结束"); 
}; 
}; 
//---------------------------------------------------- 
//5.游戏类: 
var Game = function(name, logicalFn, keyFn, startFn, endFn) { 
//游戏名 
this._name = name || "未命名"; 
//5.a.1:逻辑控制 
this._LControl = logicalFn || function() { 
//简单游戏逻辑控制 
}; 
//5.a.2:键盘控制 
this._KControl = keyFn || function(event) { 
//简单键盘逻辑 
}; 
//5.b.1:标题区域 
this._FrameTitle; 
//5.b.2:游戏区域 
this._FrameMain; 
//5.b.3:状态显示区 
this._FrameState; 
//5.b.4:控制区 
this._FrameControl; 
//5.c.1:开场动画 
this._AnmLoad = new Animation(null); 
//5.c.2:过关动画 
this._AnmNext = new Animation(null); 
//5.c.3:通关动画 
this._AnmEnd = new Animation(null); 
//5.d.1:开始 
this._Start = startFn || function() { 
alert("游戏开始"); 
}; 
//5.d.2:结束 
this._End = endFn || function() { 
alert("游戏结束"); 
}; 
}; 
//---------------------------------------------------- 
//创建游戏 
var game1 = new Game("贪吃蛇", null, null); 
var game2 = new Game("俄罗斯方块", null, null); 
var game3 = new Game("推箱子", null, null); 
var game4 = new Game("赛车", null, null); 
var game5 = new Game("坦克大战", null, null); 
//---------------------------------------------------- 
//6.游戏列表 
var _GameList = [game1, game2, game3, game4, game5]; 
//---------------------------------------------------- 
//7.游戏选择器 
var _GameChoose = new Game("选择器", null, null); 
//---------------------------------------------------- 
//8.页面控制: 
var _PageControl = { 
//8.a:线程控制 
_ThreadControl: function() { 
_GameChoose._LControl(); 
}, 
//8.b:键盘控制 
_KeyControl: function(event) { 
_GameChoose._KControl(event); 
}, 
//8.cc.事件注册 
_StartRegedit: function() { 
//把this._ThreadControl添加到循环线程 
//把this._KeyControl注册到document的键盘单击 
} 
} 
//---------------------------------------------------- 
} 
</script> 
<div id="GameFrame" style="width:400;height:400"> 
</div>

就先这样吧,明天再让它运行一下,顺便设计一下第一个游戏:贪吃蛇。
用同事的一句话喊一下口号:不做权限设计,做全国最好的贪吃蛇,汗一个...
Javascript 相关文章推荐
一个无限级XML绑定跨框架菜单(For IE)
Jan 27 Javascript
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
jquery checkbox,radio是否选中的判断代码
Mar 20 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
Jul 26 Javascript
JQuery 选择器、过滤器介绍
Feb 14 Javascript
jquery 插件学习(五)
Aug 06 Javascript
jQuery中bind()方法用法实例
Jan 19 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
Sep 01 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 Javascript
js 学习笔记(三)
Dec 29 #Javascript
js DOM模型操作
Dec 28 #Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 #Javascript
javascript iframe编程相关代码
Dec 28 #Javascript
通过javascript设置css属性的代码
Dec 28 #Javascript
JavaScript的public、private和privileged模式
Dec 28 #Javascript
Javascript 面向对象特性
Dec 28 #Javascript
You might like
基于PHP array数组的教程详解
2013/06/05 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
js 判断 enter 事件
2009/02/12 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python实现在windows下操作word的方法
2015/04/28 Python
详解Python中find()方法的使用
2015/05/18 Python
python保存字符串到文件的方法
2015/07/01 Python
Python线程同步的实现代码
2018/10/03 Python
详解python播放音频的三种方法
2019/09/23 Python
python 画函数曲线示例
2019/12/04 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
优秀求职信范文分享
2013/12/19 职场文书
制药工程专业毕业生推荐信
2013/12/24 职场文书
清洁工表扬信
2014/01/08 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
机关党员公开承诺书
2014/08/30 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
《刷子李》教学反思
2016/02/20 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android