JAVA练习(人机猜拳对战游戏——面向对象)

用户类Player(玩家)

package 人机对战猜拳;
import java.util.Scanner;
import java.util.Random;
//玩家类 主要依靠外界输入  选择出拳,分数增加
public class Player {
	private int finger_player;
	private int score_player;
	private String name_player;
	//构造方法
	public Player() {};
	public Player(int finger_player, int score_player, String name_player) {
		super();
		this.finger_player = finger_player;
		this.score_player = score_player;
		this.name_player = name_player;
	}
	//封装
	public String getName_player() {
		return name_player;
	}
	public void setName_player(String name_player) {
		this.name_player = name_player;
	}
	public int getFinger_player() {
		return finger_player;
	}
	public void setFinger_player(int finger_player) {
		this.finger_player = finger_player;
	}
	public int getScore_player() {
		return score_player;
	}
	public void setScore_player(int score_player) {
		this.score_player = score_player;
	}
	
	public void choice_name(String s) {
		name_player = s;
	}
	
	//进行用户出拳的选择
	public int choice_player() {
		Scanner sr = new Scanner(System.in);
		System.out.print("请出拳:");
		finger_player = sr.nextInt();
		switch(finger_player) {
		case 1:System.out.println("\t\t\t你出的是石头");break;
		case 2:System.out.println("\t\t\t你出的是剪刀");break;
		case 3:System.out.println("\t\t\t你出的是布");break;
		default:System.out.println("\t\t\t 你出错啦,请重新输入!");
				choice_player();
		}
		return finger_player;
	}
	
	//用户分数增加
	public void scoreAdd() {
		score_player++;
	}
}

电脑类(Computer)也需要后台出拳的电脑

package 人机对战猜拳;
import java.util.Random;
import java.util.Scanner;

//电脑类,确定电脑名字,输出电脑的出拳,分数增加
public class Computer {
	//成员变量   选择、分数、用户名
	private int finger_computer;
	private int score_computer;
	private String name_computer;

	//封装
	public int getScore_computer() {
		return score_computer;
	}

	public void setScore_computer(int score_computer) {
		this.score_computer = score_computer;
	}

	public int getFinger() {
		return finger_computer;
	}

	public void setFinger(int finger_computer) {
		this.finger_computer = finger_computer;
	}
	public String getName_computer() {
		return name_computer;
	}

	public void setName_computer(String name_computer) {
		this.name_computer = name_computer;
	}
	
	//构造方法
	public Computer() {};
	
	public Computer(int finger_computer, int score_computer,String name_computer) {
		super();
		this.finger_computer = finger_computer;
		this.score_computer = score_computer;
		this.name_computer = name_computer;
	}

	//电脑名字选择
	public void choice_name() {
		System.out.print("请选择对方角色(1.路飞 2.索隆 3.山治): ");
		Scanner sr = new Scanner(System.in);
		int choice = sr.nextInt();
		if(choice == 1) {
			name_computer = "路飞";
			System.out.println("你的对手是草帽小子路飞!");
		}
		if(choice == 2) {
			name_computer = "索隆";
			System.out.println("你的对手是剑士索隆!");
		}
		if(choice == 3) {
			name_computer = "山治";
			System.out.println("你的对手是黑足山治!");
		}
			
		if(choice!=1&&choice!=2&&choice!=3)
			System.out.println("对不起,其他人很忙,请选择上面三位比赛!");
	}

	//输出电脑的选择
	public int choice_computer(String name) {
		Random r = new Random();
		finger_computer = r.nextInt(3)+1;
		switch(finger_computer) {
		case 1:System.out.println("\t\t\t"+name+"出的是石头");break;
		case 2:System.out.println("\t\t\t"+name+"出的是剪刀");break;
		case 3:System.out.println("\t\t\t"+name+"出的是布");break;
		
		}
		return finger_computer;
	}
	
	//分数增加
	public void scoreAdd() {
		score_computer++;
	}
}

游戏类(Admin)管理员

package 人机对战猜拳;
import java.util.Scanner;

