c# - 非常简单的抽卡游戏(消除重复+重置数组)
问题描述
这里是编程初学者!我正在挑战自己创建一个绘图游戏(卡片绘图或在这种情况下是数字绘图)以提高我的编码技能,但这对我来说似乎有点太具有挑战性了,因为我只是一个初学者。
我正在制作的程序实际上非常简单。你有一副 15 张牌(或者在这种情况下是数字),程序要求你抽 5 张牌。虽然我能够做到这一点,但我注意到有时会出现你已经抽到的牌的副本,而对于任何普通的牌组来说,每张牌只有 1 个副本。
至于我的代码,它相当短:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CardGame
{
class Program
{
static void Main(string[] args)
{
string ans = " ";
int[] Deck = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; // the deck
Console.WriteLine("Draw 5 cards? Y/N");
while (!ans.Equals("N"))
{
ans = Console.ReadLine();
if (ans.Equals("Y"))
{
Draw(Deck);
}
else
{
Console.WriteLine("Closing program");
}
}
}
static void Draw(int[] Deck) //Draw function
{
Random rand = new Random(); // randomizer
int turncount = 1;
while (turncount <= 5)
{
int pick = rand.Next(Deck.Count()); // random pick for each iteration
Console.WriteLine(Deck[pick]);
turncount++;
}
}
}
}
所以我的预期输出是这样的:5,8,1,4,12 | 2,3,9,11,7 | 10,6,15,13,14
但我所做的是吐出类似的东西:1,5,5,3,7 | 15,12,1,15,3| 2,3,1,5,6
我还有一个额外的挑战,我希望在你完成 3 次抽牌后重置套牌。因此,在 3 次抽牌后,您可以再次抽出所有牌。但我根本不知道我怎么能做到这一点。
至于我尝试过的各种方法,我尝试实现 Distinct 函数,因此我可以消除重复项,但这并不是我想要的结果,因为它会按顺序调用我的元素,例如:1,2,3, 4,5,6,7,8,9,10,11,12,13,14,15。
这大概总结了我的问题。希望大家可以帮助这个初学者并启发我!
解决方案
问题是随机数生成器可以连续生成 2、3 次或更多次相同的数字。解决这个问题的两种明显方法是要么从牌库中移除抽出的牌,要么简单地检查你没有抽过同一张牌两次。
我在下面整理的方法只是检查它不是已经绘制的卡。然而,每次取出卡片会更有效率。
static void Draw(int[] Deck) //Draw function
{
Random rand = new Random(); // randomizer
List<int> drawnCards = new List<int>();
while (drawnCards.Count < 5)
{
int pick = rand.Next(Deck.Count());
int card = Deck[pick];
// Check card has not already been drawn
if(!drawnCards.Contains(card))
{
drawnCards.Add(card);
}
}
foreach(int card in drawnCards)
{
Console.WriteLine(card);
}
}
推荐阅读
- node.js - 运行命令以使用 AndroidJS 构建应用程序时出错
- python - 构建 FastAPI 项目的最佳实践是什么?
- javascript - 自定义颜色选择器,没有任何反应包
- powerbi - PowerBI Jira 票据仪表板
- java - 如何重构这样的嵌套 if 语句?
- javalite - 如何从 JavaLite.io activeweb 控制器返回原始响应
- python - 在 Blender 视图中绘制自定义网格
- django - 可以被其他几个模型使用但一次只能使用一个的通用模型
- python - 需要异步或多线程任务的帮助
- python - 遗传算法中的多输入多输出(python)