欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)多人多牌數(shù)比較游戲

 更新時(shí)間:2019年01月16日 08:38:13   作者:DekingChen  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人多牌數(shù)比較游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)多人多牌數(shù)比較游戲的具體代碼,供大家參考,具體內(nèi)容如下

具體實(shí)現(xiàn)步驟如下:

  • 實(shí)現(xiàn)撲克Card類,用于儲(chǔ)存撲克牌,1-13代表點(diǎn)數(shù),4-1代表花色(黑桃,紅桃,梅花,分塊)
  • 實(shí)現(xiàn)撲克列表CardList類,用于實(shí)現(xiàn)生成一副牌,洗牌,發(fā)牌的功能
  • 實(shí)現(xiàn)玩家Player類,用于儲(chǔ)存玩家信息
  • 實(shí)現(xiàn)玩家列表PlayerList類,用于儲(chǔ)存所有玩家信息,并且實(shí)現(xiàn)玩家洗牌、發(fā)牌、比較牌大小的方法
  • 主方法Index05類,用于啟動(dòng)撲克游戲

Card.java

/**
 * 
 */
package dk.card;
 
/**
 * @author Administrator
 * 撲克類
 */
public class Card implements Comparable<Card>{
 private int number;//牌的點(diǎn)數(shù)--1到13
 private int type;//牌的花色--4種花色:♠(黑桃):4 ♥(紅桃):3 ♣(梅花):2 方塊:1
 
 public Card() {
  super();
 }
 public Card(int number, int type){
  if(number==1)
   number=14;
  this.number = number;
  this.type = type;
 }
 public int getNumber() {
  return number;
 }
 public void setNumber(int number) {
  this.number = number;
 }
 public int getType() {
  return type;
 }
 public void setType(int type) {
  this.type = type;
 }
 
 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + number;
  result = prime * result + type;
  return result;
 }
 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  Card other = (Card) obj;
  if (number != other.number)
   return false;
  if (type != other.type)
   return false;
  return true;
 }
 @Override
 public int compareTo(Card o) {
  if(this.number>o.number)
   return -1;
  else if(this.number<o.number)
   return 1;
  else
   if(this.type>o.type)
    return -1;
   else if(this.type<o.type)
    return 1;
 
  return 0;
 }
 
 public String toString(){
  String str ="";
  switch(this.type){
  case 1: str = "方塊";break;
  case 2: str = "梅花";break;
  case 3: str = "紅桃";break;
  case 4: str = "黑桃";break;
  }
  String n="";
  switch(this.number){
  case 14:n="A";break;
  case 11:n="J";break;
  case 12:n="Q";break;
  case 13:n="K";break;
  default:n=this.number+"";
  }
  return str+n;
 }
 
}

CardList.java

package dk.card;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
 
/**
 * @author Administrator
 * 牌表操作類
 */
public class CardList {
 public static List<Card> cardlist = new ArrayList<Card>(52);//儲(chǔ)存撲克牌
 public static List<ArrayList<Card>> poker;//儲(chǔ)存發(fā)牌結(jié)果
 
 //生成一副牌
 public static void generateCard() {
  for(int i=1;i<=13;i++){
   for(int j=1;j<=4;j++){
    Card c = new Card(i,j);
    cardlist.add(c);
   }
  }
 
 }
 
 //打印一副牌
 public static void printCardList(){
  System.out.print("[");
  for(Card c:cardlist){
   System.out.print(c.toString()+" ");
  }
  System.out.println("]");
 }
 
 //洗牌
 public static void shuffleCard(){
  List<Card> scard = new ArrayList<Card>(52);
  Card c;
  Random random = new Random();
  for(int i=1;i<=52;i++){
 
   do{
     c = cardlist.get(random.nextInt(52));
   }while(scard.contains(c));
   scard.add(c);
  }
  cardlist.clear();
  cardlist = scard;
  printCardList();
 }
 
 /**
  * 發(fā)牌
  * @param i number of player
  * @param j number of card
  * @return
  */
 public static List<ArrayList<Card>> dealCard(int i,int j){ 
  try{
   if(i<=1){
    throw new Exception("發(fā)牌規(guī)則有誤:玩家至少為2人,請(qǐng)重新定義規(guī)則!");
   }
   if(i*j>52){
    throw new Exception("發(fā)牌規(guī)則有誤:牌數(shù)超出撲克張數(shù),請(qǐng)重新定義規(guī)則!");
   }
 
   poker = new ArrayList<ArrayList<Card>>(i);//儲(chǔ)存玩家發(fā)到的牌
 
   //生成玩家手中的牌列表
   for(int h=0;h<i;h++){
    ArrayList<Card> player_card_list = new ArrayList<Card>(j);
    poker.add(player_card_list);
 
   }
   //給每個(gè)玩家發(fā)牌
   for(int k=0;k<j;k++){
    for(int d=0;d<i;d++){
     ArrayList<Card> player_card_list = poker.get(d);
     Card card = getCard();     
     player_card_list.add(card);
    }
   }
 
  }catch(Exception e){
   e.printStackTrace();
  }
  return poker;
 }
 
