Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок? - C#

Узнай цену своей работы

Формулировка задачи:

Как добавить методу что ниже, четыре параметра и изменять данные в параметрах при нажатии разных кнопок?
Листинг программы
  1. unsafe void PatchFilesLevel5()
  2. {
  3. long[] offsets = { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }; /* здесь нужно
  4. делать замену смещений при нажатии разных кнопок*/
  5. byte[] buf4 = new byte[4];
  6. decimal mulitplyBy = numericUpDown111.Value; /* здесь нужно
  7. делать замену ипользуемого numericUpDown при разных кнопках*/
  8. foreach (string fileName in Directory.EnumerateFiles(Application.StartupPath + @"\unpacked2", "scene*"))
  9. {
  10. Match m = Regex.Match(Path.GetFileName(fileName), @"^scene(\d+)$");
  11. if (m.Success)
  12. {
  13. int p = int.Parse(m.Groups[1].Value);
  14. if ((p >= 9 && p <= 11) || p == 12 || p == 14) /*здесь, если вообще можно,
  15. делать замену ипользуемых ((p >= 9 && p <= 11) || p == 12 || p == 14) при разных кнопках*/
  16. {
  17. using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
  18. {
  19. foreach (long offset in offsets)
  20. {
  21. if (offset + 4 < fstream.Length)
  22. {
  23. fstream.Position = offset;
  24. fstream.Read(buf4, 0, 4);
  25. int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); /* здесь нужно
  26. делать замену формулы при нажатии разных кнопок (например при 1-ой кнопке одна формула:
  27. (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); при 2-ой кнопке формула меняется */
  28. if (n > 99)
  29. {
  30. n = 99;
  31. }
  32. fixed (byte* b = buf4)
  33. {
  34. *((int*)b) = n;
  35. }
  36. fstream.Position -= 4;
  37. fstream.Write(buf4, 0, 4);
  38. }
  39. }
  40. }
  41. }
  42. }
  43. }
  44. }
Например: 1) При нажатии 1-ой кнопки в строке long[] offsets = { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }; нужно чтоб использовались смещения: { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }); При нажатии 2-ой кнопки чтоб в строке использовались смещения: { 0x222, 0x222 + 0xB8, 0x222 + 0x170 }; Обьяснили как сделать. Можно добавить методу PatchFilesLevel5 параметр offsets типа long unsafe void PatchFilesLevel5(long[] offsets) а в метод нажимаемой кнопки в виде аргумента задавать смещения:
Листинг программы
  1. buttonPatch1_Click(object sender, EventArgs e)
  2. {
  3. PatchFilesLevel5(new long[]{ 0x111, 0x111 + 0xB8, 0x111 + 0x170 });
  4. }
Можно в других строках также задавать параметры? 2) Например: При нажатии 1-ой кнопки в строке decimal mulitplyBy = numericUpDown111.Value; нужно чтоб использовался numericUpDown111.Value. При нажатии 2-ой кнопки используется numericUpDown222.Value. Меняется используемый numericUpDown. 3) Например: При 1-ой кнопке в строке int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); нужно чтоб использовалась одна формула: (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); При 2-ой кнопке формула меняется например на (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)/100); . 4) (Если это возможно сделать) Например: При 1-ой кнопке в строке if ((p >= 9 && p <= 11) || p == 12 || p == 14) нужно чтоб использовались: ((p >= 9 && p <= 11) || p == 12 || p == 14) При 2-ой кнопке например: ((p >= 5 && p <= 20) || p == 50).

Решение задачи: «Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок?»

textual
Листинг программы
  1. unsafe void PatchFilesLevel5(long[] offsets, Func<int,bool> fileSelector, Func<int,int> intConverter)
  2. {
  3.     byte[] buf4 = new byte[4];
  4.     foreach (string fileName in Directory.EnumerateFiles(Application.StartupPath + @"\unpacked2", "scene*"))
  5.     {
  6.         Match m = Regex.Match(Path.GetFileName(fileName), @"^scene(\d+)$");
  7.         if (m.Success)
  8.         {
  9.             int p = int.Parse(m.Groups[1].Value);
  10.             if (fileSelector(p))
  11.             {
  12.                 using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
  13.                 {
  14.                     foreach (long offset in offsets)
  15.                     {
  16.                         if (offset + 4 < fstream.Length)
  17.                         {
  18.                             fstream.Position = offset;
  19.                             fstream.Read(buf4, 0, 4);
  20.  
  21.                             int n = intConverter(BitConverter.ToInt32(buf4, 0));
  22.                             if (n > 99)
  23.                             {
  24.                                 n = 99;
  25.                             }
  26.                             fixed (byte* b = buf4)
  27.                             {
  28.                                 *((int*)b) = n;
  29.                             }
  30.  
  31.                             fstream.Position -= 4;
  32.                             fstream.Write(buf4, 0, 4);
  33.                         }
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.     }
  39. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы