最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲

 更新時(shí)間:2020年04月22日 14:32:40   作者:zhangmiaoran  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

游戲功能描述

1、創(chuàng)建一副撲克牌:

包括四種花色:黑桃,紅桃,梅花,方片
包括十三種點(diǎn)數(shù):2-10,J,Q,K,A

2、創(chuàng)建兩名玩家(or多名)

玩家至少要有ID,姓名,手牌等屬性,手牌為撲克牌的集合

3、將創(chuàng)建好的撲克牌進(jìn)行隨機(jī)洗牌

4、從洗牌后的撲克牌的第一張開(kāi)始,發(fā)給每個(gè)玩家,按照一人一張的方式,每人發(fā)兩張(or多張)

5、比較兩名玩家手中的撲克牌,比較規(guī)則為:取兩人各自手中點(diǎn)數(shù)最大的牌進(jìn)行比較,點(diǎn)數(shù)大的贏;若兩人各自的點(diǎn)數(shù)最大的牌相等,則再按照花色比較。

代碼

//Card.java

package card;

public class Card{
 private String color;
 private String number;

 public Card(String color, String number) {
  this.color = color;
  this.number = number;
 }

 public String getColor() {
  return color;
 }

 public String getNumber() {
  return number;
 }

 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (!(obj instanceof Card))
   return false;
  Card other = (Card) obj;
  if (color == null) {
   if (other.color != null)
    return false;
  } else if (!color.equals(other.color))
   return false;
  if (number == null) {
   if (other.number != null)
    return false;
  } else if (!number.equals(other.number))
   return false;
  return true;
 }

}

//Cards.java

package card;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Cards {
 private List<Card> list = new ArrayList<Card>();

 //創(chuàng)建一副撲克牌
 public Cards(){
  System.out.println("-----------------創(chuàng)建撲克牌------------------");
  String[] color = {"黑桃", "紅桃", "梅花", "方片"};
  String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"};
  for(int i=0;i<color.length;i++)
   for(int j=0;j<number.length;j++){
    list.add(new Card(color[i], number[j]));
   } 
  System.out.println("----------------撲克牌創(chuàng)建成功!---------------");
 }

 //獲取一副撲克牌
 public List<Card> getList() {
  return list;
 }

 //洗牌(打亂)
 public void shufCards(){
  System.out.println("----------------開(kāi)始洗牌------------------------");
  Collections.shuffle(list);
  System.out.println("----------------洗牌結(jié)束------------------------");
 }

 //展示一副撲克牌
 public void showCards(){
  System.out.print("當(dāng)前的撲克牌為:");
  System.out.print("[ ");
  for(int i=0;i<list.size();i++){
   System.out.print(list.get(i).getColor() + list.get(i).getNumber()+ " ");
  }
  System.out.println(" ]");
 }

}

//Player.java

package card;

import java.util.ArrayList;
import java.util.List;

public class Player {
 private int id;
 private String name;
 private List<Card> handCards = new ArrayList<Card>();

 public Player(int id, String name){
  this.id = id;
  this.name = name;
 }

 public List<Card> getHandCards() {
  return handCards;
 }

 public void setHandCards(Card card) {
  handCards.add(card);
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

}

//CardComparator.java(自定義排序規(guī)則)

package card;

import java.util.Comparator;

public class CardComparator implements Comparator<Card> {