 //抓取一張牌
 public static Card getCard(){
  return cardlist.remove(0);
 }
 
 //獲取一位玩家的牌
 public static ArrayList<Card> getPoker(){
  return poker.remove(0);
 }
 
 public static void clear(){
  cardlist.clear();
  poker.clear();
  printCardList();
 
 }
 
}

Player.java

/**
 * 
 */
package dk.card;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/**
 * @author Administrator
 * 玩家類
 */
public class Player implements Comparable<Player>{
 private String id;//玩家id
 private String name;//玩家姓名
 private List<Card> poker;//玩家手牌
 private Card max;//玩家最大的牌
 public Player(String id ,String name){
  this.id = id;
  this.name = name;
  this.setPoker(new ArrayList<Card>());
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public List<Card> getPoker() {
  return poker;
 }
 
 public Card getMax() {
  return max;
 }
 public void setMax(Card max) {
  this.max = max;
 }
 public void setPoker(List<Card> poker) {
  this.poker = poker;
  Collections.sort(this.poker);
  for(Card c :this.poker){
   this.setMax(c);
   break;
  }
 }
 public String toString(){
  return "玩家Id:"+this.id+"\t玩家姓名:"+this.name;
 }
 
 //玩家攤牌
 public String showCard(){
  String msg="";
  for(Card c:this.poker){
   msg+=c.toString()+" ";
  }
  return this.toString()+"\t\n"+"玩家牌信息:\t\n"+msg;
 }
 @Override
 public int compareTo(Player o) {
  return this.max.compareTo(o.getMax());
 }
 
}

PlayerList.java

package dk.card;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
/**
 * @author Administrator
 * 儲(chǔ)存玩家列表
 */
public class PlayerList {
 
 public static List<Player> playerlist = new ArrayList<Player>();//儲(chǔ)存撲玩家列表
 public static int sum;
 public static List<String> rules = new ArrayList<String>();
 public PlayerList(){
 
 }
 
 public static void setRule(String rule){
  rules.add(rule);
 }
 
 public static String getRules(){
  String str="";
  for(String s:rules){
   str+=s+"\t\n";
  }
  return str;
 }
 
 public static void printRules(){
  show(getRules());
 }
 
 //添加玩家
 public static boolean addplayer(Player player){
  show("添加玩家:"+player.toString());
  show("----------------------------------------");
  sum++;
  return playerlist.add(player);
 }
 
 //給所有玩家發(fā)牌
 public static void shuffleCardToPlayer(){
   for(Player player:playerlist){
    player.setPoker(CardList.getPoker());
   }
 } 
 
 //顯示發(fā)牌結(jié)果
 public static void showCard(){
  for(Player player:playerlist){
   show(player.showCard());
   show("----------------------------------------");
  }
 }
 
 //比較牌點(diǎn)大小并且顯示贏家信息
 public static void showWinner(){
  Collections.sort(playerlist);
  Player p = playerlist.get(0);
  show(p.showCard());
  show("本局贏家是:"+p.getName());
 }
 
 //玩家人數(shù)
 public static int size(){
  return sum;
 }
 
 public static void show(Object obj){
  System.out.println(obj.toString());
 }
 
 public static void clear(){
  playerlist.clear();
  sum = 0 ;
 }
 
}

Index05.java

/**
 * 
 */
package dk.main;
 
import java.util.Scanner;
 
import dk.card.CardList;
import dk.card.Player;
import dk.card.PlayerList;
 
/**
 * @author Administrator
 *
 */
public class Index05 extends Show {
 
 public static Scanner scanner = new Scanner(System.in);
 
 /**
  * 調(diào)用的主方法
  * @param args
  */
 public static void main(String[] args) {
  show("是否開(kāi)始游戲?0/1");
  int isStart = scanner.nextInt();
  if(isStart==1){
   startGame();
  } 
  else{
   show("退出游戲!");
  }
 
 }
 
