关于猜拳问题的小程序拓展(JAVA)

猜拳程序被广泛作为例题和练手材料应用于各个编程语言学习,他主要学习的是一个循环判断,那么今天我们延伸一下,猜拳问题通过类的封装实现。

我们首先要确定的是猜拳的玩家应该是两个人,或者一个人一个电脑,也就是说要去分别存储两个重复类型的数据集合,那么就明确了应该定义一个玩家类,(如果是C语言的话应该是自定义一个结构体),我们创建的类应该是要有着姓名,分数这两个私有属性,以及游戏次数这个公共属性,所以修饰词分别是private,private和static public。这个类应该有一个展示用户分数的方法,得到下面代码

gameplayer.java:

package StartGame;

public class gameplayer {
	private String name;
	private int score = 0;
	static public int gametimes;

	public gameplayer() {

	}

	public gameplayer(String name) {
		this.name = name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void scoreUP() {
		score++;
	}

	public void show() {
		System.out.println("player:" + name);
		System.out.println("score:" + score);
		System.out.println("times:" + gametimes);
	}

}

 之后就是确定游戏的主体方法,首先要满足对输入的判断,通过scannr类的hasNextInt方法判断输入的是不是一个整数,如果不是那么我们要进行重新输入,这里就要用到循环,同时hasNextInt只是判断而不是取走缓冲区的内容,所以这个时候你的输入其实还在缓冲区,你需要做一个存取处理,读走取出的数据,我们在INT方法中将上述完成

public int INT() {
		boolean flag = false;
		double sca = -1.0;
		String skr;
		while (!flag) {
			flag = ob.hasNextInt();
			if (flag) {
				sca = ob.nextInt();
				return (int) sca;
			} else {
				skr = ob.next();
				System.out.println("您输入的是一个错误的字符串" + skr);
				System.out.println("请重新输入整数:");
			}
		}
		return -1;
	}

然后创建一个规范输入函数,这个函数能够检测你的输入是不是一个符合要求的输入,参数是相应的输入变量和上下限,这里要注意和上面INT区分的原因是避免方法内代码冗杂,不便修改。

public boolean rel(int n, int a, int b) {
		if (n >= a && n <= b) {
			return true;
		} else {
			return false;
		}
	}

规范了输入后开始构思猜拳游戏主体,首先是信息要保存到玩家对象,因此game的构造方法首先参数是两个gameplayer对象,然后是对游戏有一个开关选项,实现玩家对战或者人机对战,实际上也就是if判断,人机对战功能通过随机数实现(因为并不是多复杂的游戏,如果是围棋游戏之类,算法就很复杂了)

下面是完整的game方法和启动方法

package StartGame;

import java.util.Scanner;

public class game {
	Scanner ob = new Scanner(System.in);

	gameplayer p1;
	gameplayer p2;
	private int cho;

	public game(gameplayer p1, gameplayer p2) {
		this.p1 = p1;
		this.p2 = p2;
	}

	public void getPlayer() {
		System.out.println("请输入是否为玩家对战或者人机对战:1.玩家队长 ,2.人机大战");
		cho = INT();
		while (!rel(cho, 1, 2)) {
			System.out.println("请输入1或者2!");
			cho = INT();
		}
		System.out.println("请输入玩家1姓名:");
		String player1 = ob.next();
		p1.setName(player1);
		if (cho == 1) {
			System.out.println("请输入玩家2姓名:");
			String player2 = ob.next();
			p2.setName(player2);
		} else {
			p2.setName("工具人阿尔法");
		}
	}

	public void gaming() {
		boolean flag = true;
		getPlayer();
		int ga1;
		while (flag) {
			gameplayer.gametimes++;
			System.out.println(p1.getName() + "请输入数字代替:1.剪刀  2.石头   3.布");
			ga1 = INT();
			while (!rel(ga1, 1, 3)) {
				System.out.println("输入数不在范围,重新输入:");
				ga1 = INT();
			}
			int ga2;
			if (cho == 1) {
				System.out.println(p2.getName() + "请输入数字代替:1.剪刀  2.石头   3.布");
				ga2 = INT();
				while (!rel(ga2, 1, 3)) {
					System.out.println("输入数不在范围,重新输入:");
					ga2 = INT();
				}
			} else {
				ga2 = (int) (Math.random() * 3 + 1);
			}
			if (ga1 == 1 && ga2 == 3) {
				System.out.println(p1.getName() + "获胜");
				p1.scoreUP();
			} else if (ga1 == 3 && ga2 == 1) {
				System.out.println(p2.getName() + "获胜");
				p2.scoreUP();
			} else if (ga2 > ga1) {
				System.out.println(p2.getName() + "获胜");
				p2.scoreUP();
			} else if (ga1 == ga2) {
				System.out.println("平局重新选择!");
				continue;
			} else {
				System.out.println(p1.getName() + "获胜");
				p1.scoreUP();
			}

			System.out.println("是否继续游戏y/n:");
			String BUTTON = ob.next();
			if ("n".equals(BUTTON)) {
				flag = false;
			}
		}
	}

	public boolean rel(int n, int a, int b) {
		if (n >= a && n <= b) {
			return true;
		} else {
			return false;
		}
	}

	public int INT() {
		boolean flag = false;
		double sca = -1.0;
		String skr;
		while (!flag) {
			flag = ob.hasNextInt();
			if (flag) {
				sca = ob.nextInt();
				return (int) sca;
			} else {
				skr = ob.next();
				System.out.println("您输入的是一个错误的字符串" + skr);
				System.out.println("请重新输入整数:");
			}
		}
		return -1;
	}
}
package StartGame;

public class play {
	public static void main(String[] args) {

		gameplayer p1 = new gameplayer();
		gameplayer p2 = new gameplayer();
		game ga = new game(p1, p2);
		ga.gaming();
		p1.show();
		p2.show();

	}
}

那么又到了每次发布的马后炮时间(我也不想每次快发布完才发现还要改啊.....)上面的这个游戏中,玩家对战是可以看到前一位玩家的输入值的,实际上在玩家1输入结束,玩家2输入之前加入清屏就能解决.emmmmmm,反正没人看感觉无所谓啦

猜你喜欢

转载自blog.csdn.net/huangxin2015/article/details/82497583