Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# unity, poprawienie kodu, symulacja losowania lotto


Rekomendowane odpowiedzi

Opublikowano

Wykonuję sobie program w unity, który ma symulować losowanie lotto. Mam problem z eleganckim losowaniem liczb. Napisałem kod, który wklejam poniżej - działa, ale mam wrażenie, że da się to zrobić ładniej.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine.UI;


public class lotto : MonoBehaviour {
	int liczba1;
	int liczba2;
	int liczba3;
	int liczba4;
	int liczba5;
	int liczba6;
	int[] wynikiLotto = new int[6];

	public Text[] tekstWynikow = new Text[6];

	public void Lotto()  //metoda podpięta do guzika
	{
		//losowanie cyfr wraz ze sprawdzenie ich dublowania sie
		liczba1 = UnityEngine.Random.Range (1, 50);

		liczba2 = UnityEngine.Random.Range (1, 50);
		while (liczba2 == liczba1) 
		{
			liczba2 = UnityEngine.Random.Range (1, 50);
		}

		liczba3 = UnityEngine.Random.Range (1, 50);
		while (liczba3 == liczba2 || liczba3 == liczba1) 
		{
			liczba3 = UnityEngine.Random.Range (1, 50);
		}

		liczba4 = UnityEngine.Random.Range (1, 50);
		while (liczba4 == liczba2 || liczba4 == liczba1  || liczba4 == liczba3)
			{
				liczba4 = UnityEngine.Random.Range (1, 50);
			} 

		liczba5 = UnityEngine.Random.Range (1, 50);
		while (liczba5 == liczba2 || liczba5 == liczba1  || liczba5 == liczba3  || liczba5 == liczba4)
			 {
				liczba5 = UnityEngine.Random.Range (1, 50);
			} 

		liczba6 = UnityEngine.Random.Range (1, 50);
		while (liczba6 == liczba2 || liczba6 == liczba1  || liczba6 == liczba3  || liczba6 == liczba4  || liczba6 == liczba5)
			 {
				liczba6 = UnityEngine.Random.Range (1, 50);
			} 

		//wsadzenie liczb do tabeli oraz ich posortowanie
		wynikiLotto [0] = liczba1;
		wynikiLotto [1] = liczba2;
		wynikiLotto [2] = liczba3;
		wynikiLotto [3] = liczba4;
		wynikiLotto [4] = liczba5;
		wynikiLotto [5] = liczba6;
		Array.Sort (wynikiLotto);

		//debug wyswietlający liczby w konsoli
		foreach (int element in wynikiLotto)
			{
			Debug.Log (element);
			}
		//wyswietlenie liczb w UI
		for (int i = 0; i < 6; i++)	
		{
			tekstWynikow[i].text = wynikiLotto[i].ToString();
		}


	}
}

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano

Można zrobić prościej:
 

			var rand = new Random();
			const int ElementCount = 5;

			var list = new List<int>();

			for (var i = 0; i < ElementCount; i++)
			{
				int randomInt;
				do
				{
					randomInt = rand.Next();
				} while (list.Contains(randomInt));

				list.Add(randomInt);
			}

Zamiast losowania z unity użyłem zwykłego Randoma: rand.Next(); jak podmienisz tą linijke na swoją to powinno być wszystko ok. ElementCount określa ile liczb ma być wylosowanych.

Opublikowano

@1361622928-U485574.pngGwynbleidd92

Ten kod chyba nie sprawdza tego, czy liczby się powtarzają? Jest to jeden z warunków - żadna liczba nie może się powtórzyć.

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano

Wybacz moje zapewne głupie pytania, ale dopiero się uczę :)

 

Użyłeś tu var. Czy Random() domyślnie zwraca inty?

var rand = new Random();

Odwiedź mój profil aby zobaczyć adres mojego bloga o projektowaniu gier!

Opublikowano

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication18
{
    class Program
    {
        static void Main(string[] args)
        {
            var iloscElementow = 6; //int decydujacy o ilosci wylosowanych liczb
            var random = new Random(); //instancja klasy random
            var lista = new List<int>(); //lista, która przechowywać będzie wylosowane liczby
 
            while (lista.Count < iloscElementow) //dopóki ilość wylosowanych liczb jest mniejsza niż iloscElementow
            {
                int n; //deklaracja zmiennej, która przechowa wylosowaną liczbę
                do //pętla do-while
                    n = random.Next(); //losujemy liczbę
                while (lista.Contains(n)); //jeżeli lista zawiera już daną liczbę, to wracamy wyżej
                lista.Add(n); //dodajemy liczbę do listy
            }
 
            for (var i = 0; i < lista.Count; i++)
                Console.WriteLine("{0}. {1}", i + 1, lista[i]);
            Console.ReadKey();
        }
    }
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...