C# Arka planda sürekli çalışan Ana koddan bağımsız bir kod.

Bu konuyu okuyanlar

Anti_Dragon

Öğrenci
Katılım
15 Ekim 2020
Mesajlar
22
Reaksiyon puanı
7
Puanları
3
Yaş
23
Ben bir Kod üzerinde çalışıyorum. Amacım kullanıcı bir işlem yapmasa dahi arka planda o kod ile aynı anda ve bağımsız olarak çalışan bir kod yapmak. Bu ne demek? Şöyle,

C#:
ConsoleKeyInfo move;
move = Console.ReadKey(true);

Kullandığım için kodun devam edebilmesi için kullanıcının bir girdi yapması lazım.
Yeni bir başvuru yapmayı düşündüm fakat Main()'in içinde Bir sürü değer var. Bunları Main()'in dışına alıp static koymayı denedim ama işe yaramadı.



C#:
geri:
//Burada

ConsoleKeyInfo move;
move = Console.ReadKey(true);

//Var

...

Random Gen1 = new Random();
            int number1 = Gen1.Next(1, 11);

            Random Gen2 = new Random();
            int number2 = Gen1.Next(1, 10);

            string obj;

            switch (number1)
            {
                case 1:
                case 2:
                case 3:
                     s8[number2] = e[2];
                     Thread.Sleep(1000);
                   

                    break;

               defaul:
                    break;
            }

goto geri;

Ben bu komudun sürekli arkada çalışmasını istiyorum

Ama bu komut bütün sistemi etkilediği için çalıştaramıyorum. Beklemem gerekiyor. Bunu nasıl çözebilirim
 
Son düzenleme:

defacerGLD

Müdavim
Katılım
16 Ocak 2020
Mesajlar
3,329
Reaksiyon puanı
3,068
Puanları
113
Ben bir Kod üzerinde çalışıyorum. Amacım kullanıcı bir işlem yapmasa dahi arka planda o kod ile aynı anda ve bağımsız olarak çalışan bir kod yapmak. Bu ne demek? Şöyle,

C#:
ConsoleKeyInfo move;
move = Console.ReadKey(true);

Kullandığım için kodun devam edebilmesi için kullanıcının bir girdi yapması lazım.
Yeni bir başvuru yapmayı düşündüm fakat Main()'in içinde Bir sürü değer var. Bunları Main()'in dışına alıp static koymayı denedim ama işe yaramadı.



C#:
geri:
//Burada

ConsoleKeyInfo move;
move = Console.ReadKey(true);

//Var

...

Random Gen1 = new Random();
            int number1 = Gen1.Next(1, 11);

            Random Gen2 = new Random();
            int number2 = Gen1.Next(1, 10);

            string obj;

            switch (number1)
            {
                case 1:
                case 2:
                case 3:
                     s8[number2] = e[2];
                     Thread.Sleep(1000);
                  

                    break;

               defaul:
                    break;
            }

goto geri;

Ben bu komudun sürekli arkada çalışmasını istiyorum

Ama bu komut bütün sistemi etkilediği için çalıştaramıyorum. Beklemem gerekiyor. Bunu nasıl çözebilirim
thread ı diyorsun heralde
 

Anti_Dragon

Öğrenci
Katılım
15 Ekim 2020
Mesajlar
22
Reaksiyon puanı
7
Puanları
3
Yaş
23
thread ı diyorsun heralde
hem thread hem
ConsoleKeyInfo move;
move = Console.ReadKey(true);
dan bağımsız olacak. Bir döngü içerisinde sürekli sürekli çalışacak.

Eğer istersen bütün kodu atabilirim. Visual Studio Konsol'da çalışacak
 
Son düzenleme:

Anti_Dragon

Öğrenci
Katılım
15 Ekim 2020
Mesajlar
22
Reaksiyon puanı
7
Puanları
3
Yaş
23
C#:
using System;
using System.Security.Cryptography.X509Certificates;
using System.Threading;

namespace Konsol
{
    class Program
    {
        string space1 = " ";
        //Alt + 2
        string player1 = "☻";
        //Alt + 219
        string wall1 = "█";
        //Alt + 4
        string coin1 = "♦";

        int değer;
        int en;
        int boy;

