手机基于WEB服务器的网络象棋游戏源代码(含服务器端) 联系客服

发布时间 : 星期二 文章手机基于WEB服务器的网络象棋游戏源代码(含服务器端)更新完毕开始阅读17a0ae630b1c59eef8c7b488

}

PORT=0; }

public void reset() Color = \; start = false; }

{

public void start() { start = true; }

public void setStart(boolean start) { this.start = start; }

public String getColor() { return Color; }

public void setColor(String color) { Color = color; }

Queue.java package com.lzw; /**

“先进先出”(LIFO)的存储结构。数据元素只能从队尾进入,从队首取出。在队列中, 数据元素可以任意增减,但数据元素的次序不会改变。每当有数据元素从队列中被取出, 后面的数据元素依次向前移动一位。所以,任何时候从队列中读到的都是队首的数据。 根据这些特点,对队列定义了以下六种操作: push(x) 向队列插入一个值为x的元素; pop() 从队列中取出一个元素;

front() 从队列中读一个元素,但队列保持不变; empty() 判断队列是否为空,空则返回真; clear() 清空队列;

search(x) 查找距队首最近的元素的位置,若不存在,返回-1 */

public class Queue extends java.util.Vector { public class EmptyQueueException extends java.lang.RuntimeException { public EmptyQueueException() { super(); } } public Queue() { super(); } public synchronized void push(Object x) { super.addElement(x); } public synchronized Object pop() { /* 队列若为空,引发EmptyQueueException异常*/ if (this.empty()) throw new EmptyQueueException(); Object x = super.elementAt(0);

} super.removeElementAt(0); return x; }

public synchronized Object front() { if (this.empty()) throw new EmptyQueueException(); return super.elementAt(0); }

public boolean empty() { return this.isEmpty(); }

public synchronized void clear() { super.removeAllElements(); }

public int search(Object x) { return super.indexOf(x); }

Server.java package com.lzw;

import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Hashtable;

import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

public class Server extends HttpServlet { private Hashtable players = new Hashtable(); private int NUM = 2; private int DESKNUM = 10; // 定义桌子数量 private Desk[] desks = new Desk[DESKNUM]; private int counter = 1; // 玩家计数器 private Player player; PrintWriter out; /* * 初始化对players(Hashtable)、desks(所有桌子)初始化 */ public void init(ServletConfig config) throws ServletException { // 初始化 super.init(config); players.clear(); for (int i = 0; i < DESKNUM; i++) { desks[i] = new Desk();

}

}

desks[i].setID(i);

/*

* 接受信息主方法接受各种信息,然后调用相应的处理方法 */

public void doGet(HttpServletRequest request, HttpServletResponse response) // 接受信息 throws ServletException, IOException { out = response.getWriter(); String message = request.getParameter(\); String port = request.getParameter(\); port = port.trim(); if (!message.startsWith(\)) System.out.println(message); if (message.startsWith(\)) {// 登陆信息 System.out.println(\); denglu(request); return; } if (!port.equals(\)) player = (Player) players.get(request.getRemoteAddr() + \ + port); else player = (Player) players.get(request.getRemoteAddr() + \ + request.getRemotePort()); if(player==null)return; if (message.startsWith(\)) {// 落座信息 // System.out.println(\ luozuo(message, player); return; } else if (message.startsWith(\)) {// 开始信息move: tryStart(player); return; } else if (message.startsWith(\)) {// 走棋信息 Desk desk = player.getDesk(); desk.moveChess(message); } else if (message.startsWith(\)) { if (!player.data.empty()) out.println((String) player.data.pop()); else out.println(\); return; } else if (message.startsWith(\)) {// 退出信息 tryExit(players, player, request); return; } else if (message.startsWith(\)) {// 退出信息 tryExit(players, player, request); return; } else { System.out.println(\); } }

public void sendMessage(Player p, String str) { // 发送信息,等待用户读取 p.data.push(new String(str));

}

public void updateClientsDesk(int deskid) { // 更新所有客户桌面 for (Enumeration en = players.elements(); en.hasMoreElements();) { Player player = (Player) en.nextElement(); if (player != null) updateDesk(player, deskid); } }

public void updateDesk(Player isa, int deskid) { // 更新单个桌面 String message = \ + deskid; String str = \; for (int i = 0; i < desks[deskid].getPlayersCounter(); i++) { if (i == 0) { if (desks[deskid].isEmpty(i)) str = \; else str = \; } else { if (desks[deskid].isEmpty(i)) str = str + \; else str = str + \; } } message = message + \ + str; sendMessage(isa, message); }

public void sendDeskList(Player player) { // 获得桌面列表 String message = \ + DESKNUM; for (int i = 0; i < DESKNUM; i++) { String str = \; for (int j = 0; j < desks[i].getPlayersCounter(); j++) { if (j == 0) { if (desks[i].isEmpty(j)) str = \; else str = \; } else { if (desks[i].isEmpty(j)) str = str + \; else str = str + \; } } message = message + \ + str; } sendMessage(player, message); }

public void denglu(HttpServletRequest request) { // 处理登陆信息 Player player = new Player(request.getRemoteAddr(), request .getRemotePort());