Java入門案列——猜拳小遊戲(控制檯)

最近正在學習Java基礎知識,終於完成了第一個小demo,記錄下來,算是一個小總結與整理,也希望可以幫助到別人。

先看看我寫了哪些類:

Player:玩家類;

ComputerPlayer:機器人玩家類,主要用來實現機器人隨機出拳;

Game:遊戲類,主要實現遊戲規則的邏輯,以及正式遊戲的邏輯;

TestGuessBox:代碼測試類;


Player類:


//玩家類
public class Player {
	private String name; //玩家暱稱
	private int score; //玩家積分
	private String box; //玩家出的
	
	//玩家構造函數,傳入玩家暱稱與玩家初始積分
	Player(String name,int score){
		this.name=name;
		this.score=score;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public String getBox() {
		return box;
	}
	public void setBox(String box) {
		this.box = box;
	}
	
	

}

ComputerPlayer類


public class ComputerPlayer extends Player {
	

	//機器人玩家構造函數,傳入機器人暱稱與初始積分
	ComputerPlayer(String name, int score) {
		super("機器人"+name, score);
		// TODO Auto-generated constructor stub
	}

	/**
	 * 實現機器人玩家隨機出拳的邏輯
	 */
	void punch() {
		String[] box = {"剪刀","石頭","布"};
		int index =(int) (Math.random()*3);
		
		this.setBox(box[index]);
	}
}

Game類

import java.util.Scanner;

public class Game {
	Player p;  //玩家
	ComputerPlayer cp;  //機器人玩家

	//構造函數,得到一個玩家和一個機器人玩家
	Game(Player p, ComputerPlayer cp) {
		this.p = p;
		this.cp = cp;
	}

	//開始遊戲
	void start() {
		 System.out.println("玩家"+p.getName()+
				 "和"+cp.getName()+"開始遊戲咯");
		 System.out.println("您的初始積分爲:"+p.getScore()+
				 "\n"+cp.getName()+"的積分是:"+cp.getScore());
		 Scanner sc=new Scanner(System.in);
		 while(true) {
			 
			 System.out.println("請出拳(剪刀石頭布,exit退出遊戲):");
			 String pbox=sc.next();
			 if(filter(pbox)) { //過濾器
				 if(pbox.equals("exit")) { //退出遊戲
					 break;
				 }else {
					 p.setBox(pbox);
					 cp.punch();
					 System.out.println("您出了:"+p.getBox());
					 System.out.println(cp.getName()+"出了:"+cp.getBox());
					 int result = ruler(p,cp);
					 if(result>0) {
						 System.out.println("您贏了,贏得10積分");
						 p.setScore(p.getScore()+10);
						 cp.setScore(cp.getScore()-10);
					 }
					 else if(result<0) {
						 System.out.println("您輸了,扣除10積分");
						 p.setScore(p.getScore()-10);
						 cp.setScore(cp.getScore()+10);
					 }
					 else {
						 System.out.println("您和機器人打平了!");
					 }
				 }
			 }
			 
		 else {
			 System.out.println("輸入了無法識別的關鍵字,請重新輸入:");
			 continue; //退出本次循環,進入下一次循環
		 }
			 
		 }	 
			 
		 System.out.println("本輪結束,積分情況如下:");
		 System.out.println("您的當前積分:"+p.getScore());
		 System.out.println(cp.getName()+"的當前積分:"
		 +cp.getScore());
			 
	 }

	/**
	 * 遊戲規則
	 * 
	 * @param p1  玩家1
	 * @param cp2 機器玩家2
	 * @return 0爲打平,1爲玩家贏,-1爲機器玩家贏
	 */
	int ruler(Player p1, Player cp2) {

		if (p1.getBox().equals("剪刀")) {
			if (cp2.getBox().equals("石頭"))
				return -1;
			else if (cp2.getBox().equals("布"))
				return 1;
		} else if (p1.getBox().equals("石頭")) {
			if (cp2.getBox().equals("剪刀"))
				return 1;
			else if (cp2.getBox().equals("布"))
				return -1;
		} else if (p1.getBox().equals("布")) {
			if (cp2.getBox().equals("剪刀"))
				return -1;
			else if (cp2.getBox().equals("石頭"))
				return 1;
		}
		return 0;
	}

	/**
	 * 過濾器
	 * @param s 需要過濾的文字
	 * @return
	 */
	boolean filter(String s) {
		if (s.equals("剪刀") || s.equals("石頭") || s.equals("布") || s.equals("exit")) {
			return true;
		} else
			return false;
	}
}

TestGuessBox類


public class TestGuessBox {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Player p =new Player("小七月",100);
		ComputerPlayer cp=new ComputerPlayer("小丑八怪",100);
		Game game=new Game(p,cp);
		game.start();

	}

}

很簡單,理清了思路就很容易寫了。如果有錯誤請指出。

初學者,請見諒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章