 //啟動(dòng)撲克游戲
 public static void startGame(){
  show("游戲規(guī)則如下:");
  PlayerList.setRule("1.至少需要兩名玩家");
  PlayerList.setRule("2.所有玩家的牌數(shù)加起來(lái)不超過(guò)52張牌");
  PlayerList.setRule("3.比較所有玩家手中最大的牌點(diǎn),最大的牌點(diǎn)數(shù)的玩家獲勝");
  PlayerList.setRule("4.總的牌數(shù)只有52張,沒(méi)有大小王");
  PlayerList.setRule("5.黑桃牌A最大,方塊3最小,點(diǎn)數(shù)相同時(shí),比較花色,黑桃較大。");
  PlayerList.printRules();
  show("請(qǐng)輸入玩家人數(shù):");
  int players = 2;//默認(rèn)玩家數(shù)目
  int cardofplay = 2;//默認(rèn)每個(gè)玩家的手牌數(shù)目
  try {
    players = scanner.nextInt();
    while(players<2){
     show("玩家人數(shù)至少是兩人");
     show("請(qǐng)重新輸入人數(shù):");
     players = scanner.nextInt();
    }
 
    show("請(qǐng)輸入每個(gè)玩家持有的牌數(shù):"); 
    cardofplay = scanner.nextInt();
    while(cardofplay*players>52){
     show("玩家*牌數(shù)超出范圍!請(qǐng)重新輸入牌數(shù)");
     cardofplay = scanner.nextInt();
    }
 
    show("開(kāi)始輸入玩家信息:");
    for(int i=0;i<players;i++){
     show("請(qǐng)輸入第"+(i+1)+"個(gè)玩家姓名:");
     String name = scanner.next();
     Player p =new Player("00"+i,name);
     PlayerList.addplayer(p);
    }
    show("一副沒(méi)有洗的牌:");
    CardList.generateCard();//生成一副撲克
    CardList.printCardList();//打印撲克
    show("========================================");
    show("開(kāi)始洗牌:");
    CardList.shuffleCard();//洗牌
    show("========================================");
    show("開(kāi)始發(fā)牌:........發(fā)牌中......");
    CardList.dealCard(players,cardofplay);//發(fā)牌
    PlayerList.shuffleCardToPlayer();//給玩家發(fā)牌
    show("發(fā)牌結(jié)果:");
    PlayerList.showCard();//顯示所有玩家牌信息
    show("========================================");
    show("比較結(jié)果:比較牌點(diǎn)大小并且顯示贏家信息");
    PlayerList.showWinner();//顯示本輪贏家
    show("========================================");
  } catch (Exception e) {
 
   e.printStackTrace();
  }
 }
 
 //清空游戲
 public static void clearGame(){
   CardList.clear();
   PlayerList.clear();
 }
 