//后台控制类,控制游戏的初始化,结局的判断,局数的记录,和积分榜记录
public class Admin {
	//唯一的成员变量  记录比赛次数
	private int times;
	//封装
	public int getTimes() {
		return times;
	}

	public void setTimes(int times) {
		this.times = times;
	}
	
	//游戏的初识化,简单的布局
	public void initial() {
		System.out.println("---------------欢迎来到游戏:人机猜拳------------------");
		System.out.println("\n");
		System.out.println("               ***************");
		System.out.println("                 **猜拳开始**");
		System.out.println("               ***************");
		System.out.println("\n");
		System.out.println("出拳规则:1石头 2剪刀  3布");
	}
	
	//输出当前对战的双方 和 当前比赛次数
	public void startGame(String n_c,String n_p) {
		System.out.println("\t\t\t"+n_c+"VS"+n_p);
		if(times<3) {
			System.out.println("现在开始第"+times+"局比赛");
		}
		else {
			System.out.println("现在已经是第"+times+"局比赛了哦,记得休息一下!");
		}
	}
	
	//进行结果的判断
	public int judge(int x,int y) {
		if((x==1 && y==2)||(x==3&&y==1)||(x==2&&y==3)) {
			System.out.println("恭喜你,你赢了");
			return 1;
		}else if((x==1&&y==3)||(x==3&&y==2)||(x==2&&y==1)) {
			System.out.println("抱歉,你输了");
			return 0;
		}else {
			System.out.println("平局哦");
			return -1;
		}
	}
	
	//次数的增加
	public void timeAdd() {
		times++;
	}
	//输出积分榜
	public void showScoreBoard(int x,int y,String name_c,String name_p) {
		System.out.println("\t\t\t积分榜如下");
		System.out.println("\t\t"+name_c+":"+x);
		System.out.println("\t\t"+name_p+":"+y);
	}
}

 测试类

 

package 人机对战猜拳;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		//实例化一个输入对象
		Scanner sr = new Scanner(System.in);
		
		//初始化游戏场景对象
		Admin game = new Admin();
		//初始化比赛次数为1
		game.setTimes(1);
		//进行名字的选择
		game.initial();
		
		//实例化游戏双方
		Player pp = new Player();
		Computer cc = new Computer();
		
		//输入玩家用户名
		System.out.print("请输入你的名字:");
		
		//从键盘接受
		String name_p = sr.next();
		//存入对象中
		pp.setName_player(name_p);
		System.out.println();
		//选择电脑玩家名字
		cc.choice_name();
		
		//让游戏能一直进行下去
		while(true) {
			//用字符串来获取当前两者名字。
			String n_c = cc.getName_computer();
			String n_p = pp.getName_player();
			//传入控制类 开始比赛。
			game.startGame(n_c,n_p);
			
			//显示当前比赛次数
			game.timeAdd();
			
			//将各自出的拳用1,2,3来代表,取出来,存入变量中
			int p_c=pp.choice_player();

			int c_c=cc.choice_computer(n_c);
			//传入后台控制类的判断方法。
			int result = game.judge(p_c, c_c);
			//来获得比赛结果,来判断谁加分
			if(result == 1) {
				pp.scoreAdd();
			}else if(result == 0) {
				cc.scoreAdd();
			}
			
			//一轮比赛结束,进行其他选项
			System.out.println("\n");
			//询问是否继续
			System.out.print("是否继续比赛(y/n)或者查看积分榜并继续(s):");
			
			String gameOver = sr.next();
			//判断输入语句——玩家选择
			if(gameOver.charAt(0) == 'y') {
				System.out.println("我赌你下次一定出布!");
			}else if(gameOver.charAt(0) == 'n') {
				System.out.println("不要走,决战到天亮!");
				break;
			}else if(gameOver.charAt(0) == 's') {
				//将两者比分传入后台,后台输出
				int x = cc.getScore_computer();
				int y = pp.getScore_player();
				game.showScoreBoard(x, y, n_c, n_p);
			}
		}
	}

}

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值