Java練習——撲克牌發牌器

来源:https://www.cnblogs.com/ldlihmk1314/archive/2019/09/02/11450593.html
-Advertisement-
Play Games

Java練習——撲克牌發牌器聲明:學習自其他博主,感謝分享,這裡自己也寫了一下。實現思路 - 構建一張撲克牌 - 構建一套撲克牌 - 測試 構建一張撲克牌 構建一套撲克牌 測試 結果: 玩家1紅桃6 方塊4 方塊A 黑桃4 草花2 紅桃Q 紅桃J 紅桃K 方塊3 黑桃K 方塊8 黑桃7 黑桃5 玩家 ...


Java練習——撲克牌發牌器
聲明:學習自其他博主,感謝分享,這裡自己也寫了一下。
實現思路

  • - 構建一張撲克牌
  • - 構建一套撲克牌
  • - 測試

 構建一張撲克牌

/**
* @author 鼕鼕
* 定義一個單張撲克牌類
* 有花型,大小
*/
public class Card {

private String flower; // 花型
private int daxiao; // 點數

/**構造方法
* @param flower
* @param daxiao
*/
public Card(String flower, int daxiao) {
this.flower = flower;
this.daxiao = daxiao;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
* 獲取本張卡牌的花型與大小,對於特殊的大小,如1——A,輸出時進行轉換
*/
public String toString() {
String daxiaoStr = "";
switch(daxiao) {
case 1: daxiaoStr = "A"; break;
case 11: daxiaoStr = "J"; break;
case 12: daxiaoStr = "Q"; break;
case 13: daxiaoStr = "K"; break;
default: daxiaoStr = String.valueOf(daxiao);
}
return flower + daxiaoStr;
}
}

 

構建一套撲克牌

public class Poker {

private static String[] flowers = {"黑桃", "紅桃", "草花", "方塊"};
private static int[] daxiaos = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
private Card[] cards;//卡片數組,應該有54張,這裡去掉大小王,只52張

/**
* 構造器
* 按順序實例化52張撲克牌
*/
public Poker() {
cards = new Card[52];
for(int i = 0; i < flowers.length; i++) {
for(int j = 0; j < daxiaos.length; j++) {
cards[i * 13 + j] = new Card(flowers[i], daxiaos[j]);
}
}
}

/**
* 洗牌 (隨機亂序)
* 對於52個Card實例數組隨機亂序排列
*/
public void shuffle() {
for(int i = 0, len = cards.length; i < len; i++) {
int index = (int) (Math.random() * len);
Card temp = cards[index];
cards[index] = cards[i];
cards[i] = temp;
}
}

/**
* 發牌
* @param index 發牌的位置
* 
*/
public Card deal(int index) {
return cards[index];
}

}

 

 測試

 

public class Test {

public static void main(String[] args) {
Poker poker = new Poker();//生成撲克牌
poker.shuffle(); // 洗牌(亂序)
Card c1 = poker.deal(0); // 發第一張牌
//創建四個玩家,每個玩家13張空牌
Card [] person1=new Card[13];
Card [] person2=new Card[13];
Card [] person3=new Card[13];
Card [] person4=new Card[13];
//為玩家的的空牌賦值
for(int i=1;i<=52;i++)
{
if(i<=13) person1[i-1]=poker.deal(i-1);
if(i>13&&i<=26) person2[i-1-13]=poker.deal(i-1);
if(i>26&&i<=39) person3[i-1-26]=poker.deal(i-1);
if(i>39&&i<=52) person4[i-1-39]=poker.deal(i-1); 
}
//列印
System.out.println("玩家1");
for (Card card : person1) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家2");
for (Card card : person2) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家3");
for (Card card : person3) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家4");
for (Card card : person4) {
System.out.print(card+" ");
}
}
}

結果:

玩家1
紅桃6 方塊4 方塊A 黑桃4 草花2 紅桃Q 紅桃J 紅桃K 方塊3 黑桃K 方塊8 黑桃7 黑桃5
玩家2
草花A 黑桃2 紅桃7 草花3 草花5 方塊J 方塊9 草花9 草花K 黑桃8 草花J 黑桃10 紅桃8
玩家3
方塊7 紅桃4 紅桃2 草花6 方塊2 黑桃Q 黑桃9 黑桃A 草花10 草花7 紅桃10 紅桃A 方塊Q
玩家4
紅桃9 方塊5 草花8 方塊10 方塊K 草花Q 黑桃3 紅桃5 黑桃6 黑桃J 紅桃3 方塊6 草花4

註意事項

1. 不要忘記在Poker類里導入Card類,在Test類裡面導入Poker和Card;
2. 自己想想,動手做一做才能真正理解。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 希望它可以像鋼鐵俠中的 Jarvis 一樣幫我們解決資源的管控問題。 ...
  • 本文微信公眾號「AndroidTraveler」首發。 背景 最近在看《設計模式之禪》,為了能夠更加深入的理解設計模式,達到學以致用。 這邊記錄一下自己的一些感受和看法,並結合具體代碼實戰來進行說明。 模板方法模式 但凡和設計模式掛上鉤,我們總是會覺得「高不可攀」。 然而實際上,設計模式是基於大量實 ...
  • [TOC] 題目 "CF448D Multiplication Table" 思路 二分答案,每一排都是遞增的,所以二分$ans$,去計算有多少個數和$ans$相等,有多少個數比$ans$小,如果小於$ans$的數少於$k$個並且小於等於$ans$的數大於等於$k$個,那麼當前$ans$就是答案。 ...
  • “猴子補丁”就是指,在函數或對象已經定義之後,再去改變它們的行為。 舉個例子: import datetime datetime.datetime.now = lambda: datetime.datetime(2012, 12, 12) 大部分情況下,這是種很不好的做法 - 因為函數在代碼庫中的行 ...
  • getpwname只能得到gid一個username。 getgroups只能獲取groups腳本用戶。 我怎麼能得到所有groups的任意一個username,比如id -Gn命令? 解決方案 本文首發於Python黑洞網,博客園同步更新 ...
  • 又拾起了rust語言, 想寫一點東西玩一玩, 但是發現連一個獲取本機IP地址的庫都沒有, 還得輓起袖子自己擼. https://crates.io/crates/local_ipaddress 沒有用ifconfig, 也沒有掃描網卡, 就開了一個UdpSocket嘗試著去連一個IP地址, 然後看本 ...
  • JVM調優的目的是保證在**一定吞吐量**的情況下儘可能的**減少GC次數**,從而減少系統停頓時間,提高服務質量和效率。 ...
  • 使用一個polygon矢量提取某個文件夾中所有的tif格式柵格數據 (要確保先安裝好arcpy包) 2019-09-02 23:53:36 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...