 //測(cè)試撲克游戲
 public static void testGame(){
  try {
   show("一副沒(méi)有洗的牌:");
   CardList.generateCard();
   CardList.printCardList();
   show("========================================");
   show("開(kāi)始添加玩家:");
   Player p =new Player("001","DekingChen");
   Player p1 =new Player("002","chenzhenquan");
   Player p2 =new Player("003","czq");
   PlayerList.addplayer(p);
   PlayerList.addplayer(p1);
   PlayerList.addplayer(p2);
   show("開(kāi)始洗牌:");
   CardList.shuffleCard();
   show("========================================");
   show("開(kāi)始發(fā)牌:........發(fā)牌中......");
   int players = PlayerList.size();//玩家數(shù)目
   int cardofsum = 3;//每個(gè)玩家的手牌數(shù)目
   CardList.dealCard(players,cardofsum);
   PlayerList.shuffleCardToPlayer();
   show("發(fā)牌結(jié)果:");
   PlayerList.showCard();
   show("========================================");
   show("比較結(jié)果:比較牌點(diǎn)大小并且顯示贏家信息");
   PlayerList.showWinner();
   show("========================================");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
}

Show.java(輔助顯示類)

package dk.main;
 
public abstract class Show {
 
 public static void show(Object obj){
  System.out.println(obj.toString());
 }
}

實(shí)驗(yàn)結(jié)果:

是否開(kāi)始游戲?0/1
1
游戲規(guī)則如下:
1.至少需要兩名玩家 
2.所有玩家的牌數(shù)加起來(lái)不超過(guò)52張牌 
3.比較所有玩家手中最大的牌點(diǎn),最大的牌點(diǎn)數(shù)的玩家獲勝 
4.總的牌數(shù)只有52張,沒(méi)有大小王 
5.黑桃牌A最大,方塊3最小,點(diǎn)數(shù)相同時(shí),比較花色,黑桃較大。 
 
請(qǐng)輸入玩家人數(shù):
5
請(qǐng)輸入每個(gè)玩家持有的牌數(shù):
5(<a >資質(zhì)代辦</a>)
開(kāi)始輸入玩家信息:
請(qǐng)輸入第1個(gè)玩家姓名:
DekingChen
添加玩家:玩家Id:000 玩家姓名:DekingChen
----------------------------------------
請(qǐng)輸入第2個(gè)玩家姓名:
czq
添加玩家:玩家Id:001 玩家姓名:czq
----------------------------------------
請(qǐng)輸入第3個(gè)玩家姓名:
chenzhenquan
添加玩家:玩家Id:002 玩家姓名:chenzhenquan
----------------------------------------
請(qǐng)輸入第4個(gè)玩家姓名:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java回收對(duì)象的標(biāo)記和對(duì)象的二次標(biāo)記過(guò)程

    淺談Java回收對(duì)象的標(biāo)記和對(duì)象的二次標(biāo)記過(guò)程

    這篇文章主要介紹了淺談Java回收對(duì)象的標(biāo)記和對(duì)象的二次標(biāo)記過(guò)程的相關(guān)內(nèi)容,小編覺(jué)得還是挺不錯(cuò)的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10
  • 基于SpringBoot的Docker部署實(shí)踐

    基于SpringBoot的Docker部署實(shí)踐

    在云計(jì)算和微服務(wù)架構(gòu)日益普及的今天,Docker已成為一種主流的應(yīng)用部署方式,本文將詳細(xì)介紹如何將基于Spring Boot的項(xiàng)目部署到Docker容器中,需要的朋友可以參考下
    2023-07-07
  • Fastjson 常用API介紹及下載地址(推薦)

    Fastjson 常用API介紹及下載地址(推薦)

    Fastjson是一個(gè)Java語(yǔ)言編寫(xiě)的高性能功能完善的JSON庫(kù)。接下來(lái)通過(guò)本文給大家分享Fastjson 常用API介紹及下載地址,感興趣的朋友一起看看吧
    2017-11-11
  • 簡(jiǎn)單了解Java編程中線程的創(chuàng)建與守護(hù)線程

    簡(jiǎn)單了解Java編程中線程的創(chuàng)建與守護(hù)線程

    這篇文章主要介紹了Java編程中線程的創(chuàng)建與守護(hù)線程,是Java多線程并發(fā)編程的基礎(chǔ),需要的朋友可以參考下
    2015-11-11
  • java實(shí)現(xiàn)連連看游戲課程設(shè)計(jì)

    java實(shí)現(xiàn)連連看游戲課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)連連看游戲課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot快速配置數(shù)據(jù)源的方法

    SpringBoot快速配置數(shù)據(jù)源的方法

    這篇文章主要介紹了SpringBoot快速配置數(shù)據(jù)源的方法,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • idea將maven項(xiàng)目改成Spring boot項(xiàng)目的方法步驟

    idea將maven項(xiàng)目改成Spring boot項(xiàng)目的方法步驟

    這篇文章主要介紹了idea將maven項(xiàng)目改成Spring boot項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • IDEA2022搭建Spring?Cloud多模塊項(xiàng)目的詳細(xì)過(guò)程

    IDEA2022搭建Spring?Cloud多模塊項(xiàng)目的詳細(xì)過(guò)程

    這篇文章主要介紹了IDEA2022搭建Spring?Cloud多模塊項(xiàng)目,網(wǎng)上有很多教程父模塊都是通過(guò)maven的方式創(chuàng)建的,然后子模塊是通過(guò)Spring?Initalizr方式創(chuàng)建,這種方式父模塊無(wú)法管理子模塊的依賴仲裁,需要每個(gè)子模塊自行管理,就失去了父模塊的用處了
    2022-10-10
  • java中MultipartFile和File最簡(jiǎn)單的互相轉(zhuǎn)換示例

    java中MultipartFile和File最簡(jiǎn)單的互相轉(zhuǎn)換示例

    這篇文章主要給大家介紹了關(guān)于java中MultipartFile和File最簡(jiǎn)單的互相轉(zhuǎn)換的相關(guān)資料,MultipartFile和File都是Java中用于處理文件上傳的類,MultipartFile用于處理上傳的文件,File用于處理本地磁盤(pán)上的文件,需要的朋友可以參考下
    2023-09-09
  • Spring Cloud Feign實(shí)例講解學(xué)習(xí)

    Spring Cloud Feign實(shí)例講解學(xué)習(xí)

    這篇文章主要介紹了Spring Cloud Feign實(shí)例講解學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論