理解面向对象编程---C#控制台实现52张扑克牌的分法

52张牌随机分给4个玩家,要求每个玩家的牌用一个一维数组表示。

我们采用模拟大法。初始化一副扑克牌,洗牌,发牌。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication43
{

    class Program
    {
        enum Suit
        {
            Spade, Heart, Diamond, Club
        }
        enum Value
        {
            Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queue, King, Ace
        }
        class Card
        {
            public Suit suit;
            public Value value;
        }
        static void Main(string[] args)
        {
            Card[] c = new Card[52];
            for(int i=0;i<52;i++)   ///初始化一副扑克牌
            {
                c[i] = new Card();
                c[i].suit = (Suit)(i % 4);
                c[i].value = (Value)(i % 13);
            }
            for (int k=51; k >=0; k--)  //洗牌
            {
                Random rand = new Random();
                int p = rand.Next(k);
                Card temp=new Card ();
                temp = c[p];
                c[p] = c[k];
                c[k] = temp;
            }
            Card[] E = new Card[13]; Card[] W = new Card[13];
            Card[] S = new Card[13]; Card[] N = new Card[13];
            int A=0,B=0,C=0,D=0;
            for(int j=0;j<52;j++)//分牌
            {
                switch(j%4)
                {
                    case 0: { E[A++] = c[j]; break; }
                    case 1: { S[B++] = c[j]; break; }
                    case 2: { W[C++] = c[j]; break; }
                    case 3: { N[D++] = c[j]; break; }
                    default: { Console.WriteLine("error"); break; }
                }
           }
            Console.WriteLine("东:");
            for (int i = 0; i < 13; i++)
            { Console.Write("{0},{1} ", E[i].suit, E[i].value);}
              Console.WriteLine();
              Console.WriteLine("南:");
            for (int i = 0; i < 13; i++)
            { Console.Write("{0},{1} ", S[i].suit, S[i].value);}
            Console.WriteLine();
            Console.WriteLine("西:");
            for (int i = 0; i < 13; i++)
            { Console.Write("{0},{1} ", W[i].suit, W[i].value);}
              Console.WriteLine();
              Console.WriteLine("北:");
            for (int i = 0; i < 13; i++)
            {  Console.Write("{0},{1} ", N[i].suit, N[i].value);}
        }
    }
}

练习:电脑随机发出5张牌,判断是以下哪种牌型?(梭哈游戏的基础)


同花顺
(Straight Flush亦称“蛇”):同一花色,顺序的牌。

例:

  

  

  

  

  

四条(Four of a Kind,亦称“铁支”、“四张”或“炸弹”):有四张同一点数的牌。

例:

  

  

  

  

  

满堂红(Fullhouse,亦称“俘虏”、“骷髅”、“夫佬”、“葫芦”、“富尔豪斯”):三张同一点数的牌,加一对其他点数的牌。

例:

  

  

  

  

  

