Java小游戏 —— 德州扑克
生活随笔
收集整理的這篇文章主要介紹了
Java小游戏 —— 德州扑克
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
其實(shí)還是有一些錯(cuò)誤的,很多功能懶得實(shí)現(xiàn)了,順子方面我實(shí)現(xiàn)不來(lái),好吧主要還是偷懶,僅供參考,java做撲克的視頻b站有,不過(guò)具體實(shí)現(xiàn)要靠自己完成,上面只有怎么把符號(hào)和點(diǎn)數(shù)組合成一張牌
package Game;public class Card implements Comparable{//花色private int suit;//點(diǎn)數(shù)private int rank;public Card() {super();}public Card(int suit, int rank) {super();this.suit = suit;this.rank = rank;}public int getSuit() {return suit;}public void setSuit(int suit) {this.suit = suit;}public int getRank() {return rank;}public void setRank(int rank) {this.rank = rank;}public String toString() {return App.SUITS[suit]+""+App.RANKS[rank];}public int compareTo(Object otherCard) {Card other = (Card)otherCard;return this.rank-other.getRank();} } package Game; //工具類public class App {//存放花色public static final String[] SUITS= {"?","?","?","?"};public static final String[] RANKS= {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};//紅桃public static final int HEART = 0;//黑桃public static final int SPADE = 1;//梅花public static final int CLUB = 2;//方塊public static final int DIAMOND = 3;//點(diǎn)數(shù)public static final int TWO = 0;public static final int THREE = 1;public static final int FOUR = 2;public static final int FIVE = 3;public static final int SIX = 4;public static final int SEVEN = 5;public static final int EIGHT = 6;public static final int NINE = 7;public static final int TEN = 8;public static final int JACK = 9;public static final int QUEEN = 10;public static final int KING = 11;public static final int ACE = 12; } package Game;import java.util.List; import java.util.ArrayList;/** 玩家類* */public class Player {//名字private String name;//手牌,不清楚數(shù)量,用集合private List<Card> cards = new ArrayList<Card>();public Player(String name) {super();this.name = name;}public Player() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<Card> getCards() {return cards;}public void setCards(List<Card> cards) {this.cards = cards;}@Overridepublic String toString() {return name+":"+cards;}} package Game; import java.util.*; import java.io.*; import java.net.*; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField;public class MainTest {//撲克牌放集合中static List<Card> poker;//玩家集合static List<Player>players;static int money1=100,money2=100;//籌碼,也可用線程,這里嫌麻煩沒(méi)用static int max_suit1=1,max_rank1=1,max_suit2=1,max_rank2=1,max_data1=1,max_data2=1;//分別設(shè)值,求相同花色的最大值(同一顏色最多有幾張)和相同大小的最多有幾張static int summary_suit=1,summary_rank=1;//設(shè)中間值,和最大值比較并更新public MainTest()throws Exception{User u =new User();u.setVisible(true);}class User extends JFrame{JButton btn1,btn2,btn3;//開(kāi)始、下注、棄牌JTextField text1,text2,text_user,text_show;JLabel lbl1,lbl2,lbl_user,lbl_show,lbl;int Jackpot;//獎(jiǎng)池public User() {this.setTitle("胖虎和小夫的德州撲克");this.setBounds(200,200,600,700);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLayout(new GridLayout(6,1));lbl = new JLabel("每次20籌碼,棄牌10籌碼,加注可加一次,10籌碼");lbl1 = new JLabel("盧本偉的籌碼");lbl2 = new JLabel("PDD的籌碼");lbl_user = new JLabel("盧本偉的底牌:");lbl_show = new JLabel("公牌:");text1 = new JTextField(""+money1);text2 = new JTextField(""+money2);text_user = new JTextField(""); text_show = new JTextField("");btn1 = new JButton("開(kāi)始");btn2 = new JButton("比牌");btn3 = new JButton("棄牌");btn1.addActionListener(new ActionListener(){ //添加監(jiān)聽(tīng)器,單擊開(kāi)始按鈕后產(chǎn)生事件,洗牌并發(fā)牌,理牌public void actionPerformed(ActionEvent e){//清零text_show.setText("");text_user.setText("");//初始化玩家initPlayer();//生成撲克牌poker = createPoker();//洗牌,shuffle函數(shù)打亂集合的順序Collections.shuffle(poker);//發(fā)牌deal();//理牌sort(); // for(Player p:players) { // System.out.println(p); // }text_show.setText(""+poker.get(0)+poker.get(1)+poker.get(2)+poker.get(3)+poker.get(4));Player p = players.get(0);text_user.setText(""+p);}});btn2.addActionListener(new ActionListener(){ //添加監(jiān)聽(tīng)器,進(jìn)行比較大小,并相應(yīng)加減籌碼public void actionPerformed(ActionEvent e){//先把5張底牌加到每個(gè)人的牌底下,讓每個(gè)人有7張牌,然后排序,最后通過(guò)比較確定大小summary();sort();if(compare() == 1) {money1+=20;money2-=20;text1.setText(""+money1);text2.setText(""+money2);}else {money1-=20;money2+=20;text1.setText(""+money1);text2.setText(""+money2);}if(money1 <= 0) {JOptionPane.showMessageDialog(null, "光屁股了,別玩了, 回家做作業(yè)去吧!", null, JOptionPane.PLAIN_MESSAGE);System.exit(0);}else if(money2 <= 0) {JOptionPane.showMessageDialog(null, "你們可能不知道只用20萬(wàn)贏到578萬(wàn)是什么概念\r\n" + "\r\n" + "我們一般只會(huì)用兩個(gè)字來(lái)形容這種人:土塊!!", null, JOptionPane.PLAIN_MESSAGE);System.exit(0);}}});btn3.addActionListener(new ActionListener(){ //添加監(jiān)聽(tīng)器,直接棄牌認(rèn)輸,少扣籌碼public void actionPerformed(ActionEvent e){money1-=10;money2+=10;text1.setText(""+money1);text2.setText(""+money2);if(money1 == 0) {JOptionPane.showMessageDialog(null, "光屁股了,別玩了, 回家做作業(yè)去吧!", null, JOptionPane.PLAIN_MESSAGE);System.exit(0);}}});add(lbl1);add(text1);add(lbl2);add(text2);add(lbl_show);add(text_show);add(lbl_user);add(text_user);add(btn1);add(btn2);add(btn3);add(lbl);}}public static void main(String [] args) throws Exception {//System.out.println(poker);//展示手牌//show();MainTest test=new MainTest();}//把底牌也放進(jìn)人物的牌組中private static void summary() {int i;Player lbw = players.get(0);Player pdd = players.get(1);List<Card> cards1 = lbw.getCards();List<Card> cards2 = pdd.getCards();for(i=0; i<5; i++) {cards1.add(poker.get(i));cards2.add(poker.get(i));}}//進(jìn)行比較并輸出結(jié)果private int compare() {Player lbw = players.get(0);Player pdd = players.get(1);List<Card> cards1 = lbw.getCards();List<Card> cards2 = pdd.getCards();max_suit1=1;max_rank1=1;//分別設(shè)值,求相同花色的最大值(同一顏色最多有幾張)和相同大小的最多有幾張summary_suit=1;summary_rank=1;//設(shè)中間值,和最大值比較并更新max_data1=1;max_data2=1;//記錄相同情況下誰(shuí)更大//審閱檢查cards1for(int i=0; i<cards1.size()-1; i++) {if(cards1.get(i).getSuit() == cards1.get(i+1).getSuit()) {summary_suit+=1;}else {if(summary_suit > max_suit1) {max_suit1 = summary_suit;}}if(cards1.get(i).getRank() == cards1.get(i+1).getRank()) {summary_rank+=1;}else {if(summary_rank > max_rank1) {max_rank1 = summary_rank;max_data1 = cards1.get(i+1).getRank();}}}summary_suit=1;summary_rank=1;//設(shè)中間值值,和最大值比較并更新//審閱檢查cards2for(int i=0; i<cards2.size()-1; i++) {if(cards2.get(i).getSuit() == cards2.get(i+1).getSuit()) {summary_suit+=1;}else {if(summary_suit > max_suit2) {max_suit2 = summary_suit;}}if(cards2.get(i).getRank() == cards2.get(i+1).getRank()) {summary_rank+=1;}else {if(summary_rank >= max_rank2) {max_rank2 = summary_rank;max_data2 = cards2.get(i+1).getRank();}}}//大小規(guī)則:皇家同花順>同花順>炸彈>俘虜(3+2)>同花>順子>三條>一對(duì)>高牌if(max_rank1 == 4){JOptionPane.showMessageDialog(null, "盧本偉牛逼!", null, JOptionPane.PLAIN_MESSAGE);return 1;}else if(max_rank2 == 4) {JOptionPane.showMessageDialog(null, "干尼瑪?shù)臍⑵评?#xff01;干尼瑪超人戰(zhàn)士!日尼瑪威猛先生!", null, JOptionPane.PLAIN_MESSAGE);return 2;}else if(max_suit1>=5) {JOptionPane.showMessageDialog(null, "從現(xiàn)在開(kāi)始這里叫盧本偉廣場(chǎng)!", null, JOptionPane.PLAIN_MESSAGE);return 1;}else if(max_suit2>=5) {JOptionPane.showMessageDialog(null, "跟我劉某玩操作!!", null, JOptionPane.PLAIN_MESSAGE);return 2;}else if(max_rank1 == 3 && max_rank2<3) {JOptionPane.showMessageDialog(null, "當(dāng)年,陳刀仔用20塊贏到3700萬(wàn),我盧本偉用20萬(wàn)贏到500萬(wàn)不是問(wèn)題!", null, JOptionPane.PLAIN_MESSAGE);return 1;}else if(max_rank2 == 3 && max_rank1<3) {JOptionPane.showMessageDialog(null, "皮皮蝦,我們走~!", null, JOptionPane.PLAIN_MESSAGE);return 2;}else if(max_rank1 == 2 && max_rank2<2) {JOptionPane.showMessageDialog(null, "給阿姨倒一杯卡布奇諾~", null, JOptionPane.PLAIN_MESSAGE);return 1;}else if(max_rank2 == 2 && max_rank1<2) {JOptionPane.showMessageDialog(null, "好險(xiǎn)好險(xiǎn),騷豬我依然發(fā)育起來(lái)了。", null, JOptionPane.PLAIN_MESSAGE);return 2;}else if(max_rank2 == max_rank1){if(max_data1 >= max_data1) {JOptionPane.showMessageDialog(null, "2張牌你能秒我?你能秒殺我?2張牌你能秒殺我,我當(dāng)場(chǎng),把電腦屏幕吃掉!", null, JOptionPane.PLAIN_MESSAGE);return 1;}else {JOptionPane.showMessageDialog(null, "芽?jī)哼?#xff0c;差點(diǎn)裂開(kāi)了,太瓦了!", null, JOptionPane.PLAIN_MESSAGE);return 2;}}return 1;}private static void sort() {for(Player p:players) {List<Card> cards = p.getCards();Collections.sort(cards);}}private static void show() {for(Player p:players) {System.out.println(p);}}//發(fā)牌private static void deal() {//3張公牌,令i=5就是從第6張牌開(kāi)始發(fā)給玩家和NPC,前五張作為公牌int i=5;for(int j=0; j<2; j++) {for(int k=0; k<players.size(); k++) {Player player = players.get(k);List<Card> cards = player.getCards();cards.add(poker.get(i));i++;}}}//初始化玩家private static void initPlayer() {//創(chuàng)建players = new ArrayList<Player>();//添加玩家players.add(new Player("盧本偉"));players.add(new Player("PDD"));}/**生成撲克牌*public static final String[] SUITS= {"?","?","?","?"};*public static final String[] RANKS= {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};* @return*/private static List<Card> createPoker(){List<Card> poker = new ArrayList<Card>();for(int i=0; i<App.SUITS.length; i++) {for(int j=0; j<App.RANKS.length;j++) {//System.out.println(App.SUITS[i]+""+App.RANKS[j]);//根據(jù)花色點(diǎn)數(shù)創(chuàng)建撲克牌Card card = new Card(i,j);poker.add(card);}}return poker;} }總結(jié)
以上是生活随笔為你收集整理的Java小游戏 —— 德州扑克的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 科技计划项目数据管理过程模型
- 下一篇: xss植入_前端安全之XSS攻击