Java入門案列之猜拳小游戲
最近正在學(xué)習(xí)Java基礎(chǔ)知識,終于完成了第一個(gè)小demo,記錄下來,算是一個(gè)小總結(jié)與整理,也希望可以幫助到別人。
先看看我寫了哪些類:
Player:玩家類;
ComputerPlayer:機(jī)器人玩家類,主要用來實(shí)現(xiàn)機(jī)器人隨機(jī)出拳;
Game:游戲類,主要實(shí)現(xiàn)游戲規(guī)則的邏輯,以及正式游戲的邏輯;
TestGuessBox:代碼測試類;
Player類:
//玩家類 public class Player { private String name; //玩家昵稱 private int score; //玩家積分 private String box; //玩家出的 //玩家構(gòu)造函數(shù),傳入玩家昵稱與玩家初始積分 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 { //機(jī)器人玩家構(gòu)造函數(shù),傳入機(jī)器人昵稱與初始積分 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類
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; } //開始游戲 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("您和機(jī)器人打平了!"); } } } else { System.out.println("輸入了無法識別的關(guān)鍵字,請重新輸入:"); 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; } /** * 過濾器 * @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(); } }
很簡單,理清了思路就很容易寫了。如果有錯誤請指出。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java利用Dijkstra和Floyd分別求取圖的最短路徑
本文主要介紹了圖的最短路徑的概念,并分別利用Dijkstra算法和Floyd算法求取最短路徑,最后提供了基于鄰接矩陣和鄰接表的圖對兩種算法的Java實(shí)現(xiàn)。需要的可以參考一下2022-01-01解析Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法
MyBatis是一個(gè)支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架,這篇文章主要介紹了Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法,需要的朋友可以參考下2016-08-08Java的Hibernate框架中的組合映射學(xué)習(xí)教程
組合映射即是指主對象和子對象關(guān)聯(lián)且擁有相同的生命周期的映射關(guān)系,這里我們將舉一些數(shù)據(jù)操作的實(shí)例,來講解Java的Hibernate框架中的組合映射學(xué)習(xí)教程2016-07-07SpringBoot整合WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能
在當(dāng)今互聯(lián)網(wǎng)時(shí)代,實(shí)時(shí)通信已經(jīng)成為了許多應(yīng)用程序的基本需求,而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實(shí)時(shí)通信解決方案,本文將介紹如何使用SpringBoot框架來實(shí)現(xiàn)WebSocket的集成,快速搭建實(shí)時(shí)通信功能,感興趣的朋友可以參考下2023-11-11SpringBoot詳細(xì)講解靜態(tài)資源導(dǎo)入的實(shí)現(xiàn)
在Web開發(fā)過程中,我們需要接觸許多靜態(tài)資源,如CSS、JS、圖片等;在之前的開發(fā)中,這些資源都放在Web目錄下,用到的時(shí)候按照對應(yīng)路徑訪問即可。不過在SpringBoot項(xiàng)目中,沒有了Web目錄,那這些靜態(tài)資源該放到哪里去,又要如何訪問呢?這就是我們要講的靜態(tài)資源導(dǎo)入2022-05-05Java前后端分離的在線點(diǎn)餐系統(tǒng)實(shí)現(xiàn)詳解
這是一個(gè)基于SpringBoot+Vue框架開發(fā)的在線點(diǎn)餐系統(tǒng)。首先,這是一個(gè)前后端分離的項(xiàng)目。具有一個(gè)在線點(diǎn)餐系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧2022-01-01