韩顺平老师java教程p262猜拳代码(借鉴了老师的代码)

第一次用java写这么长的代码,自己写出来很开心,很有成就感,想分享一下自己的快乐,也希望能和小伙伴们一起学习进步,如有不足可以指出,谢谢!

/*                                                                                                    
请编写一个猜拳的游戏                                                                                            
有个人 Tom,设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 0, 1, 2                                                    
0 表示 石头 1 表示剪刀 2 表示 布                                                                                 
并要可以显示 Tom的输赢次数(清单), 假定 玩三次.                                                                          
 */
import java.util.Random;                                                                              
import java.util.Scanner; 
public class CaiQuan {
	public static void main(String[] args) {
		Tom tom = new Tom();
		tom.mora(3);
	}
}
//设计一个类,方法完成猜拳
//循序渐进思想,先实现基本功能,再实现附加功能
class Tom{
	//表示电脑与Tom的出拳,范围0~2
	int moraTom;
	int moraComputer;
	//表示玩家与电脑的分数
	int scoreTom;
	int scoreComputer;
	//猜拳方法
	public void mora(int times){//表示猜拳次数
		//创建二维数组,存储每次出拳情况
		int[][] arr = new int[times][2];
		//创造字符数组记录每次输赢
		String[] strArr = new String[times];
		//猜拳前将分数清零
		scoreComputer = 0;
		scoreTom = 0;
		for(int i=0;i < times;i++){
			//获得Tom的出拳
			moraTom = getTomMora();
			//获得电脑的出拳
			moraComputer = getComputerMora();//为了美观这么写了
			//将记录存入数组
			arr[i][0] = moraTom;
			arr[i][1] = moraComputer;
			//比较出拳
			int result = vs();//记录比赛结果
			//将记录存入数组
			if(result == 1){
				strArr[i] = "赢";
			}else if(result == 0){
				strArr[i] = "输";
			}else{
				strArr[i] = "平";
			}
			//打印本次比赛
			print(result);
		}
		//输出清单
		printresult(times,arr,strArr);
	}
	//获取玩家出拳
	public int getTomMora(){
		//使用系统输入方法,创建对应对象
		Scanner myscanner = new Scanner(System.in);
		System.out.println("你想出什么:0~拳头;1~剪刀;2~布");
		int num = myscanner.nextInt();
		//检验输入
		if(num<0 || num>2){
			System.out.println("非法输入,请输入0~2!");
			return getTomMora();//递归的妙用,可以让用户一直输入直到正确
		}else{
			return num;
		}
	}
	//获取电脑出拳
	public int getComputerMora(){
		//使用系统提供的类来创造随机数
		Random myRandom = new Random();
		int num = myRandom.nextInt(3);
		return num;
	}
	//人机大战
	public int vs(){
		//1代表人赢,0代表机器赢,2代表平手
		if (moraTom == 0 && moraComputer == 1) {                                                   
            return 1;                                                                             
        } else if (moraTom == 1 && moraComputer == 2) {                                            
            return 1;                                                                             
        } else if (moraTom == 2 && moraComputer == 0) {                                            
            return 1;                                                                             
        } else if (moraTom == moraComputer){                                                       
            return 2;                                                                              
        } else {                                                                                      
            return 0;                                                                             
        } 
	}
	//打印本次比赛结果
	public void print(int result){
		if(result == 0){
			scoreComputer++;
			System.out.println("你出了:\"" + moraTom + 
				"\"机器出了:\"" + moraComputer + "\"你输了~~");
		}else if(result == 1){
			scoreTom++;//玩家赢的局数加1
			System.out.println("你出了:\"" + moraTom + 
				"\"机器出了:\"" + moraComputer + "\"你赢了!");
		}else{
			System.out.println("你出了:\"" + moraTom + 
				"\"机器出了:\"" + moraComputer + "\"平手!");
		}
	}
	//打印清单
	public void printresult(int times,int[][] arr,String[] strArr){
		System.out.println("局数\t玩家\t机器\t结果\t");
		for(int i=0;i < times;i++){
			System.out.println("第" + i + "局" + "\t" + arr[i][0] + 
				"\t" + arr[i][1] + "\t" + strArr[i]);
		}
		if(scoreComputer == scoreTom){
			System.out.println("总结果:平手!");
		}else if(scoreTom > scoreComputer){
			System.out.println("总结果:你赢了!");
		}else{
			System.out.println("总结果:你输了(|^|)~~");
		}
		// System.out.println(scoreTom + " " + scoreComputer);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值