Программа "Спички Берсгона"
Анализ методов систематизации, углубления и активного применения знаний по системному программированию. Характеристика методики написания пошаговой логической игры "Спички Берсгона" с псевдографическим интерфейсом на языке Си. Описание листинга программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.02.2019 |
Размер файла | 710,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПУТЕЙ СООБЩЕНИЯ» (ОМГУПС (ОМИИТ))
Программа «СПИЧКИ БЕРСГОНА»
Пояснительная записка к курсовой работе
ИНМВ.400000.000 ПЗ
Студент гр. 25м
________ Ильин А. В.
21.04.2014
Руководитель - доцент кафедры АиСУ
________ Александров А. В.
«__»________2014 г.
Омск 2016
Реферат
Пояснительная записка к курсовой работе содержит 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».
Написанная игра является пошаговой, игрок вводит данные с клавиатуры, а компьютер выводит на экран результаты его хода.
Основная часть
В коде программы используется специальный тип данных 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
Подобные документы
Проектирование программы в среде Delphi для тестирования знаний студентов по программированию, с выводом оценки по окончанию тестирования. Разработка экранных форм и алгоритма программы. Описание программных модулей. Алгоритм процедуры BitBtn1Click.
курсовая работа [365,0 K], добавлен 18.05.2013Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.
курсовая работа [821,5 K], добавлен 13.02.2012Процесс и порядок написания программы, реализующей графическое решение логической задачи (игры). Обзор аналогичных продуктов. Описание и алгоритм решения задачи. Структура программы, ее процедуры и функции. Настройка и руководство для пользователя.
курсовая работа [35,7 K], добавлен 29.06.2010Создание библиотеки классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат. Упрощённая структура библиотек, взаимодействие классов и объектов, основные алгоритмы.
курсовая работа [37,5 K], добавлен 15.08.2012Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.
курсовая работа [506,5 K], добавлен 21.02.2011Назначение и область применения, технические характеристики, постановка задачи, описание алгоритма и организация входных и выходных данных для программы. Разработка, описание логической структуры, используемые технические средства и условия выполнения.
курсовая работа [969,3 K], добавлен 26.03.2009Освоение технологии структурного программирования и применения стандартных методов работы с одномерными массивами при разработке и создании программы на языке Турбо Паскаль. Разработка программы методом пошаговой детализации с помощью псевдокода.
реферат [276,9 K], добавлен 27.02.2008Выбор режимов адресации, посредством которых будет осуществлен доступ к данным. Этапы создания программы. Характеристика таблицы символов и полученного файла листинга. Анализ изменения состояния регистра IP при выполнении команд JMP, Jcc, LOOPx.
курсовая работа [4,9 M], добавлен 25.03.2012Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Разработка программы "Сапер", удовлетворяющей необходимым требованиям эффективности в интегрированной среде программирования Microsoft Visual C++. Специфика создания Windows-приложений. Применение логической игры для развития интереса к обучению у детей.
курсовая работа [511,1 K], добавлен 01.06.2013