用C#模拟实现扑克牌发牌、排序程序。 程序报错

.Net技术 码拜 8年前 (2016-02-29) 2164次浏览
[csharp] view plain copy print?在CODE上查看代码片派生到本人的代码片
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//用C#模拟实现扑克牌发牌、排序程序。
//(1)52张扑克牌,四种花色(红桃、黑桃、方块和梅花),随机发牌给四个人。
//(2)最后将四个人的扑克牌包括花色打印在控制台上。
//其中:
//  花色和点数用枚举类型实现
//  每张扑克牌用结构实现
//提示:可以用ArrayList初始化52张扑克牌,然后从这个链表中随机取牌发给四个玩家,直到链表为空为止。

namespace Test5
{
enum Color {HongTao=-1,HeiTao=-2,MeiHua=-3,FangPian=-4}//花色
enum Point {A,two,three,four,five,six,seven,eight,nine,ten,J,Q,K}//点数
struct Poker
{//扑克
private string p1,p2;
public Poker(string p1, string p2)
{
// TODO: Complete member initialization
this.p1 = p1;
this.p2 = p2;
}
public void Printp()
{
Console.Write(“({0},{1}) “, this.p1,this.p2);
}
}
class Program
{

static void Main(string[] args)
{
Poker po = new Poker();
  ArrayList myPoker=new ArrayList();//实例化一个ArrayList存放全部的扑克牌
ArrayList Person1 = new ArrayList();
ArrayList Person2 = new ArrayList();
ArrayList Person3 = new ArrayList();
ArrayList Person4 = new ArrayList();

Random r = new Random();
for (int i = -4; i <= -1; i++)
{//外循环初始化扑克的花色
for (int j = 0; j <= 12; j++)
{//外层循环初始化扑克的点数
myPoker.Add(new Poker(
Enum.GetName(typeof(Color),i),
Enum.GetName(typeof(Point),j)
));
}
}//for循环结束,52张扑克牌已经生成
Console.WriteLine(“打印全部的扑克牌:”);
for (int i = 0; i < 52; i++)
{//打印52张生成的扑克牌
Poker poAll = (Poker)myPoker[i];
poAll.Printp();
}
//开始发牌,一个人一个人的发,每发一张牌得从myPoker中RemoveAt掉扑克牌,Count数减小;第一个人Add到一张牌。
for (int i = 0; i < 13; i++)
{
int te = r.Next(0,myPoker.Count);
Person1.Add(myPoker[te]);
myPoker.RemoveAt(te);
}
for (int i = 0; i < 13; i++)
{
int te = r.Next(0, myPoker.Count);
Person2.Add(myPoker[te]);
myPoker.RemoveAt(te);
}
for (int i = 0; i < 13; i++)
{
int te = r.Next(0, myPoker.Count);
Person3.Add(myPoker[te]);
myPoker.RemoveAt(te);
}
for (int i = 0; i < 13; i++)
{
int te = r.Next(0, myPoker.Count);
Person4.Add(myPoker[te]);
myPoker.RemoveAt(te);
}

Console.WriteLine();
Console.WriteLine(“打印第一个人的扑克牌:”);
for (int i = 0; i < 13;i++ )
{
Poker po1 = (Poker)Person1[i];
po1.Printp();
}
Console.WriteLine();
Console.WriteLine(“打印第二个人的扑克牌:”);
for (int i = 0; i < 13; i++)
{
Poker po2 = (Poker)Person2[i];
po2.Printp();
}
Console.WriteLine();
Console.WriteLine(“打印第三个人的扑克牌:”);
for (int i = 0; i < 13; i++)
{
Poker po3 = (Poker)Person3[i];
po3.Printp();
}
Console.WriteLine();
Console.WriteLine(“打印第四个人的扑克牌:”);
for (int i = 0; i < 13; i++)
{
Poker po4 = (Poker)Person4[i];
po4.Printp();
}
Console.WriteLine();
}
}
}
错误 1 未能找到类型或命名空间名称“ArrayList”(能否缺少 using 指令或程序集引用?) D:\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs 50 13 ConsoleApplication2

出现了一个看不懂的问题,怎么改,求帮助

解决方案

2

调用ArrayList, 最前面添加 using System.Collections
…..
using System.Text;
using System.Threading.Tasks;
using System.Collections

2

VS 是只能的,在有 红色波浪线的 ArrayList 上点击鼠标右键,并在弹出的菜单上选择 解析
就可以自动帮你加上 using System.Collections;

5

引用 5 楼 qq_34818060 的回复:
Quote: 引用 1 楼 shoppo0505 的回复:

调用ArrayList, 最前面添加 using System.Collections
…..
using System.Text;
using System.Threading.Tasks;
using System.Collections

enum Point {A,two,three,four,five,six,seven,eight,nine,ten,J,Q,K}
本人想把枚举中的2到10改成数字输出,而不是英文输出 ,又该怎么修改

你的myPoker构造函数根据给入enum Point,把扑克牌的名称换掉就行了

3

本人建议你这样写

            var Point = new string[]
            {
                "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "J", "Q", "K",            
            };
            var Color = new string[]
            {
                "红桃", "黑桃", "方片", "梅花",            
            };
            var list = Enumerable.Range(0, 52) //生成52张牌
                    .OrderBy(p => Guid.NewGuid()); //随机乱序
            var n = 0;
            foreach (var x in list)
            {
                Console.Write("{0}{1} ", Color[(int)(x / 13)], Point[x % 13]);
                if((++n) % 13 == 0) Console.WriteLine("");
            }

用C#模拟实现扑克牌发牌、排序程序。 程序报错

5

引用 8 楼 qq_34818060 的回复:
Quote: 引用 7 楼 shoppo0505 的回复:
Quote: 引用 5 楼 qq_34818060 的回复:
Quote: 引用 1 楼 shoppo0505 的回复:

调用ArrayList, 最前面添加 using System.Collections
…..
using System.Text;
using System.Threading.Tasks;
using System.Collections

enum Point {A,two,three,four,five,six,seven,eight,nine,ten,J,Q,K}
本人想把枚举中的2到10改成数字输出,而不是英文输出 ,又该怎么修改

你的myPoker构造函数根据给入enum Point,把扑克牌的名称换掉就行了

本人照你你那样改完后还是英文的2到10啊,具体怎么改?

代码贴上来

3

引用 12 楼 qq_34818060 的回复:
Quote: 引用 10 楼 shoppo0505 的回复:
Quote: 引用 8 楼 qq_34818060 的回复:
Quote: 引用 7 楼 shoppo0505 的回复:
Quote: 引用 5 楼 qq_34818060 的回复:
Quote: 引用 1 楼 shoppo0505 的回复:

调用ArrayList, 最前面添加 using System.Collections
…..
using System.Text;
using System.Threading.Tasks;
using System.Collections

enum Point {A,two,three,four,five,six,seven,eight,nine,ten,J,Q,K}
本人想把枚举中的2到10改成数字输出,而不是英文输出 ,又该怎么修改

你的myPoker构造函数根据给入enum Point,把扑克牌的名称换掉就行了

本人照你你那样改完后还是英文的2到10啊,具体怎么改?

代码贴上来

enum Point {A,two,three,four,five,six,seven,eight,nine,ten,J,Q,K}//点数   想把2到10改成数字输出

public Poker(string p1, Point p)
{
// TODO: Complete member initialization
this.p1 = p1;
switch p
case Point.tow:
this..p2 = “2”;
break;
case …..
}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用C#模拟实现扑克牌发牌、排序程序。 程序报错
喜欢 (0)
[1034331897@qq.com]
分享 (0)