顺序表 实现一个扑克牌小游戏

一副扑克牌(不含大小王) 52张

基本游戏规则:
1、洗牌(打乱牌的顺序)
2、给五名玩家,各发两张牌 依次发牌
3、判断最后 ♠A 在谁手里 谁获胜

升级玩法:
4、让每名玩家,依次抽取他的下家一张随机手牌。。。 然后再去找 ♠A
5、因为周润发是赌神,所以他有变牌的能力: 他一旦手中没有黑桃A,就可以把第一张牌和有黑桃A的玩家互换
(交换牌之前,有机会变一次;交换牌以后,有机会变一次)

话不多说,直接上代码:

首先我们新建两个类 玩家类手牌类,用来定义我们玩游戏所需要的变量
玩家类:

class Player{public String name; // 玩家姓名public List<Card> cards = new ArrayList<>();public Player(String name) {this.name = name;}
}

手牌类:

class Card {public String suit; // 花色public int rank; // 数值public Card(String suit, int rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {return "{'" + suit + '\'' + ", " + rank + '}';}@Override// 重写equals 方法,用来比较两个对象public boolean equals(Object o) {if (this == o) return true;if (o == null || !(o instanceof Card)) return false;Card card = (Card) o;return rank == card.rank &&Objects.equals(suit, card.suit);}}

接下来就到了我们玩游戏的公共类中,在类中实现操作:

public class Game {}

1、我们先把我们一块玩游戏的小伙伴实例出来:

        List<Card> cards = new ArrayList<>(); // 实例化扑克牌List<Player> players = new ArrayList<>(); // 实例化玩家players.add(new Player("周润发"));players.add(new Player("刘德华"));players.add(new Player("周星驰"));players.add(new Player("作者乔"));players.add(new Player("帅气的你"));

2、玩家我们找齐了,现在我们得找一副扑克牌,即初始化扑克牌:

// 初始化扑克牌private static void initializeCards(List<Card> cards) {for(String suit : new String[] {"♠","♥","♦","♣"}) {for(int rank = 1;rank <= 13;rank++) {Card card = new Card(suit,rank);// 把扑克牌放入牌组中cards.add(card);}}}

3、发了扑克牌以后,我们得把玩家的手牌给打印出来:

// 打印出每位玩家的 手牌public static void printPlayerHandCardList(List<Player> players) {for (Player player : players) {System.out.printf(" %s 的手牌是: %s%n", player.name, player.cards);}}

4、现在我们都准备好了,游戏马上开始:
(1)洗牌:(洗完牌后我们不需要打印,这里打印只是为了方便调试)

// 调用 Collections 下的 Shuffle(洗牌)方法// 进行洗牌Collections.shuffle(cards);System.out.println("洗牌完成后的牌");System.out.println(cards);

(2)发牌:

// 发牌int n = 2; // 每名玩家发几张牌for(int i = 0; i < n ; i++) { // 一共发两轮牌for(Player player : players) { // 每名玩家依次抽牌Card card = cards.remove(0); // 从牌组中,抽一张牌出来player.cards.add(card); // 把这张牌放到当前玩家的手中}}System.out.println("现在牌组中剩余的牌: ");System.out.println(cards);

(3)现在大家都拿到牌了,我们就得判断是谁获胜了,即 ♠A 在谁手里

    // 找出 ♠ACard toFoundCard = new Card("♠",1); // toFoundCard 就当成我们的 ♠Afor (Player player : players) {for (Card card : player.cards) {// 比较每张牌和要找的那张牌是否是同一张牌if(card.equals(toFoundCard)) {System.out.println(player.name+ " 获胜 !!!");return;}}}System.out.println("这把大家打平了!!!");}System.out.println("交换牌之前: ");printPlayerHandCardList(players);

你以为游戏到这里就结束了嘛。。。不,才刚刚开始
(4)我们现在在让每位玩家依次随机摸取下家的一张手牌

// 交换牌(每名玩家抽取下家的一张随机手牌)Random random = new Random(); // 生成一个随机数for (int i = 0; i < players.size();i++) {Player currentPlayer = players.get(i); // 当前对象的牌Player nextPlayer = players.get(i != players.size() - 1 ? i+1 : 0);int toDrawIndex = random.nextInt(nextPlayer.cards.size()); // 获取下一个玩家的随机一张牌Card drawCard = nextPlayer.cards.remove(toDrawIndex); // 删除被取出的牌在原玩家中的信息currentPlayer.cards.add(drawCard); // 将取出牌的信息加到当前对象中}
        System.out.println("交换牌之后: ");printPlayerHandCardList(players);

(5)周润发可是我们心中的赌神哎,所以我们应该给发哥点超能力,允许我们的发哥可以换牌,将自己的第一张牌和玩家中持有♠A的玩家换牌。(其他玩家不知道,所以是超能力,偷换)

