| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1033 人关注过本帖
标题:向朋友们请教“关于洗牌和发牌程序”
只看楼主 加入收藏
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
 问题点数:0 回复次数:5 
向朋友们请教“关于洗牌和发牌程序”


-----------------本来设计了一个洗牌程序,后来又想用字符串的知识修改成可以在洗牌后发牌的程序。52张牌,洗完后,每人分到13张,并且显示。我企图用strcpy()来完成,可是却遇了错误,请大家指点一下。。谢谢------------------------


#include<iostream>
#include<string>
#include<ctime>
#include<cstdlib>
using namespace std;
enum Suit{clubs,diamonds,hearts,spades};
const int jack=11;
const int queen=12;
const int king=13;
const int ace=14;

class Card
{
private:
int number;
Suit suit;
public:
Card ()
{}
void set(int n,Suit s)
{
number=n;
suit=s;
}
void display();
};

void Card::display()
{
if(number>=2&&number<=10)
cout<<number;
else
switch(number)
{
case jack: cout<<"J";break;
case queen: cout<<"Q";break;
case king: cout<<"K";break;
case ace: cout<<"A";break;
}
switch(suit)
{
case clubs: cout<<static_cast<char>(5);break;
case diamonds: cout<<static_cast<char>(4);break;
case hearts: cout<<static_cast<char>(3);break;
case spades: cout<<static_cast<char>(6);break;
}
}

int main()
{
const MAX=13;
Card deck[52];
Card puck1[MAX];
Card puck2[MAX];
Card puck3[MAX];
Card puck4[MAX];
int j;
string s1;

for(j=0;j<52;j++)
{
Suit su=Suit(j/13);
int nu=(j%13)+2;
deck[j].set(nu,su);
}

cout<<"\nOrdered deck:\n";
for(j=0;j<52;j++)
deck[j].display();

cout<<"Now,swapping...";

srand(time(NULL));
for(j=0;j<52;j++)
{
int k=rand()%52;
Card temp=deck[k];
deck[k]=deck[j];
deck[j]=temp;
}
cout<<"\nShuffled deck:\n";
for(j=0;j<52;j++)
{
deck[j].display();
}

for(j=0;j<13;j++)
{
strcpy(puck1[j],deck[j]);
cout<<"the palyer1:"<<endl;
puck1[j].display();
}

for(j=13;j<26;j++)
{
strcpy(puck2[j],deck[j]);
cout<<"the palyer2:"<<endl;
puck2[j].display();
}

for(j=26;j<39;j++)
{
strcpy(puck3[j],deck[j]);
cout<<"the palyer3:"<<endl;
puck3[j].display();
}

for(j=39;j<53;j++)
{
strcpy(puck4[j],deck[j]);
cout<<"the palyer4:"<<endl;
puck4[j].display();
}

return 0;
}

[此贴子已经被作者于2006-3-9 19:20:41编辑过]

搜索更多相关主题的帖子: 发牌 洗牌 朋友 
2006-03-09 19:19
tyfabc_sc
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-2-17
收藏
得分:0 

你的程序写的不错。
但是你在用strcpy来拷贝对象,在Card类中定义=的操作函数,直接赋值吧。

2006-03-10 11:04
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
但问题是strcpy为什么在这个程序中没有完成考贝功能?

错在哪里呢?

有实力才会有魅力 实力来自坚持不懈的努力
2006-03-10 12:08
tyfabc_sc
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-2-17
收藏
得分:0 

strcpy是用来拷贝字符串的,你到msdn查一下该函数的用法就知道了。

又看了一下你的程序,发现了2点错误:
1.你的puck2、puck3、puck4已经越界了,共13个对象;
2.
for(j=39;j<53;j++)
{
strcpy(puck4[j],deck[j]);
cout<<"the palyer4:"<<endl;
puck4[j].display();
}中deck也越界了,只有52个对象。

应该修改为:
for(j=0;j<13;j++)
{
puck1[j].number=deck[j].number;
puck1[j].suit=deck[j].suit;
cout<<"the palyer1:"<<endl;
puck1[j].display();
}

for(j=13;j<26;j++)
{
puck2[j-13].number=deck[j].number;
puck2[j-13].suit=deck[j].suit;
cout<<"the palyer2:"<<endl;
puck2[j-13].display();
}

for(j=26;j<39;j++)
{
puck3[j-26].number=deck[j].number;
puck3[j-26].suit=deck[j].suit;
cout<<"the palyer3:"<<endl;
puck3[j-26].display();
}

for(j=39;j<52;j++)
{
puck4[j-39].number=deck[j].number;
puck4[j-39].suit=deck[j].suit;
cout<<"the palyer4:"<<endl;
puck4[j-39].display();
}

2006-03-10 13:35
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 

我知道了.确实..我忽视了越界的问题..

不过按照你这样的话.要把CLASS里面的private改成public才行呢.这样有点危险吧...

谢谢你啊..呵呵..


有实力才会有魅力 实力来自坚持不懈的努力
2006-03-10 17:51
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
Card puck1[MAX];
Card puck2[MAX];
Card puck3[MAX];
Card puck4[MAX];
这四个变量应该用指针,因为没有必要重新copy一遍
const int intPuckType = 4, intMaxCardPerPuck = 13;
Card deck[int intPuckType*intMaxCardPerPuck];
Card *puck[intPuckType][intMaxCardPerPuck] = {NULL};
所有class里的attribute都应该保持private。
改了这个就应该可以运行了。
另外所有需要交换的地方最好都试用指针。当然如果用reference熟练的话用reference更好。
在程序风格方面,尽量不要把13,26之类的常数写在执行程序中。其他方面都很好。

http://myajax95./
2006-03-11 04:21
快速回复:向朋友们请教“关于洗牌和发牌程序”
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025727 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved