Java入門(mén)案列之猜拳小游戲
最近正在學(xué)習(xí)Java基礎(chǔ)知識(shí),終于完成了第一個(gè)小demo,記錄下來(lái),算是一個(gè)小總結(jié)與整理,也希望可以幫助到別人。
先看看我寫(xiě)了哪些類(lèi):

Player:玩家類(lèi);
ComputerPlayer:機(jī)器人玩家類(lèi),主要用來(lái)實(shí)現(xiàn)機(jī)器人隨機(jī)出拳;
Game:游戲類(lèi),主要實(shí)現(xiàn)游戲規(guī)則的邏輯,以及正式游戲的邏輯;
TestGuessBox:代碼測(cè)試類(lèi);
Player類(lèi):
//玩家類(lèi)
public class Player {
private String name; //玩家昵稱(chēng)
private int score; //玩家積分
private String box; //玩家出的
//玩家構(gòu)造函數(shù),傳入玩家昵稱(chēng)與玩家初始積分
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類(lèi)
public class ComputerPlayer extends Player {
//機(jī)器人玩家構(gòu)造函數(shù),傳入機(jī)器人昵稱(chēng)與初始積分
ComputerPlayer(String name, int score) {
super("機(jī)器人"+name, score);
// TODO Auto-generated constructor stub
}
/**
* 實(shí)現(xiàn)機(jī)器人玩家隨機(jī)出拳的邏輯
*/
void punch() {
String[] box = {"剪刀","石頭","布"};
int index =(int) (Math.random()*3);
this.setBox(box[index]);
}
}
Game類(lèi)
import java.util.Scanner;
public class Game {
Player p; //玩家
ComputerPlayer cp; //機(jī)器人玩家
//構(gòu)造函數(shù),得到一個(gè)玩家和一個(gè)機(jī)器人玩家
Game(Player p, ComputerPlayer cp) {
this.p = p;
this.cp = cp;
}
//開(kāi)始游戲
void start() {
System.out.println("玩家"+p.getName()+
"和"+cp.getName()+"開(kāi)始游戲咯");
System.out.println("您的初始積分為:"+p.getScore()+
"\n"+cp.getName()+"的積分是:"+cp.getScore());
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("請(qǐng)出拳(剪刀石頭布,exit退出游戲):");
String pbox=sc.next();
if(filter(pbox)) { //過(guò)濾器
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("您和機(jī)器人打平了!");
}
}
}
else {
System.out.println("輸入了無(wú)法識(shí)別的關(guān)鍵字,請(qǐng)重新輸入:");
continue; //退出本次循環(huán),進(jìn)入下一次循環(huán)
}
}
System.out.println("本輪結(jié)束,積分情況如下:");
System.out.println("您的當(dāng)前積分:"+p.getScore());
System.out.println(cp.getName()+"的當(dāng)前積分:"
+cp.getScore());
}
/**
* 游戲規(guī)則
*
* @param p1 玩家1
* @param cp2 機(jī)器玩家2
* @return 0為打平,1為玩家贏,-1為機(jī)器玩家贏
*/
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;
}
/**
* 過(guò)濾器
* @param s 需要過(guò)濾的文字
* @return
*/
boolean filter(String s) {
if (s.equals("剪刀") || s.equals("石頭") || s.equals("布") || s.equals("exit")) {
return true;
} else
return false;
}
}
TestGuessBox類(lèi)
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();
}
}
很簡(jiǎn)單,理清了思路就很容易寫(xiě)了。如果有錯(cuò)誤請(qǐng)指出。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中Cron表達(dá)式的生成解析及計(jì)算的工具類(lèi)完整代碼
這篇文章主要給大家介紹了關(guān)于Java中Cron表達(dá)式的生成解析及計(jì)算工具類(lèi)的相關(guān)資料,Cron表達(dá)式是一個(gè)字符串,字符串空格分割,每一個(gè)域代表一個(gè)含義,一個(gè)cron表達(dá)式有至少6個(gè),需要的朋友可以參考下2023-12-12
Java 文件傳輸助手的實(shí)現(xiàn)(單機(jī)版)
這篇文章主要介紹了Java 文件傳輸助手的實(shí)現(xiàn)(單機(jī)版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
MyBatis中 #{} 和 ${} 的區(qū)別小結(jié)
MyBatis中#{}和${}是兩種占位符,本文就來(lái)介紹一下MyBatis中 #{} 和 ${} 的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
IDEA自動(dòng)生成TestNG的testng.xml的插件方法
這篇文章主要介紹了IDEA自動(dòng)生成TestNG的testng.xml的插件方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
詳解Java中的反射機(jī)制和動(dòng)態(tài)代理
本文將詳細(xì)介紹反射機(jī)制以及動(dòng)態(tài)代理機(jī)制,而且基本現(xiàn)在的主流框架都應(yīng)用了反射機(jī)制,如spring、MyBatis、Hibernate等等,這就有非常重要的學(xué)習(xí)意義2021-06-06
Java導(dǎo)出Excel通用工具類(lèi)實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Java導(dǎo)出Excel通用工具類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Java Map集合與Collection類(lèi)的使用詳解
這篇文章主要介紹了Java Map集合的使用及Collection工具類(lèi)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11

