⽤java实现猜拳案例(两种思路)
此案例的需求如下:
1.系统随机猜拳(⽯头,剪⼑,布)
2.控制台输⼊ ⽯头,剪⼑,布,其中之⼀
3.对⽐判断
4.当猜拳赢了,程序提⽰”你赢了!游戏结束“程序退出
Step1具体的逻辑:
Step1:将系统随机猜拳的逻辑封装
1.1:我们需要⼀个库来装⽯头,剪⼑,布
String[] ownership ={"⽯头","剪⼑","布"};//将⽤来对⽐的⽯头,剪⼑,布存到数组中
1.2:我们虽然不能直接随机出字符串(⽯头,剪⼑,布)
但是我们可以创建⼀个变量当作下标来随机库的长度的数就得到了⼀个具体的下标的值,
然后再⽤数组(库)名[下标变量]确定具体的元素再赋值给最终返回值的变量,
就实现了随机⽯头,剪⼑,布其中之⼀
//        随机⼀个ownership数组的下标
int index =(int)(Math.random()*ownership.length);
//        去除下标对应的元素赋值给最终返回值的变量
random = ownership[index];
return random;
Step2:将对⽐的逻辑封装
因为我们最终要输出的结果是⼀个字符串类型的值,所以我们的返回值类型是String,其次我们需要拿两个参数进⾏判断,所以参数是两个,其次因为我们是拿两个字符串对⽐,则参数的类型就是String了,两个参数分别是系统随机⽣成的字符串(computers⽅法),控制台输⼊的字符串,
//    将猜拳对⽐的逻辑封装
static String comparison(String computers,String input){
1.对⽐的逻辑:
⾸先假设系统出的是⽯头,
假设控制台输⼊的是⽯头则平局
假设控制台输⼊的是剪⼑则失败
假设控制台输⼊的是布则胜利
假设系统出的是布,
假设控制台输⼊的是⽯头则失败
假设控制台输⼊的是剪⼑则胜利
假设控制台输⼊的是布则平局
假设系统出的是剪⼑,
假设控制台输⼊的是⽯头则胜利
假设控制台输⼊的是剪⼑则平局
假设控制台输⼊的是布则失败
对⽐逻辑具体实现One:
static String comparison(String random,String input){
String result ="";//最终返回值的变量
//        对⽐逻辑
if("⽯头".equals(random)){//假设系统出⽯头
if("⽯头".equals(input)){//假设控制台输⼊的是⽯头
result ="平局";
}else if("剪⼑".equals(input)){//假设控制台输⼊的是剪⼑
result ="失败";
}else if("布".equals(input)){//假设控制台输⼊的是布
result ="胜利";
}
}
if("剪⼑".equals(random)){//假设系统出剪⼑
if("⽯头".equals(input)){//假设控制台输⼊的是⽯头
result ="胜利";
}else if("剪⼑".equals(input)){//假设控制台输⼊的是剪⼑
result ="平局";
}else if("布".equals(input)){//假设控制台输⼊的是布
result ="失败";
}
}
if("布".equals(random)){//假设系统出布
if("⽯头".equals(input)){//假设控制台输⼊的是⽯头
result ="失败";
}else if("剪⼑".equals(input)){//假设控制台输⼊的是剪⼑
result ="胜利";
}else if("布".equals(input)){//假设控制台输⼊的是布
result ="平局";
}
}
return result;
}
}
这样捋的话思路⽐较清晰,但是代码量较⼤。
仔细观察我们发现平局的情况下两个参数的字符串是⼀样的所以可以将它优化成⼀组if分⽀ 其次当我们可以先列举出玩家胜利的情况或失败的情况,若不符合我们列举的可能,则结果就相反了
例如我们列举出玩家胜利的情况:
当系统出⽯头,玩家出布
当系统出剪⼑,玩家出⽯头
当系统出布,玩家出剪⼑
若这些胜利的情况都不符合则说明玩家输了
对⽐逻辑优化后的具体实现:
static String bunko(String random, String input){
String WinLos="";//最终返回值的变量
//        判断输赢的逻辑
if(random.equals(input)){//当两个字符串⼀致时
WinLos="平局";
}else
//            列举出玩家赢的情况,若都不符合则是失败
if(("⽯头".equals(random)&&"布".equals(input))||("布".equals(random)&&"剪⼑".equals(input))||("剪⼑".equals(random)&&"⽯头".equals(input))){                WinLos="胜利";
}else{
WinLos="失败";
}
return WinLos;
}
}
然后在main⽅法中去整理,然后将需求按主次⼀次套⼊就好了
最后进⾏了⼀系列的逻辑优化后的代码如下:
代码的最终形式:
package game;
import java.util.Scanner;
/**
* ⽤java实现猜拳案例WayOne
*/
public class Conjecture {
//        将系统随机出拳的逻辑封装
static String computers(){
String random ="";//最终返回值的变量
String[] ownership ={"⽯头","剪⼑","布"};//列举出系统可能出现的对⽐数据
//        随机⼀个ownership数组的下标
int index =(int)(Math.random()*ownership.length);
//        去除下标对应的元素赋值给最终返回值的变量
random = ownership[index];
nextint()方法return random;
}
//    将猜拳对⽐的逻辑封装
static String comparison(String computers,String input){
String result ="";//最终返回值的变量
//        判断输赢的逻辑
if(random.equals(input)){//当两个字符串⼀致时
WinLos="平局";
}else
//            列举出玩家赢的情况,若都不符合则是失败
if(("⽯头".equals(random)&&"布".equals(input))||("布".equals(random)&&"剪⼑".equals(input))||("剪⼑".equals(random)&&"⽯头".equals(input))){                WinLos="胜利";
}else{
WinLos="失败";
}
return result;
}
//    主⼊⼝中整理,执⾏封装的逻辑
public static void main(String[] args){
//        控制台输⼊
Scanner sc=new Scanner(System.in);
//        需求One:若没有猜对则继续猜,直到猜对为⽌
while(true){//⾃造死循环
/
/        调⽤computers⽅法
String random =computers();
//        作弊⼀下
System.out.println(random);
//          友好提⽰
System.out.println("猜吧");
//        接收控制台输⼊
String input = sc.next();
//            需求:当输⼊的是EXIT的时候程序终⽌且退出
if("EXIT".equals(input)){
System.out.println("程序退出");
break;//终⽌循环,程序退出
}else{
//        调⽤comparison⽅法对⽐
String result =comparison(random,input);
//            需求:猜对则游戏退出
if("胜利".equals(result)){
//        输出对⽐结果
System.out.println(result);
break;
}else{
//        输出对⽐结果
System.out.println(result);
}
}
}
}
}
}
逻辑2:
因为计算机是不懂我们的语⾔的,所以我们就要转换成计算机的语⾔,那么计算机是拿怎么对⽐的呢?当然是数字了
逻辑2的具体实现:
那么换成数字该如何实现呢? 逻辑2的思路是和逻辑1⼀样的,只需将库的元素换成数字 ,将除了第⼆⽅法的返回值的类型以外的其他类型全部转换成int类型就好然后对⽐中就将⽯头剪⼑布改成1,2,3就可以实现啦
package game;
import java.SecureCacheResponse;
import java.util.Scanner;
/**
* ⽤java实现猜拳案例WayTwo
*/
public class ConjectureTwo {
//    将系统随机值的逻辑封装
static int computers(){
int random;//最终返回值
//        将所有可能出现的装到库中ownership
int[] ownership ={1,2,3};//1-⽯头 2-布 3-剪⼑
//        随机⼀个ownership下标
int index=(int)(Math.random()*ownership.length);
//        将下标对应的元素赋值给ramdom
random = ownership[index];
return random;
}
//    将对⽐逻辑封装
static String comparison(int random,int input){
String result = null;//初始化最终返回值
//        对⽐逻辑
if(random==input){//若相同
result ="平局";
}else if((random==1&& input==2)||(random==2&& input==3)||(random==3&& input==1)){//                result ="胜利";
}else{//否则
result ="失败";
}
return result;
}
public static void main(String[] args){
//        控制台输⼊
Scanner sc =new Scanner(System.in);
//        需求:若没有胜利则⼀直猜拳
while(true){
//        友好提⽰
System.out.println("猜吧!(⽯头-1 布-2 剪⼑-3)");
//        调⽤computers⽅法
int random =computers();
//            作弊⼀下
System.out.println(random);
//        接收控制台输⼊
int input = sc.nextInt();
//        调⽤comparison⽅法进⾏对⽐
String result =comparison(random,input);
//        需求:若赢了程序退出
if("胜利".equals(result)){
System.out.println(result);
break;//跳出循环,程序结束
}else{
System.out.println(result);//友好提⽰
}
}
}
}
总结:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。