コード例 #1
0
 public void AddRenderAttribute(Vector2 spritePositionInAtlas, Vector2 spriteDimensionInAtlas, RenderFlag renderFlag)
 {
     IsRenderable      = true;
     RenderFlag        = renderFlag;
     SpriteAreaInAtlas = new Rectangle((int)spritePositionInAtlas.X, (int)spritePositionInAtlas.Y,
                                       (int)spriteDimensionInAtlas.X, (int)spriteDimensionInAtlas.Y);
 }
コード例 #2
0
ファイル: M2Reader.cs プロジェクト: CW-Tool/WoWFormatTest
        private RenderFlag[] ReadRenderFlags(uint nRenderFlags, uint ofsRenderFlags, BinaryReader bin)
        {
            bin.BaseStream.Position = ofsRenderFlags;
            var renderflags = new RenderFlag[nRenderFlags];

            for (var i = 0; i < nRenderFlags; i++)
            {
                renderflags[i] = bin.Read <RenderFlag>();
            }
            return(renderflags);
        }
コード例 #3
0
        /// <summary>
        /// Runs the hangman game by repeatedly providing words for the user to guess until they lose. Tallies and saves the score prompting the use to keep playing until they decide to quit.
        /// </summary>
        static void Game()
        {
            // Seed the RNG
            Random rng = new Random();

            // Load in the words
            string[] words = System.IO.File.ReadAllLines(WORDBANK);

            // Keep playing until player decides to quit
            bool quit = false;

            while (!quit)
            {
                // Reset the game
                int        currScore      = 0;                  //<-- The current score of the user
                bool       invalidInput   = false;              //<-- Flag to validate user input
                int        numWrong       = 0;                  //<-- Number of incorrect guesses made by user
                RenderFlag renderFlag     = RenderFlag.NEWWORD; //<-- Flag for what to render as the header
                string     currWord       = "";                 //<-- Current word
                string     wordRender     = "";                 //<-- Version of the word using underscore to fill in for the letters
                string     guessedLetters = "";                 //<-- List of guessed letters

                // Keep playing until game over
                bool gameOver = false;
                while (!gameOver)
                {
                    // Pick a new word
                    string oldWord = currWord;
                    currWord       = words[rng.Next(words.Length)];
                    wordRender     = string.Concat(Enumerable.Repeat("_ ", currWord.Length));
                    guessedLetters = "";

                    // Loop for solving each word
                    Console.Clear();
                    bool solved = false;
                    while (!solved && !gameOver)
                    {
                        // Render
                        switch (renderFlag)
                        {
                        case RenderFlag.NEWWORD:
                            Console.WriteLine("New word, make a guess.");
                            break;

                        case RenderFlag.GOODGUESS:
                            Console.WriteLine("Correct!");
                            break;

                        case RenderFlag.BADGUESS:
                            Console.WriteLine("Incorrect!");
                            break;

                        case RenderFlag.SOLVED:
                            Console.WriteLine("Correct! The word was " + oldWord);
                            break;

                        case RenderFlag.ALREADYGUESSED:
                            Console.WriteLine("That letter has already been guessed. Please guess a different letter.");
                            break;

                        default:
                            Console.WriteLine("Congratulations, this is a bug!");
                            break;
                        }
                        Console.WriteLine("Score: " + currScore);
                        Console.WriteLine(GRAPHICS[numWrong]);
                        Console.WriteLine(wordRender);
                        Console.WriteLine("Guessed: " + guessedLetters);

                        // Have player try to guess the letters
                        char   guess = 'a';
                        string input = "";
                        invalidInput = true;
                        while (invalidInput)
                        {
                            input = Console.ReadLine().Trim().ToUpper();
                            if (input.Length != 1 || !Char.IsLetter(input[0]))
                            {
                                Console.WriteLine("Please enter a single letter.");
                            }
                            else
                            {
                                invalidInput = false;
                            }
                        }
                        guess = input[0];

                        // Check if the letter has been guessed
                        if (!(guessedLetters.Contains(guess)))
                        {
                            // Check if the letter is in the word
                            if (currWord.Contains(guess))
                            {
                                // Set render flag and update the score
                                renderFlag = RenderFlag.GOODGUESS;
                                currScore++;

                                // Reveal the letters in the word
                                int start = 0;
                                int index = currWord.IndexOf(guess, start);
                                while (index != -1)
                                {
                                    wordRender = wordRender.Substring(0, 2 * index) + guess + wordRender.Substring(2 * index + 1);
                                    start      = index + 1;
                                    index      = currWord.IndexOf(guess, start);
                                }
                            }
                            else
                            {
                                // Set render flag and update the score
                                renderFlag = RenderFlag.BADGUESS;
                                numWrong++;
                            }

                            // Add guess to list of guessed letters
                            guessedLetters = guessedLetters + guess + ' ';
                        }
                        else
                        {
                            renderFlag = RenderFlag.ALREADYGUESSED;
                        }

                        // Check if solved or game over
                        if (!wordRender.Contains('_'))
                        {
                            solved     = true;
                            currScore += 5;
                            renderFlag = RenderFlag.SOLVED;
                        }
                        if (numWrong == GRAPHICS.Length - 1)
                        {
                            gameOver = true;
                        }


                        // Clear to restart the loop
                        Console.Clear();
                    }
                }

                // Final render
                Console.WriteLine("Game Over! The word was: " + currWord);
                Console.WriteLine("Score: " + currScore);
                Console.WriteLine(GRAPHICS[numWrong]);
                Console.WriteLine(wordRender);
                Console.WriteLine("Guessed: " + guessedLetters);

                // Load the scores
                string[] loadedScores = new string[NUM_SCORES];
                using (StreamReader sr = new StreamReader(SCORES))
                {
                    // Read in scores using stream reader
                    for (int i = 0; i < NUM_SCORES; i++)
                    {
                        loadedScores[i] = sr.ReadLine();
                    }
                }

                // Parse the scores
                string[] names       = new string[NUM_SCORES];
                int[]    scoreValues = new int[NUM_SCORES];
                for (int i = 0; i < NUM_SCORES; i++)
                {
                    string[] splitScores = loadedScores[i].Split(' ');
                    names[i]       = splitScores[0];
                    scoreValues[i] = Convert.ToInt16(splitScores[1]);
                }

                // Check if score is bigger than any of the high scores
                bool found      = false;
                int  scoreIndex = 0;
                for (; scoreIndex < NUM_SCORES && !found; scoreIndex++)
                {
                    if (scoreValues[scoreIndex] <= currScore)
                    {
                        found = true;
                    }
                }

                // Update the scores
                if (found)
                {
                    string newName = "STEVE!";
                    Console.WriteLine("New high score! Enter your name:");
                    bool unconfirmed = true;
                    while (unconfirmed)
                    {
                        // Read in the name and enforce name length condition
                        newName = Console.ReadLine().Trim().ToUpper();
                        if (newName.Length > NAME_LENGTH)
                        {
                            newName = newName.Substring(0, NAME_LENGTH);
                        }
                        else if (newName.Length < NAME_LENGTH)
                        {
                            newName = newName.PadRight(NAME_LENGTH);
                        }

                        // Confirm the name with the user
                        Console.WriteLine("Is " + newName + " correct? Y/N");
                        invalidInput = true;
                        while (invalidInput)
                        {
                            string input = Console.ReadLine().Trim().ToLower();
                            switch (input)
                            {
                            case "y":
                            case "yes":
                                invalidInput = false;
                                unconfirmed  = false;
                                break;

                            case "n":
                            case "no":
                                Console.WriteLine("Enter your name: ");
                                invalidInput = false;
                                break;

                            default:
                                Console.WriteLine("Please enter yes or no.");
                                break;
                            }
                        }
                    }

                    // Move the scores and names
                    for (int i = NUM_SCORES - 1; i >= scoreIndex; i--)
                    {
                        names[i]       = names[i - 1];
                        scoreValues[i] = scoreValues[i - 1];
                    }

                    // Enter in the new scores and names
                    names[scoreIndex - 1]       = newName;
                    scoreValues[scoreIndex - 1] = currScore;
                    for (int i = 0; i < NUM_SCORES; i++)
                    {
                        loadedScores[i] = names[i] + " " + scoreValues[i];
                    }

                    // Overwrite the existing scores file
                    // TODO: REDO WITH STREAMS
                    using (StreamWriter sw = new StreamWriter(SCORES))
                    {
                        for (int i = 0; i < NUM_SCORES; i++)
                        {
                            sw.WriteLine(loadedScores[i]);
                        }
                    }
                }

                // See if user wants to play again
                Console.WriteLine("Play again? Y/N");
                invalidInput = true;
                while (invalidInput)
                {
                    string input = Console.ReadLine().Trim().ToLower();
                    switch (input)
                    {
                    case "y":
                    case "yes":
                        invalidInput = false;
                        break;

                    case "n":
                    case "no":
                        invalidInput = false;
                        quit         = true;
                        break;

                    default:
                        Console.WriteLine("Please enter yes or no.");
                        break;
                    }
                }
            }
        }