Аналитический обзор игровых приложений

Автор работы: Пользователь скрыл имя, 16 Мая 2013 в 09:07, курсовая работа

Краткое описание

Аргументы против игр просты: они отнимают у человека время, развивают в нем агрессивные инстинкты, притупляют воображение, служат причиной сотен болезней, начиная от близорукости и кончая воспалением мозга... И вообще — плохо это и все! А немногочисленные либералы относятся к играм как к возрастной болезни — мол, со временем пройдет... И действительно, у некоторых проходит.

Содержание работы

Введение………………………………………………………………………...4
Актуальность и значение темы………………………………………………..4
Формулировка целей курсового проекта…..…………………………………6
Аналитический обзор игровых приложений…….…………………………...7
Описание процесса разработки………………………………………………..9
Руководство пользователя……………………………………………………15
Заключение……………………………………………………………………20
Список использованных источников………………………………………..21
Приложения…………………………………………………………………...22
Приложение 1…………………………………………………………………22

Содержимое работы - 1 файл

Ilkhom.docx

— 37.82 Кб (Скачать файл)

                    marked[i] = (guess.Text[i] == CurrentPuzzleWord[i]);

                }

            }

        }

 

Если введенное пользователем  слово не существует, то программы  выделяет его серым цветом и пользователь теряет свою попытку.

Если же оно существует, то программы определяет буквы, существующие в загаданном слове, сверяет их с  пользовательской попыткой и решает, какие буквы выделить как правильные. Если буква слова находится на верной позиции, то она выделяется зеленым  цветом (DisplayCorrectLetters()). Если буква пользовательского  слова существует в ключевом слове, но находится на другой позиции –  она будет подсвечена красным (DisplayProblableLetters()). Затем пользователю предоставляется  следующая попытка.

 

if (guess.Text == CurrentPuzzleWord)

{

guess.Text = "Correct!";

for (int i = 0; i < WordLength && currentAttempt < GameState.MaximumAttemptsOver; i++)

{

layout.Controls[currentAttempt * WordLength + i].Text = "";

}

definitionLink.Text = "What's " + CurrentPuzzleWord + "?";

definitionLink.Visible = true;

UpdateScore();

currentAttempt = GameState.ViewingWord;

helpLetterTimer.Stop();

return;

}

 

Если пользователь угадал слово верно, то ему сообщается о  его успехе в текущей игре, и  игра начинается заново.

 

Для более интересной игры введен механизм начисления баллов:

 

private void UpdateScore()

{

score += (GameState.MaximumAttemptsOver - currentAttempt + 1) * 100 + bonusScore;

scoreLabel.Text = string.Format("{0:#,###,###}", score);

bonusTimer.Stop();

messageLabel.Text = null;

}

 

Алгоритм программы выглядит следующим образом:

 

Листинг программы представлен  в приложении 1.

Руководство пользователя

 

Для начала игра необходимо нажать Enter.

 

Вам будет предложено две  случайных открытых буквы ключевого  слова:

 

После нескольких попыток  окно программы будет выглядеть  следующим образом:

 

На предыдущей картинке видно, что правильные буквы выделены зеленым  цветом. Буквы, существующие в исходном слове, но находящиеся не на своих  позициях выделены красным. Если введенное  пользователем слово не существует в словаре – то оно будет  выделено серым цветом. Оранжевым  будет выделена буква-подсказка, если пользователь не смог определить слово  за минуту.

 

При нажатии на клавише Escape текущая игра будет закончена, а  в панели «Your guess» будет показано загаданное слово. Также в низу формы  появится ссылка на сервис со значением  ключевого слова.

 

По нажатию на правую кнопку мыши откроется меню со следующими возможностями:

   * Выбор уровня сложности  – easy, medium и hard

   * Отображение окна  помощи

   * Выход из программы

 

По нажатию на пункт About появится следующее окно:

 

В нем кратко описаны правила  и смысловое значение подсказок.

 

Так же существует возможность  узнать значение слова:

 

По нажатию на ссылку «What’s while» будет открыт интернет-браузер  и открыт сайт со значением данного  слова:

 

Заключение

 

В ходе выполнения данного  курсового проекта мне удалось  реализовать игровую программу. В ней реализованы все функции, которые были описаны в разделе  «Формулировка целей курсового  проекта». А именно:

программный продукт реализовывает  следующие функции возможности:

   * Случайный выбор  ключевого слова из файла

   * Интуитивно понятный  механизм распознавания ошибок  пользователя

   * Учет очков для  данного пользователя 

   * Изменение уровня  сложности

   * Возможность выведения  подсказок при определенных условиях 

   * Возможность узнать  значение данного слова (используя  такие поисковые системы как: google.com или wordnet.princeton.edu)

 

Список использованных источников

Для подготовки курсового  проекта были использованы следующие  материалы:

Троелсен. Э.  С# И Платформа .NET. Библиотека Программиста.

Фаронов В.В. Программирование на языке С#

http://www.esate.ru/page/uroki-OpenGL-c-sharp/

 

Приложения

Приложение 1 (Листинг программы)

