Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1ddacf0
rename int HowManyPlayers to NumberOfPlayers
smpezert Jan 8, 2024
c331167
rename from aGame to round
smpezert Jan 8, 2024
80f31cd
rename index to questionNumber
smpezert Jan 8, 2024
33d888d
remove duplicate code
smpezert Jan 8, 2024
d98576c
rename method from movePlace to moveAndAskQuestion
smpezert Jan 8, 2024
d498bd1
remove duplicate in askquestion method adding askAndRemoveQuestion me…
smpezert Jan 8, 2024
9ba0833
extract new bool method for winner
smpezert Jan 8, 2024
dcf51f9
extract number 6 to consts for total coins for winning and maximum nu…
smpezert Jan 8, 2024
5eb2ac8
extract to const the minimum number of palyers
smpezert Jan 8, 2024
28a6abc
extract total number of players to const
smpezert Jan 8, 2024
265037c
extract const for total places in board and bool for roll if it is odd
smpezert Jan 8, 2024
6835eee
refactor 11 to total places of board -1
smpezert Jan 8, 2024
5a5bf3e
add modifier to consts (private and readonly)
smpezert Jan 9, 2024
b9872af
add readonly to the list players
smpezert Jan 9, 2024
a034133
rename methods related to answers
smpezert Jan 9, 2024
496a205
move all private methods to the bottom
smpezert Jan 9, 2024
2653c38
extract the method ask question from movelocation because of single r…
smpezert Jan 9, 2024
0b93b2a
extract contitional logic from roll method
smpezert Jan 9, 2024
3bf6042
extract nested contitional logic from the method IsAnswerCorrect
smpezert Jan 9, 2024
4eb05f4
move private method lower to the private methods
smpezert Jan 9, 2024
8b46606
add categories class
smpezert Jan 9, 2024
633e37c
add deck class to the solution and extract properties
smpezert Jan 9, 2024
154ae43
add new player class and use it in the game class
smpezert Jan 9, 2024
606c335
remove places, purses and inPenaltyBox variables from add method
smpezert Jan 9, 2024
b68d822
update inPenaltyBox using the new setter from player class
smpezert Jan 9, 2024
b0328f9
update places using the pnew setter from Player class
smpezert Jan 9, 2024
c07a57b
update purse using the purse setter from the player class
smpezert Jan 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions exercises/csharp/TriviaGame/TriviaGame/Category.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace TriviaGame
{
public class Category
{
public string Name { get; set; }

public Category(string name)
{
Name = name;
}
}
}
23 changes: 23 additions & 0 deletions exercises/csharp/TriviaGame/TriviaGame/Deck.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace TriviaGame
{
public class Deck
{
public Category category { get; set; }
public LinkedList<string> Questions { get; set; } = new LinkedList<string>();

public Deck(string categoryName)
{
category = new Category(categoryName);
}

public void AddQuestion(int questionNumber)
{
Questions.AddLast($"{category.Name} Question " + questionNumber);

}
}
}
244 changes: 119 additions & 125 deletions exercises/csharp/TriviaGame/TriviaGame/Game.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,205 +7,199 @@ namespace TriviaGame
{
public class Game
{
List<string> players = new List<string>();
readonly List<Player> players = new List<Player>();

int[] places = new int[6];
int[] purses = new int[6];
private const int WINNING_TOTAL = 6;
private const int MINIMUM_NUMBER_OF_PLAYERS = 2;
private const int TOTAL_NUMBER_OF_QUESTIONS = 50;
private const int TOTAL_PLACES_OF_BOARD = 12;
private int currentPlayer;
private bool isGettingOutOfPenaltyBox;

bool[] inPenaltyBox = new bool[6];

LinkedList<string> popQuestions = new LinkedList<string>();
LinkedList<string> scienceQuestions = new LinkedList<string>();
LinkedList<string> sportsQuestions = new LinkedList<string>();
LinkedList<string> rockQuestions = new LinkedList<string>();

int currentPlayer = 0;
bool isGettingOutOfPenaltyBox;
readonly Deck popQuestions = new Deck("Pop");
readonly Deck scienceQuestions = new Deck("Science");
readonly Deck sportsQuestions = new Deck("Sports");
readonly Deck rockQuestions = new Deck("Rock");

public Game()
{
for (int i = 0; i < 50; i++)
for (int questionNumber = 0; questionNumber < TOTAL_NUMBER_OF_QUESTIONS; questionNumber++)
{
popQuestions.AddLast("Pop Question " + i);
scienceQuestions.AddLast(("Science Question " + i));
sportsQuestions.AddLast(("Sports Question " + i));
rockQuestions.AddLast(CreateRockQuestion(i));
popQuestions.AddQuestion(questionNumber);
scienceQuestions.AddQuestion(questionNumber);
sportsQuestions.AddQuestion(questionNumber);
rockQuestions.AddQuestion(questionNumber);
}
}

public string CreateRockQuestion(int index)
{
return "Rock Question " + index;
}

public bool IsPlayable()
{
return (HowManyPlayers() >= 2);
return (NumberOfPlayers() >= MINIMUM_NUMBER_OF_PLAYERS);
}

public bool Add(string playerName)
{


players.Add(playerName);
places[HowManyPlayers()] = 0;
purses[HowManyPlayers()] = 0;
inPenaltyBox[HowManyPlayers()] = false;
players.Add(new Player(playerName));

Console.WriteLine(playerName + " was added");
Console.WriteLine("They are player number " + players.Count);
return true;
}

public int HowManyPlayers()
public int NumberOfPlayers()
{
return players.Count;
}

public void Roll(int roll)
{
Console.WriteLine(players[currentPlayer] + " is the current player");
Console.WriteLine(players[currentPlayer].Name + " is the current player");
Console.WriteLine("They have rolled a " + roll);

if (inPenaltyBox[currentPlayer])
bool isRollOdd = roll % 2 != 0;
bool IsInPenaltyBox = players[currentPlayer].InPenaltyBox;

if (IsInPenaltyBox)
{
if (roll % 2 != 0)
{
isGettingOutOfPenaltyBox = true;

Console.WriteLine(players[currentPlayer] + " is getting out of the penalty box");
places[currentPlayer] = places[currentPlayer] + roll;
if (places[currentPlayer] > 11) places[currentPlayer] = places[currentPlayer] - 12;

Console.WriteLine(players[currentPlayer]
+ "'s new location is "
+ places[currentPlayer]);
Console.WriteLine("The category is " + CurrentCategory());
AskQuestion();
}
else
{
Console.WriteLine(players[currentPlayer] + " is not getting out of the penalty box");
isGettingOutOfPenaltyBox = false;
}
DecideIfPlayerGettingOutOfPenantyBox(isRollOdd);

}

bool isInBoxButGettingOut = IsInPenaltyBox && isGettingOutOfPenaltyBox;
if (!IsInPenaltyBox || isInBoxButGettingOut)
{
MoveToNewLocation(roll);
AskQuestion();
}

}


public bool IsAnswerCorrect()
{
if (players[currentPlayer].InPenaltyBox)
{
return DecideIfPlayerWon();
}
else
{
Console.WriteLine("Answer was corrent!!!!");
return IsWinner();
}
}


public bool IsAnswerWrong()
{
Console.WriteLine("Question was incorrectly answered");
Console.WriteLine(players[currentPlayer].Name + " was sent to the penalty box");
players[currentPlayer].InPenaltyBox = true;
CurrentPlayerCount();
return true;
}

places[currentPlayer] = places[currentPlayer] + roll;
if (places[currentPlayer] > 11) places[currentPlayer] = places[currentPlayer] - 12;
private void DecideIfPlayerGettingOutOfPenantyBox(bool isRollOdd)
{
if (isRollOdd)
{
isGettingOutOfPenaltyBox = true;

Console.WriteLine(players[currentPlayer]
+ "'s new location is "
+ places[currentPlayer]);
Console.WriteLine("The category is " + CurrentCategory());
AskQuestion();
Console.WriteLine(players[currentPlayer].Name + " is getting out of the penalty box");
}
else
{
Console.WriteLine(players[currentPlayer].Name + " is not getting out of the penalty box");
isGettingOutOfPenaltyBox = false;
}
}

private void MoveToNewLocation(int roll)
{
players[currentPlayer].Place = players[currentPlayer].Place + roll;
if (players[currentPlayer].Place > TOTAL_PLACES_OF_BOARD - 1) players[currentPlayer].Place = players[currentPlayer].Place - TOTAL_PLACES_OF_BOARD;

Console.WriteLine(players[currentPlayer].Name
+ "'s new location is "
+ players[currentPlayer].Place);
Console.WriteLine("The category is " + CurrentCategory());
}
private bool DecideIfPlayerWon()
{
if (isGettingOutOfPenaltyBox)
{
Console.WriteLine("Answer was correct!!!!");
return IsWinner();
}
else
{
CurrentPlayerCount();
return true;
}
}

private void AskQuestion()
{
if (CurrentCategory() == "Pop")
{
Console.WriteLine(popQuestions.First());
popQuestions.RemoveFirst();
AskAndRemoveQuestion(popQuestions.Questions);
}
if (CurrentCategory() == "Science")
{
Console.WriteLine(scienceQuestions.First());
scienceQuestions.RemoveFirst();
AskAndRemoveQuestion(scienceQuestions.Questions);
}
if (CurrentCategory() == "Sports")
{
Console.WriteLine(sportsQuestions.First());
sportsQuestions.RemoveFirst();
AskAndRemoveQuestion(sportsQuestions.Questions);
}
if (CurrentCategory() == "Rock")
{
Console.WriteLine(rockQuestions.First());
rockQuestions.RemoveFirst();
AskAndRemoveQuestion(rockQuestions.Questions);
}
}

private void AskAndRemoveQuestion(LinkedList<string> questions)
{
Console.WriteLine(questions.First());
questions.RemoveFirst();
}

private string CurrentCategory()
{
if (places[currentPlayer] == 0) return "Pop";
if (places[currentPlayer] == 4) return "Pop";
if (places[currentPlayer] == 8) return "Pop";
if (places[currentPlayer] == 1) return "Science";
if (places[currentPlayer] == 5) return "Science";
if (places[currentPlayer] == 9) return "Science";
if (places[currentPlayer] == 2) return "Sports";
if (places[currentPlayer] == 6) return "Sports";
if (places[currentPlayer] == 10) return "Sports";
if (players[currentPlayer].Place == 0) return "Pop";
if (players[currentPlayer].Place == 4) return "Pop";
if (players[currentPlayer].Place == 8) return "Pop";
if (players[currentPlayer].Place == 1) return "Science";
if (players[currentPlayer].Place == 5) return "Science";
if (players[currentPlayer].Place == 9) return "Science";
if (players[currentPlayer].Place == 2) return "Sports";
if (players[currentPlayer].Place == 6) return "Sports";
if (players[currentPlayer].Place == 10) return "Sports";
return "Rock";
}

public bool WasCorrectlyAnswered()
private bool IsWinner()
{
if (inPenaltyBox[currentPlayer])
{
if (isGettingOutOfPenaltyBox)
{
Console.WriteLine("Answer was correct!!!!");
purses[currentPlayer]++;
Console.WriteLine(players[currentPlayer]
+ " now has "
+ purses[currentPlayer]
+ " Gold Coins.");

bool winner = DidPlayerWin();
currentPlayer++;
if (currentPlayer == players.Count) currentPlayer = 0;

return winner;
}
else
{
currentPlayer++;
if (currentPlayer == players.Count) currentPlayer = 0;
return true;
}



}
else
{
players[currentPlayer].Purse++;
Console.WriteLine(players[currentPlayer].Name
+ " now has "
+ players[currentPlayer].Purse
+ " Gold Coins.");

Console.WriteLine("Answer was corrent!!!!");
purses[currentPlayer]++;
Console.WriteLine(players[currentPlayer]
+ " now has "
+ purses[currentPlayer]
+ " Gold Coins.");

bool winner = DidPlayerWin();
currentPlayer++;
if (currentPlayer == players.Count) currentPlayer = 0;
bool winner = DidPlayerWin();
CurrentPlayerCount();

return winner;
}
return winner;
}

public bool WrongAnswer()
private void CurrentPlayerCount()
{
Console.WriteLine("Question was incorrectly answered");
Console.WriteLine(players[currentPlayer] + " was sent to the penalty box");
inPenaltyBox[currentPlayer] = true;

currentPlayer++;
if (currentPlayer == players.Count) currentPlayer = 0;
return true;
}


private bool DidPlayerWin()
{
return !(purses[currentPlayer] == 6);
return !(players[currentPlayer].Purse == WINNING_TOTAL);
}
}

Expand Down
Loading