Выбрать главу

//-----------------------------------------------------------------

//Код управления данными в памяти

//

//Этот код предназначен для управления представлением кода в памяти

//-----------------------------------------------------------------

using System;

internal class GameData {

 //Массив списков для сохранения загружаемых данных

 private static System.Collections.ArrayList m_vocabularyWords All;

 private static System.Collections.ArrayList m_vocabularyWords_Nouns;

 private static System.Collections.ArrayList m_vocabularyWords_Verbs;

 private static System.Collections.ArrayList m_vocabularyWords_Adjectives;

 private static System.Collections.ArrayList m_vocabularyWords_Adverbs;

 private static System.Collections.ArrayList m_vocabularyWords_Prepositions;

 public static bool isGameDataInitialized {

  //Инициализация данных игры, если слова загружены

  get {

   return (m_vocabularyWords_All != null);

  }

 }

 //Возвращает коллекцию всех имеющихся слов

 public static System.Collections.ArrayList AllWords {

  get {

   //Загрузить данные, если они не были инициализированы

   if (m_vocabularyWords_All == null) {

    InitializeGameVocabulary();

   }

   return m_vocabularyWords_All;

  }

 }

 //Возвращает коллекцию всех имеющихся имен существительных

 public static System.Collections.ArrayList Nouns {

  get {

   //Загрузить данные, если они не были инициализированы

   if (m_vocabularyWords_Nouns == null) {

    InitializeGameVocabulary();

   }

   return m_vocabularyWords_Nouns;

  }

 }

 //==========================================================

 //Загружает данные из нашей базы данных

 //==========================================================

 static public void InitializeGameVocabulary() {

  //Создать новый массив списков для хранения наших слов

  m_vocabularyWords_All = new System.Collections.ArrayList();

  m_vocabularyWords_Nouns = new System.Collections.ArrayList();

  m_vocabularyWords Verbs = new System.Collections.ArrayList();

  m_vocabularyWords_Adjectives = new System.Collections.ArrayList();

  m_vocabularyWords_Adverbs = new System.Collections.ArrayList();

  m_vocabularyWords_Prepositions = new System.Collections.ArrayList();

  System.Data.IDataReader dataReader;

  dataReader = DatabaseAccess.GetListOfWords();

  VocabularyWord newWord;

  //Обойти все записи

  while (dataReader.Read()) {

   //Поместить данные для только что считанного слова в класс

   newWord = new VocabularyWord(

    dataReader.GetString(DatabaseAccess.DS_WORDS_COLUMNINDEX_ENGLISHWORD),

    dataReader.GetString(DatabaseAccess.DS_WORDS COLUMNINDEX_GERMANWORD),

    (VocabularyWord.WordGender)dataReader.GetInt32(DatabaseAccess.DS_WORDS_COLUMNINDEX_GERMANGENDER),

    (VocabularyWord.WordFunction)dataReader.GetInt32(DatabaseAccess.DS_WORDS_COLUMNINDEX_WORDFUNCTION));

   //Добавить новое слово в массив списков

   m_vocabularyWords_All.Add(newWord);

   //Слова могут принадлежать нескольким группам, поэтому необходимо

   //выполнить проверку с использованием операции логического И

   //для проверки того, что слово относится к данной категории

   if ((newWord.getWordFunction & VocabularyWord.WordFunction.Noun) ! = 0) {

    m_vocabularyWords_Nouns.Add(newWord);

   }

   if ((newWord.getWordFunction & VocabularyWord.WordFunction.Verb) != 0) {

    m_vocabularyWords_Verbs.Add(newWord);

   }

   if ((newWord.getWordFunction & VocabularyWord.WordFunction.Adjective) != 0) {

    m_vocabularyWords Adjectives.Add(newWord);

   }

   if ((newWord.getWordFunction & VocabularyWord.WordFunction.Adverb) != 0) {

    m_vocabularyWords Adverbs.Add(newWord);

   }

   if ((newWord.getWordFunction & VocabularyWord.WordFunction.Preposition) != 0) {

    m_vocabularyWords_Prepositions.Add(newWord);

   }

  }

  //Закрыть объект

  DataReader dataReader.Close();

 }

} //Конец класса

Листинг 14.8. Пример кода управления данными для VocabularyWord.cs

using System;

//------------------------------

//Хранит данные слова из словаря

//------------------------------

internal class VocabularyWord {

 [System.FlagsAttribute] //Значения можно объединять с помощью операции

                         //логического ИЛИ

 public enum WordFunction {

  Noun = 1,

  Verb = 2,

  Pronoun = 4,

  Adverb = 8,

  Adjective = 16,

  Preposition = 32,

  Phrase = 64

 }

 public enum WordGender {

  notApplicable = 0,

  Masculine = 1,

  Feminine = 2,

  Neuter = 3,

 }

 private string m_englishWord;

 private string m_germanWord;

 private VocabularyWord.WordGender m_germanGender;

 private VocabularyWord.WordFunction m_wordFunction;

 public string EnglishWord{

  get {

   return m_englishWord;

  }

 }

 public string GermanWord{

  get {

   return m_germanWord;

  }

 }

 public WordFunction getWordFunction {

  get {

   return m_wordFunction;

  }

 }

 public WordGender GermanGender{

  get {

   return m_germanGender;

  }

 }

 //-----------------------------------------------------------------

 //Возвращает слово на немецком языке, которому предшествует артикль

 //{например, 'der', 'die', 'das'), если он существует

 //-----------------------------------------------------------------

 public string GermanWordWithArticleIfExists {