同花(Flush,简称“花”:五张同一花色的牌。

例:

  

  

  

  

  

顺子(Straight,):五张顺连的牌。

例:

  

  

  

  

  

三条(Three of a kind,亦称“三张”):有三张同一点数的牌。

例:

  

  

  

  

  

两对(Two Pairs,香港称“Two啤”):两张相同点数的牌,加另外两张相同点数的牌。

例:

  

  

  

  

  

一对(One Pair,香港称“啤”):两张相同点数的牌。

例:

  

  

  

  

  

无对(Zilch ,香港称“粒”):不能排成以上组合的牌,以点数决定大小。

例:

  

  

  

  

  

时间: 2024-08-25 23:13:05

理解面向对象编程---C#控制台实现52张扑克牌的分法的相关文章

Java 用LinkdeList实现52张扑克牌

用LinkdeList实现52张扑克牌(不含大小王)的洗牌功能.提示:花色 ,和数字分别用数组存储. import java.util.LinkedList; import java.util.Random; class Poker{ String color;//花色 String num;//数字 public Poker(String color,String num){ this.color = color; this.num = num; } @Override public Stri

从一些简单代码实例彻底理解面向对象编程思想|OOP本质是什么?

从Rob Pike 的 Google+上的一个推看到了一篇叫<Understanding Object Oriented Programming>的文章,我先把这篇文章简述一下,然后再说说老牌黑客Rob Pike的评论. 先看这篇教程是怎么来讲述OOP的.它先给了下面这个问题,这个问题需要输出一段关于操作系统的文字:假设Unix很不错,Windows很差. 这个把下面这段代码描述成是Hacker Solution.(这帮人觉得下面这叫黑客?我估计这帮人真是没看过C语言的代码) 1 2 3 4

理解面向对象编程(二)-用例图及特征

Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承.封装和多态.Java语言完全以对象为中心,Java程序的最小程序单位是类,整个Java程序由一个一个的类组成. Java完全支持使用对象.类.继承.封装.消息等基本概念来进行程序设计,允许从现实世界中客观存在的事物(即对象)出发来构造软件系统,在系统构造中尽可能运用人类的自然思维方式.实际上,这些优势是所有面向对象编程语言的共同特征.而面向对象的方式实际上由OOA(面向对象分析).OOD(面向对

深入浅出理解面向对象编程思想

C#是一门面向对象的编程语言.关于面向对象编程,首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP.通俗来说,就是 针对对象编程的意思,面向对象中的对象,指一切皆是对象.面向对象——是把构成问题的事务分成各个对象,利用对象之间的关系来解决问题,面向对象因为把事务分成各个对象,所以更容易实现对象的封装,对象的复用.这也就是面向对象的几种特征(封装.继承.多态)这个后面再说. 为了更明白一点,举个例子: 比如要解决去某金融公司上班这个问题,采用面向对象实现

从活字印刷术的角度理解面向对象编程

<大话设计模式>开头从活字印刷术的例子讨论面向对象的好处,个人觉得非常形象.活字印刷术主要体现了面向对象的如下几点: 1. 可维护:修改的话只需要修改某一个字: 2. 可复用:别的字可以重新拿来用: 3. 可扩展:如果要加字,只需要刻新字: 4. 灵活性好:横排竖排都可以. 通过封装.继承.多态把程序的耦合度降低,传统印刷术的问题就在于把所有的字都刻在同一版面上造成耦合度太高所致,用设计模式是的程序更加的灵活,容易修改,并且易于复用.

面向对象编程的弊端是什么? 深入理解面向对象

现时C++可以说是支持OOP范式中最为常用及高性能的语言.虽然如此,在C++使用OOP的编程方式在一些场合未能提供最高性能.[1]详细描述了这个观点,我在此尝试简单说明.注意:其他支持OOP的语言通常都会有本答案中提及的问题,C++只是一个合适的说明例子. 历史上,OOP大概是60年代出现,而C++诞生于70年代末.现在的硬件和当时的有很大差异,其中最大的问题是内存墙. 内存墙,指的是内存性能严重限制CPU性能发挥的现象.在过去的20多年中,处理器的性能以每年大约55%速度快速提升,而内存性能的

接口测试学习-python第七课(面向对象编程)

以前都是面向过程编程,做一件事是按顺序来的,必须经过很多操作.现在是面向对象编程,将各种操作集合在一起,然后指挥其适用于多个场景.上课时老师举了一个蛮贴切的例子,比如买车,面向过程就是先去学车,然后去4s店买车,然后去办证,然后保险,然后临时牌照,然后正式牌照.面向对象就像将这些所有步骤会经历的场景整合起来,直接开一个车辆购置办证中心,然后从学车到办证甚至以后的缴纳罚款全都在这里处理.在我的理解,面向对象就是给一些有共同性的事物先造一个模型,这个模型有这些事物共同的属性,也有这些事物共同的处理方

转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

弊端是,没有人还记得面向对象原本要解决的问题是什么. 1.面向对象原本要解决什么(或者说有什么优良特性)似乎很简单,但实际又很不简单:面向对象三要素封装.继承.多态 (警告:事实上,从业界如此总结出这面向对象三要素的一刹那开始,就已经开始犯错了!). 封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口. 有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者:而外部调用者也可以知道自己不可以碰哪里.这就提供一个良好的合作基础--或者说,只要接

面向对象编程其实很简单——Python 面向对象(初级篇)

在Python教学中发现,很多同学在走到面向对象编程这块就开始蒙圈了,为了帮助大家更好的理解面向对象编程并其能将其用到自己的开发过程中,特写此文. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处. while True: