Java基础案例教程2-5剪刀石头布

这是一个使用Java编写的剪刀石头布游戏程序,玩家与电脑进行5局对战,根据用户选择和随机数判断胜负并统计结果。游戏结束后显示总胜负情况。
package chapter;
import java.util.Scanner;
import java.util.Random;
public class example2_5 {
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		int win=0;
		int loss=0;
		int draw=0;
		for(int i=1;i<=5;i++) {
			System.out.println("当前为第"+i+"局");
			int randomNumber=new Random().nextInt(3);
			System.out.println("请选择出剪刀、石头、布");
			String a=input.next();
			if(a.equals("剪刀")) {
				if(randomNumber==0) {
					System.out.println("电脑为:剪刀");
					System.out.println("平局!");
					draw++;	
				}
				else if(randomNumber==1) {
					System.out.println("电脑为:石头");
					System.out.println("失败!");
					loss++;
				}
				else if(randomNumber==2) {
					System.out.println("电脑为:布");
					System.out.println("胜出");
					win++;
				}
			}
			else if(a.equals("石头")) {
				if(randomNumber==0) {
					System.out.println("电脑为:剪刀");
					System.out.println("胜出");
					win++;
				}
				else if(randomNumber==1) {
					System.out.println("电脑为:石头");
					System.out.println("平局");
					draw++;	
				}
				else if(randomNumber==2) {
					System.out.println("电脑为:布");
					System.out.println("失败");
					loss++;
				}
			}
			else if(a.equals("布")) {
				if(randomNumber==0) {
					System.out.println("电脑为:剪刀");
					System.out.println("失败");
					loss++;
				}
				else if(randomNumber==1) {
					System.out.println("电脑为:石头");
					System.out.println("胜出");
					win++;
				}
				else if(randomNumber==2) {
					System.out.println("电脑为:布");
					System.out.println("平局");
					draw++;
					
				}
			}
			else {
				System.out.println("输入有误!");
			}
		}
		System.out.println("游戏结束!五局游戏中一共赢"+win+"局,失败"+loss+"局,平"+draw+"局");
		if(win>loss) {
			System.out.println("胜出");
		}
		else if(loss<win) {
			System.out.println("失败");
		}
		else {
			System.out.println("平局");
		}
	}

}

目前提供的引用中并未提及董相志编写的具体关于Java网络编程的案例教程,尤其是涉及石头剪刀游戏的内容。然而,可以基于已有的Python实现逻辑和Java网络编程的基础知识来推测如何构建类似的Java本的游戏。 以下是可能的设计思路以及代码框架: ### Java石头剪刀游戏设计 #### 1. 基本功能描述 该游戏可以通过客户端和服务端的方式实现,其中服务端负责接收玩家的选择并返回胜负结果,而客户端则用于发送用户输入到服务端,并展示最终的比赛结果[^1]。 #### 2. 主要组件说明 - **Socket通信**:利用Java中的`Socket`类完成客户端与服务端之间的数据传输。 - **多线程支持**:为了使多个玩家能够同时参与游戏,在服务端引入多线程机制处理不同用户的请求[^2]。 #### 3. 示例代码片段 ##### (1) 客户端部分 ```java import java.io.*; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost", 8080); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); System.out.println("石头剪刀小游戏,五局三胜制"); for(int i=0;i<5;i++) { String input = ""; while(!input.matches("[0-2]")){ System.out.print("请输入你的选择(0-石头,1-剪刀2-):"); input = new BufferedReader(new InputStreamReader(System.in)).readLine(); } writer.write(input+"\n"); writer.flush(); String response = reader.readLine(); System.out.println(response); } socket.close(); } } ``` ##### (2) 服务端部分 ```java import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; class ServerThread extends Thread{ private Socket clientSocket; Random rand=new Random(); public ServerThread(Socket s){ this.clientSocket=s; } @Override public void run(){ try(BufferedReader br=new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter pw=new PrintWriter(clientSocket.getOutputStream(),true)){ int countPlayerWins=0,countServerWins=0; for(int round=1;round<=5;round++){ int serverChoice=rand.nextInt(3); String choiceStr=br.readLine(); int playerChoice=Integer.parseInt(choiceStr); StringBuilder resultMessage=new StringBuilder(); if((serverChoice==0 && playerChoice==1)||(serverChoice==1&&playerChoice==2)|| (serverChoice==2&&playerChoice==0)){ countServerWins++; resultMessage.append("本轮比赛电脑赢了\n"); }else if ((playerChoice==0 && serverChoice==1)||... ...//省略其他条件分支 pw.println(resultMessage.toString()); } // 输出总成绩 if(countPlayerWins>countServerWins){ pw.println("\n比赛结果是:玩家获胜"); }else if(countPlayerWins<countServerWins){ pw.println("\n比赛结果是:电脑获胜"); }else{ pw.println("\n比赛结果是平局"); } }catch(Exception e){e.printStackTrace();} } } public class Server { public static void main(String []args)throws Exception{ ServerSocket ss=new ServerSocket(8080); while(true){ Socket s=ss.accept(); new ServerThread(s).start(); } } } ``` 以上代码仅为简化示例,实际应用需考虑异常捕获、边界情况等问题。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值