猜拳游戏之面向对象

猜拳游戏

要求:用户可以选择对战的角色名称(1,刘备 2,关羽 3,张飞),也可以自由输入自己名称,在对战期间,电脑由系统随机出拳(1,剪刀 2,石头 3, 布),玩家由自己出拳,结束后可以看到自己和电脑的手势,以及得分情况,(赢一局积3分,输一局不扣分,平局各加一分)。在整局游戏结束后要求显示出胜负情况以及积分情况。

类的设计

本局游戏设置为四个类分别是玩家类、电脑类、裁判类、游戏测试类。

玩家类

属性:昵称(roleName)积分(integral)

方法:玩家出拳(printMora)

电脑类

属性:名称(roleName)积分(integral)

方法:电脑出拳(printMora)

裁判类

属性:玩家(player)电脑(computer)局数(gameNumber)

方法: 游戏开始准备(start()) 猜拳输赢判定(arbitrament()) 游戏结果公示(end())游戏过程(wholeJourney())转换手势(changeString(int mora, Object gamePlayer))

代码展示

玩家类

package com.qianfeng.moraGame;

import java.util.Scanner;

//玩家类
public class Player {
	
	private String roleName;//玩家姓名
	private int integral;//玩家积分
	
	public Player() {
	}
	
	public Player(String roleName, int integral) {
		this.roleName = roleName;
		this.integral = integral;
	}
	
	//玩家猜拳
	public int printMora() {
		Scanner input = new Scanner(System.in);
		int mora = input.nextInt();
//		input.close();
		return mora;
	}

	public String getRoleName() {
		return roleName;
	}

	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}

	public int getIntegral() {
		return integral;
	}

	public void setIntegral(int integral) {
		this.integral = integral;
	}
	
	
}

电脑类

package com.qianfeng.moraGame;

import java.util.Random;

//电脑类
public class Computer {
	
	private String roleName;//电脑名字
	private int integral;//电脑积分
	
	public Computer() {
	}
	
	public Computer(String roleName, int integral) {
		this.roleName = roleName;
		this.integral = integral;
	}
	
	//电脑猜拳
	public int printMora() {
		Random random = new Random();
		int mora = random.nextInt(3)+1;
		return mora;
	}
	
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	
	public String getRoleName() {
		return this.roleName;
	}

	public void setIntegral(int integral) {
		this.integral = integral;
	}
	
	public int getIntegral() {
		return integral;
	}
	
	
}

裁判类

package com.qianfeng.moraGame;

import java.util.Scanner;

//裁判类
public class Referee {
	
	Scanner input = new Scanner(System.in);
	private Player player;
	private Computer computer;
	private int gameNumber;
	
	public Referee() {
	}
	
	public Referee(Player player, Computer computer) {
		this.player = player;
		this.computer = computer;
	}
	
	//游戏开始准备
	private void start() {
		System.out.println("***************************");
		System.out.println("*      欢迎您进入游戏          *");
		System.out.println("***************************");
		int n;
		do {
			System.out.print("请选择您对战的角色(1,刘备 2,关羽 3,张飞):");
			n = input.nextInt();
			if (n == 1 || n == 2 || n == 3) {
				break;
			} else {
				System.out.println("输入错误!!");
			}
		} while (true);
		
		switch (n) {
			case 1:computer.setRoleName("刘备");break;
			case 2:computer.setRoleName("关羽");break;
			case 3:computer.setRoleName("张飞");break;
		}
		System.out.print("请输入您的游戏昵称:");
		player.setRoleName(input.next());
		System.out.println(player.getRoleName() + " VS " + computer.getRoleName());
		System.out.println();
	}
	
	//猜拳输赢判定
	private void arbitrament() {
		int mora1;
		do {
			System.out.print("请" + player.getRoleName() + "出拳(1,剪刀 2,石头 3,布):");
			mora1 = player.printMora();
			if (mora1 == 1 || mora1 == 2 || mora1 == 3) {
				break;
			} else {
				System.out.println("输入错误!!");
			}
		} while (true);
		int mora2 = computer.printMora();
		System.out.println(computer.getRoleName() + "由系统出拳完毕");
		changeString(mora1, player);
		changeString(mora2, computer);
		if (mora1-mora2 == 1 || mora1-mora2 == -1) {
			System.out.println("恭喜您取得一局胜利加3积分");
			player.setIntegral(player.getIntegral()+3);
		} else if (mora1-mora2 == -1 || mora1-mora2 == 2) {
			System.out.println("您惜败" + computer.getRoleName() + "加3积分");
			computer.setIntegral(computer.getIntegral()+3);
		} else {
			System.out.println("平手各加一积分");
			player.setIntegral(player.getIntegral()+1);
			computer.setIntegral(computer.getIntegral()+1);
		}
	}
	
	//游戏结束公示
	private void end() {
		System.out.println();
		System.out.println("公布此次游戏的最终结果:\n结果场次为:" + gameNumber);
		System.out.println(player.getRoleName() + "积分为:" + player.getIntegral());
		System.out.println(computer.getRoleName() + "积分为:" + computer.getIntegral());
		if (computer.getIntegral() < player.getIntegral()) {
			System.out.println("恭喜您此次游戏您胜利了!!!");
		} else if(computer.getIntegral() > player.getIntegral()) {
			System.out.println("很遗憾此次游戏您惜败!!!");
		} else {
			System.out.println("平分秋色!!!");
		}
		System.out.println("游戏结束");
	}
	
	//游戏过程
	public void wholeJourney() {
		start();
		String judge;
		do {
			arbitrament();
			System.out.println();
			System.out.print("是否继续战斗(y/n):");
			judge = input.next();
			gameNumber++;
		} while (judge.equals("y"));
		end();
		
	}
	
	//转化手势
	private void changeString(int mora, Object gamePlayer) {
		String name;
		if(gamePlayer instanceof Player) {
			Player player = (Player)gamePlayer;
			name = player.getRoleName();
		} else if (gamePlayer instanceof Computer) {
			Computer computer = (Computer)gamePlayer;
			name = computer.getRoleName();
		} else {
			name = "错误昵称";
		}
		
		switch (mora) {
			case 1:System.out.println(name + "出拳为:剪刀");break;
			case 2:System.out.println(name + "出拳为:石头");break;
			case 3:System.out.println(name + "出拳为:布");break;
		}
	}

	public int getGameNumber() {
		return gameNumber;
	}

	public void setGameNumber(int gameNumber) {
		this.gameNumber = gameNumber;
	}
	
	
	
}

游戏测试类

package com.qianfeng.moraGame;

import java.util.Scanner;

public class GameTest {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		Player player = new Player();
		Computer computer = new Computer();
		Referee referee = new Referee(player,computer);
		String judge;
		do {
			referee.wholeJourney();
			System.out.print("是否继续一局新的游戏(y/n):");
			judge = input.next();
			System.out.println();
			//新的一局初始积分与局数
			referee.setGameNumber(0);
			player.setIntegral(0);
			computer.setIntegral(0);
		} while (judge.equals("y"));
		System.out.println("欢迎下次再来");
		input.close();
	}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值