java剪刀石头布游戏界面 java石头剪刀布游戏设计_User


小时候大家都玩过石头剪刀布吧,相信大家对游戏规则都已经了然入心了吧,如果有不知道的我还是说一下吧:剪刀和石头,出石头赢了, 石头和布,出布的赢了,剪刀和布,出剪刀的赢了。

好了游戏规则就不多说了,直接说游戏实现:

我们模拟人与电脑玩剪刀石头布的游戏,人的输入,由 Scanner 键盘端输入,电脑由随机数生成。

我用面向对象思想进行设计:

主体代码如下:


public class GameComputerOOP {

	public static void main(String[] args) {
		
	Computer cmp = new Computer();
	User user = new User();
	Game game = new Game();
	
	game.play(user, cmp);

	}
	
	}


声明了用户实例和电脑实例以及游戏实例,最终从游戏实例中返回我们想要的结果。

在game.play()中要传入两个参数,分别是用户和电脑的。

晒出关键代码:


电脑类


class Computer{
	
	public String choose(){
		int random;
		int random1;
		random = (int) (Math.random()*10)%2;
		random1 = (int) (Math.random()*10)%2;
		random = random + random1;
		String[] computer = {"剪刀","石头","布"};

		return computer[random];	
	}
	
}


这是电脑类,有一个 choose 方法,返回值为 String类型,两个随机数,每个随机数生成结果在(0-1)之间,这样做的目的在于,让两个数加起来随机在0-2之内。为什么这样做呢? 因为我在下面声明了一个 字符型数组数组下标只有 0-2, 这样就可以实现电脑随机出 剪刀,石头,布的需求了。


用户类:


class User{
	public  String choose(String n){
		return n;
	}


用户类里面有个方法:用户这边是用户从键盘输入,所以,输入以后,从方法返回相应的结果就好了。


游戏类:


class Game{
	public void play(User user, Computer cmp){
		
		Scanner input = new Scanner(System.in);
		int bout=1;
		int flag = 1;
		String userChoose;
		String compChoose = null;
		
		
		int computerCount = 0;
		int userCount = 0;
		boolean end = true;
		
		while(end){
			
		while(bout < 6){
		System.out.println("当前是第"+ bout + "回合");
		System.out.println("请在剪刀、石头、布内选择你的输入:");
		userChoose = input.next();
		userChoose = user.choose(userChoose);
		compChoose =cmp.choose();
		System.out.println("玩家选择了:"+userChoose);
		System.out.println("电脑选择了:"+compChoose);
		
		
		int countUser=0;
		int countComputer =0;
		
//		System.out.println(user.equals(computer[random])); // 测试代码
//		System.out.println(user == "剪刀");
		
//		System.out.println(user.equals("剪刀") & computer.equals("石头")); // 测试代码
		

		if(userChoose.equals(compChoose)){
			System.out.println("本局打成平手");
		}else if(userChoose.equals("剪刀") && compChoose.equals("石头") ){
//			System.out.println("电脑赢了");
			countComputer++;
			computerCount++;
			System.out.println(computerCount);
		}else if(userChoose.equals("石头") && compChoose.equals("布")){
//			System.out.println("电脑赢了");
			countComputer++;
			computerCount++;
		}else if(userChoose.equals("布") && compChoose.equals("剪刀")){
//			System.out.println("电脑赢了");
			countComputer++;
			computerCount++;
		}else if(userChoose.equals("石头") && compChoose.equals("剪刀")){
//			System.out.println("电脑赢了");
			countUser++;
			userCount++;
		}else if(userChoose.equals("布") && compChoose.equals("石头")){
//			System.out.println("电脑赢了");
			countUser++;
			userCount++;
		}else if(userChoose.equals("剪刀") && compChoose.equals("布")){
//			System.out.println("电脑赢了");
			countUser++;
			userCount++;
		}
		
		else {
			System.out.println("对不起,系统正在升级,请稍后重试!->1");

		}


		if(countUser>countComputer){
			System.out.println("本局用户胜利了,当前比分为:"+"用户:"+userCount+" VS " + "电脑:"+computerCount);
		}else if(countUser<countComputer){
			System.out.println("本局电脑胜利了,当前比分为:"+"用户:"+userCount+" VS " + "电脑:"+computerCount);
		}else if(countUser==countComputer){
			System.out.println("本局平手,当前比分为:"+"用户:"+userCount+" VS " + "电脑:"+computerCount);
		}else{
			System.out.println("对不起,系统正在升级,请稍后重试 ->2");	
	}
	

	flag++;
	bout++;

}
		System.out.println();
		System.out.println();
		System.out.println();
		System.out.println();
		System.out.println();
		System.out.println();
		System.out.println("**************************公布游戏最终结果*********************************");
		if(userCount>computerCount){
			System.out.println("用户最后胜利,最终的比分为:"+"用户 :"+userCount+" VS " + "电脑:"+computerCount);
			end = false;
		}else if(userCount<computerCount){
			System.out.println("电脑最后胜利,最终的比分为:"+"用户: "+userCount+" VS " + "电脑:"+computerCount);
			end = false;
		}else if(userCount==computerCount){
			System.out.println("平手,本回合最终的比分为:"+"用户: "+userCount+" VS " + "电脑:"+computerCount);
			
			System.out.println("请输入您是否还想继续加时赛:是:请输入:yes 否:的话请输入 : no :");
			String select = input.next();
			if(select.equals("no")){
				end=false;
			}
			bout++;
			
		}else{
			System.out.println("对不起,系统正在升级,请稍后重试 ->3");
			
		}
		
			
			
		}

		
	}
	
		
		
		
	}


游戏类的主体实现:

两个while循环,第一个while循环用来处理平局结果的,当游戏进行五局三胜以后,并没有分出胜负,则需要用户决定是否继续进行加时赛(加场次比赛)。我用了一个 布尔类型 end 作为结束标记,如果用户和电脑打成平手,则会让用户输入是否依然继续比赛,当用户输入“Yes”时,则继续进行比赛,bout(回合的意思)++, 这样会让第二个while循环,继续循环。这样就实现了增加场次的比赛机制。如果用户不想继续比赛,则让end 置为 false,则结束循环。

第二个while 循环进行比赛场次控制,有两种计数;一种是 computerCount ,userCount,这两个是用来控制用户总回合数的计数,比如用户五局之内赢了三次这个是要用这 userCount来 体现,电脑那边则用 computerCount来体现。

还有一个就是countUser,countComputer 这个是用来统计每局内的次数,每次循环要进行重新赋值。内容比较用equals方法。