jj斗地主官网下载经常与服务端开始怎么一回事?

1314人阅读
Java(41)
这是本人把一个三人斗地主
改成四人的
河南南阳地区的玩法
下载本游戏代码
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
import ds.*;
public class Server extends JFrame implements ActionListener,Runnable{
static DsMap&Socket,User& dsMap=new DsMap&Socket,User&();
static Game game[][]=new Game[20][4];
public static void main(String[] args) {
new Server();
public Server(){
for(int i=0;i&20;i++){
for(int j=0;j&4;j++){
game[i][j]=new Game();
jp=new JPanel();
jta=new JTextArea();
jsp=new JScrollPane(jta);
jb=new JButton(&启动服务器&);
jb.addActionListener(this);
jp.add(jb);
this.add(jp,&North&);
this.add(jsp);
this.setTitle(&服务器&);
this.setSize(323, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb){
ss=new ServerSocket(5555);
jta.append(&服务器启动成功&+&\r\n&);
Thread t=new Thread(this);
t.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
public void run() {
// TODO Auto-generated method stub
while(true){
Socket s=ss.accept();
jta.append(&存在客户连接&+&\r\n&);
ServerThread st=new ServerThread(s);
Thread t=new Thread(st);
t.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
DealThread
import ds.*;
import java.util.*;
import java.io.*;
public class DealThread implements Runnable{
LinkedList&Poke& llPoke=new LinkedList&Poke&();
PrintStream ps[]=new PrintStream[4];
public void run() {
// TODO Auto-generated method stub
for(int i=0;i&13;i++){
for(int j=0;j&4;j++){
Poke poke=new Poke(i,j);
llPoke.push(poke);
Collections.shuffle(llPoke);
//获得socket
for(int i=0;i&4;i++){
ps[i] = new PrintStream(
Server.game[ServerThread.currUser.getDesk()-1][i].getS()
.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Poke flagPoke=new Poke(0,0);
String str=&底牌&+&拆&;
for(int i=0;i&4;i++){
Poke p=llPoke.removeLast();
if(p.equals(flagPoke)){
flagPoke=new Poke(0,flagPoke.getPokeColor()+1);
System.out.println(flagPoke +&
flagPokeeeeee1&);
str+=p+&拆&;
str+=&底牌&;
//记录 控制牌发给谁了
int flag = -1;
for(int i=0;i&4;i++){
ps[i].println(str);
for(int i=0;i&12;i++){
for(int j=0;j&4;j++){
Poke p = llPoke.removeFirst();
if(p.equals(flagPoke)){
ps[j].println(&发牌&+&拆&+p+&拆&+&发牌&);
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
for(int i=0;i&4;i++){
ps[i].println(&叫地主&+&拆&+(flag+1)+&拆&+&叫地主&);
DsMap&K ,V&
import java.util.*;
public class DsMap&K ,V& extends HashMap&K ,V&
//通过value值删除key对
public void removeByValue(Object value)
for (Object key : keySet())
if (get(key).equals(value)
&& get(key).hashCode() == value.hashCode())
remove(key);
// 获取所有value组成的Set集合
public Set&V& valueSet()
Set&V& result = new HashSet&V&();
// 遍历所有key组成的集合
for (K key : keySet())
// 将每个key对应的value添加到result集合中
result.add(get(key));
// 根据value查找key。
public K getKeyByValue(V val)
// 遍历所有key组成的集合
for (K key : keySet())
// 如果指定key对应的value与被搜索的value相同
// 则返回对应的key
if (get(key).equals(val)
&& get(key).hashCode() == val.hashCode())
// 重写HashMap的put方法,该方法不允许value重复
public V put(K key,V value)
// 遍历所有value组成的集合
for (V val : valueSet() )
// 如果指定value与试图放入集合的value相同
// 则抛出一个RuntimeException异常
if (val.equals(value) &&
val.hashCode() == value.hashCode())
throw new RuntimeException
(&DsMap实例中不允许有重复value!&);
return super.put(key , value);
public boolean containsValue(Object obj)
for (V val : valueSet() )
if (val.hashCode() == obj.hashCode())
ServerThread
import java.net.*;
import java.io.*;
import ds.*;
public class ServerThread implements Runnable{
static User currU
boolean tuiChu=
public ServerThread(Socket s){
currUser =new User();
public synchronized void run() {
// TODO Auto-generated method stub
BufferedReader br=
PrintStream ps=
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
ps=new PrintStream(s.getOutputStream());
String info=
while(tuiChu){
while((info=br.readLine())==null);
if(info.startsWith(&登陆&)&&info.endsWith(&登陆&)){
String arr[]=info.split(&拆&);
String userName=arr[1];
if(!Server.dsMap.containsValue(new User(userName))){
currUser.setUserName(userName);
ps.println(&登陆成功&);
for(Socket ss:Server.dsMap.keySet()){
ps=new PrintStream(ss.getOutputStream());
ps.println(&广播&+&拆&+userName+&拆&+&广播&);
for(User uu:Server.dsMap.valueSet()){
ps=new PrintStream(s.getOutputStream());
ps.println(&所有&+&拆&+uu.getUserName()+&拆&+uu.getDesk()+&拆&+uu.getSite()+&拆&+&所有&);
Server.dsMap.put(s, currUser);
ps.println(&姓名重复&);
}else if(info.startsWith(&坐下&)&&info.endsWith(&坐下&)){
String arr[]=info.split(&拆&);
int desk=Integer.parseInt(arr[2]);
int site=Integer.parseInt(arr[3]);
//这直接和客户端连接,所以直接用currUser,而不用dsMap
currUser.setDesk(desk);
currUser.setSite(site);
//添加game
Server.game[desk-1][site-1]=new Game(arr[1],s);
for(Socket ss:Server.dsMap.keySet()){
if(ss!=s){
ps=new PrintStream(ss.getOutputStream());
ps.println(info);
//转发其他准备的
for(int i=0;i&4;i++){
if(Server.game[desk-1][i].isReady()&&i!=(site-1)){
ps=new PrintStream(s.getOutputStream());
ps.println(&准备& + &拆&
+ Server.game[desk - 1][i].getUserName()
+ &拆& + &准备&);
}else if(info.startsWith(&准备&)&&info.endsWith(&准备&)){
String arr[]=info.split(&拆&);
String userName=arr[1];
int desk=Integer.parseInt(arr[2]);
int site=Integer.parseInt(arr[3]);
Server.game[desk-1][site-1].setReady(true);
for(int i=0;i&4;i++){
//表示该位置上有人了,应该转发给他
if(Server.game[desk-1][i].getS() != null){
Socket ss=Server.game[desk-1][i].getS();
ps=new PrintStream(ss.getOutputStream());
ps.println(info);
//是否都是准备
boolean allReady=
for(int i=0;i&4;i++){
if(!Server.game[desk-1][i].isReady()){
if(allReady){
//广播开始
for(int i=0;i&4;i++){
Socket ss=Server.game[desk-1][i].getS();
ps=new PrintStream(ss.getOutputStream());
ps.println(&开始& + &开始&);
//启动发牌线程
DealThread dt=new DealThread();
Thread t=new Thread(dt);
t.start();
}else if(info.startsWith(&游戏开始&)&&info.endsWith(&游戏开始&)){
String arr[]=info.split(&拆&);
String usrName=arr[1];
int site=Integer.parseInt(arr[2]);
for (int i = 0; i & 4; i++) {
Socket ss = Server.game[currUser.getDesk()-1][i]
ps = new PrintStream(ss.getOutputStream());
ps.println(info);
}else if(info.startsWith(&重新发牌&)&&info.endsWith(&重新发牌&)){
//广播开始
for(int i=0;i&4;i++){
Socket ss=Server.game[currUser.getDesk()-1][i].getS();
ps=new PrintStream(ss.getOutputStream());
ps.println(&开始& + &开始&);
//启动发牌线程
//new DealThread(Server.game[currUser.getDesk() - 1]).start();
DealThread dt=new DealThread();
Thread t=new Thread(dt);
t.start();
}else if(info.startsWith(&不叫&)&&info.endsWith(&不叫&)){
String arr[]=info.split(&拆&);
String usrName=arr[1];
int site=Integer.parseInt(arr[2]);
if(site+1==5){
for (int i = 0; i & 4; i++) {
Socket ss = Server.game[currUser.getDesk()-1][i]
ps = new PrintStream(ss.getOutputStream());
ps.println(&不叫&+&拆&+site+&拆&+&不叫&);
} else if (info.startsWith(&出牌&) && info.endsWith(&出牌&)
|| (info.startsWith(&不出&) && info.endsWith(&不出&))
|| (info.startsWith(&最大&) && info.endsWith(&最大&))) {
for (int i = 0; i & 4; i++){
Socket ss = Server.game[currUser.getDesk()-1][i]
//向其他人转发
//if(i != (currUser.getSite() - 1)){
if(ss!=s){
ps =new PrintStream (ss.getOutputStream());
ps.println(info);
}else if((info.startsWith(&游戏结束&)&& info.endsWith(&游戏结束&))){
int deskNum = currUser.getDesk();
for (int i = 0; i & 4; i++){
//向所有人通知游戲結束的消息,包括自己
ps =new PrintStream (
Server.game[deskNum - 1][i].getS().getOutputStream());
ps.println(info);
//同时修改对应的准备消息
Server.game[deskNum - 1][i].setReady(false);
}else if((info.startsWith(&退出&)&& info.endsWith(&退出&))){
String[] arr = info.split(&拆&);
int deskNum = Integer.parseInt(arr[1]);
int site = Integer.parseInt(arr[2]);
Server.game[deskNum - 1][site - 1] = new Game();
//同时修改同桌人的状态
for (int i= 0;i &4 ;i++ ){
Server.game[deskNum - 1][i].setReady(false);
Server.game[deskNum - 1][i].setStart(false);
//修改用户在服务器端的消息
User uu = Server.dsMap.get(s);
uu.setUserName(&&);
uu.setDesk(0);
uu.setSite(0);
//同时转发给其他人
for (Socket
ss : Server.dsMap.keySet()){
//不向自己转发
if(ss != s){
ps = new PrintStream(ss.getOutputStream());
ps.println(info);
//退出线程
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
以下放在ds包下
import java.net.*;
public class Game {
String userN
private boolean isS
boolean isR
public Game(){}
public Game(String userName,Socket s){
this.userName=userN
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
public Socket getS() {
public void setS(Socket s) {
public boolean isReady() {
return isR
public void setReady(boolean isReady) {
this.isReady = isR
public boolean isStart() {
return isS
public void setStart(boolean isStart) {
this.isStart = isS
public class Poke {
public Poke(){}
public Poke(int pokeNum,int pokeColor){
this.pokeColor=pokeC
this.pokeNum=pokeN
public int getPokeNum() {
return pokeN
public void setPokeNum(int pokeNum) {
this.pokeNum = pokeN
public int getPokeColor() {
return pokeC
public void setPokeColor(int pokeColor) {
this.pokeColor = pokeC
public String toString(){
return pokeNum+&分&+pokeC
public boolean equals(Object obj)
if(obj == this)
if(obj != null && obj.getClass() == Poke.class)
Poke poke = (Poke)
if(poke.getPokeNum() == pokeNum &&
poke.getPokeColor() == pokeColor)
public int compareTo(Object obj)
Poke p = (Poke)
if(pokeNum == p.getPokeNum() && pokeNum == 13)
return pokeColor - p.getPokeColor();
return pokeNum -
p.getPokeNum() ;
public class User {
private String userN
public User(){}
public User(String userName){
this.userName=userN
public int getDesk() {
public void setDesk(int desk) {
this.desk =
public int getSite() {
public void setSite(int site) {
this.site =
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
public boolean equals(Object obj){
if(obj == this)
if(obj instanceof User){
User user = (User)
return userName.equals(user.userName);
public int hashCode(){
return userName.hashCode();
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:179547次
积分:2654
积分:2654
排名:第8225名
原创:100篇
评论:56条
(1)(2)(1)(2)(4)(3)(2)(1)(5)(1)(2)(1)(3)(1)(4)(1)(2)(3)(3)(4)(3)(12)(2)(1)(1)(1)(1)(9)(2)(5)(4)(8)(7)玩QQ游戏欢乐斗地主时怎么老是提示与服务器断开连接_百度知道
玩QQ游戏欢乐斗地主时怎么老是提示与服务器断开连接
玩QQ游戏欢乐斗地主时怎么老是提示与服务器断开连接?
提问者采纳
人多同时在线 或者你网速不好
来自团队:
其他类似问题
为您推荐:
qq游戏欢乐斗地主的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 jj斗地主官网下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信