1. 程式人生 > >java面對物件猜拳小遊戲

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();
	}

}