用C语言指针实现随机发牌程序,用C#模拟实现扑克牌发牌、随机排序程序。 报错...

本文通过C#编程,演示如何使用枚举表示扑克花色和点数,以及如何创建Poker类模拟发牌过程。讲述了如何初始化扑克牌,随机分配给四名玩家,并打印他们的牌组。遇到的问题是关于类型转换和构造函数参数类型不匹配,解决方案涉及枚举与字符串处理的调整。
摘要由CSDN通过智能技术生成

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Collections;

using Test5;

//用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 }//点数

class Poker //定义poker类

{     //扑克

private string p1, p2;

public Poker(string x, point y)//构造函数

{

this.p1 = x;

switch (y)

{

case point.two: this.p2 = “2”; break;

case point.three :this.p2=”3″;break;

case point.four:this .p2=”4″;break;

case  point.five:this .p2=”4″;break;

case point.six:this.p2=”4″;break;

case point.seven:this.p2=”4″;break;

case point.eight:this.p2=”4″;break;

case point.nine:this .p2=”4″;break;

case point.ten: this.p2 = “4”; break;

}

}

public void Printp()//方法成员

{

Console.Write(“({0},{1})”, this.p1, this.p2);

}

}

class program

{

static void Main(string[] args)

{

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)  //往mypoker内添加已设计好的枚举元素

));

}

}       //for循环结束,52张扑克牌已经生成

Console.WriteLine(“打印全部的扑克牌:”);

for (int i = 0; i 

{

Poker poAll = (Poker)myPoker[i];//访问mypoker中的元素

poAll.Printp();//调用Printp方法

}

//开始发牌,一个人一个人的发,每发一张牌得从myPoker中RemoveAt掉扑克牌,Count数减小;第一个人Add到一张牌。

for (int i = 0; i 

{

int te = r.Next(0, myPoker.Count);//分配随机数

Person1.Add(myPoker[te]);

myPoker.RemoveAt(te);

}

for (int i = 0; i 

{

int te = r.Next(0, myPoker.Count);

Person2.Add(myPoker[te]);

myPoker.RemoveAt(te);

}

for (int i = 0; i 

{

int te = r.Next(0, myPoker.Count);

Person3.Add(myPoker[te]);

myPoker.RemoveAt(te);

}

for (int i = 0; i 

{

int te = r.Next(0, myPoker.Count);

Person4.Add(myPoker[te]);

myPoker.RemoveAt(te);

}

//打印四个人的扑克牌

Console.WriteLine();

Console.WriteLine();

Console.WriteLine(“打印第一个人的扑克牌:”);

for (int i = 0; i 

{

Poker po1 = (Poker)Person1[i];//访问person1中的元素

po1.Printp();//再次调用Printp方法

}

Console.WriteLine();

Console.WriteLine();

Console.WriteLine(“打印第二个人的扑克牌:”);

for (int i = 0; i 

{

Poker po2 = (Poker)Person2[i];

po2.Printp();

}

Console.WriteLine();

Console.WriteLine();

Console.WriteLine(“打印第三个人的扑克牌:”);

for (int i = 0; i 

{

Poker po3 = (Poker)Person3[i];

po3.Printp();

}

Console.WriteLine();

Console.WriteLine();

Console.WriteLine(“打印第四个人的扑克牌:”);

for (int i = 0; i 

{

Poker po4 = (Poker)Person4[i];

po4.Printp();

}

Console.WriteLine();

Console.WriteLine();

}

}

}

错误 2 参数 2: 无法从“string”转换为“Test5.point” D:\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs 77 25 ConsoleApplication2

错误 1 与“Test5.Poker.Poker(string, Test5.point)”最匹配的重载方法具有一些无效参数 D:\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs 74 33 ConsoleApplication2

这是什么问题怎么解决,本人只是想用枚举类把2到10的数字以数字形式输出,求帮助?

解决方案

2

new Poker需要的参数是xy,你传的不知道是什么

Enum.GetName(typeof(point), j)

这里返回的是string

2

额,这是作业把,怎么都一个问题

看这里把

http://bbs.csdn.net/topics/391966730

当然你这是作业,俺们滴回复你可以略过,只告诉你那位老兄始终没明白滴东西  (int)enum.xxx 可以转成int,同样 (xx枚举)int也可以转成xx枚举

2

你试试看 (int)point.two是什么,应该是1把,原因是索引是0开始,自然two是1,那么你加个1就是

10

1、Enum.GetName(typeof(point), j) 得到的是字符串

所以会有  与“Test5.Poker.Poker(string, Test5.point)”最匹配的重载方法具有一些无效参数

public Poker(string x, point y)//构造函数

应改为

public Poker(string x, string y)//构造函数

2、既然 y 已经是 string 的了

那么就要按字符串进行比较

switch (y)

{

case "two": this.p2 = "2"; break;

case "three": this.p2 = "3"; break;

case "four": this.p2 = "4"; break;

case "five": this.p2 = "4"; break;

case "six": this.p2 = "4"; break;

case "seven": this.p2 = "4"; break;

case "eight": this.p2 = "4"; break;

case "nine": this.p2 = "4"; break;

case "ten": this.p2 = "4"; break;

default: p2 = y; break;

}

加了句 default: p2 = y; break; 否在对于 A、J、Q、K 都显示为空了

一个可能的结果

b422f87107af772df7ee32e351cefe06.png

4

其实你的两个枚举,意义实在不大

真不如改成两个字符串数组

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用C#模拟实现扑克牌发牌、随机排序程序。 报错!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值