资源简介

基于socket的联网五子棋游戏源码,好东西!!!

资源截图

代码片段和文件信息

package com.j2medev.chapter5;

import java.util.ArrayList;
import java.util.List;

public class GoBangRoom implements Room {
    
    private List players = new ArrayList();
    
    public GoBangRoom() {
    }
    //最多容纳两个用户
    public int maxPlayer() {
        return 2;
    }
    
    public boolean canJoin() {
        return players.size()<2;
    }
    
    //添加一个用户,如果达到两个用户则开始游戏
    public synchronized void addPlayer(Session s) {
        players.add(s);
        s.setSessionId(players.size());
        s.setRoom(this);
        s.start();
        
        if(players.size()== maxPlayer()){
            //开始游戏,最先加入的用户先走
            startGame(1);
        }
    }
    
    private void clean(){
        for(int i = 0;iyers.size();i++){
            try{
                ((Session)players.get(i)).join();
            }catch(InterruptedException ex){
                ex.printStackTrace();
            }
        }
        for(int i = 0;iyers.size();i++){
            ((Session)players.get(i)).closeSession();
        }
        //等session结束后,清除房间
        players.clear();
        System.out.println(“the room is clear“);
    }
    
    public void startGame(int id){
        //休眠1s
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        //让客户端起动
        for(int i = 0;iyers.size();i++){
            ((Session)players.get(i)).startGame(id);
        }
    }
    //代理客户端发送过来的数据
    public synchronized void delegate(int data) {
        int type = (data&0xFF000000)>>24;
        int id = (data&0x00FF0000)>>16;
        for(int i=0;iyers.size();i++){
            Session s = (Session)players.get(i);
            if(type == Protocol.QUIT || type == Protocol.WIN){
                try {
                    //发送给所有用户
                    Thread.sleep(500);
                    s.send(data);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }

            }else if(type == Protocol.STEP){
                if(s.getSessionId() != id){
                    //对手走了一步,发给另一个用户
                    s.send(data);
                }
            }
        }
        //准备清理房间了
        if(type == Protocol.QUIT || type == Protocol.WIN){
            new Thread(){
                public void run(){
                    clean();
                }
            }.start();
        }
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        510  2010-08-29 10:01  Protocol.java

     文件        265  2010-08-29 10:01  Room.java

     文件       3014  2010-08-29 10:01  Session.java

     文件       2618  2010-08-29 10:01  GoBangRoom.java

     文件       1939  2010-08-29 10:01  GoBangServer.java

----------- ---------  ---------- -----  ----

                 8346                    5


评论

共有 条评论