| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System;
- using System.Linq;
- public class ShuffleDeckCode : MonoBehaviour
- {
- [Header("シャッフルされた文字番号")]
- public int[] ShuffledNumberIDs;
- //文字列を逆から読む
- public string[] ReversNumberIDs(string[] numbers)
- {
- return numbers.Reverse().ToArray();
- }
- //1文字をConvertBinaryNumber→乱数文字に変換
- public string ConvertString(string s)
- {
- string t = "";
- if(ConvertBinaryNumber.numbers.Contains(s))
- {
- int index = Array.IndexOf(ConvertBinaryNumber.numbers, s);
- int convertIndex = Array.IndexOf(ShuffledNumberIDs, index);
- if(0 <= convertIndex && convertIndex < ConvertBinaryNumber.numbers.Length)
- {
- t = ConvertBinaryNumber.numbers[convertIndex];
- }
- }
- else
- {
- }
- return t;
- }
- //1文字を乱数文字→ConvertBinaryNumberに変換
- public string ReturnConvertString(string t)
- {
- string s = "";
- if (ConvertBinaryNumber.numbers.Contains(t))
- {
- int index = Array.IndexOf(ConvertBinaryNumber.numbers, t);
- int convertIndex = ShuffledNumberIDs[index];
- if (0 <= convertIndex && convertIndex < ConvertBinaryNumber.numbers.Length)
- {
- s = ConvertBinaryNumber.numbers[convertIndex];
- }
- }
- return s;
- }
- //index番目の文字を変換する回数
- int ConvFactor(int index)
- {
- //変換パラメータ
- float parameter1 = 7.2f;
- float parameter2 = 13.7f;
- float parameter3 = 5.6f;
- float parameter4 = 0.7f;
- return ((int)(parameter3 * Mathf.Pow(index + 1, 3) + parameter2 * Mathf.Pow(index + 1, 2) + parameter1 * Mathf.Pow(index + 1, 1) + parameter4)) % 13;
- }
- //DeckCodeを暗号文字列化
- public string GetConvertDeckCode(string DeckCode)
- {
- string ConvertedDeckCode = "";
- string[] parseByComma = DeckCode.Split(',');
- if (parseByComma.Length >= 3)
- {
- parseByComma[1] = GetConvertParseByComma(parseByComma[1]);
- parseByComma[2] = GetConvertParseByComma(parseByComma[2]);
- ConvertedDeckCode = $"{parseByComma[0]},{parseByComma[1]},{parseByComma[2]},";
- string GetConvertParseByComma(string text)
- {
- string[] SplitText = SplitClass.Split(text, 1);
- SplitText = ReversNumberIDs(SplitText);
- for (int i = 0; i < SplitText.Length; i++)
- {
- string t = SplitText[i];
- for (int j = 0; j < ConvFactor(i); j++)
- {
- t = ConvertString(t);
- }
- SplitText[i] = t;
- }
- string ConvertedParseByComma = "";
- for (int i = 0; i < SplitText.Length; i++)
- {
- ConvertedParseByComma += SplitText[i];
- }
- return ConvertedParseByComma;
- }
- }
-
- return ConvertedDeckCode;
- }
- //暗号文字列をDeckCodeに復号
- public string GetDeckCode(string ConvertedDeckCode)
- {
- string DeckCode = "";
- string[] parseByComma = ConvertedDeckCode.Split(',');
- if(parseByComma.Length == 3 || parseByComma.Length == 4)
- {
- parseByComma[1] = GetConvertParseByComma(parseByComma[1]);
- parseByComma[2] = GetConvertParseByComma(parseByComma[2]);
- DeckCode = $"{parseByComma[0]},{parseByComma[1]},{parseByComma[2]},";
- string GetConvertParseByComma(string text)
- {
- string[] SplitText = SplitClass.Split(text, 1);
- for (int i = 0; i < SplitText.Length; i++)
- {
- string t = SplitText[i];
- for (int j = 0; j < ConvFactor(i); j++)
- {
- t = ReturnConvertString(t);
- }
- SplitText[i] = t;
- }
- SplitText = ReversNumberIDs(SplitText);
- string ConvertedParseByComma = "";
- for (int i = 0; i < SplitText.Length; i++)
- {
- ConvertedParseByComma += SplitText[i];
- }
- return ConvertedParseByComma;
- }
- }
-
- return DeckCode;
- }
- }
|