Fazer um detetive para sair apenas 1 vez o resultado do sorteio
2 participantes
Página 1 de 1
Fazer um detetive para sair apenas 1 vez o resultado do sorteio
Estou querendo fazer um sistema de detetive onde a pessoa vai apertar o botão e vai sortear um “nome” (Detetive, Assasino é Vítima)
Mas vai ter a opção de escolher quantos jogadores em uma string e no sistema
E quando apertar vou ir sorteando até acabar a lista
Mas vai ter a opção de escolher quantos jogadores em uma string e no sistema
E quando apertar vou ir sorteando até acabar a lista
EricknhYT- Avançado
- PONTOS : 2046
REPUTAÇÃO : 8
Idade : 20
Áreas de atuação : Programando Patrulha Ostensiva - Msc Studios
Respeito as regras :
Re: Fazer um detetive para sair apenas 1 vez o resultado do sorteio
Boa tarde colega!
Lógica de jogadores
Você vai precisar armazenar uma lista de jogadores com seus nomes (string[]) com seus respectivos nomes, assim você vai saber quantos participantes você irá sortear.
Sorteio
Assim que você souber a relação de participantes, poderá já sortear, como regra do jogo (eu acho, né) você terá 2 jogadores especiais: assassino + detetive e os outros jogadores, vítimas.
Como só haverá apenas dois especiais, você só precisar realizar o Sort duas vezes, ou seja, um você faz assim:
Random rand = new Random();
string detective = players[rand.Next(players.length)];
(Assim você descobre o usuário que será o detetive)
Depois, você precisa descobrir quem será o assassino, ignorando o detetive (uma pessoa não pode ter dois cargos), aqui acontece o pulo do gato:
string[] remainPlayers = players.Where((p, i) => p != detective).ToList();
E sortear novamente usando o restante
string killer = remainPlayers[rand.Next(remainPlayers.length)];
Assim você tem o nome do detective e do killer, o resto é vítima!
Obs.: Para poder usar a função List.Where, é necessário usar a biblioteca Linq (https://docs.microsoft.com/pt-br/dotnet/api/system.linq)
Para isso, é só adicionar using System.Linq; logo no início do seu código.
Em relação à UI
Você pode usar o Vertical Layout Group para mostrar os usuários disponíveis
https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/script-VerticalLayoutGroup.html
Referências
https://stackoverflow.com/questions/27719283/excluding-one-item-from-list-by-index-and-take-all-others
https://www.tutorialsteacher.com/articles/generate-random-numbers-in-csharp
Lógica de jogadores
Você vai precisar armazenar uma lista de jogadores com seus nomes (string[]) com seus respectivos nomes, assim você vai saber quantos participantes você irá sortear.
Sorteio
Assim que você souber a relação de participantes, poderá já sortear, como regra do jogo (eu acho, né) você terá 2 jogadores especiais: assassino + detetive e os outros jogadores, vítimas.
Como só haverá apenas dois especiais, você só precisar realizar o Sort duas vezes, ou seja, um você faz assim:
Random rand = new Random();
string detective = players[rand.Next(players.length)];
(Assim você descobre o usuário que será o detetive)
Depois, você precisa descobrir quem será o assassino, ignorando o detetive (uma pessoa não pode ter dois cargos), aqui acontece o pulo do gato:
string[] remainPlayers = players.Where((p, i) => p != detective).ToList();
E sortear novamente usando o restante
string killer = remainPlayers[rand.Next(remainPlayers.length)];
Assim você tem o nome do detective e do killer, o resto é vítima!
Obs.: Para poder usar a função List.Where, é necessário usar a biblioteca Linq (https://docs.microsoft.com/pt-br/dotnet/api/system.linq)
Para isso, é só adicionar using System.Linq; logo no início do seu código.
Em relação à UI
Você pode usar o Vertical Layout Group para mostrar os usuários disponíveis
https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/script-VerticalLayoutGroup.html
Referências
https://stackoverflow.com/questions/27719283/excluding-one-item-from-list-by-index-and-take-all-others
https://www.tutorialsteacher.com/articles/generate-random-numbers-in-csharp
NKKF- ProgramadorMaster
- PONTOS : 4820
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Fazer um detetive para sair apenas 1 vez o resultado do sorteio
https://prnt.sc/20wzqry
Eu estava querendo criar nessa UI ai ... por que meu celular que iria rodar para as pessoas apertarem em GERAR ai no RESULTADO ele fica apagado ai quando clica
iria sortear seu cargo e iria aparecer o cargo por uns 5 segundos e apagar para passar o celular para a próxima pessoa pegar e apertar em GERAR e por ai vai ate acabar os jogadores e acabar a lista
Eu estava querendo criar nessa UI ai ... por que meu celular que iria rodar para as pessoas apertarem em GERAR ai no RESULTADO ele fica apagado ai quando clica
iria sortear seu cargo e iria aparecer o cargo por uns 5 segundos e apagar para passar o celular para a próxima pessoa pegar e apertar em GERAR e por ai vai ate acabar os jogadores e acabar a lista
EricknhYT- Avançado
- PONTOS : 2046
REPUTAÇÃO : 8
Idade : 20
Áreas de atuação : Programando Patrulha Ostensiva - Msc Studios
Respeito as regras :
Re: Fazer um detetive para sair apenas 1 vez o resultado do sorteio
EricknhYT escreveu:https://prnt.sc/20wzqry
Eu estava querendo criar nessa UI ai ... por que meu celular que iria rodar para as pessoas apertarem em GERAR ai no RESULTADO ele fica apagado ai quando clica
iria sortear seu cargo e iria aparecer o cargo por uns 5 segundos e apagar para passar o celular para a próxima pessoa pegar e apertar em GERAR e por ai vai ate acabar os jogadores e acabar a lista
Eu estava criando um script simples pesquisando na net.... agumas coisas (add array value inputfield unity) coisas assim para poder funcioanar
- Código:
public class DetetiveScript : MonoBehaviour
{
public bool Detetive, Assasino;
public int NumeroPlayers;
public GameObject ResultadoUI;
public string[] Vitimas;
// Start is called before the first frame update
void Start()
{
ResultadoUI.SetActive(false);
}
// Update is called once per frame
void Update()
{
}
public void Gerar()
{
print("Gerou");
ResultadoUI.SetActive(true);
}
public void Adicionar()
{
print("Adicionou");
}
}
EricknhYT- Avançado
- PONTOS : 2046
REPUTAÇÃO : 8
Idade : 20
Áreas de atuação : Programando Patrulha Ostensiva - Msc Studios
Respeito as regras :
Re: Fazer um detetive para sair apenas 1 vez o resultado do sorteio
Desculpa te pedir .... mas poderia dar um exemplo do jeito do script ?? por que assim eu meio que me perdi ... eu fiz outra modificação no UI.. creio que vai ficar melhor https://prnt.sc/20x020e OLHA AINKKF escreveu:Boa tarde colega!
Lógica de jogadores
Você vai precisar armazenar uma lista de jogadores com seus nomes (string[]) com seus respectivos nomes, assim você vai saber quantos participantes você irá sortear.
Sorteio
Assim que você souber a relação de participantes, poderá já sortear, como regra do jogo (eu acho, né) você terá 2 jogadores especiais: assassino + detetive e os outros jogadores, vítimas.
Como só haverá apenas dois especiais, você só precisar realizar o Sort duas vezes, ou seja, um você faz assim:
Random rand = new Random();
string detective = players[rand.Next(players.length)];
(Assim você descobre o usuário que será o detetive)
Depois, você precisa descobrir quem será o assassino, ignorando o detetive (uma pessoa não pode ter dois cargos), aqui acontece o pulo do gato:
string[] remainPlayers = players.Where((p, i) => p != detective).ToList();
E sortear novamente usando o restante
string killer = remainPlayers[rand.Next(remainPlayers.length)];
Assim você tem o nome do detective e do killer, o resto é vítima!
Obs.: Para poder usar a função List.Where, é necessário usar a biblioteca Linq (https://docs.microsoft.com/pt-br/dotnet/api/system.linq)
Para isso, é só adicionar using System.Linq; logo no início do seu código.
Em relação à UI
Você pode usar o Vertical Layout Group para mostrar os usuários disponíveis
https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/script-VerticalLayoutGroup.html
Referências
https://stackoverflow.com/questions/27719283/excluding-one-item-from-list-by-index-and-take-all-others
https://www.tutorialsteacher.com/articles/generate-random-numbers-in-csharp
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DetetiveScript : MonoBehaviour
{
public bool Detetive, Assasino;
public int NumeroPlayers = 10;
public Text NumeroPlayersUI;
public GameObject ResultadoUI;
public string[] Vitimas;
// Start is called before the first frame update
void Start()
{
ResultadoUI.SetActive(false);
}
// Update is called once per frame
void Update()
{
NumeroPlayersUI.text = NumeroPlayers.ToString();
}
public void Gerar()
{
ResultadoUI.SetActive(true);
Invoke("SumirResult", 3);
}
public void Adicionar()
{
if (NumeroPlayers < 20)
{
NumeroPlayers++;
}
}
public void Subtrair()
{
if (NumeroPlayers > 5)
{
NumeroPlayers--;
}
}
public void SumirResult()
{
ResultadoUI.SetActive(false);
}
}
EricknhYT- Avançado
- PONTOS : 2046
REPUTAÇÃO : 8
Idade : 20
Áreas de atuação : Programando Patrulha Ostensiva - Msc Studios
Respeito as regras :
Tópicos semelhantes
» Como fazer para o tiro ir para a direção onde o cano está apontado e não para cima
» Como fazer para sair do jogo apertando uma tecla?
» Limitar arrays e fazer sortear um valor apenas uma vez
» COMO FAZER UMA REFLECTION PROBE AFETAR APENAS UM OBJETO
» como fazer o player sair do carro?
» Como fazer para sair do jogo apertando uma tecla?
» Limitar arrays e fazer sortear um valor apenas uma vez
» COMO FAZER UMA REFLECTION PROBE AFETAR APENAS UM OBJETO
» como fazer o player sair do carro?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos