制作五子棋小游戏单机/在线联网对弈手把手精致设计含游戏服务器源码2

本文主要是介绍制作五子棋小游戏单机/在线联网对弈手把手精致设计含游戏服务器源码2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接上期。传送门:

http://liuxinyumo.cn/index.php?s=/Home/Index/content/id/3.html

 

上期我们有介绍IGraphElement.js到底该怎么定义元素,接下来继续设计那个草率的界面。

继续使用代码编辑器打开IGraphElement.js,删除掉模板元素,或者留有几个元素,在该模板上进行修改。

如下代码:

var IGraphElement = [{ID:"GobangLogo",Version:100.00,Src:new Array("GobangLogo.png"),Class:function(){//初始化函数 this.Constructor = function(){}this.Draw = function(ctx){var Img = this.Src[0];ctx.drawImage(Img,this.Left-Img.width/2,this.Top-Img.height/2,Img.width,Img.height);return true;}this.Over = function(){var Img = this.Src[0];var x = this.Left > 0 ? this.Left : 0-this.Left;var y = this.Top > 0 ? this.Top : 0-this.Top;if(x <= Img.width/2 && y <= Img.height/2)return true;		return false;}}},{ID:"BeginGameButton",Version:100.00,Src:new Array("BeginGame.png"),Class:function(){//初始化函数 this.Constructor = function(){}this.Draw = function(ctx){var Img = this.Src[0];ctx.drawImage(Img,this.Left-Img.width/2,this.Top-Img.height/2,Img.width,Img.height);return true;}this.Over = function(){var Img = this.Src[0];var x = this.Left > 0 ? this.Left : 0-this.Left;var y = this.Top > 0 ? this.Top : 0-this.Top;if(x <= Img.width/2 && y <= Img.height/2)return true;		return false;}}}
];

按照我之前的讲解,这些代码并不是很难理解,大致都是在做一件事,分别讲我们之前的两个图片,以中心为控制坐标点定义出来。

定义之后,我们打开我们之前所做的HTML文件,我在之前的HTML文件引用的两个script的下面有注释,另创建Game.js文件单独存放游戏部分代码,也就现在创建Game.js,并在该处引入到HTML文件,我们这里将HTML文件保存为Gobang.html。

<script type="text/javascript" src="Game.js"></script>
<script type="text/javascript">//用于移植的控制代码
</script>

使用代码编辑器打开Game.js,为了开发标准化防止变量泄露,我们创建一个js的自执行函数,并对外暴露一个Gobang的游戏类名。在Game.js文件中写入:

var Gobang;
(function(){Gobang = function(Container){//Gobang游戏类的构造函数}Gobang.fn = Gobang.prototype = {}
})();

在构造函数中提供1个参数,用于传递存放Canvas画布的容器句柄,IAnimation.js插件并不是需要我们显式提供<canvas></canvas>元素,而是提供容器,自行填充Canvas,填充的大小会自动充满整个容器内部,这样做的一大好处是大大方便了项目移植。

这里注意我们在编辑Gobang的类时,所有的成员变量要定义成 this.xxx,所有的成员函数应定义成 this.xxx= function(){},成员函数的定义也可以在prototype中使用形如JSON的定义方式,但变量数据不能在该处定义。这里我们约定所有函数使用首字母大写命名,对私有成员的标注我们在命名前增加一个下划线区分。

       接下来我们在Gobang构造器中初始化IAnimation,写入如下代码:

this._Animation = new IAnimation(Container);	//Container是参数

我们回到Game.html页面中提供一个Div容器,并使用CSS控制其大小,然后在用于移植的控制代码段中实例化Gobang类,随后我们打开浏览器查阅下执行效果。


给一下完整的Gobang.html代码内容:

<!DOCTYPE html>
<html>
<head><title>基于HTML5的在线小游戏制作 Power By Liuxinyumo.cn</title><style type="text/css">div{border: 1px solid red;width: 750px;height: 600px;}</style>
</head>
<body><div id="container"></div>
</body>
<script type="text/javascript" src="IGraphElement.js"></script>
<script type="text/javascript" src="IAnimation.js"></script>
<script type="text/javascript" src="Game.js"></script>
<script type="text/javascript">//用于移植的控制代码var Container = document.getElementById("container");var game = new Gobang(Container);
</script>
</html>

那么现在有了游戏视窗,我们将我们第一个场景,欢迎页面布置上。由于该景布置归属于游戏自身,因此我们打开Game.js在该文件中进行定义。

在使用自定义元素前我们需要先对外部资源进行选择性的异步加载,这里是一个扩充数组,将我们所有用到的自定义元素ID进行列举,告诉引擎哪些是本次作业需要加载的资源项。通用的写法为:

var t = this;function CallBack(a,b){if(a == b){t._DownloadFinished();}}this._Animation.DownloadIMGing = CallBack;		this._Animation.DownloadIMG(["GobangLogo","BeginGameButton"]);

我们需要将该代码段单独放到一个 Init()的函数里,同时对Gobang创建一个_DownloadFinished()函数。

_DownloadFinished()函数一旦之行到意味着我们想要加载的外部资源已经准备就绪,因此我们就可以调用自定义资源库中的元素了,我们在初始化阶段实际上是可以将游戏界面、欢迎界面一并装在,游戏界面我们随后设计,因此在代码结构上留好位置。

接下来开始布局欢迎界面,单独定义创建函数_CreateWelcomeScene(),引擎中我们使用Page来区分场景,因此首先利用引擎创建一个WelcomePage,并保存到成员函数中,将该名称在构造器中声明,以便日后查找。使用this._Animation.CreatePage()即可创建一个场景,返回值赋值给我们所定义的this._WelcomePage变量。接下来我们就可以利用该变量向场景中添加自定义的元素了。

利用this._WelcomePage.AddElement("GobangLogo");即可创建Logo元素,但元素默认Visible属性均是false,所以先对其进行位置布局,再将其设置为可视。同理,我们对BeginGame也做同样的处理。

保存后我们运行下效果:


还算满意,给下Game.js到目前为止的完整代码。

var Gobang;
(function(){Gobang = function(Container){//Gobang游戏类的构造函数this._Animation = new IAnimation(Container);//成员变量声明this._WelcomePage = null;this._Init();}Gobang.fn = Gobang.prototype = {_Init:function(){var t = this;function CallBack(a,b){if(a == b){t._DownloadFinished();}}this._Animation.DownloadIMGing = CallBack;this._Animation.DownloadIMG(["GobangLogo","BeginGameButton"]);},_DownloadFinished:function(){//此处外部资源已经全部加载完毕可以创建游戏场景。this._CreateWelcomeScene();//这里留有部分用于创建游戏界面},_CreateWelcomeScene:function(){//创建游戏欢迎页面this._WelcomePage = this._Animation.CreatePage();//在场景中布局var Logo = this._WelcomePage.AddElement("GobangLogo");Logo.Left(this._Animation.Width/2);Logo.Top(this._Animation.Height/2-100);Logo.Visible(true);var BeginGameButton = this._WelcomePage.AddElement("BeginGameButton");BeginGameButton.Left(this._Animation.Width/2);BeginGameButton.Top(this._Animation.Height/2+20);BeginGameButton.Visible(true);}}
})();

篇幅也已经很长了,本篇先结束。







这篇关于制作五子棋小游戏单机/在线联网对弈手把手精致设计含游戏服务器源码2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/xueyebaobao/article/details/79206421
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/400802

相关文章

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然