Wielowątkowosc w c#

0
public class work:Game
    {
   
        public void Shippando()
        {
            switch (key)
            {

                case ConsoleKey.W:
                    if (_variables.ShipY2 > 1)
                    {
                        DrawShipR(false);
                        _variables.ShipY2--;

                        DrawShipR(true);
                    }
                    break;
                case ConsoleKey.S:
                    if (_variables.ShipY2 + GameVariables.SHIP_Height + 1 < Console.WindowHeight - 1)
                    {
                        DrawShipR(false);
                        _variables.ShipY2++;

                        DrawShipR(true);
                    }
                    break;


            }
        }
    }
   public class Game
    {
       work w = new work();
      Thread newThread = new Thread(w.Shippando); // 

tutaj wyskakuje błąd: A field initializer cannot reference the non-static field, method, or property 'Arkanoid.Game.Game.w'

0

Przepraszam, nie c++ a c#

0

Już nic nie trzeba pomagać, poradziłem sobie. Jednak nie wiem jeszcze do końca jak zrobic to: żeby jeden gracz nie blokował drugiego, w sensie jak jeden idzie suwakiem do góry- nadusza W(tak jest ustawione), a gdy drugi gracz nadusi G(G- w dół T- w góre), on idzie w dół ale zablokował tego pierwszego, właśnie zdałem sobie sprawę, że wątki tego nie załatwią... np: wwwwwwwwwwwwgggggggggggggggggggggggggggggggggggggggggggggggggggggg THATS THE PROBLEM! Czy idzie jakoś to wyeliminować ?

0

Tylko jeden wątek czyta z konsoli oraz przekazuje informacje o wciśniętych klawiszach do wątków obsługujących postacie graczy.
Przekazywać najprościej za pomocą delegatów.

0

Czyli wg. Ciebie delegaty załatwiły by sprawe?

0

Nie, załatwi sprawę:

_13th_Dragon napisał(a):

Tylko jeden wątek czyta z konsoli oraz przekazuje informacje o wciśniętych klawiszach do wątków obsługujących postacie graczy.
Natomiast jak będziesz przekazywać tą informacje to już zupełnie inna sprawa.

0

Dziekuję za odpowiedź!

0
Graphics.PutPixel(_variables.X, _variables.Y, ConsoleColor.Yellow);
                        key = Arkanoid.Tools.Tools.ReadKeyPressed();
                        if (key == ConsoleKey.NoName)
                        {
                        }
                        else
                        {
                            
                            Thread t = new Thread(ShippandoR); // tutaj znajduje się kod obsługujący
                            Thread t1 = new Thread(ShippandoL);// tutaj znajduje się kod obsługujący
                            t.Start();
                            t1.Start();
                        }

to też nie załatwia sprawy, nadal się blokują;P

0
ThreadForPlayer tR=new ThreadForPlayer(ShippandoR); // tutaj znajduje się kod obsługujący
ThreadForPlayer tL=new ThreadForPlayer(ShippandoL); // tutaj znajduje się kod obsługujący
Thread keyThread=new ThreadWhichReadAndDistributeKeys(tR,tL);
tR.Start();
tL.Start();
keyThread.Start();
0

Eh to chyba na razie dla mnie za trudne, bo nie rozumiem;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1