Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Препоръчан отговор


Здравейте ! Имам нужда от малко помощ. Имам задача да напиша програма на C#, която да може да чете PGN файл ред по ред и да в случай, че намери непозволен ход, да покаже съобщение. 
 
CODE
public chessForm()
       {
           InitializeComponent();
       }

       private void chessForm_Load(object sender, EventArgs e)
       {

       }

       private void button_exit_Click(object sender, EventArgs e)
       {
           Application.Exit();
       }

       private void button_play_Click(object sender, EventArgs e)
       {
           openFileDialog1.Filter = "Text Files|*.txt";
           openFileDialog1.FileName = String.Empty;
           DialogResult result = openFileDialog1.ShowDialog();
           if (result == DialogResult.OK)
           {
               Stream fs = openFileDialog1.OpenFile();
               StreamReader reader = new StreamReader(fs);
               reader.ReadToEnd();

               
               reader.Close();
           }
       }
   }


До тук имам бутон, при чието натискане мога да отворя произволен файл. 

Въпросът ми е как да направя списък с позволените ходове на всяка фигура /като отделни класове или?/ , така че при изчитане на файла да хвана грешен ход, ако има такъв? 

Извинявам се, ако е глупав въпроса, но съм в процес на обучение и са ми доста неясни нещата все още

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма логика позволените ходове да са отделни класове. По-скоро отделните фигури могат да са класове. Не съм запознат с този формат, но сега като го погледна набързо ми изглежда, че и просто низ за всеки ход ще ти е достатъчен. Основното ще бъде да пазиш правилно състоянието на цялата дъска, за да знаеш къде се намира всяка фигура след всеки един ход; за да не смяташ възможните ходове за всички фигури за всеки ход, може първо да вземеш фигурата, чийто ход искаш да валидираш, да сметнеш възможностите само за нея, да ги натрупаш примерно в масив, в който после да търсиш въпросния ход; още една стъпка на оптимизация би била да не трупаш предварително нищо, а директно да провериш хода, който ти е даден във файла.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Подобни теми

    • от darkwonderer
      Изпращам данни по ssl по следният начин: client->server
       public byte[] ReadBigData(SslStream sslstr, uint datalenth)
              {
                  lock (this)
                  {
                      int _datalenth = Convert.ToInt32(datalenth);
                      byte[] paket = new byte[_datalenth];
                      int paketSizes = 15000;// 000;
                      if (paket.Length < paketSizes)
                      {
                          sslstr.Read(paket, 0, paket.Length);
                          return paket;
                      }
                      //bool fistRead = true;
                      //int dataRead=0;
                      int currentRead = 0;
                      int ostatyk = _datalenth % paketSizes;
                      int broiPaketi = _datalenth / paketSizes;
                      if (ostatyk != 0)
                          broiPaketi++;
                      byte[] subPaket;
                      using (MemoryStream ms = new MemoryStream(paket))
                      {
                          while (broiPaketi != 0)
                          {
                              if (sslstr.CanRead)
                              {
                                  if (_datalenth > paketSizes)
                                  {
                                      currentRead = paketSizes;
                                      //if (fistRead)
                                      //{
                                      //    currentRead -= 5;//tip paket i int s razmera =5 byta
                                      //}
                                      _datalenth -= currentRead;
                                  }
                                  else
                                  {
                                      currentRead = _datalenth % paketSizes;
                                  }
                                  subPaket = new byte[currentRead];
                                  sslstr.Read(subPaket, 0, currentRead);
                                  broiPaketi--;
                                  if (broiPaketi != 0)
                                  {
                                      if (!sslstr.IsServer)
                                      {
                                          sslstr.WriteByte((byte)201);//znachi ok
                                          sslstr.Flush();
                                      }
                                  }
                                  ms.Write(subPaket, 0, currentRead);
                              }
                            
                          }
                        return paket;
                      }
                  }
                  
              }
              public void WriteBigData(SslStream sslstr, byte[] data)
              {    lock(this)
                  { 
                  int paketSizes = 15000;// 000; 
                  byte[] paket = data;
                  byte[] subPaket;
                  if (data.Length < paketSizes)
                  {
                      sslstr.Write(paket);
                      return;
                  }
                  int _datalenth = data.Length;
                
                  int currentRead = 0;
                  
                  int ostatyk = _datalenth % paketSizes;
                  int broiPaketi = _datalenth / paketSizes;
                  if (ostatyk != 0)
                      broiPaketi++;
                
                  using (MemoryStream ms = new MemoryStream(paket))
                  {
                      while (broiPaketi != 0)
                      {
                          if(sslstr.CanWrite)
                          { 
                              if (_datalenth > paketSizes)
                              {
                                  currentRead = paketSizes;
                                  _datalenth -= currentRead;
                              }
                              else
                              {
                                  currentRead = _datalenth % paketSizes;
                              }
                              subPaket = new byte[currentRead];
                              //sslstr.Read(subPaket, 0, currentRead);
                              //sslstr.WriteByte((byte)201);//znachi ok
                              ms.Read(subPaket, 0, currentRead);
                              sslstr.Write(subPaket,0, currentRead);
                              sslstr.Flush();
                              broiPaketi--;
                              if (broiPaketi != 0)
                                  if (sslstr.IsServer)
                                  {
                                      if (sslstr.ReadByte() != 201)
                                          throw new sslException("WriteBigData != 201");
                                  }
                          }
                      }
                  //    File.WriteAllBytes(@"f:\sendPaket.jpg", paket);
                  }
                  }
                 
              }
      WriteBigData се захранва от :
       
      public static T BytesToObject<T>(this byte[] data) where T : DipPacketData
              {
             
                  BinaryFormatter bf = new BinaryFormatter();
                   using (MemoryStream ms = new MemoryStream(data, 0, data.Length))
                  {             
        
                      return  (T)bf.Deserialize(ms);
                  }
             }
      ReadBigData: 1-вия byte е номера на обекта за десериализиране, 2-5 е uint е дължината на данните за десериализиране. - затова има 5 bytе разлика в началото на файловете.
      public static byte[] Combine(params byte[][] arrays)
              {
                  byte[] rv = new byte[arrays.Sum(a => a.Length)];
                  int offset = 0;
                  foreach (byte[] array in arrays)
                  {
                      System.Buffer.BlockCopy(array, 0, rv, offset, array.Length);
                      offset += array.Length;
                  }
                  return rv;
              }
              public static byte[] ObjectToByteArray<T>(this T obj) 
              {
                  if (obj == null)
                      return null;
                  BinaryFormatter bf = new BinaryFormatter();
                  using (MemoryStream ms = new MemoryStream())
                  {
                      bf.Serialize(ms, obj);
                      byte[] Data = ms.ToArray();
                      bf = null;
                      byte[] headerByteDataLenth = BitConverter.GetBytes((uint)Data.Length);
                                   //HeaderV                                              //Header Data lent    Data
                      return Combine(new byte[1] { obj.GetType().GetDipPacketDataType() }, headerByteDataLenth, Data);
                  }
              }
      Под  15000 няма проблем. От hhd на hhd големи файлове (вместо sslstream filestream).  Възможно ли е нещо да се случва по мрежата заради изхода от BinaryFormatter-а (възможно ли е нещо да ми реже нуличките - big - little endian ...)? Както виждатe съм разкарал asyn-кове и task-ве пинизите и пак дърво-всичко се изпълнява на 1 thread.
      Гърмежа е при сървъра xxx.BytesToObject() (xxx е правилният тип обект - клиента и сървъра използват 1 dll, няма разлика в кода):
      client.bac са данните изпратени от клиента а server.bak - Създадени са чрез immediate window на visual studioto, 
      System.Runtime.Serialization.SerializationException: Binary stream '178' does
       not contain a valid BinaryHeader. Possible causes are invalid stream or object
      version change between serialization and deserialization.
         at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
         at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(He
      aderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAp
      pDomain, IMethodCallMessage methodCallMessage)
         at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
      (Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCr
      ossAppDomain, IMethodCallMessage methodCallMessage)
         at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
      (Stream serializationStream)
      client.bac server.bak
    • от Monika Koleva
      ЗАДАЧИ C SHARP
      Здравейте! Имам нужда от помощ за решаване на следните задачи:
      1. Напишете функция, която приема като параметър масив от цели числа и
      връща като резултат сумата на двата най-големи елемента в масива.
      2. Напишете функция, която приема два параметъра - масив от цели числа и
      число X, и проверява дали съществуват точно два елемента от масива със
      сума X. Функцията връща true или false.

      3. Напишете функция, която приема като параметри два сортирани масива, и
      връща като резултат сортиран масив, получен от обединението на двата масива.

      4. Като задача 3, но ако има повтарящи се елементи, в изходния резултат
      да се елиминират повторенията (всяко число да се среща само веднъж).

      5. Напишете функция за изчисляване на вноски по ипотека с намаляващи
      вноски, която приема като параметри: int sum - сума на заема (главница),
      float interest - годишен лихвен процент, int monthsCount – период на
      заема (в брой месеци), int month - месец от началото на ипотеката и
      връща като резултат сумата, дължима през месец month. Допълнителни
      пояснения: всеки месец се заплаща една и съща сума по главницата, и
      лихва за съответния месец върху остатъка от главницата. Допуска се, че
      годишният лихвен процент остава постоянен за целия период на заема.

      6. Българските ЕГН-та се състоят от 10 цифри, като един (опростен) начин
      да се опише коя какво значи, е:
      Първите 2 цифри са рождената година
      Следващите 2 цифри са рождения месец
      Следващите 2 цифри са рождения ден
      Следващите 2 цифри са за рожденото място
      Следващата цифра указва пола - четна за мъж, нечетна за жена
      Последната цифра е чексума
      По зададен масив, съдържаш ЕГН-та, да се определи колко от тях са на
      мъже, зодия Стрелец.
      Благодаря!
    • от minavazatoka
      Опитвам се да добавя key за изпълнението на мое .exe . На моят компютър върви нормално , но на други се пуска аваста и пищи . Не мога да разбера защо . С Windows 10 съм , ако това има изобщо значение . Другото , което не разбирам е , защо върви само с папките на проекта а .exe - то не може като е самостоятелно при рънване да си набие ключ в регистъра . Тук трябва да кажа също и че програмата не е вирус , но аваст и други "анти-вирусни" като дефаултната на Windows ловят .exe - то без причина . Ето и линията , която ползвам за добавяне на ключ:
      RegistryKey addProcess = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); addProcess.SetValue("Leslie", "\"" + Application.ExecutablePath.ToString() + "\"");  
    • от Greenlife
      Здравейте, от няколко дни започнах с изучаването на C#, като нямам опит в програмирането. В сайта, от който се обучавам стигнах до секцията if , но не мога да разбера следния пример:
      int age = 18; if (age > 14) { if(age > 18) { Console.WriteLine("Adult"); } else { Console.WriteLine("Teenager"); } } else { if (age > 0) { Console.WriteLine("Child"); } else { Console.WriteLine("Something's wrong"); } } Конзолата ми отпечатва "Teenager", но защо? В първия if след Int, age e по-голямо от 14, защо тогава не изписва "Adult"?
      Ще съм благодарен. ако ми обясните с прости думи , за да го разбера. Благодаря : )
    • от coda
      Здравейте нов съм във програмирането и имам една доста елементарна задачка
      1.Write a program that reads a string, reverses it and prints the result at the console.
      Example: "sample" -> "elpmas"  
       
      Написах това
       
       
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;

      namespace ReverseStringAplication
      {
          public class Program
          {
              static void Main()
              {
                  string str = "Simple";
                  Console.WriteLine();
                  Console.ReadLine(reverse(str));  /Тук ми дава грешлата
                
              }
              private static string reverse(string str)
              {
                  char[] charove = str.ToCharArray();
                  int j = charove.Length;
                  for(int i=0;i<charove.Length/2;i++)
                  {
                      char temporary = charove;
                      charove = charove[j];
                      charove[j] = temporary;
                      j--;
                  }
                  return new String(charove);
              }
          }

      }
       
      И ми дава тази грекшка
      Error    1    No overload for method 'ReadLine' takes 1 arguments    C:\Users\MyPc\Desktop\ForTelerik\ReverseStringAplication\ReverseStringAplication\Program.cs    15    13    ReverseStringAplication
       
       
      Ще се радвам ако някой би бил така добър да ми помогне Благодаря
       
  • Дарение

×
×
  • Добави ново...