知识点:

1.Collections.sort;

2.do while确保不重复;

3.重写compare 比较规则;

主要的对象有

1.玩家 (ID、姓名、手牌列表)

2.卡牌(花色、点数)

1.玩家类

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import java.util.Set;

public class Player {

public String name;

public int id;

public List cards = new ArrayList();

public Player(int id, String name) {

this.name = name;

this.id = id;

}

public Player() {

}

}

2.卡牌类

import java.util.Arrays;

public class cards implements Comparable {

public String color;

public String num;

public cards(String color,String num){

this.color=color;

this.num=num;

}

public cards(){

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((color == null) ? 0 : color.hashCode());

result = prime * result + ((num == null) ? 0 : num.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

cards other = (cards) obj;

if (color == null) {

if (other.color != null)

return false;

} else if (!color.equals(other.color))

return false;

if (num == null) {

if (other.num != null)

return false;

} else if (!num.equals(other.num))

return false;

return true;

}

@Override

public int compareTo(cards o) {

String[] a={"黑桃","红桃","梅花","方块"};

String[] b={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

int thisn=Arrays.binarySearch(b, this.num);

int on=Arrays.binarySearch(b, o.num);

int thisc=Arrays.binarySearch(a, this.color);

int oc=Arrays.binarySearch(a, o.color);

int j=0;

if(thisn

j=-1;

if(thisn>on)

j=1;

if(thisn==on){

if(thisc

j=1;

if(thisc>oc)

j=-1;

}

return j;

}

}

3.主程序

import java.util.*;

public class Test implements Comparator {

public List cardss;

public List players;

public int jk = 53;

public Test() {

this.cardss = new ArrayList();

this.players = new ArrayList();

}

public static void main(String[] args) {

/*

* 提示信息,提示用户进入。

*/

Test test = new Test();

System.out.println("----------创建扑克牌----------");

System.out.println("---------创建扑克牌成功---------");

test.cardAdd();

System.out.println("");

System.out.println("---------开始洗牌-------------");

System.out.println("---------洗牌结束-------------");

System.out.println("---------设置玩家-------------");

/*

* 创建用户并赋上playerSet方法返回的玩家参数。 用do while 确保用户Id不重复。

*/

Player player1 = new Player();

Player player2 = new Player();

player1 = test.playerSet();

do {

player2 = test.playerSet();

if (player1.id == player2.id) {

System.out.println("Id重复请重新输入ID");

}

} while (player1.id == player2.id);

/*

* 调用getCard方法每名玩家得到两张卡牌,且无重复卡牌出现。

*/

System.out.println("---------欢迎玩家:" + player1.name + ";" + player2.name

+ "-------");

player1 = test.getCard(player1);

System.out.println(player1.name + "拿2张牌");

player2 = test.getCard(player2);

;

System.out.println(player2.name + "拿2张牌");

/*

* 将每个玩家的卡牌排序使卡牌大的靠后.

*/

Collections.sort(player2.cards);

Collections.sort(player1.cards);

System.out.println("------发牌结束------");

System.out.println(player1.name + "最大的牌为:" + player1.cards.get(1).color

+ player1.cards.get(1).num);

System.out.println(player2.name + "最大的牌为:" + player2.cards.get(1).color

+ player2.cards.get(1).num);

/*

* 调用compare方法比较两个玩家分别最大牌的大小. 一些单独写成方法更科学,稍微偷下懒。 变成有点面向过程意味。

*/

int i = test.compare(player1.cards.get(1), player2.cards.get(1));

if (i == 1)

System.out.println("------玩家" + player1.name + "赢------");

if (i == -1)

System.out.println("------玩家" + player2.name + "赢------");

/*

* 输出各自玩家的手牌

*/

System.out.println("------玩家各自的手牌为-----");

/*

* 玩家一:注意println()和print()的区别

*/

System.out.print(player1.name + ":\t");

for (cards ka : player1.cards) {

System.out.print(ka.color + ka.num + "\t");

}

/*

* 玩家二:最后一个是print所以多加一行空白的 System.out.println("");

*/

System.out.println("");

System.out.print(player2.name + ":\t");

for (cards ka : player2.cards) {

System.out.print(ka.color + ka.num + "\t");

}

}

/*

* 用于创建玩家的Id和姓名; try catch 利用for循环和i--使错误时能多进行一次; 可能会有更方便的方法;

*/

public Player playerSet() {

Player p1 = new Player();

int i;

for (i = 0; i < 1; i++) {

try {

Scanner input = new Scanner(System.in);

System.out.println("请输入玩家ID:");

int Id = input.nextInt();

p1.id = Id;

System.out.println("请输入ID为" + Id + "的玩家的名字:");

String Name = input.next();

p1.name = Name;

System.out.println("成功添加" + p1.name);

} catch (InputMismatchException e) {

System.out.println("请输入整数");

i--;

}

}

return p1;

}

/*

* 应该先看save方法再看这个方法;此方法用于将save方法产生的任意卡牌过滤掉重复卡牌;直到往列表cardss加够52张不重复的卡牌;知识点:

* 1.do while2.cardss.contains(ka);

*/

public void cardAdd() {

cards ka;

System.out.println("-----成功创建了52张卡牌列表如下----");

for (int i = 0; i < 52; i++) {

do {

ka = save();

} while (cardss.contains(ka));

System.out.print(ka.color + ka.num);

cardss.add(ka);

}

}

/*

* 用于在数组里随机产生一张卡牌。 无需过多限制。 不得不佩服计算机的计算能力。 虽然这种方法不符合人的逻辑,但是对于计算机来说瞬间试错玩,太简单了。

*/

public cards save() {

Random suiji = new Random();

String[] a = { "黑桃", "红桃", "梅花", "方块" };

String[] b = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",

"Q", "K" };

int i = suiji.nextInt(4);

int h = suiji.nextInt(b.length);

cards ka = new cards(a[i], b[h]);

return ka;

}

/*

* 用于在cardss里取得卡牌赋予到每个Player对象的cards集合里里。 无需过多限制。 jk-2是防止某些小概率情况下报错;

*/

public Player getCard(Player pl) {

Random suiji = new Random();

cards ka1;

cards ka2;

do {

ka1 = cardss.get(suiji.nextInt(jk));

ka2 = cardss.get(suiji.nextInt(jk));

} while (ka1.color.equals(ka2.color) && ka1.num == ka2.num);

pl.cards.add(ka1);

pl.cards.add(ka2);

cardss.remove(ka1);

cardss.remove(ka2);

jk = jk - 2;

return pl;

}

/*

* compare方法用于临时比较卡牌大小;理论上是用于sort方法,偷懒直接用其返回值配合if进行判断

* 所以理论上可以完全不使用Comparator接口自定义一个临时方法

*/

public int compare(cards cards1, cards cards2) {

String[] a = { "黑桃", "红桃", "梅花", "方块" };

String[] b = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",

"K", "A" };

int j = 0;

/*

* 新学到的 Arrays.binarySearch(b,cards1.num); 用于查找具体字符串在数组b中的位置。 上面的数组建立的不好

* 一个是按大到小,一个是按小到大 导致下面的返回值得思考得更费精力

*/

int ka1num = Arrays.binarySearch(b, cards1.num);

int ka2num = Arrays.binarySearch(b, cards2.num);

int ka1color = Arrays.binarySearch(a, cards1.color);

int ka2color = Arrays.binarySearch(a, cards2.color);

if (ka1num < ka2num)

j = -1;

if (ka1num > ka2num)

j = 1;

if (ka1num == ka2num) {

if (ka1color < ka2color)

j = 1;

if (ka1color > ka2color)

j = -1;

}

return j;

}

}

黑桃k游戏java实战_#Java小案例 扑克牌小游戏相关推荐

  1. Java实战项目(三)——二十一点游戏

    一.项目目标 利用Java swing技术能够实现玩家与电脑进行二十一点游戏.要求如下: 纸牌数:共52张纸牌,除去大小王两张纸牌. 花色:红桃.黑桃.方块.梅花. 纸牌的面值:A到10的纸牌面值按照 ...

  2. 黑桃k游戏java实战_JAVA入门第三季综合实战-简易扑克游戏

    自己写加参考,解决了抛异常只抛一次的问题 ,使程序更加完整 卡片类 package practice; public class Card { @Override public int hashCod ...

  3. java实现游戏对战过程_【Java实战】Java实现简易坦克对战小游戏

    //此程序用来实现一个简易的坦克对战小游戏! //Version:1.0 // @Author:Yongchun_zha package cha09; import javax.swing.*; im ...

  4. 【Java实战】Java实现简易坦克对战小游戏

    摘要:前期学习了Java入门的相关基础,现在通过这个小项目来熟悉巩固所学.该程序主要实现了一个简易的坦克对战小游戏,提供UI界面 //此程序用来实现一个简易的坦克对战小游戏! //Version:1. ...

  5. 企鹅java游戏下载安装_企鹅企鹅生活安卓版游戏下载|企鹅企鹅生活手游下载v1.6.1-乐游网安卓下载...

    <企鹅企鹅生活手游>这是一款玩法非常轻松有趣的点击类养成手游,游戏采用卡通风格设计非常的清新美观,游戏中,玩家将能体验到养育企鹅的各种乐趣,从孵化企鹅蛋到看着企鹅一点一点长大,非常的有意思 ...

  6. java gul_[java实战篇]--java的GUI(1)

    给出一个实例即可: package mymenu; import java.awt.*; import java.awt.event.*; import java.io.*; public class ...

  7. 爱你用java代码_[java]__如何用你的编程语言表达至尊宝爱你一万年的浪漫情怀....

    前言 我在很多地方,或多或少都了解到人们对程序员的看法,大多是智商高情商低,不懂的浪漫之类的,并且看到了一个十分有趣的视频,用程序来表达你对女朋友的爱,于是,便来了兴趣,我想最浪漫的承诺,应该就是大话 ...

  8. 分享好玩的h5小游戏制作步骤_怎么做h5微信小游戏

    近年来,市面上一直流行各种h5游戏,例如投票.答题.刮刮乐.大转盘等等等等,而且我在各种营销场景下经常看到它们的身影,是做促销,引流和宣传的神器之一! 那么,怎么做好玩的h5游戏?还在找h5小游戏模板 ...

  9. mysql数据库合并游戏合服_[转载]浅谈滚服游戏如果实现一键合服

    转载自 石匠的Blog: http://www.bugclosed.com/post/12 背景 近几年的游戏行业中,出现了各种各样的滚服游戏,包括页游,手游,H5游戏等等.滚服游戏和大服游戏的区别在 ...

最新文章

  1. 谈谈对web标准的理解
  2. 【敏捷开发】Node.js(nodejs)实现一个接口完成增删改查聚合接口4个功能,最大限度节省接口数量,正所谓“一口多用”(基础版、免登陆、无鉴权)
  3. 把用户体验设计放到底层逻辑架构设计的前面去做
  4. c语言键盘回调函数键盘的码,深入浅出剖析C语言函数指针与回调函数(三)
  5. openSUSE install albertlauncher from source files
  6. python中全局变量和局部变量详解_Python全局变量与局部变量详解
  7. MFC添加自定义消息及处理函数
  8. android studio类似软件,使Android Studio更高效的几款插件推荐
  9. python 数据库查询结果邮件提醒_python读取postgresql数据库并发送相关提醒邮件
  10. 轻量级java web实践-6(框架源码-4)
  11. 各厂家服务器存储默认登录信息
  12. 计算机网络中链路是指什么意思,什么是计算机网络中的上行链路端口?
  13. git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
  14. Audacity如何改变音频节奏?Audacity调整音频节奏方法
  15. Numpy中的数组、行/列向量及其之间的转化
  16. 如何在树莓派上搭建基于6LowPAN的边界路由器(基于cetic/6LBR方案)
  17. 2021年G3锅炉水处理考试内容及G3锅炉水处理试题及解析
  18. 模拟美萍加密狗--Rockey2虚拟狗(五)
  19. 电销行业智能化将是时代发展的必然趋势
  20. 【开源电机驱动】如何整定PID的参数

热门文章

  1. 基金公司业务突围策略探析——产品布局+工具化定位
  2. PayPal被冻结怎么办?防止PayPal账户冻结和解冻的方法
  3. 设文件索引结点中有7个地址项
  4. 17小学计算机课程目录,课程
  5. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)
  6. java 开源 文件同步_利用开源项目使discus论坛与java应用同步登录和注册
  7. 计算机动画的应用分析,自然用户界面研究与计算机动画
  8. 使用Spark分析拉勾网招聘信息(三): BMR 入门
  9. \(^_^)/ MySQL语句
  10. psv 进php,php - 使用htaccess将网站http重定向到lapsvel中的https - SO中文参考 - www.soinside.com...