教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

Java网上五子棋游戏设计

来源:网络收集 时间:2026-09-24
导读: Java网上五子棋游戏设计 Java网上五子棋游戏设计 傅伟,吴希忠 来源: 一 课程选题背景 在修WEB高级开发与应用技术课程之前,我对于java语言了解甚少。所以想通过这次课程的机会,深入系统的学习一下这门语言,同时,学习关系web开发的基础知识。所以我先从语

Java网上五子棋游戏设计

Java网上五子棋游戏设计

傅伟,吴希忠

来源:

一 课程选题背景

在修WEB高级开发与应用技术课程之前,我对于java语言了解甚少。所以想通过这次课程的机会,深入系统的学习一下这门语言,同时,学习关系web开发的基础知识。所以我先从语言入手,用java编写了这个网上五子棋游戏,作为我们的课程论文。

二 目标

Java的广泛流行是与它所编写的程序可以在网络上运行且可以跨平台。事实上,支持Java的浏览器内置Java虚拟机,使得Java的小程序能够在网络上完全地传送和运行。这样使得程序人员即使不具备有关的网络知识,也能编写出高质量的网络通信程序。“网上五子棋游戏”便是其最好的例子。

本程序是一个基于网络协议为TCP/IP的网上对弈游戏,采用服务器-客户端的网络架构模式,允许网络上的多台机器(可能是两台机器)同时运行,一台用作服务器,始终处理网络上要求它进行服务的请求。如果有机器请求与它进行连接,用作服务器的机器接受之后就可以进行相互之间的通信。

通过本程序,我们初步熟悉并掌握java语言的基本知识,掌握服务器-客户端的网络架构模式,为以后学习高级web开发课程做准备。

三 总体构架

我们通过使用套接字SOCKET来实现游戏之间的通讯,它是基于点对点的通讯,开始让服务器初始化建立服务器套接字SOCKET,基于某个端口PORT,然后打开客户端套接字SOCKET,连接到服务器端的地址ADDRESS和端口PORT,在这之间可能发生异常EXCEPTION。

“网络五子棋”是由服务器端和客户端组成的。游戏分为黑方与白方,只要其中一方的棋子形成“五子连珠”之势,即可获胜。

Java网上五子棋游戏设计

网络五子棋游戏服务器端主要有三个类:OmokServer类、Omok_ Thread类(线程类)和BManager类(消息广播者)。它的主要功能是连接客户端,使多个客户端连接在一起,最终实现联网。

图表 1 服务器端

Java网上五子棋游戏设计

网络五子棋游戏客户端主要是实现五子棋的界面和功能的程序,我们可以通过服务器端连接多个客户端实现最终游戏的目的。

图表2 客户端

四 技术要点

一.创建待机室

该游戏创建了待机室,供其他未处于下棋状态的人们使用,也可以创建另一个房间,供下棋的两个人使用。

我们可以通过标记号码来区分待机室与下棋室。即用0标记待机室,其他房间使用0以上的自然数来标记。事实上,我们并不时真正创建了房间,而只是将房间号码赋予了客户机而已。以此,我们可以实现拥有相同号码的客户机彼此间可以相互通信。

例如,客户机向服务器提出进入某个房间的请求后,服务器必须确认所请求的房间是否允许它进入,然后,发送相应的请求给客户机。对于消息,我们可以采用“[消息类型]+内容”的形式。假若客户机想进入20号房间,那么,它需要向服务器发送消息“[ROOM]20”.如果第20号房间允许进入,那么,服务器在进行了某些处理后会向客户机传送消息“[ROOM]20”。相反,若20号房间禁止入内,则服务器将向客户机发送“[NULL]”消息。

Java网上五子棋游戏设计

客户机请求:[ROOM]20

服务器的应答:[ROOM]20,或[NULL]

