ShuffleDeckCode.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. using System.Linq;
  6. public class ShuffleDeckCode : MonoBehaviour
  7. {
  8. [Header("シャッフルされた文字番号")]
  9. public int[] ShuffledNumberIDs;
  10. //文字列を逆から読む
  11. public string[] ReversNumberIDs(string[] numbers)
  12. {
  13. return numbers.Reverse().ToArray();
  14. }
  15. //1文字をConvertBinaryNumber→乱数文字に変換
  16. public string ConvertString(string s)
  17. {
  18. string t = "";
  19. if(ConvertBinaryNumber.numbers.Contains(s))
  20. {
  21. int index = Array.IndexOf(ConvertBinaryNumber.numbers, s);
  22. int convertIndex = Array.IndexOf(ShuffledNumberIDs, index);
  23. if(0 <= convertIndex && convertIndex < ConvertBinaryNumber.numbers.Length)
  24. {
  25. t = ConvertBinaryNumber.numbers[convertIndex];
  26. }
  27. }
  28. else
  29. {
  30. }
  31. return t;
  32. }
  33. //1文字を乱数文字→ConvertBinaryNumberに変換
  34. public string ReturnConvertString(string t)
  35. {
  36. string s = "";
  37. if (ConvertBinaryNumber.numbers.Contains(t))
  38. {
  39. int index = Array.IndexOf(ConvertBinaryNumber.numbers, t);
  40. int convertIndex = ShuffledNumberIDs[index];
  41. if (0 <= convertIndex && convertIndex < ConvertBinaryNumber.numbers.Length)
  42. {
  43. s = ConvertBinaryNumber.numbers[convertIndex];
  44. }
  45. }
  46. return s;
  47. }
  48. //index番目の文字を変換する回数
  49. int ConvFactor(int index)
  50. {
  51. //変換パラメータ
  52. float parameter1 = 7.2f;
  53. float parameter2 = 13.7f;
  54. float parameter3 = 5.6f;
  55. float parameter4 = 0.7f;
  56. return ((int)(parameter3 * Mathf.Pow(index + 1, 3) + parameter2 * Mathf.Pow(index + 1, 2) + parameter1 * Mathf.Pow(index + 1, 1) + parameter4)) % 13;
  57. }
  58. //DeckCodeを暗号文字列化
  59. public string GetConvertDeckCode(string DeckCode)
  60. {
  61. string ConvertedDeckCode = "";
  62. string[] parseByComma = DeckCode.Split(',');
  63. if (parseByComma.Length >= 3)
  64. {
  65. parseByComma[1] = GetConvertParseByComma(parseByComma[1]);
  66. parseByComma[2] = GetConvertParseByComma(parseByComma[2]);
  67. ConvertedDeckCode = $"{parseByComma[0]},{parseByComma[1]},{parseByComma[2]},";
  68. string GetConvertParseByComma(string text)
  69. {
  70. string[] SplitText = SplitClass.Split(text, 1);
  71. SplitText = ReversNumberIDs(SplitText);
  72. for (int i = 0; i < SplitText.Length; i++)
  73. {
  74. string t = SplitText[i];
  75. for (int j = 0; j < ConvFactor(i); j++)
  76. {
  77. t = ConvertString(t);
  78. }
  79. SplitText[i] = t;
  80. }
  81. string ConvertedParseByComma = "";
  82. for (int i = 0; i < SplitText.Length; i++)
  83. {
  84. ConvertedParseByComma += SplitText[i];
  85. }
  86. return ConvertedParseByComma;
  87. }
  88. }
  89. return ConvertedDeckCode;
  90. }
  91. //暗号文字列をDeckCodeに復号
  92. public string GetDeckCode(string ConvertedDeckCode)
  93. {
  94. string DeckCode = "";
  95. string[] parseByComma = ConvertedDeckCode.Split(',');
  96. if(parseByComma.Length == 3 || parseByComma.Length == 4)
  97. {
  98. parseByComma[1] = GetConvertParseByComma(parseByComma[1]);
  99. parseByComma[2] = GetConvertParseByComma(parseByComma[2]);
  100. DeckCode = $"{parseByComma[0]},{parseByComma[1]},{parseByComma[2]},";
  101. string GetConvertParseByComma(string text)
  102. {
  103. string[] SplitText = SplitClass.Split(text, 1);
  104. for (int i = 0; i < SplitText.Length; i++)
  105. {
  106. string t = SplitText[i];
  107. for (int j = 0; j < ConvFactor(i); j++)
  108. {
  109. t = ReturnConvertString(t);
  110. }
  111. SplitText[i] = t;
  112. }
  113. SplitText = ReversNumberIDs(SplitText);
  114. string ConvertedParseByComma = "";
  115. for (int i = 0; i < SplitText.Length; i++)
  116. {
  117. ConvertedParseByComma += SplitText[i];
  118. }
  119. return ConvertedParseByComma;
  120. }
  121. }
  122. return DeckCode;
  123. }
  124. }