 @Override
 public int compare(Card c1, Card c2) {
  // 構(gòu)建花色和牌值數(shù)組,通過(guò)比對(duì),計(jì)算得到某張牌的價(jià)值(大?。?
  String[] color = {"方片", "梅花", "紅桃", "黑桃"};
  String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"};

  //由于比較規(guī)則是先比較牌值,如果相等再比較花色(黑紅梅方),所以將牌值賦予較高的權(quán)值
  int valueOfC1 = 0;
  int valueOfC2 = 0;
  for(int i=0;i<number.length;i++){
   if(c1.getNumber().equals(number[i])) valueOfC1 += i*10;
   if(c2.getNumber().equals(number[i])) valueOfC2 += i*10;
  }
  for(int i=0;i<color.length;i++){
   if(c1.getColor().equals(color[i])) valueOfC1 += i;
   if(c2.getColor().equals(color[i])) valueOfC2 += i;
  }

  if( valueOfC1 > valueOfC2 ) return -1;
  if( valueOfC1 < valueOfC2 ) return 1;

  return 0;
 }

}

//PlayDemo.java

package card;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class PlayDemo {

 //創(chuàng)建玩家
 //要對(duì)玩家ID的異常處理,要求用戶只能輸入整數(shù)ID,否則需要重新輸入
 public Player setPlayer(){
  int id=0;
  String name="";
  Scanner console = new Scanner(System.in);
  boolean ready = true;
  do{
   try{
    System.out.println("輸入ID:");
    id = console.nextInt();
    ready = true;
   }catch(Exception e){
    System.out.println("請(qǐng)輸入整數(shù)類(lèi)型的ID!");
    ready = false;
    console.nextLine();
   }
  }while(ready==false);

  System.out.println("輸入姓名:");
  name = console.next();  
  return new Player(id, name);
 }

 public static void main(String[] args) {
  //測(cè)試簡(jiǎn)易撲克牌程序
  PlayDemo game = new PlayDemo();
  //(1)創(chuàng)建一副牌
  Cards cards = new Cards();
  //(2)展示新的撲克牌
  cards.showCards();
  //(3)洗牌
  cards.shufCards();
  //(4)創(chuàng)建玩家
  System.out.println("--------------創(chuàng)建兩個(gè)(or多個(gè))玩家就可以開(kāi)始游戲啦!-------------");
  List<Player> p = new ArrayList<Player>();
  for(int i=0;i<2;i++)
  {
   System.out.println("請(qǐng)輸入第"+(i+1)+"位玩家的ID和姓名:");
   p.add(game.setPlayer());
  }
  for(int i=0;i<p.size();i++)
  {
   System.out.println("歡迎玩家:"+p.get(i).getName());
  }
  //(5)撲克牌比大小游戲開(kāi)始啦~
  int count = 0;
  System.out.println("------------------開(kāi)始發(fā)牌---------------------");
  //設(shè)定每人分別拿兩張(or多張)
  for(int i=0; i<2;i++){
   //玩家輪流拿牌
   for(int j=0; j< p.size(); j++){
    System.out.println(">玩家"+p.get(j).getName()+"拿牌");
    p.get(j).setHandCards(cards.getList().get(count));
    count++;
   }
  }
  System.out.println("------------------發(fā)牌結(jié)束!--------------------");
  System.out.println("------------------開(kāi)始游戲 ---------------------");
  for(int i=0;i<p.size();i++){
   System.out.print("玩家"+p.get(i).getName()+"的手牌為:[ ");
   for(int j=0;j<p.get(i).getHandCards().size();j++){
    Card cur = p.get(i).getHandCards().get(j);
    System.out.print(cur.getColor()+cur.getNumber()+" ");
   }
   System.out.println(" ]");
  }

  //排序得到每個(gè)玩家最大的手牌(排序規(guī)則自定義)
  for(int i=0;i<p.size();i++){
   Collections.sort(p.get(i).getHandCards(), new CardComparator());
  }
  List<Card> maxCard = new ArrayList<Card>();
  for(int i=0;i<p.size();i++){
   Card maxCur = p.get(i).getHandCards().get(0);
   System.out.println("玩家"+p.get(i).getName()+"最大的手牌為:"+ maxCur.getColor()+maxCur.getNumber());
   maxCard.add(maxCur);
  }

  //得到最后的勝者
  List<Card> temp = new ArrayList<Card>();
  temp.addAll(maxCard);
  Collections.sort(temp, new CardComparator());
  for(int i=0;i<p.size();i++){
   if(maxCard.get(i).equals(temp.get(0))) System.out.println("恭喜玩家:"+p.get(i).getName()+"獲勝!"); 
  }

 }

}

游戲運(yùn)行截圖

還有一個(gè)地方需要優(yōu)化,即不能輸入重復(fù)的ID和姓名,可以重寫(xiě)Player的equals方法,將用戶的輸入與已有的輸入相比較,不滿足要求則需要重新輸入,不過(guò)就先不加了。

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

相關(guān)文章

  • Java楊輝三角、洗牌算法詳細(xì)示例代碼

    Java楊輝三角、洗牌算法詳細(xì)示例代碼

    楊輝三角是一種數(shù)學(xué)圖形,它以數(shù)字的形式展示了一系列二項(xiàng)式系數(shù),下面這篇文章主要介紹了Java楊輝三角、洗牌算法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • SpringBoot中添加監(jiān)聽(tīng)器及創(chuàng)建線程的代碼示例

    SpringBoot中添加監(jiān)聽(tīng)器及創(chuàng)建線程的代碼示例

    這篇文章主要介紹了SpringBoot中如何添加監(jiān)聽(tīng)器及創(chuàng)建線程,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java集合快速失敗與安全失敗解析

    Java集合快速失敗與安全失敗解析

    這篇文章主要介紹了Java集合快速失敗與安全失敗解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring Boot Admin郵件警報(bào)整合過(guò)程解析

    Spring Boot Admin郵件警報(bào)整合過(guò)程解析

    這篇文章主要介紹了Spring Boot Admin郵件警報(bào)整合過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java中Lombok的實(shí)現(xiàn)示例

    java中Lombok的實(shí)現(xiàn)示例

    本文主要介紹了java中Lombok的實(shí)現(xiàn)示例,Lombok通過(guò)注解自動(dòng)生成Java類(lèi)的常用方法,如getter、setter、構(gòu)造函數(shù)等,顯著減少重復(fù)模板代碼,使代碼簡(jiǎn)潔易維護(hù),感興趣的可以了解一下
    2025-10-10
  • MyBatisPlus+Spring實(shí)現(xiàn)聲明式事務(wù)的方法實(shí)現(xiàn)

    MyBatisPlus+Spring實(shí)現(xiàn)聲明式事務(wù)的方法實(shí)現(xiàn)

    本文主要介紹了MyBatisPlus+Spring實(shí)現(xiàn)聲明式事務(wù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java使用FTPClient類(lèi)讀寫(xiě)FTP

    Java使用FTPClient類(lèi)讀寫(xiě)FTP

    這篇文章主要為大家詳細(xì)介紹了Java使用FTPClient類(lèi)讀寫(xiě)FTP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java中StringBuilder字符串類(lèi)型的操作方法及API整理

    Java中StringBuilder字符串類(lèi)型的操作方法及API整理

    Java中的StringBuffer類(lèi)繼承于AbstractStringBuilder,用來(lái)創(chuàng)建非線程安全的字符串類(lèi)型對(duì)象,下面即是對(duì)Java中StringBuilder字符串類(lèi)型的操作方法及API整理
    2016-05-05
  • SpringBoot對(duì)接clerk實(shí)現(xiàn)用戶信息獲取功能

    SpringBoot對(duì)接clerk實(shí)現(xiàn)用戶信息獲取功能

    Clerk是一個(gè)提供身份驗(yàn)證和用戶管理的服務(wù),可以幫助開(kāi)發(fā)者快速集成這些功能,下面我們就來(lái)看看如何使用Spring?Boot對(duì)接Clerk實(shí)現(xiàn)用戶信息的獲取吧
    2025-02-02
  • SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼

    SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼

    二維碼在現(xiàn)代社交和營(yíng)銷(xiāo)活動(dòng)中被廣泛使用,本文主要介紹了SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02

最新評(píng)論

福海县| 顺平县| 若尔盖县| 定边县| 富民县| 麻阳| 搜索| 西宁市| 平陆县| 青浦区| 江西省| 浦江县| 博罗县| 西青区| 墨脱县| 赣州市| 高雄市| 丰城市| 洮南市| 大安市| 青龙| 长岭县| 准格尔旗| 榕江县| 九江县| 抚宁县| 沙田区| 万源市| 平武县| 明溪县| 铜山县| 乐至县| 盐亭县| 鄂托克前旗| 馆陶县| 衡阳市| 阳城县| 资讯 | 镇安县| 广汉市| 元氏县|