- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面是我一直在研究的纸牌游戏。我遇到了一个我似乎无法通过的基本封锁。
在这部分代码中,我想不出一种方法来将数组中的数字转换为它们对应的面孔和花色。
Console.WriteLine("A " + deck[Game.DrawCard(deck), 0] + " of " + deck[Game.DrawCard(deck), 1] + " was drawn from the deck and then placed on top");
我可以模糊地想象一条使用一长串变量和 if 语句的路由,但我真的怀疑是否没有明显且更简单的方法。
其余代码如下所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CribbageInCSharp
{
class Program
{
static void Main(string[] args)
{
//Variables//
int currentPlayer;
short score1 = 0;
short score2 = 0;
short round = 1;
int[,] deck = new int[52, 2];
Console.WriteLine("Welcome" + "\r" + "\r" + "Enter Number of Players (Only 2 player mode works right now)");
while ((Console.ReadLine() != "2"))
{
Console.WriteLine("Only two player is working right now \n Make sure you are entering a number between 1-3 \n");
}
//A flip is made to determine who goes first//
currentPlayer = Game.CoinFlip();
Console.WriteLine("A coin was flipped and it was determined that player " + currentPlayer + " will go first \n");
//Game.PrintDeck(deck);
//Now the game is started//
do
{
Console.WriteLine("Shuffling and dealing cards...");
System.Threading.Thread.Sleep(5000);
Game.InitDeck(deck);
Console.WriteLine("Round " + round + "\n");
//Cutting the Deck now that discarding has been done//
Console.WriteLine("Cutting the deck... \n");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("A " + deck[Game.DrawCard(deck), 0] + " of " + deck[Game.DrawCard(deck), 1] + " was drawn from the deck and then placed on top"); //Insert a swtich statement to convert pairs of numbers into actual cards
//Player 2's turn is started now that the cut is over//
Console.WriteLine("");
//pick up here
Console.WriteLine("Player " + currentPlayer + " ");
round++;
} while ((score1 < 121) && (score2 < 121)); //Loops until either score exceeds 121 points//
}
}
class Game //Used for functions neccesary to the function of the game that are not neccesarily dependant on turn order and do not create win conditions.
{
public static int CoinFlip() //Flips to see who goes first, results are between 1-2
{
var rnd = new Random(DateTime.Now.Millisecond);
int firstPlayer = rnd.Next(1, 3);
return (firstPlayer);
}
public static void InitDeck(int[,] deck) // First column 11==Jack, 12==queen, 13==king && Second Column 0==diamonds, 1==clubs, 2==spades, 3==hearts
{
//Initiallizing the first column==Faces
for (int i = 0; i < 4; i++)
{
deck[i, 0] = 13;
deck[(i + 4), 0] = 12;
deck[(i + 8), 0] = 11;
deck[(i + 12), 0] = 10;
deck[(i + 16), 0] = 9;
deck[(i + 20), 0] = 8;
deck[(i + 24), 0] = 7;
deck[(i + 28), 0] = 6;
deck[(i + 32), 0] = 5;
deck[(i + 36), 0] = 4;
deck[(i + 40), 0] = 3;
deck[(i + 44), 0] = 2;
deck[(i + 48), 0] = 1;
}
//Initiallizing second column==Suit
for (int i = 0; i < 4; i++)
{
deck[i, 1] = i;
deck[(i + 4), 1] = i;
deck[(i + 8), 1] = i;
deck[(i + 12), 1] = i;
deck[(i + 16), 1] = i;
deck[(i + 20), 1] = i;
deck[(i + 24), 1] = i;
deck[(i + 28), 1] = i;
deck[(i + 32), 1] = i;
deck[(i + 36), 1] = i;
deck[(i + 40), 1] = i;
deck[(i + 44), 1] = i;
deck[(i + 48), 1] = i;
}
}
public static void PrintDeck(int[,] deck)
{
for (int i = 0; i < 52; i++)
{
Console.WriteLine(deck[i, 0] + "F");
Console.WriteLine(deck[i, 1] + "S");
}
Console.ReadLine();
}
public static int DrawCard(int[,] deck) //Draws a card from the deck, ignoring Cards already drawn this turn. IF THERE ARE ANY ERRORS COME HERE AND CHECK THIS FIRST
{
var rnd = new Random(DateTime.Now.Millisecond);
int o = rnd.Next(0, 51);
while (deck[o,0]==0)
{
System.Threading.Thread.Sleep(1000);
rnd = new Random(DateTime.Now.Millisecond);
o = rnd.Next(0, 51);
}
int drawnCard = o;
deck[o, 0] = 0;
return (drawnCard);
}
}
}
我也有一种感觉,与列表相比,一副纸牌的数组可能不是最明智的决定,但我并不肯定。
我真的很抱歉。虽然对其他人来说我的主题已经被涵盖似乎很明显,但我对 C# 的有限理解不允许我解释我在过去一小时左右出现的任何帖子的任何答案。我正在尝试通过控制台窗口编写一个简单的游戏来学习 C#,因为这就是我学习 C++ 的方式。
提前感谢任何人的帮助。我真的很感激!
最佳答案
首先,我会将洗好的牌存储在 List
中,或者更好的是 Queue
。这使您只需从牌组中“挑选”一张牌。
要获得卡片和套件,我会创建两个枚举:
public enum Rank
{
Ace,
Two,
Three,
...
}
public enum Suits
{
Hearts,
Spades,
...
}
现在您定义您的卡片,例如 0 = aH、1 = 2H、13 = aS,依此类推。
现在你可以这样做了:
public Rank GetRankForCard(int card)
{
return (Rank)(card % 13);
}
public Suit GetSuitForCard(int card)
{
return (Suit)(card / 13);
}
%(模数)运算符在这里非常有用。最后一点,cribbage 不是实现起来很简单的游戏(我自己在 WPF 中完成),祝你好运!
关于c# - 如何在 Console.WriteLine() 语句中将数字转换为字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572454/
已经有几个关于捕获或重定向 console.log 的问题: redirect Javascript syntax errors and console.log to somewhere else C
console.log(String(console.log('Not undefined')) === 'undefined'); console.log(String(console.log('N
我知道这是一个新手错误,但我不知道如何修复它。 public static void main (String args[]){ Console kitty = System.console(); S
我正在使用 Visual Studio 2015。 我试图打印一些语句只是为了跟踪一个非常长时间运行的测试。当使用 VSTest.Console 和/Logger:trx 时,调试输出(无论我们使用
这个问题在这里已经有了答案: Accessing console and devtools of extension's background.js (8 个回答) 5年前关闭。 我的 Chrome
我在括号中收到此错误。 我想强调一个事实,这是我第二次打开 JS 文件。 正如我强调的那样,我还想强调一个事实,即我不知道 Eslint 和 node.js 是什么。 StackOverflow 和其
我按照文档中的描述安装了 Drupal Console Launcher: curl https://drupalconsole.com/installer -L -o drupal.phar mv
Console.WriteLine() 和有什么区别和Trace.WriteLine() ? 最佳答案 从“调试”的角度来看这些。 我们开始使用 Console.WriteLine() 进行调试 后来
我一直在尝试连接到 serial console of a Raspberry Pi 3 with Android Things使用USB to TTL cable从我的 Linux (Ubuntu)
namespace Pro { class ErrorLog { public ErrorLog(RenderWindow app) {
以下代码是一个众所周知的示例,用于显示调试版本和发布版本之间的区别: using System; using System.Threading; public static class Program
if (open_date) { open_date = get_date_from_string(open_date); window.console && cons
在 Xcode 中工作时,我通常只为控制台打开一个单独的窗口,以便我可以看到尽可能多的输出行。我今天刚刚更新到 Xcode 12,在更新之前,您可以将编辑器 Pane 和控制台 Pane 之间的分隔线
在 Google Play Console 上,在所有应用程序的第一页,它会显示已安装的受众和用户获取。 我知道已安装的受众是在他们的设备上安装我的应用程序的受众。但什么是用户获取?通常,用户获取的数
Qt Quick uses qDebug执行日志记录,其中标准 Javascript 日志记录方法映射到 Qt 日志类型 console.log() -> qDebug() console.deb
Qt Quick uses qDebug执行日志记录,其中标准 Javascript 日志记录方法映射到 Qt 日志类型 console.log() -> qDebug() console.deb
我有以下代码: bool loop = true; LongbowWorkerThread Worker = new LongbowWorkerThread(); Th
我遇到了这两个 API,用于在 C# 的简单控制台应用程序中读取用户的输入: System.Console.ReadLine() System.Console.In.ReadLine() 这是一个我试
我是编程和 js 的新手,我正在尝试学习 javascript 的关键。 var obj1 = { name: 'rawn', fn: function() { con
using System; namespace ConsoleApplication1 { class Program { static void Main(strin
我是一名优秀的程序员,十分优秀!