java面对对象猜拳小游戏

我觉的初学面对对象,首先是思路很重要。我写的这个猜拳小游戏,我觉得对于我的思路有帮助,需要的可以参考下

一共四个类

  • 1:玩家类
  • 2:电脑类
  • 3:游戏过程类
  • 4:测试类

玩家类

public class Person {
   // 用户类的属性
   	public String pname;// 姓名
   	public int pscore;// 积分
   	
   	public void showquan(int pnum) {
   		switch(pnum) {
   		case 1:
   			System.out.println("你出拳为:剪刀");
   			break;
   		case 2:
   			System.out.println("你出拳为:石头");
   			break;
   		case 3:
   			System.out.println("你出拳为:布");
   			break;
   		default:
   			System.out.println("输入错误!");
   		}
   	}
}

电脑类

public class Computer {
	public String cname;
	public int cscore;
	
	
	public void show(int cnum) {
		switch(cnum) {
		case 1:
			System.out.println(cname+"出拳: 剪刀");
			break;
		case 2:
			System.out.println(cname+"出拳: 石头");
			break;
		case 3:
			System.out.println(cname+"出拳: 布");
			break;
		default:
			System.out.println("输入有误,请重新输入!");
			
		}
	}
}

游戏过程类

// 导包
import java.util.Random;
import java.util.Scanner;


public class Game {
	// 输入数据的实例化对象
	Scanner scan=new Scanner(System.in);
	// 存放电脑玩家信息的数组,数组类型为我们的Computer类
	Computer[] arr=new Computer[3];
	// 实例化对象Person玩家类
	Person p=new Person();
	// 随机数的实例化对象
	Random ran=new Random();
	 
	 /**
	  *  电脑类的初始化  
	  *  给电脑类创建一个电脑类的数组,给其初始化 
	  *  	给其创建三个对象  赋值 给电脑类型的数组arr
	  */
	public void initial() {
		// 需要注意的是这里是创建的三个对象,所以需要电脑类的三次实例化对象
		// 第一个电脑对象为  刘备
		Computer c=new Computer();
		c.cname="刘备";
		arr[0]=c;
		// 第二个实例化对象为孙权
		c=new Computer();
		c.cname="孙权";
		arr[1]=c;
		// 第三个电脑类实例化对象为 曹操
		c=new Computer();
		c.cname="曹操";
		arr[2]=c;
	}
	/**
	 *  游戏的开始方法
	 *  放置的是我们整个的流程
	 */
	public void startGame() {
		// 调用 本类中的开始菜单
		startMenu();
		System.out.println("出拳规则:1.剪刀2.石头3.布");
		System.out.print("请选择对方角色(1:刘备2:孙权3:曹操):");
		// 选择电脑角色
		int num=scan.nextInt();
		// 输出选择的是哪一个对象
		System.out.println("你选择了"+computerObject(num).cname+"对战");
		// 提示选择是否开始
		System.out.print("要开始吗?(y/n):");
		String choose=scan.next();
		if("n".equals(choose)) {
			// 当选择为n的时候也就是程序结束的时候。
			// 程序结束的时候,需要注意的是推出的这个方法
			// 使用 return来退出本方法
			System.out.println("程序结束,欢迎下次使用!");
			return ;
		}
		// 因为  不一定进行几次游戏,所以使用while的死循环来进行游戏
		// count 用来计数,一共进行了几轮游戏
		int count=0;
		while(true) {
			// 调用 start的方法,一次猜拳的过程的方法
			start(num);
			count+=1;
			// 提示是否进行下一轮
			System.out.print("是否开始下一轮?(y/n):");
			String choose1=scan.next();
			if("n".equals(choose1)) {
				// 最后选择不继续玩的时候需要输出下最后的积分,以及最后的结果
				showResult(num,count);
				System.out.println("111程序结束,欢迎下次使用!");
				return;
			}
		}
	}
	/**
	 * 开始的菜单方法
	 */
	public void startMenu() {
		// 初始 菜单界面
		System.out.println("***************欢迎进入游戏世界*****************");
		System.out.println();
		System.out.println("               *****************");
		System.out.println("               **    猜拳,开始     **");
		System.out.println("               *****************");
		System.out.println();
	}
	/** 
	 * 这是返回我们玩家选择 的是那个电脑对象
	 * @param num  // 玩家选择的是那个对应电脑角色的数字
	 * @return  // 玩家选择的是哪一个电脑对象
	 */
	public Computer computerObject(int num) {
		// 因为是几个选择项,所以使用switch来选择
		switch(num) {
		case 1:
			return arr[0];
		case 2:
			return arr[1];
		case 3:
			return arr[2];
		default:
			return null;
			}
	}
	/**
	 * 一次猜拳的过程方法
	 * 玩家出拳以及电脑出拳,以及胜负和电脑玩家的积分
	 * 赢一次积一分,输或者平局都不积分
	 * @param num
	 */
	public void start(int num) {
		System.out.print("请出拳:1.剪刀2.石头3.布(输入相对应的数字):");
		int pnum=scan.nextInt();
		//调用玩家的实例化对象 的showquan方法,输出下玩家的出拳
		p.showquan(pnum);
		// 电脑出拳,方式是随机1-3之间的随机数
		int cnum=ran.nextInt(3)+1;
		computerObject(num).show(cnum);
		// 两个出拳比较
		compare(num,pnum,cnum);
	}
	
	/**
	 * 比较玩家与电脑谁赢的方法                                            
	 * 数字的对应关系:                   
	 * 		1: 剪刀 2:石头 3:布
	 * @param num	决定电脑对象的数字
	 * @param pnum	玩家出拳对应的数字    
	 * @param cnum	电脑出拳对应的数字
	 */
	public void compare(int num,int pnum,int cnum) {
		if(pnum==cnum) {
			System.out.println("结果说:和局.真衰!嘿嘿,等着瞧吧");
		}else if( pnum-cnum==1 || cnum-pnum==2) {
			System.out.println("结果说:恭喜恭喜,你赢了!");
			//玩家获胜的时候,玩家积分增加一分
			p.pscore+=1;
		}else {
			System.out.println("结果说:你输了,真笨");
			// 电脑获胜的时候,电脑加一分
			computerObject(num).cscore+=1;
		}
	}
	/**
	 *  最后显示最终结果的方法
	 * @param num // 玩家选择电脑角色对应的数字
	 * @param count // 对战的次数
	 */
	public void showResult(int num,int count) {
		System.out.print("请输入你的姓名:");
		String pname=scan.next();
		p.pname=pname;
		System.out.println(p.pname+" VS "+computerObject(num).cname);
		System.out.println("对战次数:"+count+"次");
		System.out.println();
		System.out.println("姓名\t得分");
		System.out.println(p.pname+"\t"+p.pscore);
		System.out.println(computerObject(num).cname+"\t"+computerObject(num).cscore);
		if(p.pscore>computerObject(num).cscore) {
			System.out.println("最后的结果:恭喜恭喜!你获胜了");
		}else if(p.pscore==computerObject(num).cscore) {
			System.out.println("最后的结果:可惜可惜,平局");
		}else {
			System.out.println("最后的结果,惜败惜败");
		}
	}
	
}

测试类Test

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 实例化对象
		Game g=new Game();
		// 初始化电脑类的信息
		g.initial();
		// 开始游戏
		g.startGame();
	}

}

猜你喜欢

转载自blog.csdn.net/qq_43389959/article/details/83473588