2

編集 - チェックが Else に移動され、ループと複数のオブジェクトの変更が主要な問題になりました

互いに対戦するには 5 つのチーム オブジェクトが必要です (それぞれが他の 4 チームと対戦する必要があります)

チェックは ELSE ステートメントに含まれていなければなりませんでした。今残っている唯一の問題は、すべてのチームが同時にスコアを加算および減算することです。私は 1 回だけプレイします。全員と対戦できるようにループする必要があります。

私はこのように始めました。それでも、私はこれを行う方法がわかりません

//This is the list i check against and add players to when the team
//Played against them

List<string> played = new List<string>();

//Teamlist Holds Objects of type Team 
//Contructor - (TeamName,Points,Wins,Losses,Draws,totalpoints)
//string, rest are int type

foreach (var item in Teamlist)
{
    if (played.Contains(item.Teamname))
    {
    //Played against them already or is the same name as their own
    }
    else
    {
     //Add own Name on Check
    played.Add(item.Teamname);

        //Looping here against all Teams Entered to be played against
        //How do i go about doing this?

        //If Team 1 Wins Team 2 - This is just 2 Randoms between 1
        //and 10
        if (rand1 > rand2)
        {
            item.WinGame(); //Increments Team win Points
        }
        else if (rand1 == rand2)
        {
            item.DrawGame(); //Draw awards no points
        }
        else
        {
            item.LoseGame(); //Lose Points
        }
    }
}

foreach (var item in Teamlist)
{
    //This ToString() looks like this
    //return string.Format("Team Name : {0} \t {1} \t {2} \t {3} \t 
    //{4} \t {5}", teamname, points, win, loss, draw, totalpoints);
    Console.WriteLine(item.ToString());
}
4

8 に答える 8

2

たぶん、あなたが少し間違いを犯したからです:

最初に追加しますitem.Teamname

//Add own Name on Check
played.Add(item.Teamname);

次に、以前に追加item.Teammnameしたものがリスト内にあるかどうかを確認します -- 常に true:

if (played.Contains(item.Teamname))
{
于 2013-08-07T14:06:58.927 に答える
2

編集:これは間違っています。ホームゲームとアウェイゲームの両方を提供します。

チームのリストのデカルト積を取得して、プレイする試合のリストを取得するのはどうでしょうか。Linq を使用すると、非常に簡単です。

static void Main(string[] args)
{
    var teams = new[]
    {
        new { Name = "Team 1"},
        new { Name = "Team 2"},
        new { Name = "Team 3"},
        new { Name = "Team 4"},
        new { Name = "Team 5"}
    };

    var matches = 
        // here we loop over all the items in the teams collection. 
        // "teamA" is our loop variable.
        from teamA in teams

        // here we loop over all the items in the teams collection again.
        // like a nested foreach (in) 
        // "teamB" is our loop variable.
        from teamB in teams

        // this is like an if(teamA.Name != teamB.Name) within our nested foreach loops
        where teamA.Name != teamB.Name

        // the select says how we want to create our collection of results.
        // Here we're creating a new anonymous object containing the two rival teams.
        select new { Team1 = teamA, Team2 = teamB };

    foreach (var match in matches)
    {
        var result = PlayMatch(match.Team1, match.Team2);
        Console.WriteLine("{0} played {1} The result was {2}", 
            match.Team1.Name, 
            match.Team2.Name, 
            result);
    }
}

private static string PlayMatch(object team1, object team2)
{
    // Left as an exercise for the OP.
    return "...";
}
于 2013-08-07T14:21:08.303 に答える
1

ここにあなたの問題があります:

played.Add(item.Teamname);

if (played.Contains(item.Teamname))

最初の行はチーム名をプレイリストに追加し、2 行目はチーム名がリストにあるかどうかをチェックします。これは常に真である必要があるため、else パスに入ることがありません...

于 2013-08-07T14:07:17.147 に答える
1

仮定teamList is IList<Team>

for(int i = 0;     i < teamList.Count() - 1; i++)
for(int j = i + 1; j < teamList.Count();     j++)
{
   var team1 = teamList[i];
   var team2 = teamList[j];
   // will execute for each pair once
}

5 チームの場合:

  • 0プレイ 1,2,3,4
  • 1プレイ 2,3,4
  • 2プレイ 3,4
  • 3プレイ 4
于 2013-08-07T14:23:22.270 に答える
0
foreach (var item in Teamlist)
{
    //Add own Name on Check
    played.Add(item.Teamname);

    if (played.Contains(item.Teamname))
    {
        //Played against them already or is the same name as their own
    }

これは常に真実ですか?名前を追加し、次にそれを見つけようとします (追加したばかりです....)

played.Add(item.Teamname);

foreachスコープの最後にあるはずです

于 2013-08-07T14:07:24.973 に答える
0

ロジックに 1 つのループがありません。

提供したコードに基づいて、次のことが起こります。

  1. 現在のチーム名をプレイリストに追加
  2. 現在のチーム名がプレイリストにあるかどうかを確認する

ステップ 1 と 2 の間に別のループを追加して、すべてのチームでループし、ゲーム ロジックを実行する必要があります。

于 2013-08-07T14:10:32.573 に答える