Игра "Балда" с поддержкой работы по сети
Общие сведения об игре "Балда", обзор ее аналогов и основные требования, предъявляемые к данному программному продукту. Состав и параметры технических средств, оценка параметров совместимости. Основные классы приложения и их общая характеристика.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.05.2015 |
Размер файла | 381,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
public PlayerGameStatistic GameStatistic { get; set; }
private Player activePlayer;
#region GameLogicFlags
public bool IsCellSelectionExpected { get; set; }
public bool IsLetterSelectionExpected { get; set; }
public bool IsWordSelectionExpected { get; set; }
public bool IsSelectedNetworkGameMode { get; set; }
public bool IsWordSelected { get; set; }
private bool IsPreviousInvalid;
#endregion
#region GameLogicDelegates
public DisplayMatrixCells DisplayCells { private get; set; }
public DisplayMatrixCells DisplayCellAsLight { private get; set; }
public DisplayMessage DisplayCurrentWord { private get; set; }
public DisplayMessage DisplayCurrentPlayerName { private get; set; }
public DisplayMessage DisplayCurrentGuide { private get; set; }
public DisplayMessage DisplayCurrentError { private get; set; }
public DispalyAction AddWordConfirmationButtons { private get; set; }
public DispalyAction RemoveConfirmationLabels { private get; set; }
public DispalyAction AddLetterConfirmationButtons { private get; set; }
public ConditionAction IsWordExist { private get; set; }
#endregion
public void CreateGameLogicObjects()
{
CreateLogicCells();
CreatePlayersObjects();
SelectedCellsForWord = new List<LogicCell>();
}
private void CreatePlayersObjects()
{
Players = new List<Player>();
for (int i = 1; i <= Settings.PlayerCount; i++)
{
Players.Add(new Player {Number = i, Name = String.Empty});
}
GameStatistic = new PlayerGameStatistic(Players);
}
private void CreateLogicCells()
{
LogicCells = new List<LogicCell>();
for (int i = 1; i <= Settings.MatrixSize; i++)
{
for (int j = 1; j <= Settings.MatrixSize; j++)
{
LogicCells.Add(new LogicCell
{
X = i,
Y = j,
Letter = String.Empty
});
}
}
var middleRowIndex = Settings.MatrixSize / 2 + 1;
MainWordLogicCells = new List<LogicCell>();
LogicCells.Where(cell => cell.Y == middleRowIndex)
.ToList()
.ForEach(cell => { MainWordLogicCells.Add(cell);
cell.IsMainWorldCell = true;
});
}
public void SetFirstWord(String mainWord)
{
if (mainWord.Length!= Settings.MatrixSize)
{
throw new Exception("Start wold more then matrix size");
}
var mainWorldBuilder = new StringBuilder(mainWord);
for (int i = 0; i < Settings.MatrixSize; i++)
{
MainWordLogicCells[i].Letter = mainWorldBuilder[i].ToString();
DisplayCells(MainWordLogicCells);
}
}
public void StartGame()
{
activePlayer = Players.First(pl => pl.Number == 1);
SetCellCelectionStage();
}
public bool TrySelectCellForInsertingLetter(LogicCell logCell)
{
if (!String.IsNullOrEmpty(logCell.Letter))
{
DisplayCurrentError(GamePlayMessages.CellMustBeEmpty);
return false;
}
if (!IsOneOfNeigborsContainsLetter(logCell))
{
DisplayCurrentError(GamePlayMessages.NeighborMustContainLetter);
return false;
}
selectedCell = logCell;
DisplayCellAsLight(new List<LogicCell> { logCell });
DisplayCurrentError(String.Empty);
DisplayCurrentGuide(GamePlayMessages.InsertLetter);
return true;
}
public bool LetterIsValidForInserting(string letter)
{
return true;
}
public void SetLetterToCell(string letter)
{
selectedCell.Letter = letter;
IsLetterSelectionExpected = false;
IsWordSelectionExpected = false;
DisplayCells(new List<LogicCell>{selectedCell});
DisplayCurrentWord(letter);
SetAcceptLetterStage();
}
public bool IsLogicCellValidForWordSelection(LogicCell logCell)
{
if (SelectedCellsForWord!= null)
{
if (String.IsNullOrEmpty(logCell.Letter))
{
IsPreviousInvalid = true;
return false;
}
if (SelectedCellsForWord.Contains(logCell) && (SelectedCellsForWord.Last()!= logCell))
{
{
HandleDoubleCellInWordSelection(logCell);
IsPreviousInvalid = false;
DisplayCurrentWord(GetCurentSelectedWord());
}
return false;
}
if (SelectedCellsForWord.Contains(logCell) && (SelectedCellsForWord.Last() == logCell))
{
return false;
}
if (SelectedCellsForWord.Count!= 0)
{
if (!IsLogicCellsNeighbors(logCell,SelectedCellsForWord.Last()))
{
return false;
}
}
}
return true;
}
private bool IsLogicCellsNeighbors(LogicCell firstCell, LogicCell secondCell)
{
if ((firstCell == null) || (secondCell == null))
{
return false;
}
var neighbors = GetNeighborsForCell(firstCell);
return neighbors.Contains(secondCell);
}
private List<LogicCell> GetNeighborsForCell(LogicCell logicCell)
{
var high = GetCellByLogicCor(logicCell.X, logicCell.Y + 1);
var low = GetCellByLogicCor(logicCell.X, logicCell.Y - 1);
var left = GetCellByLogicCor(logicCell.X - 1, logicCell.Y);
var right = GetCellByLogicCor(logicCell.X + 1, logicCell.Y);
var list = new List<LogicCell>();
if (high!=null) list.Add(high);
if (low!= null) list.Add(low);
if (left!= null) list.Add(left);
if (right!= null) list.Add(right);
return list;
}
private bool IsOneOfNeigborsContainsLetter(LogicCell logicCell)
{
var flag=false;
GetNeighborsForCell(logicCell).ForEach(lc =>
{
if (lc!= null)
{
if (!String.IsNullOrEmpty(lc.Letter))
{
flag = true;
}
}
});
return flag;
}
private LogicCell GetCellByLogicCor(int x, int y)
{
return LogicCells.FirstOrDefault(lc => (lc.X == x) && (lc.Y == y));
}
private void HandleDoubleCellInWordSelection(LogicCell cell)
{
var index = SelectedCellsForWord.IndexOf(cell);
var temp = SelectedCellsForWord.Take(index+1).ToList();
for (int i = index+1; i < SelectedCellsForWord.Count; i++)
{
DisplayCells(new List<LogicCell>{SelectedCellsForWord[i]});
}
SelectedCellsForWord = temp;
}
public void AddCellToWordSelection(LogicCell logicCell)
{
SelectedCellsForWord.Add(logicCell);
DisplayCellAsLight(new List<LogicCell>(){logicCell});
DisplayCurrentWord(GetCurentSelectedWord());
}
private string GetCurentSelectedWord()
{
var selectedWord = String.Empty;
SelectedCellsForWord.ForEach(cell=>selectedWord += cell.Letter);
return selectedWord;
}
public void StopWordSelection()
{
if (IsSelectedWordContainsSelectedCell())
{
SetAcceptWordStage();
}
else
{
DisplayCurrentError(GamePlayMessages.WordMustContainSelectedCell);
}
}
private bool IsSelectedWordContainsSelectedCell()
{
if (SelectedCellsForWord!= null)
{
if (SelectedCellsForWord.Count!= 0)
{
if (selectedCell!= null)
{
return SelectedCellsForWord.Contains(selectedCell);
}
}
}
return false;
}
#region GamePlayAction
public void CancelSelectedWord()
{
RemoveConfirmationLabels();
DisplayCells(SelectedCellsForWord);
SelectedCellsForWord = null;
selectedWord = String.Empty;
SetAcceptLetterStage();
}
public void CancelLetter()
{
selectedCell.Letter = String.Empty;
DisplayCells(new List<LogicCell>{selectedCell});
selectedCell = null;
SetCellCelectionStage();
}
public void AcceptLetter()
{
SetWordSelectionStage();
}
public void AcceptWord()
{
GameStatistic.SetWordToPlayer(activePlayer, selectedWord);
RemoveConfirmationLabels();
DisplayCells(SelectedCellsForWord);
SelectedCellsForWord = null;
SetNextActivePlayer();
SetCellCelectionStage();
}
#endregion
#region SetGamePlayStage
private void SetWordSelectionStage()
{
RemoveConfirmationLabels();
SelectedCellsForWord = new List<LogicCell>();
IsWordSelectionExpected = true;
DisplayCurrentWord(String.Empty);
DisplayCurrentGuide(GamePlayMessages.SelectWord);
DisplayCurrentError(String.Empty);
}
private void SetCellCelectionStage()
{
RemoveConfirmationLabels();
IsCellSelectionExpected = true;
DisplayCurrentPlayerName(activePlayer.Name);
DisplayCurrentGuide(GamePlayMessages.SelectCellForLetter);
DisplayCurrentError(String.Empty);
DisplayCurrentWord(String.Empty);
}
private void SetAcceptLetterStage()
{
RemoveConfirmationLabels();
AddLetterConfirmationButtons();
DisplayCurrentWord(selectedCell.Letter);
DisplayCurrentGuide(GamePlayMessages.AcceptLetter);
DisplayCurrentError(String.Empty);
}
private void SetAcceptWordStage()
{
IsWordSelectionExpected = false;
selectedWord = GetCurentSelectedWord();
DisplayCurrentWord(selectedWord);
DisplayCurrentError(String.Empty);
DisplayCurrentGuide(GamePlayMessages.AcceptWord);
AddWordConfirmationButtons();
}
#endregion
private void SetNextActivePlayer()
{
var index = Players.IndexOf(activePlayer);
if (index == (Players.Count - 1))
{
activePlayer = Players.First();
}
else
{
activePlayer = Players[index + 1];
}
DisplayCurrentPlayerName(activePlayer.Name);
}
}
}
Размещено на Allbest.ru
Подобные документы
Понятие электронных учебников и их классификация, общие требования к ним. Порядок разработки электронных учебников, обзор средств их создания и определение затрат. Основные требования к программному продукту. Разработка программы, описание интерфейса.
дипломная работа [1,1 M], добавлен 07.05.2014Общие сведения об электронных учебниках, структура и функции. Обзор методов решения поставленной задачи и обоснование их выбора. Требования к информационной и программной совместимости, составу и параметрам технических средств. Характеристика программы.
курсовая работа [3,0 M], добавлен 20.09.2014Разработка адресных и технических требований к игре. Написание сценария. Общая концепция разработки приложения. Разработка схем алгоритмов приложения. Игровые технологии. Выбор среды и программированного языка. Описание пользовательского интерфейса.
курсовая работа [1,6 M], добавлен 14.06.2014Требования к функциональным характеристикам, составу и параметрам технических средств, информационной и программной совместимости. Описание программы: общие сведения, логическая структура. Средства и порядок испытаний. Входные и выходные данные.
курсовая работа [6,3 M], добавлен 12.01.2015Анализ требований к программному продукту. Требования к информационной и программной совместимости. Проектирование архитектуры программного продукта. Виды программ и программных документов. Общие сведения о С++. Технология разработки программного модуля.
дипломная работа [1,2 M], добавлен 05.08.2011Требования к программе или программному изделию, к информационной и программной совместимости. Проектирование программного продукта. Процедура установки и удаления. Описание интерфейса, главное окно приложения. Основные возможности пользователя.
курсовая работа [678,1 K], добавлен 15.02.2016Требования к программе или программному продукту. Условия эксплуатации и требования к параметрам технических средств. Программное обеспечение, рекомендуемое для функционирования программы. Руководство системного программиста и настройка программы.
отчет по практике [1,1 M], добавлен 22.07.2012Предпроектное обследование объекта автоматизации. Область применения разработки Web-приложения "Туристическое агенство", ее назначение, требования к программному продукту и документации. Календарный план и порядок приемки. Приемы работы с программой.
курсовая работа [60,3 K], добавлен 28.12.2011Этапы разработки программного приложения, выполняющего синтаксический анализ программы на языке С и форматирование текста программы на языке С. Требования к программному обеспечению и интерфейсу. Конфигурация технических средств и оценка надежности.
курсовая работа [1,6 M], добавлен 22.06.2011Общие сведения и основные задачи о ФСИН России, размещение производственных и административных зданий. Оценка необходимости создания на предприятии корпоративной информационной сети. Масштабы проектируемой сети, определение параметров и выбор технологий.
курсовая работа [34,1 K], добавлен 08.12.2009