Автор работы: Пользователь скрыл имя, 16 Мая 2013 в 09:07, курсовая работа
Аргументы против игр просты: они отнимают у человека время, развивают в нем агрессивные инстинкты, притупляют воображение, служат причиной сотен болезней, начиная от близорукости и кончая воспалением мозга... И вообще — плохо это и все! А немногочисленные либералы относятся к играм как к возрастной болезни — мол, со временем пройдет... И действительно, у некоторых проходит.
Введение………………………………………………………………………...4
Актуальность и значение темы………………………………………………..4
Формулировка целей курсового проекта…..…………………………………6
Аналитический обзор игровых приложений…….…………………………...7
Описание процесса разработки………………………………………………..9
Руководство пользователя……………………………………………………15
Заключение……………………………………………………………………20
Список использованных источников………………………………………..21
Приложения…………………………………………………………………...22
Приложение 1…………………………………………………………………22
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» будет открыт интернет-браузер и открыт сайт со значением данного слова:
Заключение
В ходе выполнения данного курсового проекта мне удалось реализовать игровую программу. В ней реализованы все функции, которые были описаны в разделе «Формулировка целей курсового проекта». А именно:
программный продукт реализовывает следующие функции возможности:
* Случайный выбор ключевого слова из файла
* Интуитивно понятный механизм распознавания ошибок пользователя
* Учет очков для данного пользователя
* Изменение уровня сложности
* Возможность выведения
подсказок при определенных
* Возможность узнать
значение данного слова (
Список использованных источников
Для подготовки курсового проекта были использованы следующие материалы:
Троелсен. Э. С# И Платформа .NET. Библиотека Программиста.
Фаронов В.В. Программирование на языке С#
http://www.esate.ru/page/
Приложения
Приложение 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(
this.Invoke(d);
}
else
{
FadeControl();
}
}
/// <summary>
/// Fades the control
/// </summary>
private void FadeControl()
{
BackColor = BackColorMap[
ForeColor = ForeColorMap[
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.
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;