新手一枚,最近刚学了java的集合框架,就拿来用一用(水平有限,欢迎交流)

游戏规则是:取两人各自手中点数最大的牌进行比较,点数大的赢;若两人各自的点数相等,则按花色比较。

感觉主要是以下几个方面花了一些时间,

(打乱扑克顺序的洗牌,通过自定义规则比较大小,一些集合与泛型的使用,通过try..catch捕获异常来限定登录ID为整数。)

首先是Card类:

/*** 扑克牌类* @author admin**/public class Card{// 花色:suit//点数:figurepublic String suit;public String figure;/*** 形参构造器* @param suit* @param figure*/public Card(String suit,String figure){this.suit = suit;this.figure = figure;}}

玩家Player类:

import java.util.ArrayList;
import java.util.List;/*** 玩家类* @author admin**/
public class Player {public int id;public String name;//手牌为扑克牌的集合,泛型设定为Cardpublic List<Card> cards;public Player(){this.cards = new ArrayList<Card>();}}

最后是test:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Test {public Scanner console;//用于存放所有扑克的集合public List<Card> AllCards;Player player1 = new Player();Player player2 = new Player();String[] suits = {"方块","梅花","红心","黑桃"};String[] figures = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};public Test(){console = new Scanner(System.in);this.AllCards = new ArrayList<Card>();}/*** 玩家登录*/void login(){System.out.println("这里是登录界面:");//通过try——catch捕获异常,限制输入ID为整数while(true){try{System.out.println("请输入第一个玩家的ID(限为数字):");String testid = console.next();player1.id=Integer.parseInt(testid);break;}catch(NumberFormatException e){System.out.println("请输入正确的ID!");}}System.out.println("请输入第一个玩家的昵称:");player1.name = console.next();while(true){try{System.out.println("请输入第二个玩家的ID(限为数字):");String testid = console.next();player2.id=Integer.parseInt(testid);break;}catch(NumberFormatException e){System.out.println("请输入正确的ID!");}}System.out.println("请输入第二个玩家的昵称:");player2.name = console.next();}/*** 创建扑克牌*/void creatCards(){System.out.println("----------创建扑克牌-----------");for(int i=0;i<4;i++){for(int j=0;j<13;j++){              AllCards.add(new Card(suits[i],figures[j]));}}System.out.println("---------创建成功----------");}/*** 两张扑克牌比较大小的方法(规则是:点数大的为大,点数相同比较花色,大小顺序为:黑桃>红心>梅花>方块),* 返回1代表ob1>ob2,返回-1代表ob1<ob2。*/int compare(Card cd1,Card cd2){int figure1 = 0;int figure2 = 0;//利用数组的下标来比较大小,下标大的就大for(int i=0;i<13;i++){//先获取其在数组中的下标if(cd1.figure == figures[i]){figure1=i;}if(cd2.figure == figures[i]){figure2=i;}}//比较大小if(figure1>figure2){return 1;}else if(figure1==figure2){for(int i=0;i<4;i++){if(cd1.suit == suits[i]){figure1=i;}if(cd2.suit == suits[i]){figure2=i;}}if(figure1>figure2){return 1;}else return -1;}else{return -1;}}/*** 遍历输出所有牌*/void forEach(){System.out.println("有以下扑克牌(通过for each访问):");int i =1;for(Object obj:AllCards){Card cr = (Card) obj;           System.out.print(cr.suit+":"+cr.figure+"   ");//每显示13个牌就换行if(i == 13 || i == 26 || i == 39){System.out.println();}i++;}System.out.println();}/*** 洗牌*/void Shuffle(){System.out.println("-----------开始洗牌---------------");for(int i=0;i<52;i++){int x=(int)(Math.random()*52);Card temp = AllCards.get(x);AllCards.set(x,AllCards.get(i));AllCards.set(i,temp);                     }System.out.println("-----------洗牌结束---------------");System.out.println("此时的牌顺序为:");forEach();}/*** 发牌*/void deal(){System.out.println("-----------------开始发牌--------------------");player1.cards.add(AllCards.get(0));player2.cards.add(AllCards.get(1));player1.cards.add(AllCards.get(2));player2.cards.add(AllCards.get(3));System.out.println("玩家"+player1.name+"的手牌为:"+player1.cards.get(0).suit+":"+player1.cards.get(0).figure+"   和:"+player1.cards.get(1).suit+":"+player1.cards.get(1).figure);System.out.println("玩家"+player2.name+"的手牌为:"+player2.cards.get(0).suit+":"+player2.cards.get(0).figure+"   和:"+player2.cards.get(1).suit+":"+player2.cards.get(1).figure);}/*** 比较大小,选出获胜玩家*/void fight(){System.out.println("比较大小:");int e = 0;//找出玩家1手里最大的牌int o = compare(player1.cards.get(0),player1.cards.get(1));//找出玩家2手里最大的牌int w = compare(player2.cards.get(0),player2.cards.get(1));if(o == 1&&w == 1){//玩家1,2用第一张牌比较大小e = compare(player1.cards.get(0),player2.cards.get(0));}else if(o == -1&& w == 1){e = compare(player1.cards.get(1),player2.cards.get(0));}else if(o == -1&& w == -1){e = compare(player1.cards.get(1),player2.cards.get(1));}else{e = compare(player1.cards.get(0),player2.cards.get(1));}if(e>0){System.out.println("玩家"+player1.name+"获胜!!");}else{System.out.println("玩家"+player2.name+"获胜!!");}}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubTest t = new Test();t.login();t.creatCards();t.forEach();t.Shuffle();t.deal();t.fight();}}

一个简单的扑克牌小程序相关推荐

  1. 一个简单的 Python-kivy 小程序

    大家都知道,Python的用处是所有语言里面最广泛的,这使得它几乎可以开发任何的项目(除了前端). 而有一个方向是大家可能不熟悉,但是又确实存在的,那就是全平台APP开发,Python的kivy就是用 ...

  2. python实现udp聊天室_python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序...

    socket介绍: socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工. socket应用: 不夸张来说,只要跟网络 ...

  3. 小程序服务器搭建前后端交互,手把手带你搭一个简单的微信小程序(包括前后端)...

    开发小程序除了大家能看到的客户端,前端小程序是如何与后端服务器进行数据交互的呢? 本文将通俗易懂的讲一下.这里以nodejs为例来进行讲解 1.首先要在服务器上安装nodejs服务器: ​ wget ...

  4. python简单图画程序_制作一个简单的画图小程序界面

    1 新建一个文本文档,然后点击重命名,建立一个python文件.后缀为.py.如图所示,系统会提示是否更改后缀,点击是.然后就创建了一个python文件. 2 打开刚才创建的文件,使用idle打开方式 ...

  5. 一个简单的文本编辑小程序

    对之前编写的文本编辑小程序改进了一些,增加了许多功能,在Dev-c++上编辑通过. main.cpp #include <windows.h> #include <commctrl. ...

  6. [C#] Socket 通讯,一个简单的聊天窗口小程序

    Socket,这玩意,当时不会的时候,抄别人的都用不好,简单的一句话形容就是"笨死了":也是很多人写的太复杂,不容易理解造成的.最近在搞erlang和C的通讯,也想试试erlang ...

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

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

  8. verilog 简单module_一个简单的verilog小程序

    这是一个verilog单口SRAM的代码,不知道为什么输出总是高阻,请高人指点一下.代码如下modulesram_8_8(wr,rd,din,dout,address,cs);inputwr,rd,c ...

  9. python 某个数是不是在某个范围内_教写一个简单的python小程序(04)

    点击蓝字 关注我们 会酸的柚子 Python爱好者 搞机少年 七夕结束了~ 酸柚也是被强塞了满嘴的狗粮 在这样充满恋爱腐朽气息的一天 酸柚也是马不停蹄的在赶稿子 兄弟们,给我顶起来呀~ 我们来看看今日 ...

最新文章

  1. python3.6安装scrapy-python3.6 安装scrapy
  2. 软件界面中英文对照_再也不用翻译软件了,弱电行业术语大全及中英文对照表来了~...
  3. c语言 乱码转化为16进制_面向小白的C语言科普教程(一)文件和扩展名、编码和十六进制...
  4. SAP Fiori Elements - how to set breakpoint to get converted xml view parsed by f
  5. 手机web网页制作的认识(有关meta标签)
  6. 如何判断软件架构的好与坏
  7. 从零开始学PowerShell(2)管道的作用
  8. MySQL 基础知识(基本架构、存储引擎差异)
  9. c语言写报告抽象数据类型,数据结构(C语言版)第一章 抽象数据类型的表示与实现...
  10. Object类中的主要结构
  11. 《网络是怎样连接的》了解网络连接的全貌
  12. 如何在软件里显示编译时间
  13. AMOS分析技术:测量模型分析;聊聊验证性因子分析(CFA)与探索性因子分析(EFA)的异同点
  14. Linux下父进程子进程先后终止的不同处理
  15. 【论文阅读01】2021 兵棋推演的智能决策技术与挑战 尹奇跃
  16. tp路由器桥接成功无法上网怎么办
  17. Java实现将中文转成拼音和ASCII码
  18. Python快速复制粘贴ins数据,采集网站内视频内容
  19. 约数国王(A king)
  20. 关于ExecuteNonQuery() 方法

热门文章

  1. 《黑镜》(Black Mirror)
  2. 3D 渲染和游戏引擎技术信息来源
  3. ​中国涂装行业市场调研分析及十四五发展前景展望报告2021年版
  4. MySQL数据库入门学习教程(mysql基础+高级)
  5. 变压器的阻抗匹配作用
  6. 伤感 html代码,让对方瞬间心酸的文案,伤感入体,痛彻心扉!
  7. 判断字符串字符种类及个数
  8. uni-app swiper实现公告栏上下循环滚动(整理)
  9. win10 C盘突然少了许多空间解决办法
  10. 根号下的X平方加一C语言,根号下x平方加一分之一怎样积分