又例如,假设两个玩家同时进入某个房间,要进行对弈。首先,一名玩家点击开始按钮,向服务器发送“[STAERT]”消息,另一名玩家也向服务器发送了“[STAERT]”消息,然后服务器将会认为这两名玩家要进行对弈,它会随时向玩家指派棋子,并分别向玩家发送“[COLOR]BLACK”与“[CLOR]WHITE”消息。

客户机1的请求:“[STAERT]”

客户机2的请求:“[STAERT]”

服务器的应答:[COLOR]BLACK”与“[CLOR]WHITE

二.服务器端

网络五子棋游戏服务器端主要有三个类:OmokServer类、Omok_ Thread类(线程类)和BManager类(消息广播者)。

OmokServer类在受到客户机的连接请求后,将创建新的套接字,并使其与客户机连接,然后启动线程,并将线程添加至BManager对象中。

Private BManager bMan=new BManager(); //消息广播者对象 ...........

While(true){

Socket socket=server.accept(); //获取套接字

Omok_Thread ot=new Omok_Thread(socket); //创建线程

ot.start(); //启动线程

bMan.add(ot); //添加线程

...........

}

Java网上五子棋游戏设计

Omok_Thread对象不仅可以获取套接字、输入输出流,而且它还提供了有关客户机的消息。例如客户机的姓名、房间号、游戏开始与否等。这是因为我们需要确定消息的来源及主要在某个房间传播的消息。并且,消息广播者也需要参照线程对象的房间号,以便将消息发送至某个房间中。

BManager类继承了Vector类,它的元素为Omok_ Thread线程对象,这样才能自由地参照Omok_ Threadd对象的房间号及玩家的名字等。为了实现向指定的房间发送消息,需要比较Bmanager各元素的房间号和给定的房间号,若两者相同,则向此房间发送消息。

SendToRoom()方法用于向指定的房间(roomnum)发送消息(msg),代码如下。

void sendToRoom(int roomNum,String msg){

for(int i=0;i<size();i++){

if(roomNum==第i个线程的房间号) //向第i个线程连接的客户机发送消息 }

}

}

SendToOthers()方法用于向同房间的其他用户发送消息(msg)这个方法与SendToRoom()一样,将使用for循环检查元素(线程)的房间号。但是,并不会与ot连接的客户机发送消息。

void sendToOthers(Omok_Thread ot,String msg){

for(int i=0;i<size();i++){

if(第i个线程的房间号==ot的房间号&&第i个线程!=ot){

}

}

}

sendToRoom()与sendToOthers()方法的不足之处在于,房间越多,它们就会增重

Java网上五子棋游戏设计

服务器的负担,消息的传播将变得十分缓慢。

三. 客户端

首先要实现五子棋盘(OmokBoard类)。五子棋盘继承了画布类,它内嵌于框架窗口中,拥有15*15(255)个方格。为了响应用户的下棋动作,五子棋盘必须能够响应鼠标事件。并且它必须拥有输出流,用以向对手传递棋手的下棋信息。程序中也有多种方法用来实现绘图操作。然而,程序中最重要的部分时如何决定胜负。横,竖或者对角线方向上拥有五颗同样的棋子时,即为胜利。

请看图表3。假设五个黑子从左向右分别标记为1、2、3、4、5,那么我们可以先放置1、2、3、4棋子,如果黑方最后一颗棋子5号棋放在如图所示的位置,则黑方在横向上五子连珠,黑方胜。这个过程如何用程序实现呢?在放5号棋子后,首先程序要计算出他左边连在一起的黑色棋子的个数。其左边已放有2号与1号棋子,且这两颗棋子连在一起,所以5号棋子左边相连的黑色棋子有两颗。然后,再计算5号棋子右边连在一起的黑色棋子的个数。如图,5号棋子右边有3号。4号两颗棋子。因此,5号棋子左边、右边及5号棋子合起来共5颗黑色棋子,黑方获胜。当然在竖直方向与对角线方向上也采取相同的方法进行检查。

图表 3 …… 此处隐藏:3266字,全部文档内容请下载后查看。喜欢就下载吧 ……

Java网上五子棋游戏设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/111366.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)