男人最重要的四件事: 一日三餐!
using System;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// //用C#模拟实现扑克牌发牌。
/// (1)52张扑克牌,四种花色(红桃、黑桃、方块和梅花),按照每轮一人一张的方式,发牌。
/// (2)最后将3个人的扑克牌包括花色打印在控制台上。
/// 分析: 可以将所有的牌存放到一个列表里, 通过循环/随机数的方式依次发票.每循环一次,从列表中把发过的牌移除.
/// </summary>
namespace DealArithmetic
{
//花色
enum Color
{
红桃️ = -1,
黑桃 = -2,
梅花 = -3,
方砖️ = -4
}
//点数
enum Point
{
A,
two,
three,
four,
five,
six,
seven,
eight,
nine,
ten,
J,
Q,
K
}
//扑克
struct Poker
{
//p1: 花色
//p2: 点数
private string p1, p2;
public Poker (string p1, string p2)
{
this.p1 = p1;
this.p2 = p2;
}
//打印牌的信息
public void Printpoker ()
{
Console.WriteLine ("花色: {0}, 大小: {1}", this.p1, this.p2);
}
}
class MainClass
{
public static void Main (string[] args)
{
//实例化一个ArrayList存放所有的扑克
ArrayList myPoker = new ArrayList ();
//存放每个人的牌的列表
ArrayList person1 = new ArrayList ();
ArrayList person2 = new ArrayList ();
ArrayList person3 = new ArrayList ();
//循环遍历, 生成52张扑克牌
//外层循环控制扑克的花色
for (int i = -4; i < 0; i++) {
//内层循环控制扑克的点数
for (int j = 0; j < 13; j++) {
Poker p = new Poker (Enum.GetName (typeof(Color), i),
Enum.GetName (typeof(Point), j));
myPoker.Add (p);
}
}
Console.WriteLine ("打印所有的扑克: ");
for (int i = 0; i < 52; i++) {
Poker tempPoker = (Poker)myPoker [i];
tempPoker.Printpoker ();
}
//发牌开始, 每轮一人一张,
//每循环一次,就将"发过的牌"移除.下次从新随机,得到新的牌发给下一个人.
Random r = new Random ();
//每个人可以拿到的排数
int count = myPoker.Count / 3;
//外层循环控制每个人可以拿到多少张牌
for (int i = 0; i < count; i++) {
//内层循环控制 一轮每个人一张牌
for (int j = 0; j < 3; j++) {
int te = r.Next (0, myPoker.Count);
switch (j) {
case 0:
person1.Add (myPoker [te]);
break;
case 1:
person2.Add (myPoker [te]);
break;
default:
person3.Add (myPoker [te]);
break;
}
myPoker.RemoveAt (te);
}
}
Console.WriteLine ();
//外层循环遍历每个人
for (int i = 0; i < 3; i++) {
Console.WriteLine ("第{0}个人的牌是: ", i + 1);
//内层循环遍历这个人的所有牌
for (int j = 0; j < count; j++) {
Poker p;
switch (i) {
case 0:
p = (Poker)person1 [j];
break;
case 1:
p = (Poker)person2 [j];
break;
default:
p = (Poker)person3 [j];
break;
}
p.Printpoker ();
}
Console.WriteLine ();
}
}
}
}
说明: 一次性发完每个人的牌的算法与上类似, 可以自行调试.
如有疑问请留言