Java入門第三季7-1簡易撲克牌作業
自己根據前三季的學習,嘗試編寫了這個程式,期間也參考了一些同學的寫法,這裡我還自學了enum的用法,並將其應用在程式中。
程式總共由三個檔案組成,程式碼中的註釋不是很多,但是透過輸出的文字大家還是能夠了解到某段程式碼的意思的。
程式透過簡單的修改能快速實現多人的遊戲,有少部分易出錯的地方沒有加丟擲異常,這裡就暫時不做最佳化了···
執行效果如圖所示
package com.game;
public class Card implements Comparable {
private SuitEnum suit;//花色
private NumberEnum number;//點數
/**
* 構造方法
*/
public Card (SuitEnum suit, NumberEnum number) {
// this.suit = suit;
//這樣在setter中可以對輸入進行判斷
this.setSuit(suit);
// this.number = NumberEnum.valueOf(number);
this.setNumber(number);
}
public String getSuit() {
return suit.toString();
}
public void setSuit(SuitEnum suit) {
try {
this.suit = suit;
} catch (Exception e) {
System.out.println("發牌錯誤");//不過由於是程式發牌,這句就簡單處理了,不會有錯的
//String類輸入改為enum類,這樣不會有錯了
}
}
public String getNumber() {
return number.toString();
}
public void setNumber(NumberEnum number) {
try {
this.number = number;
} catch (Exception e) {
System.out.println("發牌錯誤");//不過由於是程式發牌,這句就簡單處理了,不會有錯的
}
}
@Override //比較牌的大小
public int compareTo(Card o) {
// TODO Auto-generated method stub
if (this.number.equals(o.number)) {
return this.suit.compareTo(o.suit);
} else {
return this.number.compareTo(o.number);
}
}
@Override//輸出牌的名稱
public String toString () {
return suit.toString()+number.toString();
}
public enum SuitEnum {
DIAMONDS("方塊"),CLUBS("梅花"),HEARTS("紅桃"),SPADES("黑桃");
private String suitName;
//構造方法
private SuitEnum (String suitName) {
this.suitName = suitName;
}
@Override
public String toString () {
return this.suitName;
}
}
public enum NumberEnum {
//點數,從大到小3-10,J,Q,K,A,2
THREE("3"),FOUR("4"),FIVE("5"),SIX("6"),SEVEN("7"),EIGHT("8"),NINE("9"),TEN("10"),
JACK("J"),QUEEN("Q"),KING("K"),ACE("A"),TWO("2");
private String numberName;
private NumberEnum (String numberName) {
this.numberName = numberName;
}
@Override
public String toString () {
return this.numberName;
}
}
}
package com.game;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Player {
private String id;
private String name;
private List handCards;
public Player () {
this.setId();
this.setName();
this.handCards = new ArrayList();
}
public String getId() {
return id;
}
public void setId() {
System.out.println("請輸入1~4位長度玩家ID");
Scanner in = new Scanner(System.in);
while (true) {
try {
this.id = String.valueOf(in.nextInt());
if (this.id.length()4) {
throw new IllegalArgumentException();
}
break;
} catch (Exception e) {
System.out.println("格式錯誤,請重新輸入1~4位長度玩家ID");
this.id = in.next();
}
}
}
public String getName() {
return name;
}
public void setName() {
System.out.println("請輸入1~10位長度玩家姓名");
Scanner in = new Scanner(System.in);
this.name = in.next();
while (this.name.length()10) {
System.out.println("請重新輸入1~10位長度玩家姓名");
this.name = in.next();
}
}
public void getHandCards() {
System.out.print("玩家:"+id+","+name+"手中的全部牌為:[");
for (Card card : handCards) {
System.out.print(card.getSuit()+card.getNumber()+" ");
}
System.out.println("]");
}
public void setHandCards(Card card) {
this.handCards.add(card);
}
public Card getMaxCard () {
Card maxCard = handCards.get(0);
for (Card card : handCards) {
if (card.compareTo(maxCard)>0)
maxCard = card;
}
return maxCard;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Player))
return false;
Player other = (Player) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (id.equals(other.id))
return true;//被我修改過了,不是最初生成的equals,id和name有一個對到就算重複
if (name == null) {
if (other.name != null)
return false;
} else if (name.equals(other.name))
return true;
return false;
}
}
package com.game;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Game {
private List aPoker;//建立一副撲克牌
private List players;//所有玩家
public static void main(String[] args) {
Game newGame = new Game();
newGame.initialPoker();
newGame.shuffle();
newGame.initialPlayer();
newGame.deal();
newGame.compareCard();
}
/**
* 遊戲類構造方法,功能未擴充套件,暫時只有兩位玩家一副牌
*/
public Game() {
this.aPoker = new ArrayList();
this.players = new ArrayList();
}
public void initialPoker() {
System.out.println("-------建立撲克牌-------");
System.out.println("撲克牌為:");
for (Card.SuitEnum se : Card.SuitEnum.values()) {
//values()方法網上有介紹,但是java API中找不到,比較詭異
System.out.print("[");
for (Card.NumberEnum ne : Card.NumberEnum.values()) {
aPoker.add(new Card(se,ne));
System.out.print(se.toString()+ne.toString()+",");
}
System.out.println("]");
}
System.out.println("-------建立撲克牌成功!-------");
}
public void shuffle() {
System.out.println("-------開始洗牌-------");
List pokerTemp = new ArrayList(aPoker);//這裡沒法用aPoker.clone()方法
Random random = new Random();
for (int i=52; i>0; i--) {
int r = random.nextInt(i);
aPoker.set(52-i, pokerTemp.remove(r));
}
System.out.println("-------洗牌結束-------");
// for (Card card : aPoker) {
// System.out.print(card.getSuit()+card.getNumber()+" ");
// }
}
public void initialPlayer() {
System.out.println("-------建立玩家-------");
for (int i=0; i0) {
winPlayer = player;
}
}
System.out.println("-------玩家:"+winPlayer.getName()+"獲勝!-------");
System.out.println("玩家各自的手牌為:");
for (Player player : players) {
player.getHandCards();
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/810/viewspace-2807738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java第三季—簡易撲克牌遊戲Java遊戲
- Java入門第三季撲克牌小遊戲Java遊戲
- java程式:簡易撲克牌遊戲Java遊戲
- java入門最後一章 簡易撲克牌比較大小Java
- JAVA入門第三季——最後練習題撲克牌Java
- JAVA入門第三季 簡易撲克牌遊戲原始碼 可以自定義玩家人數 有詳細注Java遊戲原始碼
- 簡易撲克牌遊戲JAVA原始碼_新手上路遊戲Java原始碼
- Java第三季撲克牌作業 參考了幕友的排序方法 非常感謝Java排序
- Java 簡單實現撲克牌抽象類Java抽象
- 簡易撲克牌遊戲簡單實現,歡迎指正遊戲
- 使用Java語言寫的一個簡單的撲克牌發牌程式碼Java
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- JZ-045-撲克牌順子
- 劍指Offer 撲克牌順子
- 簡易撲克遊戲---各位爸爸求指點指點遊戲
- SwiftUI:看我展示52張撲克牌,“很快啊!”SwiftUI
- Python程式設計基礎練習——撲克牌發牌問題Python程式設計
- 每日一練(33):撲克牌中的順子
- bzoj1816: [Cqoi2010]撲克牌(二分)
- GitHub 簡易入門指南Github
- 【YOLOv5】實現撲克牌的點數識別YOLO
- python實現撲克遊戲 - 抽鬼牌 和 21點Python遊戲
- YAML語法簡易入門YAML
- [每日一題] 第十二題:撲克牌中的順子每日一題
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (二)Python遊戲
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)Python遊戲
- CSS工具-Flexbox簡易入門教程CSSFlex
- Flink 實踐教程-入門(8): 簡單 ETL 作業
- Java入門簡述(3)Java
- java入門第三季6-5練習Java
- Java入門第三季1.9圖書查詢Java
- 給萌新的Flexbox簡易入門教程Flex
- 《MySQL 入門教程》第 01 篇 MySQL 簡介MySql
- 關於撲克牌的一些討論——《Fluent Python 2》讀書筆記Python筆記
- java第三季異常作業:借書系統Java
- Go Web開發(Gin框架)簡易入門教程GoWeb框架
- [MySQL光速入門]004 作業解答MySql
- [MySQL光速入門]007 作業解答MySql