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); }
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); }
/// <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; } } } }