Класс MyFadeLabel.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace word_guess

{

    /// <summary>

    /// A label that supports fading transition

    /// between specified back and fore colors

    /// </summary>

    public class MyFadeLabel : Label

    {

        private Color _fadeFromBackColor = DefaultBackColor;

        /// <summary>

        /// The back color from which to start fading from

        /// </summary>

        public Color FadeFromBackColor

        {

            get { return _fadeFromBackColor; }

            set

            {

                _fadeFromBackColor = value;

                BackColor = value;

            }

        }

 

        private Color _fadeFromForeColor = DefaultForeColor;

        /// <summary>

        /// The fore color from which to start fading from

        /// </summary>

        public Color FadeFromForeColor

        {

            get { return _fadeFromForeColor; }

            set

            {

                _fadeFromForeColor = value;

                ForeColor = value;

            }

        }

 

        private Color _fadeToForeColor = DefaultForeColor;

        /// <summary>

        /// The fore color to which the label

        /// should fade to

        /// </summary>

        public Color FadeToForeColor

        {

            get { return _fadeToForeColor; }

            set

            {

                _fadeToForeColor = value;

            }

        }

 

        private Color _fadeToBackColor = DefaultBackColor;

        /// <summary>

        /// The back color to which the label

        /// should fade to

        /// </summary>

        public Color FadeToBackColor

        {

            get { return _fadeToBackColor; }

            set

            {

                _fadeToBackColor = value;

            }

        }

 

        private int _fadeDuration = 2000;

        /// <summary>

        /// The duration over which the fade

        /// effect has to happen

        /// </summary>

        public int FadeDuration

        {

            get { return _fadeDuration; }

            set

            {

                _fadeDuration = value;

            }

        }

 

        private int _maxTransitions = 64;

        /// <summary>

        /// The number of transitions that make up

        /// the fade effect

        /// </summary>

        public int MaxTransitions

        {

            get { return _maxTransitions; }

            set

            {

                _maxTransitions = value;

            }

        }

 

        /// <summary>

        /// The interval for the timer

        /// </summary>

        private int FadeTimerInterval

        {

            get

            {

                int interval = (int)((float)FadeDuration / (float)MaxTransitions);

                return interval == 0 ? 1 : interval;

            }

        }

 

        private Timer FadeTimer = new Timer();

        private int CurrentTransition = 0;

        private delegate void PerformActivityCallback();

        private Color[] BackColorMap;

        private Color[] ForeColorMap;

 

        public MyFadeLabel()

            : base()

        {

            FadeFromBackColor = Label.DefaultBackColor;

            ForeColor = Label.DefaultBackColor;

            FadeTimer.Tick += new EventHandler(fadeTimer_Tick);

        }

 

        /// <summary>

        /// Handles the fade timer tick

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        void fadeTimer_Tick(object sender, EventArgs e)

        {

            if (this.InvokeRequired)

            {

                PerformActivityCallback d = new PerformActivityCallback(FadeControl);

                this.Invoke(d);

            }

            else

            {

                FadeControl();

            }

        }

 

        /// <summary>

        /// Fades the control

        /// </summary>

        private void FadeControl()

        {

            BackColor = BackColorMap[CurrentTransition];

            ForeColor = ForeColorMap[CurrentTransition];

            CurrentTransition++;

 

            // If we are done with the transition

            // stop the timer

            if (CurrentTransition == MaxTransitions)

            {

                FadeTimer.Stop();

            }

        }

 

        /// <summary>

        /// Fades the control between

        /// the fade from and fade to colors specified

        /// </summary>

        public void Fade()

        {

            CreateColorMaps();

            CurrentTransition = 0;

            FadeTimer.Interval = FadeTimerInterval;

            FadeTimer.Start();

        }

 

        /// <summary>

        /// Stops the fading

        /// </summary>

        public void StopFading()

        {

            FadeTimer.Stop();

        }

 

        /// <summary>

        /// Resets the back and fore colors to their

        /// respective fade from colors

        /// </summary>

        public void Reset()

        {

            ForeColor = FadeFromForeColor;

            BackColor = FadeFromBackColor;

        }

 

        /// <summary>

        /// Computes the color maps required during fade

        /// transition

        /// </summary>

        private void CreateColorMaps()

        {

            float aDelta, rDelta, gDelta, bDelta;

            int a, r, g, b;

            BackColorMap = new Color[MaxTransitions];

            ForeColorMap = new Color[MaxTransitions];

 

            // Create the color maps for the back color

            aDelta = (FadeToBackColor.A - FadeFromBackColor.A) / (float)MaxTransitions;

            rDelta = (FadeToBackColor.R - FadeFromBackColor.R) / (float)MaxTransitions;

            gDelta = (FadeToBackColor.G - FadeFromBackColor.G) / (float)MaxTransitions;

            bDelta = (FadeToBackColor.B - FadeFromBackColor.B) / (float)MaxTransitions;

 

            BackColorMap[0] = FadeFromBackColor;

            for (int i = 1; i < MaxTransitions; i++)

            {

                a = (int)(BackColorMap[i - 1].A + aDelta);

                r = (int)(BackColorMap[i - 1].R + rDelta);

                g = (int)(BackColorMap[i - 1].G + gDelta);

                b = (int)(BackColorMap[i - 1].B + bDelta);

 

                if (a < 0 || a > 255) a = FadeToBackColor.A;

                if (r < 0 || r > 255) r = FadeToBackColor.R;

                if (g < 0 || g > 255) g = FadeToBackColor.G;

                if (b < 0 || b > 255) b = FadeToBackColor.B;

 

                BackColorMap[i] = Color.FromArgb(a, r, g, b);

            }

 

            // Create the color maps for the fore color

            aDelta = (FadeToForeColor.A - FadeFromForeColor.A) / (float)MaxTransitions;

            rDelta = (FadeToForeColor.R - FadeFromForeColor.R) / (float)MaxTransitions;

            gDelta = (FadeToForeColor.G - FadeFromForeColor.G) / (float)MaxTransitions;

            bDelta = (FadeToForeColor.B - FadeFromForeColor.B) / (float)MaxTransitions;

            ForeColorMap[0] = FadeFromForeColor;

            for (int i = 1; i < MaxTransitions; i++)

            {

                a = (int)(ForeColorMap[i - 1].A + aDelta);

                r = (int)(ForeColorMap[i - 1].R + rDelta);

                g = (int)(ForeColorMap[i - 1].G + gDelta);

                b = (int)(ForeColorMap[i - 1].B + bDelta);

 

                if (a < 0 || a > 255) a = FadeToForeColor.A;

                if (r < 0 || r > 255) r = FadeToForeColor.R;

                if (g < 0 || g > 255) g = FadeToForeColor.G;

                if (b < 0 || b > 255) b = FadeToForeColor.B;

 

                ForeColorMap[i] = Color.FromArgb(a, r, g, b);

            }

        }

    }

}

 