        int loup = 0;
        int sat;
        static void Main(string[] args)
        {
            Program space = new Program();
            Program player = new Program();
            Program wall = new Program();
            Program coin = new Program();

            space.değer = 0;
            player.değer = 1;
            wall.değer = 2;
            coin.değer = 3;

            player.en = 5;
            player.boy = 2;
            //                  0              1             2           3
            string[] e = { space.space1, player.player1, wall.wall1, coin.coin1 };
            //                  0              1             2           3

            //                0     1     2     3     4     5     6     7     8     9    1 0  
            string[] s9 = { e[2], e[2], e[2], e[2], e[2], e[2], e[2], e[2], e[2], e[2], e[2] };
            string[] s8 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s7 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s6 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s5 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s4 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s3 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s2 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
            string[] s1 = { e[2], e[0], e[0], e[0], e[0], e[1], e[0], e[0], e[0], e[0], e[2] };
            string[] s0 = { e[2], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[0], e[2] };
        //                    0     1     2     3     4     5     6     7     8     9    1 0

        çıktı:
            Console.Clear();

            foreach (string s in s9)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s8)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s7)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s6)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s5)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s4)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s3)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s2)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s1)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            foreach (string s in s0)
            {
                Console.Write(s);
            }

            Console.WriteLine("");

            ConsoleKeyInfo move;
            move = Console.ReadKey(true);


            if (move.Key == ConsoleKey.A)
            {
                if (player.en > 1)
                {
                    player.en += -1;
                }
            }

            if (move.Key == ConsoleKey.D)
            {
                if (player.en < s1.Length - 2)
                {
                    player.en += 1;
                }
            }

           

                        

            //                    0              1             2           3
            //string[] e = { space.space1, player.player1, wall.wall1, coin.coin1 };
            //                    0              1             2           3

       

            Console.WriteLine();
           

                s1[player.en] = e[1];
                if (s1[player.en + 1] != e[2])
                {
                    s1[player.en + 1] = e[0];
                }
                else if (s1[player.en + 1] == e[2])
                {
                    s1[player.en + 1] = e[2];
                }
                else
                {

                }

               

                if (s1[player.en - 1] != e[2])
                {
                    s1[player.en - 1] = e[0];
                }
                else if (s1[player.en - 1] == e[2])
                {
                    s1[player.en - 1] = e[2];
                }

                else
                {

                }

            Random Gen1 = new Random();
            int number1 = Gen1.Next(1, 11);

            Random Gen2 = new Random();
            int number2 = Gen1.Next(1, 10);

           

            switch (number1)
            {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                     s8[number2] = e[0];
                   


                    break;
                case 6:
                case 7:
                case 8:
                     s8[number2] = e[2];
                   


                    break;
                case 9:
                case 10:
                    s8[number2] = e[3];
                   
                    break;

            }

            Thread.Sleep(1000);


            goto çıktı;
        }

       
    }
}

Konsolda çalışan bir oyun yapmak amacım. karakter sağ sol hareket edecek. üstten bloklar, paralar vs. düşecek. ölene kadar devam edecek. Yapamadığım şey Playerdan bağımsız olan bir komut satırı yapamamam. Yardımcı olur musunuz?

Random ile yukardan ne geleceğini vs. belirliyor. Ama Thread.Sleep'i sadece bu Random komut satırı için kullanmak istiyorum.

C#:
switch (number1)
            {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                     s8[number2] = e[0];
                   


                    break;
                case 6:
                case 7:
                case 8:
                     s8[number2] = e[2];
                   


                    break;
                case 9:
                case 10:
                    s8[number2] = e[3];
                   
                    break;

            }

            Thread.Sleep(1000);

Ama Thread.Sleep sıkıntı çıkartıyor. Bütün sistemi etkiliyor. Bunun çözümünü istiyorum.

Zararlı yazılm yok yani, sadece oyun yapıyorum.
Bu arada kodun bazı kısımları eksik onlaraı tam yazmadım daha.
 

vigilantemre

Müdavim
Katılım
26 Mayıs 2019
Mesajlar
1,590
Reaksiyon puanı
1,537
Puanları
113
Thread.Sleep komutu ile yukarıdan belirli aralıklarla nesne gelmesini istiyorsunuz anladığım kadarıyla, doğru mudur hocam ?
 

vigilantemre

Müdavim
Katılım
26 Mayıs 2019
Mesajlar
1,590
Reaksiyon puanı
1,537
Puanları
113
Benim C# bilgim düşük seviyede ama aklımda bir şey var. Thread.Sleep yerine if-else ve döngü kullanarak yapılamazmı, mesela oyuncu ölmemişse nesneler gelmeye devam edecek (döngü tekrarlanacak), ölmüşse else komutunun altındaki oyunu bitirecek kod çalışacak.
Mesaj otomatik birleştirildi:

Gerçi nesnelerin belirli aralıklarla gelmesini böyle sağlayamayız. Ben çözümü bilmiyorum, size başarılar hocam.
 

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
rekürsif fonksiyonla çözülebilir. sizin burada takılmanızda ki asıl sebep kodları tek sınıf altında toplamanız. nesnenin her bir hareketi sınıflandırılırsa obje rotasyonunda rekürsif işe yarar. bu şekilde çok tuhaf algoritma kurup çözüme gitmeniz gerekiyor.
 

vigilantemre

Müdavim
Katılım
26 Mayıs 2019
Mesajlar
1,590
Reaksiyon puanı
1,537
Puanları
113
rekürsif fonksiyonla çözülebilir. sizin burada takılmanızda ki asıl sebep kodları tek sınıf altında toplamanız. nesnenin her bir hareketi sınıflandırılırsa obje rotasyonunda rekürsif işe yarar. bu şekilde çok tuhaf algoritma kurup çözüme gitmeniz gerekiyor.
Çok bilimsel konuştunuz hocam, siz bu işi biliyorsunuz.
 
Üst