@ReWire_92

Как сделать простой и быстрый доступ к массиву строк?

На данный момент всё реализовано так, как показано ниже. Есть 2 класса - сама игра и класс со списком всех слов. В классе Game в список currentWords получаю массив строк из класса WordsArray. Получаемые строки зависят от значения текущего уровня, которое передаётся в функцию changeWords в классе WordsArray. После того, как передав значение уровня и обновив значения переменных targetword и words перебором в операторе switch, я забираю эти значения в класс Game, функцией BuildLevel. Проблема в самой реализиции нужной задачи. Решение со switch не самое лучшее, учитывая, что в перспективе число слов с 50 может увеличиться до 100 - 150. Switch на 150 кейсов занимает значительное время на выполнение (приложение на Андроид). Я понимаю, что реализовано это очень убого, но мои познания в C# не велеки и поэтому ничего другого мне в голову не пришло.
Как можно по другому реализовать эту задачу, без сотни кейсов свитча?

public class Game {
public List<string> currentWords;
public string Targetword;
public int level = 0;

public void BuildLevel(){
Targetword = WordsArray.targetword;
currentWords.AddRange(WordsArray.words);
}

public void nextLevel(){
level++;
WordsArray.changeWords(level);
BuildLevel();
}
}


public class WordsArray{
public static string targetword;
public static string[] words = {"EMPTY","EMPTY","EMPTY","EMPTY","EMPTY"};

public static void changeWords(int level){
		switch (level) {
		case 0:
			targetword = "fsewt";
			words = new string[]{ "twetwt", "twtat", "twtwtw", "twtwt", "twtfsdfggs" };
			break;
		case 1:
			targetword = "vdfrty";
			words = new string[]{ "wywyt", "gdghdye", "yeye", "gxcbchd", "hdhey" };
			break;
		case 2:
			targetword = "wtwtwtyw";
			words = new string[]{ "bnvnbvbv", "nvnbn", "nbbnv", "teyee", "tyeyey" };
			break;
		case 3:
			targetword = "eyryyr";
			words = new string[]{ "ghjghjg", "jfjfue", "uruuu", "uetetewre", "rwrwrt" };
			break;
		case 4:
			****
		case 50:
			targetword = "wtetre";
			words = new string[]{ "tertet", "tete", "tetete", "tetetert", "trtetrrt" };
			break;
                default:
			targetword = "EMPTY";
			words = new string[]{ "EMPTY", "EMPTY", "EMPTY", "EMPTY", "EMPTY" };
			break;
		}
}
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
Создаем обычные массивы со значениями для каждого уровня. В функции просто обращаемся по индексу, который равен значению уровня (т.к. отсчёт также идёт с 0). На мой взгляд, наиболее простой и удобный способ.

Возможно где-то ошибся, но идея думаю ясна.

public class WordsArray {
  public static string targetword;
  public static string[] words = {"EMPTY","EMPTY","EMPTY","EMPTY","EMPTY"};

  static string[] targetWordsArray = new string[] {
    "fsewt", "vdfrty", "wtwtwtyw", "eyryyr", /* *** */, "wtetre"
  }

  static string[][] wordsArray = new string[][] {
    new string[] { "twetwt", "twtat", "twtwtw", "twtwt", "twtfsdfggs" },
    new string[] { "wywyt", "gdghdye", "yeye", "gxcbchd", "hdhey" },
    new string[] { "bnvnbvbv", "nvnbn", "nbbnv", "teyee", "tyeyey" },
    new string[] { "ghjghjg", "jfjfue", "uruuu", "uetetewre", "rwrwrt" },
    /* *** */,
    new string[] { "tertet", "tete", "tetete", "tetetert", "trtetrrt" }
  }


  public static void changeWords(int level) {
    if (level >= 0 && level <= 50) {
      targetword = targetWordsArray[level];
      words = wordsArray[level];
    } else {
      targetword = "EMPTY";
      words = new string[]{ "EMPTY", "EMPTY", "EMPTY", "EMPTY", "EMPTY" };
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Therapyx
@Therapyx
Data Science
Ну тут уже идет не о ценностях сишарпа, а в целом о программировании. Сделай любой контейнер с возможностью засунуть туда пару key-value, Где, ключ будет уровнем, а велью словами для этого уровня и с переходом на новый уровень просто переключай на уровень на ++.
Если я конечно правильно понял задумку этой игры ))
Ответ написан
Комментировать
DarkRaven
@DarkRaven
разработка программного обеспечения
В догонку к ответу Therapyx .
Я бы посоветовал использовать Dictionary<TKey, TValue>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы