Написание логической игры "Спички Бергсона"
Применение в коде программы специального типа данных PlayerT для разграничения ходов игрока и компьютера. Создание логической игры "Спички Бергсона" с псевдографическим интерфейсом. Разработка программы на языке "Си" в текстовом редакторе "Sublime Text".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.02.2019 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное агентство железнодорожного транспорта
федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Омский государственный университет путей сообщения»
(ОмГУПС (ОмИИТ))
Пояснительная записка
ПРОГРАММА «СПИЧКИ БЕРСГОНА»
Студент
Ильин А. В.
Омск 2016
Реферат
УДК 681.3.06
Пояснительная записка к курсовой работе содержит 12 страниц, 3 рисунка, 4 использованных источника, приложение А.
Объектом исследования является игра «Спички Бергсона».
Цель курсовой работы - систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических и лабораторных занятиях.
Игра «Спички Бергсона» разработана с использованием компилятора GCC. Исходный текст программы написан на языке «Си».
В процессе разработки игры была изучена лексика языка «Си».
Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2016.
Задание
В ходе выполнения курсовой работы нужно реализовать игру. Все игры являются пошаговыми, с интерфейсом командной строки. Компьютер выводит в текстовом виде информацию о состоянии игры и ходе пользователя. Пользователь делает свой ход, вводя с клавиатуры нужные данные.
На столе лежит кучка спичек. При своем ходе игрок может взять спичек не меньше одной и не более чем вдвое больше, чем взял предыдущий игрок. Выигрывает тот, кто берет последнюю спичку.
Введение
Курсовая работа написана на языке «Cи», компилируемом, статически типизированном языке программирования общего назначения. В ней реализована задача игры «Спички Бергсона». «Cи» - стандартизированный процедурный язык программирования.
Язык «Cи» был разработан в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как наследник языка «B».
«Cи» был создан для использования в операционной системе UNIX, в том числе и для написания ядра системы. С тех пор он был портирован на многие другие операционные системы и стал одним из самых широко используемых языков программирования.
В 1978 году была опубликована книга «Язык программирования Cи» Ритчи и Кернигана; описанный в ней язык стал неформальным стандартом языка, известным как K&R «Cи».
Первый официальный стандарт языка был создан в 1989 году ANSI X3.159-1989 и в следующем году с незначительными изменениями принят как ISO/IEC 9899:1990; он известен как ANSI C. Следующими стандартами стали ISO 9899:1999 (C99) и ISO/IEC 9899:2011 (C11).
«Cи» ценят за его эффективность; он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ.
Особенности языка:
- минимальное количество ключевых слов;
- большинство возможностей языка вынесено в библиотеки; использование препроцессора для определения макросов, включения исходных кодов других файлов и условной компиляции;
- статическая слабая типизация: у всех данных есть фиксированные типы, но неявные преобразования разрешены;
- разрешено определение пользовательских типов и составных типов;
- предоставляется низкоуровневый доступ к памяти (через преобразование машинных адресов в типизированные указатели);
- процедуры являются частным случаем функции, возвращающей специальный тип «void»;
- файлы можно компилировать отдельно и линковать друг с другом, контролируя видимость функций и данных ключевыми словами «static» и «extern».
Написанная игра является пошаговой, игрок вводит данные с клавиатуры, а компьютер выводит на экран результаты его хода.
1. Основная часть
В коде программы используется специальный тип данных PlayerT, для разграничения ходов игрока и компьютера, и ряд функций, такие как:
void winnerIs(int nMatches, playerT whoseTurn) - объявляет выигрыш игрока или компьютера.
int userMove(int nMatches) - обрабатывает ходы игрока.
bool isthisLegal(int nTaken, int nMatches) - проверяет ходы на соответсвие правилам игры, запрещает игроку взять больше спичек чем требуется.
int aiMove (int nMatches) - обрабатывает ходы компьютера.
int goodMove(int nMatches) - вместе с функцией bool isbadPosition(int nMatches) ищет наиболее выгодный ход для компьютера. Компьютер старается взять столько спичек, сколько потребуется для того, чтобы поставить пользователя в невыгодное положение на следующем ходу.
При запуске игры, пользователь видит приветствие, объясняющие ему правила игры, и предложение выбрать количество спичек, которые будут разыгрываться. Принимаются любые значения, в случае если игрок введет ноль программа автоматически завершит свою работу.
Рисунок 1 - Начало игры
После того, как пользователь выбрал количество спичек, начинается игра. Игрок всегда ходит первым.
Рисунок 2 - Игровое поле
Игра будет продолжаться до тех пор, пока кто-то не возьмет последнюю спичку.
Рисунок 3 - Поражение
Текущие правила поведения компьютерного соперника делают победу игрока маловероятной, хотя все же возможной.
Заключение
В ходе выполнения задания на курсовую работу, были углублены знания по многим аспектам языка «Си».
Основная цель работы была выполнена, т.е. была написана пошаговая логическая игра «Спички Бергсона» с псевдографическим интерфейсом.
В результате выполнения курсовой работы разработана программа на языке «Си», в текстовом редакторе «Sublime Text», реализующая процесс, описанный в постановке задачи. В ходе написания игры был более подробно изучен язык. игра псевдографический интерфейс редактор
В программе реализована возможность игры с компьютером, ходы компьютера исходят из уже имеющихся данных и анализа количества оставшихся спичек.
Считаю, что поставленная задача решена в полном объеме.
В приложении А содержится код программы, содержащий все пояснительные комментарии.
Библиографический список
1. Введение в программирование: Методические указания к лабораторным работам / Е. А. Альтман, А. В. Александров, Н. Г. Ананьева, Н. Е. Актаев; Омский гос. ун-т путей сообщения. Омск, 2011. 31 с.
2. Керниган. Б., Ритчи Д., Язык программирования «Си». 2-е издание , 2012.-304 с.
3. СТП ОмГУПС-1.2-2005
4. СТП ОмГУПС-1.2-02
5. Гpиффитс, Артур. GCC: Настольная книга пользователей, программистов и системных администраторов.: Пер. с анrл./Артур Гриффитс. К.: ООО «ТИД «ДС», 2004. 624 с.
Приложение
Листинг программы
#include <stdio.h>
#include <stdbool.h>
#define NoGoodMove -1 //константа для ситуации «плохого хода»
int iniMatches=0; //начальное колличество спичек, не задано
int MaxTake =1; //начальное кол-во спичек, которые можно взять
typedef enum { Human, Computer } playerT; //различаем ходы человека и компьютера
static void winnerIs(int nMatches, playerT whoseTurn); //прототипы функции
static int userMove(int nMatches);
static bool isthisLegal(int nTaken, int nMatches);
static int aiMove(int nMatches);
static int goodMove(int nMatches);
static bool isbadPosition(int nMatches);
int main()
{
int nMatches, nTaken;
playerT whoseTurn;
printf("Привет, добро пожаловать в игру Спички Бергсона.\n");
printf("В этой игре каждый игрок поочередно берет спички из общей кучи\n");
printf("Не меньше одной и не больше, чем взял другой игрок");
printf("Тот, кто возьмет последнюю - побеждает");
printf("А сейчас выберете начальное колличество спичек\n" );
scanf("%i",&iniMatches);
nMatches = iniMatches;
whoseTurn = Human;
while (nMatches > 1) {
printf("Сейчас у нас %d спичек.\n", nMatches);
switch (whoseTurn) {
case Human:
nTaken = userMove(nMatches);
MaxTake=2*nTaken;
whoseTurn = Computer;
break;
case Computer:
nTaken = aiMove(nMatches);
printf("Я возьму %d.\n", nTaken);
MaxTake=2*nTaken;
whoseTurn = Human;
break;
}
nMatches -= nTaken;
}
winnerIs(nMatches, whoseTurn);
}
static void winnerIs(int nMatches, playerT whoseTurn)
{
if (nMatches == 0) {
switch (whoseTurn) {
printf(«Спичек не осталось. Победа»)
}
} else {
printf("Осталась лишь одна спичка.\n");
switch (whoseTurn) {
case Human: printf("Я проиграл.\n"); break;
case Computer: printf("Я победил.\n"); break;
}
}
}
static int userMove(int nMatches)
{
int nTaken, limit;
while (true) {
printf("Сколько спичек надо взять?");
scanf("%i",&nTaken);
if (isthisLegal(nTaken, nMatches)) break;
limit = (nMatches < MaxTake) ? nMatches : MaxTake;
printf("Это неверный ход! Возьмите");
printf(" между 1 и %d спичками\n", limit);
printf("Осталось %d спичек.\n", nMatches);
}
return (nTaken);
}
Листинг А1, лист 1
static bool isthisLegal(int nTaken, int nMatches)
{
return (nTaken > 0 && nTaken <= MaxTake && nTaken <= nMatches);
}
static int aiMove(int nMatches)
{
int nTaken;
nTaken = goodMove(nMatches);
if (nTaken == NoGoodMove) nTaken = 1;
return (nTaken);
}
static int goodMove(int nMatches)
{
int nTaken;
for (nTaken = 1; nTaken <= MaxTake; nTaken++) {
if (isbadPosition(nMatches - nTaken)) return (nTaken);
}
return (NoGoodMove);
}
static bool isbadPosition(int nMatches)
{
if (((nMatches%2==1)&&!(nMatches<=3))||(nMatches<=0)) return (true); //смысл в том, чтобы поставить игрока в неудобную позицию, хотя я уверен что алгоритм не идеален
return (goodMove(nMatches) == NoGoodMove);
}
Размещено на Allbest.ru
...Подобные документы
Разработка программы "Сапер", удовлетворяющей необходимым требованиям эффективности в интегрированной среде программирования Microsoft Visual C++. Специфика создания Windows-приложений. Применение логической игры для развития интереса к обучению у детей.
курсовая работа [511,1 K], добавлен 01.06.2013Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.
курсовая работа [821,5 K], добавлен 13.02.2012Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.
курсовая работа [742,6 K], добавлен 03.07.2011Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.
курсовая работа [1,1 M], добавлен 17.10.2012Назначение и область применения, технические характеристики, постановка задачи, описание алгоритма и организация входных и выходных данных для программы. Разработка, описание логической структуры, используемые технические средства и условия выполнения.
курсовая работа [969,3 K], добавлен 26.03.2009Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.
курсовая работа [236,5 K], добавлен 27.01.2014Исследование общих правил игры в шашки, инструкции пользователя и программиста. Характеристика основных алгоритмов, исполняющих задачи класса Life Widget. Оценка ходов компьютера и человека. Построение дерева поиска лучшего хода исходя из оценки функций.
контрольная работа [1,3 M], добавлен 20.12.2012Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.
курсовая работа [22,6 K], добавлен 10.06.2010Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.
курсовая работа [12,4 K], добавлен 18.06.2008Создание программы "компьютерная игра "баскетбол", с упрощенным изображением баскетбольного щита и игрока, с возможностью изменять положение игрока, направление броска и его силу. Построение алгоритма, описание процедур и функций, таблица идентификаторов.
дипломная работа [72,7 K], добавлен 29.11.2011Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.
курсовая работа [225,0 K], добавлен 12.04.2012Создание программы для обработки информации об объектах предметной области "Бытовая техника" в среде визуального программирования C++. Иерархия родственных классов. Описание логической структуры программы. Реализация файлового ввода/вывода данных.
курсовая работа [711,4 K], добавлен 27.07.2014Разработка программы, моделирующей игру "Кости". Использование в программе генератора псевдослучайных чисел. Схема иерархии модулей. Описание работы программы. Регистрация игрока, окно программы. Определение языка программирования, основные операторы.
курсовая работа [3,2 M], добавлен 29.07.2010Игровая программа "шашки" для игры между человеком и компьютером. Разработка алгоритмов, историческая линия развития задач. Различные подходы к построению систем. Сокращенный листинг программы и описание алгоритма. Компоненты искусственного интеллекта.
курсовая работа [196,2 K], добавлен 26.03.2009Создание библиотеки классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат. Упрощённая структура библиотек, взаимодействие классов и объектов, основные алгоритмы.
курсовая работа [37,5 K], добавлен 15.08.2012Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.
курсовая работа [90,0 K], добавлен 01.12.2009Создание приложения для регистрации оружия для отдела лицензионно-разрешительных работ УВД по Ставрополю. Написание программы в среде Microsoft Visual Studio. Разработка логической, физической и датологической модели базы данных информационной подсистемы.
дипломная работа [5,3 M], добавлен 24.06.2011Многообразие мини-игр и возможности языка Visual basic 6.0 для их реализации. Понятие мини-игр и их классификация. Элементы управления мини-игры "Реверси". Разработка прикладной программы. Создание игрового интерфейса. Написание программного кода.
курсовая работа [1,5 M], добавлен 03.06.2014