我正在C#做一個熱土豆遊戲。在代碼中,我試圖處理Game()方法中的異常,它會提示你將馬鈴薯傳遞給某人(通過他們的玩家號碼),這會阻止你輸入自己的玩家號碼(試圖將它傳遞給自己) 唯一的一點是,我有麻煩試圖處理該異常:不確定如何處理在熱土豆遊戲C中的異常#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HotPotatoe
{
class Program
{
public static void Main()
{
Console.Clear();
Console.Write("How many players are there? (up to 4): ");
string PlayerCount = Console.ReadLine();
string PlayerOne = null;
string PlayerTwo = null;
string PlayerThree = null;
string PlayerFour = null;
if (PlayerCount == "2")
{
Console.Write("Enter player 1's name: ");
PlayerOne = Console.ReadLine();
Console.Write("Enter player 2's name: ");
PlayerTwo = Console.ReadLine();
Random ran = new Random();
int WhoStarts = ran.Next(1, 2);
Game(PlayerOne, PlayerTwo, PlayerThree, PlayerFour, WhoStarts);
}
else if (PlayerCount == "3")
{
Console.Write("Enter player 1's name: ");
PlayerOne = Console.ReadLine();
Console.Write("Enter player 2's name: ");
PlayerTwo = Console.ReadLine();
Console.Write("Enter player 3's name: ");
PlayerThree = Console.ReadLine();
Random ran = new Random();
int WhoStarts = ran.Next(1, 3);
Game(PlayerOne, PlayerTwo, PlayerThree, PlayerFour, WhoStarts);
}
else if (PlayerCount == "4")
{
Console.Write("Enter player 1's name: ");
PlayerOne = Console.ReadLine();
Console.Write("Enter player 2's name: ");
PlayerTwo = Console.ReadLine();
Console.Write("Enter player 3's name: ");
PlayerThree = Console.ReadLine();
Console.Write("Enter player 4's name: ");
PlayerFour = Console.ReadLine();
Random ran = new Random();
int WhoStarts = ran.Next(1, 4);
Game(PlayerOne,
PlayerTwo,
PlayerThree,
PlayerFour,
WhoStarts);
}
else
{
Console.WriteLine("Not valid!");
Console.ReadKey();
Main();
}
}
private static void Game
(string player1,
string player2,
string player3,
string player4,
int whoStarts)
{
Player Player1 = new Player();
Player Player2 = new Player();
Player Player3 = new Player();
Player Player4 = new Player();
Player1.Name = player1;
Player2.Name = player2;
Player3.Name = player3;
Player4.Name = player4;
Player1.Number = 1;
Player2.Number = 2;
Player3.Number = 3;
Player4.Number = 4;
Player1.IsOut = false;
Player2.IsOut = false;
if(Player3.Name == null)
{
Player3.IsOut = true;
}
else
{
Player3.IsOut = false;
}
if (Player4.Name == null)
{
Player4.IsOut = true;
}
else
{
Player3.IsOut = false;
}
switch (whoStarts)
{
case 1:
Player1.HasPotatoe = true;
break;
case 2:
Player2.HasPotatoe = true;
break;
case 3:
Player3.HasPotatoe = true;
break;
default:
Player4.HasPotatoe = true;
break;
}
List<Player> PlayingList = new List<Player>
{
Player1,
Player2
};
if (Player3.IsOut == false)
{
PlayingList.Add(Player3);
}
if (Player4.IsOut == false)
{
PlayingList.Add(Player4);
}
Random rand = new Random();
int NumOfRounds = rand.Next(1, 10);
do
{
foreach (Player p in PlayingList)
{
if (p.HasPotatoe == true)
{
Console.Write("Player {0} has the potatoe! Who do you want to pass it to? (by number): ", p.Number);
string input = Console.ReadLine();
if (input == "1")
{
PlayingList[0].HasPotatoe = true;
NumOfRounds--;
}
else if (input == "2")
{
PlayingList[1].HasPotatoe = true;
NumOfRounds--;
}
else if (input == "3")
{
if (Player3.IsOut == true)
{
Console.WriteLine("That person isn't playing! Choose another player!");
Console.ReadKey();
}
else
{
PlayingList[2].HasPotatoe = true;
NumOfRounds--;
}
}
else if (input == "4")
{
if (Player4.IsOut == true)
{
Console.WriteLine("That person isn't playing! Choose another player!");
Console.ReadKey();
}
else
{
PlayingList[3].HasPotatoe = true;
NumOfRounds--;
}
}
else if(input == p.Number.ToString()) // this is the part i'm having trouble with................................
{
Console.WriteLine("{0}", p.Number.ToString());
Console.WriteLine("You can't pass it to yourself! -_- Choose someone else..." + p.Number.ToString());
Console.ReadKey();
}
}
}
} while (NumOfRounds != 0);
if(Player1.HasPotatoe == true)
{
Console.WriteLine("{0} is out! Play again!", Player1.Name);
Console.ReadKey();
Main();
}
else if(Player2.HasPotatoe == true)
{
Console.WriteLine("{0} is out! Play again!", Player2.Name);
Console.ReadKey();
Main();
}
else if (Player3.HasPotatoe == true)
{
Console.WriteLine("{0} is out! Play again!", Player3.Name);
Console.ReadKey();
Main();
}
else if (Player4.HasPotatoe == true)
{
Console.WriteLine("{0} is out! Play again!", Player4.Name);
Console.ReadKey();
Main();
}
}
}
class Player
{
public string Name { get; set; }
public int Number { get; set; }
public bool HasPotatoe { get; set; }
public bool IsOut { get; set; }
}
}
的特定部分錯誤所在:
Random rand = new Random();
int NumOfRounds = rand.Next(1, 10);
do
{
foreach (Player p in PlayingList)
{
if (p.HasPotatoe == true)
{
Console.Write("Player {0} has the potatoe! Who do you want to pass it to? (by number): ", p.Number);
string input = Console.ReadLine();
if (input == "1")
{
PlayingList[0].HasPotatoe = true;
NumOfRounds--;
}
else if (input == "2")
{
PlayingList[1].HasPotatoe = true;
NumOfRounds--;
}
else if (input == "3")
{
if (Player3.IsOut == true)
{
Console.WriteLine("That person isn't playing! Choose another player!");
Console.ReadKey();
}
else
{
PlayingList[2].HasPotatoe = true;
NumOfRounds--;
}
}
else if (input == "4")
{
if (Player4.IsOut == true)
{
Console.WriteLine("That person isn't playing! Choose another player!");
Console.ReadKey();
}
else
{
PlayingList[3].HasPotatoe = true;
NumOfRounds--;
}
}
else if(input == p.Number.ToString()) // this is where the problem is...
{
Console.WriteLine("{0}", p.Number.ToString());
Console.WriteLine("You can't pass it to yourself! -_- Choose someone else..." + p.Number.ToString());
Console.ReadKey();
}
}
}
} while (NumOfRounds != 0);
所以基本上我說:如果(輸入= = p.Number()。ToString())// p.Number()==玩家的號碼
然後拋出異常。但我不知道如何去做。我已經嘗試使用.ToString()方法將整數轉換爲字符串。但它似乎沒有改變任何東西。我也嘗試用Int32.Parse(輸入)方法將輸入轉換爲32位整數,但仍然沒有運氣。結果只是隨便做了一些事情。例如,如果我是第二個玩家,並且我提示將馬鈴薯傳給第二個玩家,那麼它只會向玩家2反覆播放馬鈴薯的控制檯寫信。我不知道如何做到這一點。有什麼建議麼?
它不清楚你在問什麼。你在問如何拋出異常。 (一個真正的c#執行)或如何處理該異常。爲什麼你試圖解析int作爲這個 – pm100
的一部分注意:你在這裏使用了很多重複的代碼,併爲播放器等固定了變量。想一想,並使用一般化的方式來簡化。如果「2」表示索引爲1,「3」表示索引爲2,那麼我相信您可以輕鬆地將其推廣。根據給定的玩家數量打印出玩家的數量等。 –
這裏有太多的代碼。你需要提供一個好的[mcve]。是的,它必須**完整**。但它也必須**最少**。如在中,含有_no_代碼,這對於證明您所詢問的_specific_問題並非嚴格必要。我們不需要或不想看到程序中的所有代碼。 ... –