用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 相关文章推荐
javascript 防止刷新,后退,关闭
Aug 07 Javascript
特殊情况下如何获取span里面的值
May 20 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
Nov 28 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
详解webpack 热更新优化
Sep 13 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
Jan 21 Javascript
深入浅出vue图片路径的实现
Sep 04 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 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读取RSS feed的代码
2008/08/01 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
Django数据库操作的实例(增删改查)
2017/09/04 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python中class的定义及使用教程
2019/09/18 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
Python实现画图软件功能方法详解
2020/07/28 Python
详解pandas赋值失败问题解决
2020/11/29 Python
模具专业推荐信
2013/10/30 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
人大代表选举标语
2014/10/07 职场文书
单位租房协议书样本
2014/10/30 职场文书