私はハングマンを起動して実行していますが、私のプログラムはランダムな単語を選択する方法です(これは完全にランダムではなく、擬似)。文字列リストから完全に無作為な要素を選んで、より単純なC# - Hangman
注:コードの一部はスロベニア語です。私は重要なものを英語に変更しました。
私は、その単語を選択するために、より単純で実際にランダムな方法を試みています。私はさまざまなオプションを実装しようとしましたが、成功しませんでした...
また、私はDateTime.Now.Ticksが単語を選ぶ方法を本当に理解していません。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace HANGMAN //moj imenski prostor
{
class Program
{
static void Main(string[] args)
{
Random random = new Random((int)DateTime.Now.Ticks);
string[] WORDBANK = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF" };
string WordToGuess = WORDBANK[random.Next(0, WORDBANK.Length)];
string WordToGuessUppercase = WordToGuess.ToUpper();
StringBuilder displayToPlayer = new StringBuilder(WordToGuess.Length);
for (int i = 0; i < WordToGuess.Length; i++)
displayToPlayer.Append('_');
List<char> correctGuesses = new List<char>();
List<char> incorrectGuesses = new List<char>();
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("__________________________________________________________________");
Console.WriteLine();
Console.Write("VISLICE - Maturitetna Naloga pri predmetu Informatika");
Console.WriteLine();
Console.WriteLine("__________________________________________________________________");
Console.WriteLine();
Console.WriteLine("-> Imas 5 poizkusov <-");
Console.WriteLine();
Thread.Sleep(500);
int lives = 5;
bool won = false;
int lettersRevealed = 0;
string input;
char Guess;
while (!won && lives > 0)
{
Thread.Sleep(500);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Ugani besedo, izberi crko: ");
Console.WriteLine();
input = Console.ReadLine().ToUpper();
Ugib = input[0];
if (correctGuesses.Contains(Guess))
{
Thread.Sleep(500);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Crko '{0}' si ze uporabil, bila je pravilna!", Guess);
Console.WriteLine("____________________________________________");
continue;
}
else if (nepravilniUgibi.Contains(Ugib))
{
Thread.Sleep(500);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Crko '{0}' si ze uporabil, bila je napacna!", Guess);
Console.WriteLine("___________________________________________");
continue;
}
if (WordToGuessUppercase.Contains(Guess))
{
pravilniUgibi.Add(Ugib);
for (int i = 0; i < WordToGuess.Length; i++)
{
if (WordToGuessUppercase[i] == Guess)
{
displayToPlayer[i] = WordToGuess[i];
lettersRevealed++;
}
}
if (lettersRevealed == WordToGuess.Length)
won = true;
}
else
{
incorrectGuesses.Add(Guess);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Narobe, crke '{0}', ni v besedi!", Guess);
Console.WriteLine("________________________________");
Console.WriteLine();
poizkusi--;
}
Console.WriteLine(displayToPlayer.ToString());
}
if (won)
{
Console.WriteLine();
Thread.Sleep(500);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Zmaga!");
Console.WriteLine();
Thread.Sleep(1000);
Console.WriteLine("KONEC IGRE");
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine();
Thread.Sleep(1000);
Console.WriteLine("Zal si to igro zgubil. Poskusi ponovno! Pravilna beseda je bila '{0}'", WordToGuess);
}
}
}
}
さて、私は、DateTime.Now.Ticksは完全にランダムではなく、その疑似ランダムであると言われましたか? また、DateTime.Now:Ticksの正確な内容についても説明できますか? –
DateTime.Now.Ticks自体は全くランダムではありません。それは0001年1月1日の真夜中から100nsの間隔です。しかし、これは良い[乱数ジェネレータシード](https://referencesource.microsoft。 com /#mscorlib/system/random.cs、92e3cf6e56571d5a、参考文献を参照してください)、それはあなたがそれを呼び出すたびに、少なくとも同じマシン上で、時計に何も触れていないならば異なっています。実際のランダムな処理は、[Next()](https://referencesource.microsoft.com/#mscorlib/system/random.cs,ddd1e9e09c70bab5,references)を呼び出すと発生します。 – dlatikay
@dlatikay:_ "それはあなたがそれを" _と呼ぶたびに違うでしょう - これはあまり真実ではありません。ティックカウントは、これを保証するのに十分速く増加しません。 C#プログラムは、カウントが増加する前に多数のステートメント(数百またはそれ以上ではありません)を実行できます。 [Randomの既定のシードは既にクロックティックカウントを使用しています](https://referencesource.microsoft.com/#mscorlib/system/random.cs,5d22f8880fc9f8d9)、実際には何のポイントもありませんそれを明示的に渡します。 –