java实现简易扑克牌游戏

本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下

游戏功能描述

1、创建一副扑克牌:

包括四种花色:黑桃,红桃,梅花,方片
包括十三种点数:2-10,J,Q,K,A

2、创建两名玩家(or多名)

玩家至少要有ID,姓名,手牌等属性,手牌为扑克牌的集合

3、将创建好的扑克牌进行随机洗牌

4、从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发两张(or多张)

5、比较两名玩家手中的扑克牌,比较规则为:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数最大的牌相等,则再按照花色比较。

代码

//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>();

 //创建一副扑克牌
 public Cards(){
  System.out.println("-----------------创建扑克牌------------------");
  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("----------------扑克牌创建成功!---------------");
 }

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

 //洗牌(打乱)
 public void shufCards(){
  System.out.println("----------------开始洗牌------------------------");
  Collections.shuffle(list);
  System.out.println("----------------洗牌结束------------------------");
 }

 //展示一副扑克牌
 public void showCards(){
  System.out.print("当前的扑克牌为:");
  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(自定义排序规则)

package card;

import java.util.Comparator;

public class CardComparator implements Comparator<Card> {

 @Override
 public int compare(Card c1, Card c2) {
  // 构建花色和牌值数组,通过比对,计算得到某张牌的价值(大小)
  String[] color = {"方片", "梅花", "红桃", "黑桃"};
  String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"};

  //由于比较规则是先比较牌值,如果相等再比较花色(黑红梅方),所以将牌值赋予较高的权值
  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 {

 //创建玩家
 //要对玩家ID的异常处理,要求用户只能输入整数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("请输入整数类型的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) {
  //测试简易扑克牌程序
  PlayDemo game = new PlayDemo();
  //(1)创建一副牌
  Cards cards = new Cards();
  //(2)展示新的扑克牌
  cards.showCards();
  //(3)洗牌
  cards.shufCards();
  //(4)创建玩家
  System.out.println("--------------创建两个(or多个)玩家就可以开始游戏啦!-------------");
  List<Player> p = new ArrayList<Player>();
  for(int i=0;i<2;i++)
  {
   System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:");
   p.add(game.setPlayer());
  }
  for(int i=0;i<p.size();i++)
  {
   System.out.println("欢迎玩家:"+p.get(i).getName());
  }
  //(5)扑克牌比大小游戏开始啦~
  int count = 0;
  System.out.println("------------------开始发牌---------------------");
  //设定每人分别拿两张(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("------------------发牌结束!--------------------");
  System.out.println("------------------开始游戏 ---------------------");
  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(" ]");
  }

  //排序得到每个玩家最大的手牌(排序规则自定义)
  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()+"获胜!");
  }

 }

}

游戏运行截图

