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

Bu konuyu okuyanlar

Anti_Dragon

Öğrenci
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

Profesör
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
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.
 

EmreAladag32

Profesör
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

Profesör
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.
 

EmreAladag32

Profesör
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.
 

SDN Son Haberler

Üst