java吧 关注:1,244,874贴子:12,719,853
  • 0回复贴,共1

帮忙修改一个用java实现猜数字游戏的程序

只看楼主收藏回复

这个是题目:
服务器端:

在游戏开始的时候能够随机产生1个随机数0-19。并将这1个随机数打印在服务器端控制台。——主要为了测试,实际当中可以不打出来。
启动服务器,等待客户端进行连接,当客户连接到服务器后,显示连接成功。
以流的方式读取客户端出入的信息
根据客户端输入的数字,和服务器产生的随机数进行对比
服务器将游戏结果返回给客户端。

客户端:

客户端连接服务器,显示连接成功。
客户端接受用户键盘输入。
客户端将用户输入的值发送到服务器端
客户端接受服务器端返回的判断结果。如果猜的正确,就打印正确的提示信息。否则继续等待输入。
完善期进行实现//输入:exit退出,输入reset重新得到一个随机数,重新开始

请好心人帮我改下我写的程序。。急用。。谢谢勒
public class GuessClient {

Socket socket;
DataInputStream netIn;
DataOutputStream netOut;
String clientMsg ;
BufferedReader br;
public static void main(String[] args) {
GuessClient client=new GuessClient();
client.connectServer();
client.sendClientMsg();
client.clientGuess();

}
void connectServer(){
try {
System.out.println("客户端启动");
socket = new Socket(InetAddress.getLocalHost(),GuessServer.PORT);
System.out.println("连接服务器成功!");
} catch (IOException e) {
System.out.println("连接服务器失败!");
}
}//客户端连接服务器,如果能够连通则显示连接成功,否则将显示连接失败

客户端:

String getKeyBoardIn(){
System.out.println("请输入猜想的数字(0~20)");
br=new BufferedReader(new InputStreamReader(System.in));
try {
clientMsg = br.readLine();
} catch (IOException e) {
System.out.println("请输入正确的数字!");
}
return clientMsg;
}
private void sendServer(){
try {
netOut=new DataOutputStream(socket.getOutputStream());
netOut.writeUTF(getKeyBoardIn());
netOut.flush();
} catch (IOException e) {

}
}
private class clientThread1  implements Runnable{
public void run() {
while(true){
try {
Thread.sleep(GuessServer.SLEEP_TIME);
sendServer();
} catch (Exception e) {
}

}
}
}
void sendClientMsg(){
new Thread(new clientThread1()).start();
}//玩家输入所猜的数字,并传送到服务器
private void receiveServer() throws Exception{
netIn=new DataInputStream(socket.getInputStream());
while(clientMsg.equals("exit")){
System.out.println("成功退出游戏!");
return;
}
while(!clientMsg.equals("exit")){
String serverMsg=netIn.readUTF();
System.out.println("服务器端:"+serverMsg);
if(serverMsg=="恭喜您猜对了!"){
System.out.println("猜数字游戏结束!");
return;
}
System.out.print("请继续输入:");
clientMsg=br.readLine();
netOut.writeUTF(clientMsg);

}

}

private class clientThread2  implements Runnable{
public void run() {
while(true){
try {
Thread.sleep(GuessServer.SLEEP_TIME);
receiveServer();

} catch (Exception e) {
}

}
}
}
void clientGuess(){
new Thread(new clientThread2()).start();
}//接受服务器的反馈,并将结果显示给玩家
}

服务器端:
public class GuessServer {
public final static int MAX_NUM=20;
public final static int PORT=789;
public final static int SLEEP_TIME=100;
static int randomNum;
ServerSocket serverSocket;
Socket socket;
DataInputStream netIn;
DataOutputStream netOut;
String clientMsg;
static int getRandom(){
return randomNum=Math.abs(new Random().nextInt()%MAX_NUM);
}//产生一个0-19之间的随机数
public static void main(String[] args) throws Exception {
GuessServer server=new GuessServer();
server.connectClient();
server.guessProcess();

}
void connectClient() throws Exception{
System.out.println("服务器端启动");
serverSocket=new ServerSocket(PORT);
System.out.println("等待客户端连接……");
socket=serverSocket.accept();
System.out.println("与客户端连接成功");

}//与客户端进行连接
void guessProcess(){
new Thread(new ServerThread()).start();
}
private class ServerThread implements Runnable{
public void run() {
while(true){
try {
Thread.sleep(SLEEP_TIME);
compareMsg();
} catch (Exception e) {
}
}
}
}// 初始化启动线程
private void getClientMsg(){
try {
netIn=new DataInputStream(socket.getInputStream());
netOut=new DataOutputStream(socket.getOutputStream());
clientMsg=netIn.readUTF();
} catch (IOException e) {
}
}//获得客户端的数据
private void compareMsg() throws Exception{
getClientMsg();
while(!clientMsg.equals("exit")){
String serverMsg=null;
getRandom();
System.out.println("客户端:"+clientMsg);
System.out.println("产生的随机数为:"+randomNum);
int clientNum=Integer.parseInt(clientMsg);
if(clientNum>=0&&clientNum<20){
if(clientNum==randomNum){
serverMsg="恭喜您猜对了!";
}else if(clientNum>randomNum){
serverMsg="您输入大了!";
}else{
serverMsg="您输入小了!";
}
}
else{
serverMsg="输入超过范围,请重新输入!";
}
netOut.writeUTF(serverMsg);
clientMsg=netIn.readUTF();
}

}

}





1楼2008-05-04 23:33回复