Класс Guess.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Configuration;

using System.Data;

using System.Drawing;

using System.Text;

using System.IO;

using System.Threading;

using System.Windows.Forms;

using System.Reflection;

using System.Runtime.InteropServices;

using System.Timers;

 

namespace word_guess

{

    /// <summary>

    /// The word guess game form

    /// </summary>

    public partial class WordGuess : Form

    {

 

        #region Properties and fields

 

        #region Word list related

        /// <summary>

        /// The index of the word to guess

        /// </summary>

        private int wordIndex;

 

        /// <summary>

        /// The list of words in the puzzle

        /// </summary>

        private List<string> words = new List<string>();

        #endregion

 

        #region History related

        /// <summary>

        /// The index of the last word added to the hisory list

        /// </summary>

        private int historyIndex;

 

        /// <summary>

        /// The list of words attempted in a game

        /// </summary>

        private List<string> history = new List<string>();

        #endregion

 

        #region UI related

        private Font bold = new Font("Georgia", 12F, FontStyle.Bold);

        private Font regular = new Font("Georgia", 12F, FontStyle.Regular);

        #endregion

 

        #region Scoring related

        /// <summary>

        /// The user's score

        /// </summary>

        int score;

 

        /// <summary>

        /// The timer for the bonus score

        /// </summary>

        System.Timers.Timer bonusTimer = new System.Timers.Timer();

 

        /// <summary>

        /// The bonus score available

        /// </summary>

        int bonusScore;

 

        /// <summary>

        /// Delegate to enable displaying the bonus score

        /// in a thread safe manner

        /// </summary>

        delegate void PerformActivityCallback();

 

        /// <summary>

        /// The maximum possible bonus at a time

        /// </summary>

        const int MaximumBonusScore = 1000;

 

        /// <summary>

        /// The bonus timer interval

        /// </summary>

        const int BonusTimerInterval = 100;

 

        /// <summary>

        /// A color map

        /// </summary>

        Color[] ColorMap = new Color[100];

 

        /// <summary>

        /// Color map index factor used to set

        /// the color of the score

        /// </summary>

        float ColorMapIndexFactor = 0.1F;

 

        #endregion

 

        #region Letter processing related

 

        /// <summary>

        /// The length of a word

        /// </summary>

        private const int WordLength = 5;

 

        /// <summary>

        /// Holds which all letters have been solved so far

        /// </summary>

        private bool[] solved = new bool[WordLength];

 

        /// <summary>

        /// Indicates whether a letter has been accounted for

        /// while highlighting letters in the guess that are not

        /// in the correct position

        /// </summary>

        private bool[] marked = new bool[WordLength];

        #endregion

 

        #region Game state related

 

        /// <summary>

        /// The state of the current attempt

        /// </summary>

        public int currentAttempt;

 

        static class GameState

        {

            /// <summary>

            /// Indicates the last attempt at solving a word

            /// </summary>

            public const int LastAttempt = 4;

 

            /// <summary>

            /// Indicates the first attempt at solving a word

            /// </summary>

            public const int FirstAttempt = 0;

 

            /// <summary>

            /// The maximum number of attempts

            /// </summary>

            public const int MaximumAttemptsOver = 5;

Информация о работе Аналитический обзор игровых приложений