题目:
都已经这样了,斗地主还会远吗
计导课群里大佬发了PPT,就忍不住点开看,看了就觉得很有道理,但是我们不能抄作业,于是我就尝试不用二维数组
改了一次,指针也不用了
很多东西还是不懂,比如写随机数不知道遇到重复的怎么办,看了大佬的PPT,第一次见到把循环倒回去,我直接惊为天人
正文:
主要的思路就是先把牌定义出来,定义大小,后面0给他+10就行,因为有这个♠啥的,花色就不用定义了
然后进行随机,把0~51这52个数字的顺序打乱,存入一个数组,之后我们用这52个数,一个数表示一张牌,具体方法类似于天干地支纪年法表示120个数一样
就这个按时间重选种子和随机数可以自行百度,我也不会哈哈哈哈哈
这是代码
#include<iostream>
#include<string>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
int main()
{
char numb[13] = { 'A','2','3','4','5','6','7','8','9','0','J','Q','K'};
int i, j,under;
printf("这里有一副新扑克牌\n");//展示一下新扑克
for (i = 0; i < 4; i++)
{
for (under = 0; under < 13; under++)
{
printf(" -- ");
}
printf("\n");
for (j = 0; j < 13; j++)
{
printf("|%c |", i + 3);
}
printf("\n");
for (j = 0; j < 13; j++)
{
if(numb[j]=='0')
printf("|10|");
else
printf("| %c|", numb[j] );
}
printf("\n");
for (under = 0; under < 13; under++)
{
printf(" -- ");
}
printf("\n");
}
int k, p;//洗牌
int step1[52] = { 0 };
srand((unsigned)time(NULL));//按秒重新播种,不然随机数都取一样
for (k = 0; k < 52; k++)//在step1里储存了0~51的不重复的随机数
{
i = rand() % 52;
step1[k] = i;
for (p = 0; p < k; p++)
{
if (i == step1[p])//遇到有重复的,就把循环倒回去
{
k--;
break;
}
}
}
int suit_fa, numb_fa;//发牌 ;
int pl,m;
printf("\n发牌\n");
for (pl = 1; pl <= 4; pl++)
{
printf("player%d:\n", pl);
for (under = 0; under < 13; under++)
{
printf(" -- ");
}
printf("\n");
for (j = 13 * (pl - 1); j < 13 * pl; j++)
{
suit_fa = (step1[j] + 1) % 4;//1~52对4取模会得到13组0~3
numb_fa = (step1[j] + 1) % 13;//1~52对13取模会得到4组0~12
printf("|%c |", suit_fa + 3);
}
printf("\n");
for (j = 13 * (pl - 1); j < 13 * pl; j++)
{
suit_fa = (step1[j] + 1) % 4;//1~52对4取模会得到13组0~3
numb_fa = (step1[j] + 1) % 13;//1~52对13取模会得到4组0~12
if (numb[numb_fa] == '0')
printf("|10|");
else
printf("| %c|", numb[numb_fa]);
}
printf("\n");
for (under = 0; under < 13; under++)
{
printf(" -- ");
}
printf("\n");
printf("\n");
}
return 0;
}
(用的是C++,因为老师在群里发的输出花色♥♦♠♣的方法是C++实现的)
然后为了把输出的样子搞得更像扑克,我已经快吐了
这是效果
最后,胡建伟牛逼