superyu1992 2013-06-05 06:52 采纳率: 0%
浏览 1588

java小游戏设计问题(有些冗长,麻烦耐心看完!)

该小游戏是为了实现电脑随机出石头,剪刀,或布,然后玩家根据电脑的要求(赢电脑,输电脑,打平),大致思路是客户端发出指令开始游戏,服务器端接收后随机选择,然后发回给客户端,玩家选择后,服务器做出判断对错。现将游戏的服务器端与客户端贴出,现在的问题是当玩家输入自己的判断后,服务器返回的值一直是“回答错误”,求解!

这是 服务器端 的程序
import java.io.*;
import java.net.*;
import java.util.*;

public class gameServer {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ServerSocket server = null;
    DataOutputStream out=null;
    DataInputStream in=null;
    Socket you =null;
    String s=null,s1=null;
    int w=0,l=0,d=0,b=0;
    int sum=0;
    while(true){
        try{server = new ServerSocket(4351);}
        catch(IOException e1){
            System.out.println("ERRO:"+e1);
            }
        try{
            you=server.accept();
            in=new DataInputStream(you.getInputStream());
            out=new DataOutputStream(you.getOutputStream());
            while(true){
                 int c =0;
                 c=in.readInt();


                 if(c==-1){
                     b=(int)(Math. random()*8);
                     d=b;
                     if(b==0){

                         s="电脑出布,要打平";



                     }
                     else if(b==1){
                         s="电脑出布,要输电脑";

                     }
                     else if(b==2){
                         s="电脑出布,要赢电脑";

                     }
                     else if(b==3){
                         s="电脑出石头,要打平";

                     }
                     else if(b==4){
                         s="电脑出石头,要输电脑";

                     }
                     else if(b==5){
                         s="电脑出石头,要赢电脑";

                     }
                     else if(b==6){
                         s="电脑出剪刀,要打平";

                     }
                     else if(b==7){
                         s="电脑出剪刀,要输电脑";

                     }
                     else {
                         s="电脑出剪刀,要赢电脑";

                     }
                 }
                 System.out.println(s);


            if(c==1){
              if(d==0&&d==5&&d==7&&d==8)
                  s="回答正确!";

              else
                  s="回答错误";




            }
            if(c==0){
              if(d==2&&d==6&&d==4)
                  s="回答正确!";


              else
                  s="回答错误";


            }
           if(c==2){
              if(d==1&&d==3)
                  s="回答正确!";

              else
                  s="回答错误";
       }

           System.out.println(s);   



              out.writeUTF(s);
              //sum=w*3+d;
                       //out.writeUTF(s);
                       //out.writeInt(sum);

        }
        }catch(IOException e){}

    }
}

}

下面是 客户端 的程序

import java.io.*;
import java.net.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.Random;

public class gameClient extends JFrame implements ActionListener{
JButton butj ,buts,butb,butl,butstart;

JPanel panel1,panel2,panel3;
JLabel label,label2;
JTextArea showText;
String s1=null;
int a=0;
int sum1=0;

Socket socket=null;
DataInputStream in=null;
DataOutputStream out=null;


public gameClient() {

    setTitle("郁龑");                 
    setLocation(250, 250);             
    setSize(500, 300);                

    showText=new JTextArea();
    socket=new Socket();

    panel1 =  new JPanel();         
    panel1.setBackground(Color.yellow);     
    butj = new JButton("剪刀"); 
    butb=new JButton("布");
    buts = new JButton("石头");

    butl=new JButton("清除");
    butstart=new JButton("开始游戏");

    butj.addActionListener(this);    
    buts.addActionListener(this);
    butb.addActionListener(this);
    butl.addActionListener(this);
    butstart.addActionListener(this);

    panel1.add(butj);                      
    panel1.add(butb);
    panel1.add(buts);                    

    panel1.add(butl);
    panel1.add(butstart);

    panel2 =  new JPanel();         
    panel2.setBackground(Color.green);     
    label = new JLabel("");
    label2= new JLabel("");
    panel2.add(label);                      
    panel2.add(label2); 

    panel3 =  new JPanel();
    panel3.setBackground(Color.blue);

    panel3.add(showText);


    add(panel1,BorderLayout.SOUTH);       
    add(panel2,BorderLayout.CENTER);                 
    add(panel3,BorderLayout.NORTH);

     try{socket=new Socket("localhost",4351);
     in=new DataInputStream(socket.getInputStream());
     out=new DataOutputStream(socket.getOutputStream());}
     catch(IOException ee){
         System.out.println("无法连接");
     }


}
 public void actionPerformed(ActionEvent e){

     if(e.getSource()==butstart){

         a=-1;



 }
     if(e.getSource()==butj){

         a=0;



 }


     if(e.getSource()==butb){

         a=1;


     }
     if(e.getSource()==buts){


         a=2;



         }
     if(e.getSource()==butl){


        a=3;



         }

    try{ 
     out.writeInt(a);

     s1=in.readUTF();
     //sum1=in.readInt();



    }
 catch(IOException ee){
     System.out.println("无法连接");

 }
    label.setText(s1); 

 }





public static void main(String[] args) {

    gameClient  frame  = new gameClient();   
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true);  


}

}

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-26 18:18
    关注

    在服务器端的if语句中,您比较的是c和d的值,但c的值是玩家输入的值,而d的值是电脑随机出的值。如果您想要让服务器正确地判断玩家输入的值是否正确,应该将d的值赋给c。

    例如,在服务器端的if语句中,您可以将:

    if(c == 1){
      if(d == 0 && d == 5 && d == 7 && d == 9){
        s1 = "回答正确";
        out.writeUTF(s1);
        out.flush();
      }
      else{
        s1 = "回答错误";
        out.writeUTF(s1);
        out.flush();
      }
    }
    

    修改为:

    if(c==d){
        s1="回答正确";
        out.writeUTF(s1);
        out.flush();
    }
    else{
        s1="回答错误";
        out.writeUTF(s1);
        out.flush();
    }
    

    这样,如果玩家输入的值等于电脑随机出的值,服务器就会返回"回答正确",否则就会返回"回答错误"。


    另外,建议您在连接断开后关闭服务器端的输入输出流和套接字,以免造成资源浪费。例如:

    in.close();
    out.close();
    you.close();
    

    这样,当玩家退出游戏时,服务器就会关闭与该玩家的连接,并释放资源。

    评论

报告相同问题?

悬赏问题

  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码