最近正在學習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();
}
}
很簡單,理清了思路就很容易寫了。如果有錯誤請指出。
初學者,請見諒。