Java面向物件開發剪刀石頭布游戲
- 介紹
- 需求分析
- 面向物件
- 準備作業
- 功能實作
- 系統工具類
- main方法
- 完成功能
- 注意事項
介紹
今天作業的需求是利用Java的 面向物件來完成石頭剪刀布這個小游戲,
既然是利用面向物件的方式,那么一定會用到介面、類、與 包 的概念,
沒有基礎的小伙伴們可以在CSDN 以及 百度搜索引擎了解
需求分析
角色
- 用戶
- 系統
用戶則負責出拳 、 出拳采用Scanner的 next()方法控制
系統則通過Java的隨機(Random)類來寫隨機演算法出拳
面向物件
要了解以下相關知識點
- 類
- 包
- 介面
沒有面向物件基礎的可以提前預習一下
準備作業
- Game(介面)
定義介面: Game
方法定義: onStart() 、onOver()、onResult()
上代碼
package cn.marinda.controll;
import cn.marinda.data.SystemData;
import cn.marinda.data.UserData;
public interface Game {
/** Game游戲介面
*
*
*/
/** 開始游戲的介面 方法
*
*/
public void onStart();
/** 結束游戲的介面 方法
*
*/
public void onOver();
/** 游戲結果的介面 方法
*
* @param userData
* @param systemData
* @return
*/
public boolean onResult(UserData userData,SystemData systemData);
}
- SystemData & UserData
定義類: SystemData & UserData
定義屬性: String Plans(出拳)
上代碼
package cn.marinda.data;
public class SystemData {
private String plans = "";
public SystemData(String plans)
{
this.plans = plans;
}
public SystemData()
{
}
public void setPlans(String plans){
this.plans = plans;
}
public String getPlans(){
return plans;
}
}
&
package cn.marinda.data;
public class UserData {
private String plans = "";
public UserData(String plans)
{
this.plans = plans;
}
public UserData()
{
}
public void setPlans(String plans){
this.plans = plans;
}
public String getPlans(){
return plans;
}
}
到這里我們的準備作業完成了
功能實作
- 定義一個GameHandle 類來實作 Game介面并實作相關方法
package cn.marinda.handle;
import cn.marinda.controll.Game;
import cn.marinda.data.SystemData;
import cn.marinda.data.UserData;
import cn.marinda.mannager.GameDataMannager;
import cn.marinda.utils.SystemUtils;
import javafx.application.Application;
import java.util.Scanner;
public class GameHandle implements Game {
public GameHandle()
{
}
/**
* 開始游戲的介面 方法
*
*/
@Override
public void onStart() {
while(true){
System.out.println("歡迎游玩 石頭剪刀布 游戲");
Scanner sc = new Scanner(System.in);
System.out.println("請出拳:");
String nextPlans = sc.next();
GameDataMannager dm = GameDataMannager.instance;
UserData userDatas = dm.getUserData(nextPlans);
String systemPlans = SystemUtils.onRandomResult();
SystemData systemDatas = dm.getSystemData(systemPlans);
System.out.println("系統出拳是:" +systemPlans);
onResult(userDatas, systemDatas);
System.out.println("按Q退出其他鍵繼續!");
String str = sc.next();
if(SystemUtils.isExit(str)){
onOver();
}else{
continue;
}
}
}
/**
* 結束游戲的介面 方法
*
*/
@Override
public void onOver() {
System.out.println("退出游戲成功!");
System.exit(0);
}
/**
* 游戲結果的介面 方法
*
* @param userData
* @param systemData
* @return
*/
@Override
public boolean onResult(UserData userData, SystemData systemData) {
SystemUtils.endResult(userData.getPlans(),systemData.getPlans());
return true;
}
}
- 定義一個游戲資料管理類 (GameMannager)
package cn.marinda.mannager;
import cn.marinda.data.SystemData;
import cn.marinda.data.UserData;
public class GameDataMannager {
/** GameData 游戲資料管理器
*
*/
public static GameDataMannager instance = new GameDataMannager();
public GameDataMannager()
{
}
public SystemData getSystemData()
{
return new SystemData();
}
public SystemData getSystemData(String plans)
{
return new SystemData(plans);
}
public UserData getUserData()
{
return new UserData();
}
public UserData getUserData(String plans)
{
return new UserData(plans);
}
}
系統工具類
主要實作相關 游戲邏輯 以及 猜拳機制 演算法和結算
定義一個 SystemUtils 類
package cn.marinda.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class SystemUtils {
/** SystemUtils
* 主要負責隨機演算法以及勝負判斷
*
*
*/
public static String onRandomResult()
{
Random random = new Random();
int numx = random.nextInt(3);
String plans = setPlans(numx);
return plans;
}
/** 設定 回傳字串
*
*
* @param num
* @return
*/
public static String setPlans(int num){
switch (num){
case 0:
return "石頭";
case 1:
return "布";
case 2:
return "剪刀";
}
return null;
}
/** 游戲計算結果
*
* @param userPlans
* @param systemPlans
*/
public static void endResult(String userPlans,String systemPlans)
{
int wins = 0;
switch (userPlans){
case "石頭":
wins = isWin(systemPlans);
if(wins == 1){
System.out.println("你輸了!再接再厲");
}else if(wins == 2){
System.out.println("你贏了!很棒!");
}else if(wins == 0){
System.out.println("這局平!");
}
break;
case "剪刀":
wins = isWin(systemPlans);
if(wins == 1){
System.out.println("你贏了!很棒!");
}else if(wins == 2){
System.out.println("這局平!");
}else if(wins == 0){
System.out.println("你輸了!再接再厲");
}
break;
case "布":
wins = isWin(systemPlans);
if(wins == 1){
System.out.println("這局平!");
}else if(wins == 2){
System.out.println("你輸了!再接再厲");
}else if(wins == 0){
System.out.println("你贏了!很棒!");
}
break;
}
}
/** 根據字串回傳數字進行比較
*
* @param systemPlans
* @return
*/
public static int isWin(String systemPlans){
//0 -> 石頭
if(systemPlans.equalsIgnoreCase("石頭")){
return 0;
}
else if(systemPlans.equalsIgnoreCase("剪刀"))
{
return 2;
}
else if(systemPlans.equalsIgnoreCase("布")){
return 1;
}
return -1;
}
public static boolean isExit(String exitStr)
{
if(exitStr.equalsIgnoreCase("q")){
return true;
}
return false;
}
}
main方法
package cn.marinda;
import cn.marinda.handle.GameHandle;
public class Application {
public static void main(String[] args) {
application();
}
private static void application()
{
GameHandle handle = new GameHandle();
handle.onStart();
}
}
完成功能
注意事項
了解面向物件相關知識、熟練掌握 介面定義使用 以及相關實作類
關于一直強調的 面向物件知識
- 可以看CSDN其他博主文章以及自行百度
- 對發布的內容有疑問的歡迎評論指出
- 感謝觀看
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297216.html
標籤:其他
