团队和战斗随机化器在C

时间:2015-12-30 20:53:14

标签: c random tournament

我试图创建一个程序,将一定数量的玩家放入一定数量的团队中。之后他们应该被随机选择(例如,你掷出"骰子"以及第3队&#39的玩家42并且将对抗第4队的玩家22(所有玩家随机进入不同的团队,仅限于Gamemaster的选择))。

在我的代码中,我有基本的输出和结构。它说的是:

第1队现在拥有玩家43 Team 2现在拥有Player 12 Team 4现在拥有Player 1 Team 3现在拥有Player 54

但我的问题是,如何 - 基于代码 - 我可以保存这些信息,我怎么能(之后)让玩家随机战斗?同一个团队的成员不应该互相争斗,每次战斗后我都希望玩家能够以某种方式进入黑名单"他们不能再滚动的地方了。

到目前为止我的代码

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int mitglieder, teams, teameins = 0, teamzwei = 0, teamdrei = 0, teamvier = 0;

    printf("Teamcreation\n");
    printf("\nNumber of Players: ");
    scanf("%d", &mitglieder);
    printf("\nNumber of Teams: ");
    scanf("%d", &teams);
    printf("\nThere are ");
    printf("%d", mitglieder);
    printf(" Player in ");
    printf("%d", teams);
    printf(" Teams. \n");

    int array[mitglieder];

    for (int i = 0; i < mitglieder; i++) 
    {     // fill array
        array[i] = i;               
    }

    printf("The Player are in the following Teams: \n ");

    for (int i = 0; i < mitglieder; i++) 
    {    // shuffle array
        int temp = array[i];
        int randomIndex = rand() % mitglieder;

        array[i]           = array[randomIndex];
        array[randomIndex] = temp;
    }

    for (int i = 0; i < mitglieder; i++) 
    {    // print array
        int random_number = rand() % teams + 1;
        int tp = random_number;

        if(tp == 1) 
        {
            teameins+1;
        }
        else if(tp == 2) 
        {
            teamzwei+1;
        }
        else if(tp == 3) 
        {
            teamdrei+1;
        }
        else if(tp == 4) 
        {
            teamvier+1;                         
        }

        printf("Team %d - Spieler: %d\n ",random_number,array[i] + 1);      
    }

    if( (teamvier == 0) && (teamdrei == 0) ) 
    {
        printf("\n%d Mitglieder in Team 1 und %d Mitglieder in Team2",teameins,teamzwei);
    }
    else if((teamvier == 0) && (teamdrei < 0)) 
    {
        printf("\n%d Mitglieder in Team 1, %d Mitglieder in Team2 und %d Mitglieder in Team3.",teameins,teamzwei,teamdrei);
    }
    else if(teamvier < 0) 
    {
        printf("\n%d Mitglieder in Team 1, %d Mitglieder in Team2, %d Mitglieder in Team 3 und %d Mitglieder in Team4.",teameins,teamzwei,teamdrei,teamvier);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

在确定给定代码的基础之前,您应该更正其中的错误,这些错误在团队成员的计数和计数的打印范围内。当你参与其中时,你可以让它超过四个团队,e。 G:

#include <string.h>
…
    int Spielerteam[mitglieder];                // team of the player
    int Teamstaerke[teams];                     // team member counts
    memset(Teamstaerke, 0, sizeof Teamstaerke); // zero the counts

    for (int i = 0; i < mitglieder; i++) 
    {    // print array
        int random_number = rand() % teams;
        int tp = random_number + 1;
        Spielerteam[i] = tp;            // save player's team information
        Teamstaerke[random_number]++;   // count the member
        printf("Team %d - Spieler: %d\n ", tp, array[i] + 1);      
    }

    for (int i = 0; i < teams; i++) 
        printf("%s%d Mitglieder in Team %d",
                i ? i+1 == teams ? " und " : ", " : "\n", Teamstaerke[i], i+1);
    puts("");

之后,每位玩家array[i] + 1所属的小组都会保存在Spielerteam[i]中。