骰子小游戏,网格编程和多线程的应用,报很多错求帮助,又空指针又链接出错的!!!!

问题描述

骰子小游戏,网格编程和多线程的应用,报很多错求帮助,又空指针又链接出错的!!!!

package com.zhouqy.client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

import com.zhqy.MsgObj.MsgObj;

public class Client {

private ObjectOutputStream oos ;

private ObjectInputStream ois ;

private static Socket s;

public static void main(String[] args) {
// TODO Auto-generated method stub
    Client c=new Client();
    c.startClient("127.0.0.1",8888);

}   

public void startClient(String ip,int port){
    try {
        s=new Socket(ip,port);
        ois=new ObjectInputStream(s.getInputStream());
        oos=new ObjectOutputStream(s.getOutputStream());
        Send a=new Send();
        Thread t=new Thread(a);
        Receive b=new Receive();
        Thread t1=new Thread(b);
        t.start();
        t1.start();
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public void close(){
    try {

        ois.close();
        oos.close();
        s.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}
class Send implements Runnable{

private ObjectOutputStream oos;

private ObjectInputStream ois;;

private Socket s = null;

public void run(){
try {

MsgObj msg1=new MsgObj("挑战者");
msg1.throwDice();
msg1.showDice();
msg1.judgeDice();
//ois=new ObjectInputStream(s.getInputStream());
//oos=new ObjectOutputStream(s.getOutputStream());
oos.writeObject(msg1);
oos.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
class Receive implements Runnable{

    private ObjectOutputStream oos;
    private ObjectInputStream ois;
    private Socket s = null;
    @Override
    public void run() {
        // TODO Auto-generated method stub
        MsgObj recieveMsg;
        try {
            recieveMsg = (MsgObj) ois.readObject();
            System.out.println(recieveMsg.getName()+":");
            recieveMsg.showDice();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

解决方案

package com.zhouqy.server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import com.zhqy.MsgObj.MsgObj;

public class Server {
private Socket s;
private ObjectInputStream ois;
private ObjectOutputStream oos;

public static void main(String[] args) {
    Server s=new Server();
    s.startServer(8888);
}
public void startServer(int port){
    try {
        ServerSocket sSocket=new ServerSocket(port);
        s=sSocket.accept();
        oos=new ObjectOutputStream(s.getOutputStream());
        ois=new ObjectInputStream(s.getInputStream());
        Receive b=new Receive();
        Thread t1=new Thread(b);
        t1.start();
        Send a=new Send();
        Thread t=new Thread(a);
        t.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}
class Send implements Runnable{

private ObjectOutputStream oos;

private Socket s;

public void run(){
try {
s = new Socket("127.0.0.1",8888);

MsgObj msg2=new MsgObj("擂主");
msg2.throwDice();
msg2.showDice();
msg2.judgeDice();
oos=new ObjectOutputStream(s.getOutputStream());
oos.writeObject(msg2);
oos.flush();

} catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

}
class Receive implements Runnable{

    private ObjectInputStream ois;
    @Override
    public void run() {
        // TODO Auto-generated method stub
        MsgObj recieveMsg;
        try {
            recieveMsg = (MsgObj)ois.readObject();
            System.out.println(recieveMsg.getName()+":");
            recieveMsg.showDice();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

解决方案二:

package com.zhqy.MsgObj;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import com.zhouqy.dice.Dice;
import com.zhouqy.dice.DiceComparator;

public class MsgObj implements Serializable {
private String name;
private ArrayList dices;
private int max;
private int first;
private int secend;
private int third;
private int fourth;

public String getName() {
    return name;
}
public int getMax() {
    return max;
}
public int getFirst() {
    return first;
}
public int getSecend() {
    return secend;
}
public int getThird() {
    return third;
}
public int getFourth() {
    return fourth;
}

public MsgObj(String name) {
    super();
    // TODO Auto-generated constructor stub
    this.name=name;
    //创建一个叫dices的ArrayList
    dices=new ArrayList<Dice>();
    //创建一个size为5的dices ArrayList
    for(int i=0;i<5;i++){
        dices.add(new Dice());
    }
    }

//扔骰子
public void throwDice(){
    for(int i=0;i<dices.size();i++){
        Dice currdices=dices.get(i);
        currdices.throwPoint();
    }
    //对ArrayList Dices排序
    Comparator<Dice> ascComparator=new DiceComparator();
    Collections.sort(dices, ascComparator);
}
//输出骰子点数
public void showDice(){
    System.out.print(name+"扔出:");
    for(int i=0;i<dices.size();i++){
        Dice currdices=dices.get(i);
        System.out.print(currdices.getPoint()+" ");
    }
    System.out.println("");

}

//判断骰子的牌型
public void judgeDice(){
    int samenum=0;
    //从ArrayList中提取到一个数组中
    Dice[] currdices=new Dice[dices.size()];
    for(int i=0;i<dices.size();i++){
        currdices[i]=dices.get(i);
    }
    //samedicenum:相同的骰子数 lastdice:上一个骰子的点数  maxsame:最大相同数
    int samedicenum=1,lastdice=0,maxsame=0;
    for(int i=0;i<dices.size();i++){
        if(lastdice!=currdices[i].getPoint()){
            if(samedicenum>1){
                if(maxsame<samedicenum){
                    maxsame=samedicenum;
                }
                samenum++;
            }
            samedicenum=1;
            lastdice=currdices[i].getPoint();
        }
        else{
            samedicenum++;
            if(i==4){
                if(maxsame<samedicenum){
                    maxsame=samedicenum;
                }
                samenum++;
            }
        }
    }
    switch(samenum){
        case 0:
            if(currdices[0].getPoint()==6 && currdices[4].getPoint()==1){
                max=0;
                first=currdices[1].getPoint();
                System.out.println(name+":"+"散牌");
            }
            else{
                first=currdices[0].getPoint();
                max=4;
                System.out.println(name+":"+"顺子");
            }
            break;
        case 1:
            if(maxsame==5){
                max=7;
                first=currdices[0].getPoint();
                System.out.println(name+":"+"豹子");
            }
            if(maxsame==4){
                max=6;
                first=currdices[2].getPoint();
                secend=currdices[0].getPoint();
                third=currdices[4].getPoint();
                System.out.println(name+":"+"铁枝");
            }
            if(maxsame==3){
                max=3;
                first=currdices[2].getPoint();
                secend=currdices[3].getPoint();
                third=currdices[4].getPoint();
                System.out.println(name+":"+"三条");
            }
            if(maxsame==2){
                max=1;
                if(currdices[0].getPoint()==currdices[1].getPoint()){
                    first=currdices[0].getPoint();
                    secend=currdices[2].getPoint();
                    third=currdices[3].getPoint();
                    fourth=currdices[4].getPoint();
                }
                if(currdices[1].getPoint()==currdices[2].getPoint()){
                    first=currdices[1].getPoint();
                    secend=currdices[0].getPoint();
                    third=currdices[3].getPoint();
                    fourth=currdices[4].getPoint();
                }
                if(currdices[2].getPoint()==currdices[3].getPoint()){
                    first=currdices[3].getPoint();
                    secend=currdices[0].getPoint();
                    third=currdices[1].getPoint();
                    fourth=currdices[4].getPoint();
                }
                if(currdices[3].getPoint()==currdices[4].getPoint()){
                    first=currdices[3].getPoint();
                    secend=currdices[0].getPoint();
                    third=currdices[1].getPoint();
                    fourth=currdices[2].getPoint();
                }
                System.out.println(name+":"+"一对");
            }
            break;
        case 2:
            if(maxsame==3){
                max=5;
                first=currdices[2].getPoint();
                secend=currdices[3].getPoint();
                System.out.println(name+":"+"葫芦");
            }
            if(maxsame==2){
                max=2;
                first=currdices[1].getPoint();
                secend=currdices[2].getPoint();
                third=currdices[3].getPoint();
                System.out.println(name+":"+"两对");
            }
            break;

    }
}

}

解决方案三:

package com.zhouqy.dice;

import java.util.Random;

public class Dice implements Comparable {

public int getPoint() {
    return point;
}
public void setPoint(int point) {
    this.point = point;
}

/**
 * @param args
 */
private int point;

public int point(){
    return point;
}
public void throwPoint(){
    point=new Random().nextInt(6)+1;
}

@Override
public int compareTo(Dice o) {
    // TODO Auto-generated method stub
    return 0;
}

}

解决方案四:

Exception in thread "Thread-0" java.lang.NullPointerException
at com.zhouqy.server.Receive.run(Server.java:76)
at java.lang.Thread.run(Thread.java:619)
擂主扔出:6 6 3 2 1
擂主:一对
java.io.NotSerializableException: com.zhouqy.dice.Dice
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at java.util.ArrayList.writeObject(ArrayList.java:570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at com.zhouqy.server.Send.run(Server.java:56)
at java.lang.Thread.run(Thread.java:619)

解决方案五:

Exception in thread "Thread-1" java.lang.NullPointerException
at com.zhouqy.client.Receive.run(Client.java:102)
at java.lang.Thread.run(Thread.java:619)
挑战者扔出:5 5 2 Exception in thread "Thread-0" java.lang.NullPointerException
2 1
挑战者:两对
at com.zhouqy.client.Send.run(Client.java:80)
at java.lang.Thread.run(Thread.java:619)

时间: 2024-09-17 03:46:27

骰子小游戏,网格编程和多线程的应用,报很多错求帮助,又空指针又链接出错的!!!!的相关文章

音频-我用java写了一个小游戏,想插入背景音乐但不太会,求指教

问题描述 我用java写了一个小游戏,想插入背景音乐但不太会,求指教 package text; import java.io.*; import javax.sound.sampled.*; public class text { public static void main(String[] args) { // TODO Auto-generated method stub //创建一个实例 AePlayWave apw = new AePlayWave("G:\照片\Sleep Awa

win7系统下载后怎么关系系统自身携带的小游戏

  毫无疑问现在手机端的各种APP已经严重占据了我们的生活碎片时间,不管是在公交上还是地铁上,我们都可以看到很大一部分低头族都在玩游戏,这种改变势必对电脑端的小游戏有很大的冲击,比如说win7系统自身携带的小游戏,想必大家都不曾玩过.那么,ghost win7系统下载后怎么关系系统自身携带的小游戏呢?一旦关闭之后就能够节约很多的资源.下面看看具体的操作步骤. Win7中关闭系统自带小游戏的具体步骤如下: 1.首先打开计算机,在桌面上直接将开始菜单打开,然后就找到控制面板对其进行设置. 2.来到控

“全民寻找房祖名”小游戏的快速火爆

魏家东/文  <数字营销战役>作者 8月18日的互联网有很多爆点,这一天是电商大战的日子,但似乎今年的火药味儿没有往年那么浓烈了,然而这一天突发的几个事情吸引了无数人的眼球,柯震东吸毒炒的沸沸扬扬,晚上时获知房祖名也吸毒的消息,真是一波未平一波又起,不过东哥显然不是关注娱乐新闻的人,对谁谁吸毒的事情也不太感兴趣,尽管那些明星都可以组团拍连续剧了,我依然钟情于互联网那点事儿,让我决定写篇文章的诱因是那个在18日晚上刷爆朋友圈的游戏"全民寻找房祖名". 这个游戏来的速度真是惊人

谈谈小游戏网站的竞争前景和那些推广模式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 脱颖而出,在现在的网站中,是一份很有意思的话题,在现在的网站中,我们可以从中看到很多做的很精彩的网站,但是和很多网站比较之后,就不值得一提了,这一点在小游戏网站之中,体现的太淋漓尽致了,这篇文章呢,就借小游戏这个话题说一说,小游戏网站的前景和那些推广模式,自从看了小游戏的网站竞争之后,就不自觉的感觉到了鸭梨山大啊. 1)小游戏网站的竞争前景:

3366在线小游戏风靡 深挖用户需求是未来的出路

中介交易 SEO诊断 淘宝客 云主机 技术大厅 随着互联网应用的普及,其快节奏高互动的特点给我们的生活带来了很多改变.而一些既有的互联网习惯也在发生着转变.WEB2.0时代,移动网络软件和硬件的不断发展以及生活节奏的加快催生了诸如twitter,饭否,嘀咕为代表的微型博客的诞生,其迅速简练海量的信息传播方式也颠覆了以往人们对博客的认识.像开心网,校内网等SNS网站的火爆也以开放和聚合的方式蚕食着博客,论坛的用户群体,为人们创造着一种属于自己的个性化信息传播方式. 互联网改变着你我每一个人的生活方

小游戏网站闷声赚大钱盛大等公司借收购布局

在 中国市场中,似乎只要是游戏就是暴利行业,这对于一向默默无闻.有些低端的小游戏网站似乎也同样适应.以蔡文胜和李兴平的4399为代表,小游戏网站们正在悄然吸引巨头们的目光. 火热的小游戏 在线小游戏网站绝对算不上一种很有领先概念的互联网形式,因此,这种网站在最初并未引起投资人和媒体的重视. 但随着这些网站流量的猛增和用户数量的膨胀, 它们已经成为了某些巨头心仪的对象. 一位长期从事网站流量和用户数监测的专业人士透露,排名比较靠前的几个小游戏在线网站,如4399.com.7k7k.com.xiao

小游戏网站调查:闷声赚钱盛大等巨头布局进入

在 中国市场中,似乎只要是游戏就是暴利行业,这对于一向默默无闻.有些低端的小游戏网站似乎也同样适应.以蔡文胜和李兴平的4399为代表,小游戏网站们正在悄然吸引巨头们的目光, 火热的小游戏 在线小游戏网站绝对算不上一种很有领先概念的互联网形式,因此,这种网站在最初并未引起投资人和媒体的重视. 但随着这些网站流量的猛增和用户数量的膨胀, 它们已经成为了某些巨头心仪的对象. 一位长期从事网站流量和用户数监测的专业人士透露,排名比较靠前的几个小游戏在线网站,如4399.com.7k7k.com.xiao

游戏编程入门莫里森那本书类似的小游戏

问题描述 游戏编程入门莫里森那本书类似的小游戏 有没有大神可以帮忙做一个莫里森编写的游戏编程入门那本书中的用到GameEngine的c++小游戏 解决方案 很急的.求好心大神帮忙

求助:基于liunx的多线程小游戏

问题描述 求助:基于liunx的多线程小游戏 最近需要做一个基于liunx的多线程小游戏,看了很多都只看到有贪吃蛇.希望各位大神能帮我想一下还有什么多线程的小游戏,最好能给我一个例子(代码和解释).跪谢各位大神!!! 解决方案 老虎棒子鸡小游戏http://download.csdn.net/detail/xiaomeng90/7029713 解决方案二: linux下多线程扑克游戏框架 http://wenku.baidu.com/link?url=Op3X-tugWBIOzy6HK69r4b