还有一个地方需要优化,即不能输入重复的ID和姓名,可以重写Player的equals方法,将用户的输入与已有的输入相比较,不满足要求则需要重新输入,不过就先不加了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用java对一副扑克牌建模

    本文实例为大家分享了java对一副扑克牌建模的具体代码,供大家参考,具体内容如下 第一步:使用枚举法对一副扑克牌(52张牌,不包括大小王)进行建模:一副扑克牌共有四种花色分别是:黑桃,方块,梅花,红心:而每种花色的牌一共有13张: import java.util.EnumMap; import java.util.EnumSet; public class EnumSetTest { //枚举类型Suit enum Suit{"HEART ","SPADE ",&

  • Java实现扑克牌洗牌和发牌

    本文实例为大家分享了Java实现扑克牌洗牌发牌的具体代码,供大家参考,具体内容如下 实现原理:使用4种花色和13个数字组合成52张牌,放进一个集合中:通过把集合数据排序打乱实现洗牌操作,然后在通过循环把牌抽出来实现发牌操作. 下面是实现代码: import java.util.ArrayList; import java.util.Collections; public class Card { private static ArrayList<String> list = new Array

  • Java基础高级综合练习题扑克牌的创建

    最近学了很多的知识,脑容量小,记不清,还是得做做练习! 今天就做了一个扑克牌的练习 首先呢..这个逻辑一定要非常清楚,我们要想做出一副扑克牌,必定要弄清楚每一张牌和整的一副牌 首先分析 一张扑克 一张牌里面有什么?相信大家看图(图不是我写的)就应该懂了,一张扑克有属于它自己的花色(红桃,黑桃,梅花,方块) 以及自己的点数(A,2,3-..J,Q,K)就这两种属性,对吧! 那么花色符号,点数符号是个啥? 花色符号就是来代替我们的花色的,我们不可能拿着"红桃"这种文字写进程序吧!所以我们可

  • Java模拟扑克牌洗牌实现生成52张扑克的方法示例

    本文实例讲述了Java模拟扑克牌洗牌实现生成52张扑克的方法.分享给大家供大家参考,具体如下: 要求: 生成52张扑克,模拟扑克牌洗牌,并输出. 实现代码: package com.NCU.ZHANGhuirong; import java.util.ArrayList; import java.util.Collections; public class Card { public String poker(int num) { String str = ""; String[] f

  • java用扑克牌计算24点

    一副扑克牌的每张牌表示一个数(J.Q.K 分别表示 11.12.13,两个司令都表示 6).任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式.每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个且可以重复取.运算遵从一定优先级别,可加括号控制,最终使运算结果为 24.请输出一种解决方案的表达式,用括号表示运算优先.如果没有一种解决方案,则输出 -1 表示无解. 输入格式: 输入在一行中给出 4 个整数,每个

  • Java扑克牌速算24的方法

    已知一副扑克牌有54张,去除大王和小王,剩余52张.在其中随机抽取4张牌,利用加减乘除进行计算得到24. 从A到10,他们的值分别为1到10. 从J到K,他们对应的值是减去10以后的值.编写程序生成一副扑克牌,随机抽取4张,进行计算是否能得到24. 如果可以,列出可能的计算表达式,可能有多种计算形式. 主要思想就是先生成除去大小王的52张扑克牌,然后从中随机抽取四张.接着用排列组合的方式找到能计算得到24的表达式. package Poker; import java.util.Random;

  • JAVA collection集合之扑克牌游戏实例

    Collection 层次结构中的根接口.Collection表示一组对象,这些对象也称为collection的元素.一些 collection 允许有重复的元素,而另一些则不允许.一些 collection 是有序的,而另一些则是无序的.JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现.此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection. 主要内容:这里使用collection集合,模拟香港电影中大佬们玩的

  • Java实现简易扑克牌游戏的完整实例

    功能描述 1.创建扑克牌.包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王. 2.创建两个玩家.包括玩家id.姓名.手牌等集合,手牌为扑克牌的集合. 3.洗牌.将创建好的扑克牌打乱. 4.发牌.将洗牌之后的扑克牌集合,从第一张开始,发给两个玩家,安装一人 一张的方式,每人发两张. 5.游戏.比较两名玩家手中的扑克牌.规则为:去两名玩家手上点数最大的牌进行比较,点数大的赢,若点数一样大,就按照色花进行比较. 难点分析: 1.洗牌,如何将扑克牌进行打乱.(主要

  • java实现简易扑克牌游戏

    本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下 游戏功能描述 1.创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 2.创建两名玩家(or多名) 玩家至少要有ID,姓名,手牌等属性,手牌为扑克牌的集合 3.将创建好的扑克牌进行随机洗牌 4.从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发两张(or多张) 5.比较两名玩家手中的扑克牌,比较规则为:取两人各自手中点数最大的牌进行比较,点数大的赢:若

  • java实现简易五子棋游戏

    本文实例为大家分享了java实现简易五子棋游戏的具体代码,供大家参考,具体内容如下 编写一个简易五子棋,棋盘在控制台中绘制,棋盘每- - 个点都有对应的坐标,下棋者输 入对应坐标落棋子,运行效果如图所示.两位数字表示的坐标中,第-一个数字表示横坐标, 第二个数字表示纵坐标,运行结果如图所示. 代码: package Test; import java.util.Scanner; public class Test4 { public static void main(String[] args)

  • java实现简单扑克牌游戏

    本文实例为大家分享了java实现简单扑克牌游戏的具体代码,供大家参考,具体内容如下 扑克牌小游戏: 游戏玩法简介:定义五个People在玩扑克牌游戏,玩法是5个人从一副没有大小王的扑克牌中各抽取4张,牌的类型有四种:♥,♣,♠,♦.牌的大小为从1~13.(此处为了简单,只取1 -5). 1.黑桃♠A在哪名玩家手中,哪名玩家就获胜. package poker; import java.util.ArrayList; import java.util.Collections; import jav

  • Java实现简易拼图游戏的方法详解

    目录 效果展示 游戏结构 实现代码 效果展示 介绍:游戏共有五张图片可以选择,分成了4 X 4 十六个方格,点击开始就可以开始游戏.游戏运行的截图如下: 游戏结构 实现代码 代码如下:MedleyGame.java类 package game.medleyPicture; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.even

  • C语言实现简易扑克牌游戏

    将一副扑克牌平均分成两份,每人拿一份.a先拿出手中的第一张扑克牌放在桌上,然后b也拿出手中的第一张扑克牌,并放在a刚打出的扑克牌的上面,就像这样两人交替出牌.出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾.当任意一人手中的牌全部出完时,游戏结束,对手获胜. 以下是代码的实现: #define _crt_secure_no_deprecate #include<stdio.h> #include<stdlib.h>

  • java实现简易的五子棋游戏

    本文实例为大家分享了java实现简易五子棋游戏的具体代码,供大家参考,具体内容如下 先上效果图 一.问题分析 1.五子棋游戏分析: 五子棋作为较为普遍且简易的娱乐游戏,受到众多人的热爱,且五子棋AI也是一个较为容易实现的AI.下面我们先来分析游戏规则.(哈哈,虽然大家都知道,但我还是想写写)双方分别使用黑白两色棋子,下在棋盘横线交叉处,先连成五子者胜利.(黑棋禁手啥的规则在我的程序里没加,就不赘述了). 2.程序分析: (1)首先,五子棋开始,我们需要一个棋盘,15*15的棋盘,需要黑白棋子.

  • java简易小游戏制作代码

    java简易小游戏制作 游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器. 游戏内容部分 package 代码部分; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyList

  • Java实现简易五子棋小游戏

    本文实例为大家分享了Java实现简易五子棋小游戏的具体代码,供大家参考,具体内容如下 一.实践目标: 1.掌握JavaGUI界面设计 2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二.实践内容: 设计一个简单的五子棋程序,能够实现五子棋下棋过程.如下图所示 五子棋运行界面 1.五子棋棋盘类 package cn.edu.ouc.fiveChess;   import java.awt.Color; import java.awt.Cursor; i

随机推荐