小时候大家都玩过石头剪刀布吧,相信大家对游戏规则都已经了然入心了吧,如果有不知道的我还是说一下吧:剪刀和石头,出石头赢了, 石头和布,出布的赢了,剪刀和布,出剪刀的赢了。
好了游戏规则就不多说了,直接说游戏实现:
我们模拟人与电脑玩剪刀石头布的游戏,人的输入,由 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方法。