        Player 周润发 = players.get(0); winFaGe (周润发,toFoundCard,players);// 周润发 换牌发功public static void winFaGe (Player 周润发,Card toFoundCard,List<Player> players) {if(!周润发.cards.contains(toFoundCard)) { // 若发哥手中没有 黑桃ACard card = 周润发.cards.get(0);周润发.cards.set(0,toFoundCard); for(int i = 1; i < players.size(); i++) {if(players.get(i).cards.contains(toFoundCard)) { // 找到拿黑桃A的那个玩家/*players.get(i).cards.remove(toFoundCard); // 先把发哥手着的第一张牌移除players.get(i).cards.add(card); // 将黑桃A放入发手中*/int j = players.get(i).cards.indexOf(toFoundCard);players.get(i).cards.set(j,card);}}}}

结果会有两种情况:
①五个玩家中有人拿到 ♠A ,但是被发哥给换走了,所以发哥获胜

②五个玩家中没人拿到 ♠A,所以大家打平了

最后我们给出全部的代码:

import java.util.*;class Player{public String name; // 玩家姓名public List<Card> cards = new ArrayList<>();public Player(String name) {this.name = name;}
}class Card {public String suit; // 花色public int rank; // 面值public Card(String suit, int rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {return "{'" + suit + '\'' + ", " + rank + '}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || !(o instanceof Card)) return false;Card card = (Card) o;return rank == card.rank &&Objects.equals(suit, card.suit);}}public class ArrayListDemo {public static void main(String[] args) {List<Card> cards = new ArrayList<>();List<Player> players = new ArrayList<>();players.add(new Player("周润发"));players.add(new Player("刘德华"));players.add(new Player("周星驰"));players.add(new Player("作者乔"));players.add(new Player("帅气的你"));// 初始化扑克牌initializeCards(cards);// 调用 Collections 下的 Shuffle(洗牌)方法// 进行洗牌Collections.shuffle(cards);System.out.println("洗牌完成后的牌");System.out.println(cards);// 发牌int n = 2; // 每名玩家发几张牌for(int i = 0; i < n ; i++) { // 一共发两轮牌for(Player player : players) { // 每名玩家依次抽牌Card card = cards.remove(0); // 从牌组中,抽一张牌出来player.cards.add(card); // 把这张牌放到当前玩家的手中}}System.out.println("现在牌组中剩余的牌: ");System.out.println(cards);System.out.println("交换牌之前: ");printPlayerHandCardList(players);Card toFoundCard = new Card("♠",1);Player 周润发 = players.get(0);winFaGe(周润发,toFoundCard,players);System.out.println("发哥第一次发功之后的牌: ");printPlayerHandCardList(players);// 交换牌(每名玩家抽取下家的一张随机手牌)Random random = new Random(); // 生成一个随机数for (int i = 0; i < players.size();i++) {Player currentPlayer = players.get(i); // 当前对象的牌Player nextPlayer = players.get(i != players.size() - 1 ? i+1 : 0);int toDrawIndex = random.nextInt(nextPlayer.cards.size()); // 获取下一个玩家的随机一张牌Card drawCard = nextPlayer.cards.remove(toDrawIndex); // 删除被取出的牌在原玩家中的信息currentPlayer.cards.add(drawCard); // 将取出牌的信息加到当前对象中}System.out.println("交换牌之后: ");printPlayerHandCardList(players);winFaGe (周润发,toFoundCard,players);System.out.println("发哥第二次成功之后: ");printPlayerHandCardList(players);// 找出 ♠Afor (Player player : players) {// 比较每张牌和要找的那张牌是否是同一张牌if(player.cards.indexOf(toFoundCard) != -1) {System.out.println(player.name+ " 获胜 !!!");return;}}System.out.println("这把大家打平了!!!");}// 打印出每位玩家的 手牌public static void printPlayerHandCardList(List<Player> players) {for (Player player : players) {System.out.printf(" %s 的手牌是: %s%n", player.name, player.cards);}}// 周润发 换牌发功public static void winFaGe (Player 周润发,Card toFoundCard,List<Player> players) {if(!周润发.cards.contains(toFoundCard)) { // 若发哥手中没有 黑桃ACard card = 周润发.cards.get(0);周润发.cards.set(0,toFoundCard); // 得到发哥的第一张手牌for(int i = 1; i < players.size(); i++) {if(players.get(i).cards.contains(toFoundCard)) { // 找到拿黑桃A的那个玩家/*players.get(i).cards.remove(toFoundCard); // 先把发哥手着的第一张牌移除players.get(i).cards.add(card); // 将黑桃A放入发手中*/int j = players.get(i).cards.indexOf(toFoundCard);players.get(i).cards.set(j,card);}}}}// 初始化扑克牌private static void initializeCards(List<Card> cards) {for(String suit : new String[] {"♠","♥","♦","♣"}) {for(int rank = 1;rank <= 13;rank++) {Card card = new Card(suit,rank);// 把扑克牌放入牌组中cards.add(card);}}}}

扑克牌小游戏,寻找 ♠A(来一场和赌王的争霸)相关推荐

  1. 用java制作扑克牌_利用java实现简单的扑克牌小游戏

    扑克牌小游戏: (推荐教程:java课程) 游戏玩法简介:定义五个People在玩扑克牌游戏,玩法是5个人从一副没有大小王的扑克牌中各抽取4张,牌的类型有四种:♥,♣,♠,♦.牌的大小为从1~13.( ...

  2. android实现猜扑克牌小游戏(改进:每次只可以选择一张)

    android实现猜扑克牌小游戏 项目目录 实现效果 XML代码如下 <?xml version="1.0" encoding="utf-8"?> ...

  3. 自己写了一个JAVA的简单扑克牌小游戏

    记录一下,自学两个星期JAVA写了个简单的程序. 但是对List和Set掌握还是不是很好,希望大神能指导一下程序如何简化. //Game 主体 package com.Garry; import ja ...

  4. jQuery实现Windows扑克牌小游戏代码

    下载地址jQuery实现Windows扑克牌小游戏代码,使用jQuery基于CSS3制作的WINDOWS7系统电脑自动的蜘蛛纸牌游戏. dd:

  5. 一个简单的扑克牌小游戏

    这是我在慕课学习Java的一个小游戏作业 游戏规则如下: 一.创建一副扑克牌 包括四种花色: 黑桃.红桃.梅花.方片 十三种点数:2--10,J.Q.K.A,不考虑大小王 二.创建两名玩家 玩家有ID ...

  6. python之扑克牌小游戏

    题目描述 有如下设计: lst_suit = ['黑桃','红桃','梅花','方块'],存放了扑克牌的花色. lst_face = ['3','4','5','6','7','8','9','10' ...

  7. JS小游戏——寻找四叶草

    基于CSS.HTML.JS所设计的一款简单的网页单机小游戏:寻找四叶草.主要技术涉及:DOM元素操作.鼠标跟随.盒子拖拽.事件对象.定时器.等等 资源链接:https://download.csdn. ...

  8. 基于Pygame的Python小游戏,《这是一场滑稽与阴险的较量》

    选用贴吧最火的表情包滑稽和阴险表情包,肯定都认得出吧,背景由胡大佬提供,添加了很多细节,一款射击闯关类小游戏,滑稽会不断逼近阴险,在这之前你必须把阴险全部击落,左上角是你的生命,被滑稽撞到则减少一生命 ...

  9. [c语言]制作一个扑克牌小游戏

    扑克牌游戏 一.问题阐述 实现一个简单的扑克牌游戏,可以洗牌.发牌,还有玩家打牌等功能,具体任务如下: (1)一副扑克52张牌(去掉大小王),分别是A.2.3.4.5.6.7.8.9.10.J.Q.K ...

最新文章

  1. 中国汽车涂料发展的初期
  2. linux复制文件命令cat ,Linux学习之四(复制移动文件命令cp等及查看文本命令cat等)2017-03-28...
  3. 【CyberSecurityLearning 22】传输层协议分析(TCP/UDP)
  4. Linux网络编程(Socket)
  5. .NET Core 微信小程序支付——(统一下单)
  6. poj 1180 斜率优化dp
  7. 我的朋友圈又被刷屏了。
  8. 中央企业经营管理一体化总体框架
  9. java 获取jsessionid_如何从JSESSIONID加载Java HttpSession?
  10. trackpoint_如何在戴尔笔记本电脑上禁用TrackPoint鼠标按钮?
  11. 社会网络分析法(Social Network Analysis)中矩阵二值化阈值的确定
  12. 福利福利!!!!!!!!往这看!!!!!
  13. sem_wait和sem_post
  14. Kali Linux安装dvwa本地shentou测试环境
  15. 百信社区-社区服务一体化
  16. MyBatis---缓存-提高检索效率的利器
  17. html需要电脑什么配置,买电脑主要看什么配置和参数
  18. elevation 设置无效果
  19. Ubuntu下为安装的软件创建启动图标并添加到开始菜单
  20. InterSystems IRIS 和 IRIS for Health 2021.2 正式发布!

热门文章

  1. WordPress添加plugin
  2. http的无连接和无状态
  3. 台式电脑计算机图标,台式win7电脑调整显示器图标大小的两种方法
  4. Eml文件转换成MailMessage类型
  5. 【已解决】【V1.1版本】如何彻底关闭Win10的自动更新并且随时可以恢复?
  6. python入门小项目 | 用Python复刻了植物大战僵尸
  7. 如何每天自动申请京东试用
  8. @RequestBody
  9. Excel技能培训之十三字符串操作函数mid,left,right,find,len,lenb,search,phonetic,extract
  10. 数据治理 | 质检监控中心