Федеральное агентство железнодорожного транспорта
Омский государственный университет путей сообщения
Кафедра «Автоматика и системы управления»
Программа «СПИЧКИ БЕРГСОНА»
Пояснительная записка к курсовой работе
ИНМВ.400000.000 ПЗ
Студентка гр. 25м
________ А.
«__»________2016 г.
Преподаватель кафедры АиСУ
________ В.
«__»________2016 г.
Омск 2016
Реферат
УДК 681.3.06
Пояснительная записка к курсовой работе содержит 14 страниц, 7 рисунков, 3 использованных источника, 1 приложение.
C, MinGW, NotePad++.
Объектом курсовой работы является игра «Спички Бергсона».
Цель курсовой работы – научиться реализовывать пошаговую игру.
Результатом курсовой работы является рабочая игра «Спички Бергсона».
Игра «Спички Бергсона» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке С. В процессе разработки игры была изучена лексика языка С. Пояснительная записка выполнена в текстовом редакторе MicrosoftWord 2010.
Задание
В ходе выполнения курсовой работы нужно реализовать игру. Все игры являются пошаговыми, с интерфейсом командной строки. Компьютер выводит в текстовом виде информацию о состоянии игры и ходе компьютера. Пользователь делает свой ход, вводя с клавиатуры, нужные данные.
Правила игры «Спички Бергсона».
На столе лежит кучка спичек. При своем ходе игрок может взять спичек не меньше одной и не более чем вдвое больше, чем взял предыдущий игрок. Выигрывает тот, кто берет последнюю спичку.
Содержание
Введение. 5
1 Основная часть. 6
1.1 Функции программы.. 6
1.2 Запуск и ход игры.. 6
Заключение. 10
Библиографический список. 11
Листинг программы.. 12
Введение
Язык программирования С – стандартизированный процедурный язык программирования, разработанный в 1969-1973 годах сотрудниками BellLabs Кеном Томпсоном и Деннисом Ритчи как развитие языка Би. Си был создан для использования в операционной системе UNIX. С тех пор он был перенесен на многие другие операционные системы и стал одним из самых используемых языков программирования. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения.
Целью работы является создание исходного кода игры «Спички Бергсона» на языке C, который бы выполнял свои расчетные функции. Также игра должна отображать своевременно необходимую пользователю информацию.
1 Основная часть
1.1 Функции программы
В коде программы присутствуют две функции: функция логики компьютера pc и основная функция main.
Рассмотрим каждую функцию в отдельности.
Функция логики компьютера.
int pc(int i, int a),
где i – общее количество спичек,
a – то количество спичек, которое взял игрок.
Логика компьютера заключается в том, что компьютер стремится взять треть от общего количества спичек, тем самым обеспечивая себе фору перед соперником.
Главная функция main.
В данной основной функции реализуется меню игры, в котором пользователь может посмотреть правила игры; выбрать игру с компьютером или выбрать игру на два игрока.
Также в этой функции полностью реализована игра с компьютером и комбинация игрок-игрок.
Вводимые числа подвергаются проверке, так называемая «защита от дурака». То есть данная программа исключает ввод любых символов, отрицательных, вещественных чисел, а также чисел, не удовлетворяющих правилам игры.
1.2 Запуск и ход игры
При запуске игры, пользователь видит сообщение о выборе режима игры или о выводе правил игры. Иллюстрацию начала игры можно наблюдать на рисунке 1.

Рисунок 1 – Начало игры
При выборе 1 будет предоставлена игра с компьютером.
При выборе 2 будет предоставлена игра для двоих игроков.
При выборе 3 будут показаны правила игры.
Рассмотрим игру с компьютером.

Рисунок 2 – Игра с компьютером
Общее изначальное количество спичек – 51. Первым ходит игрок. Исходя из правил, можно взять 1 или 2 спички.

Рисунок 3 – Первый ход игрока и последующий ход компьютера
В результате начинается игра. Выигрывает тот, кто взял последнюю спичку.

Рисунок 4 – Завершение игры. Победа компьютера.
Рассмотрим комбинацию игрок-игрок.

Рисунок 5 – Игра с двумя игроками
Игра продолжается до тех пор, пока какой-либо игрок не возьмет последнюю спичку. После этого игра заканчивает свою работу.

Рисунок 6 – Завершение игры
Рассмотрим поведение программы при вводе некорректных значений.

Рисунок 7 – Проверка вводимых значений
Заключение
В ходе выполнения задания на курсовую работу, были углублены знания по многим аспектам языка «Си».
Основная цель работы была выполнена, т. е. была написана пошаговая логическая игра «Спички Бергсона» с псевдографическим интерфейсом.
В результате выполнения курсовой работы разработана программа на языке «Си», в текстовом редакторе «NotePad++», реализующая процесс, описанный в постановке задачи. В ходе написания игры я более подробно изучила этот язык.
В программе реализована возможность игры с компьютером.
В приложении А содержится код программы, содержащий все пояснительные комментарии.
Библиографический список
1 Введение в программирование: Методические указания к лабораторным работам / Е. А. Альтман, А. В. Александров, Н. Г. Ананьева, Н. Е. Актаев; Омский гос. ун-т путей сообщения. Омск, 2011. 31 с.
2 Керниган, Б. Язык программирования СИ: издание 3-е, исправленное / Б. Керниган, Д. Ритчи. СПб.: “Невский Диалект”, 2001. 352 с.
3 СТП ОмГУПС–1.2–2005 . Работы студенческие учебные и выпускные
квалификационные.
Приложение А
(обязательное)
Листинг программы
#include <stdio. h>
#include <stdlib. h>
#include <conio. h>
#include <locale. h>
int pc(int i, int a) { //i - общее колво спичек а-сколько спичек взял игрок
int b = 0;
//ход компьютера
if (i <= 2 * a) {
b=i;
} else {
if (((i - 1) / 3 <= 2 * a) && i > 3) {
b = (i - 1) / 3; //b - сколько спичек взял компьютер
i = i - b;
} else {
b = 2*a;
i = i - b;
}
}
return b;
}
main(){
setlocale(LC_ALL,"rus");
int i = 51;
int b = 1, p, a, f, d, z=0;
while(z<10) {
printf(" 1 - pc\n");
printf(" 2 - человек\n");
printf(" 3 - правила игры\n");
while(scanf("%i", &p) != 1)
{
fflush(stdin);
printf(" Вы должны ввести цифру!\n");
}
if(p==0)
break;
if(p==3){
printf(" ПРАВИЛА\n");
printf(" На столе лежит кучка спичек.\n");
printf( " При своем ходе игрок может взять спичек не меньше одной\n");
printf(" и не более чем вдвое больше, чем взял предыдущий игрок.\n");
1, лист 1
printf (" Побеждает тот, кто берет последнюю спичку.\n");
printf (" Для заверщения игры нажмите 0.\n");
continue; }
if (p == 1) { // pc
while (i > 0) {
printf(" Player ваш ход:\n ");
printf(" На столе лежит %i спичек\n", i);
printf(" Возьмите спички\n");
//защита от ввода символов
while(scanf("%i", &a) != 1) { fflush(stdin);
printf(" Вы должны ввести цифру!\n");
}
if(a==0)//конец игры
break;
if(a>0 && a<=2*b && a<=i){ //проверка нужного числа
i = i - a;
if(i==0){
printf(" Player win");
break;
}
}
else {
printf(" Вы не можете взять столько");
continue;
};
printf(" PC ходит ");
b = pc(i, a);
printf(" PC взял ");
printf("%i",b);
printf(" спичек \n");
i=i-b;
if(i==0){
printf(" PC WIN ");
break;
}
}
z=10;
}
if (p == 2) { //игрок-игрок
while (i > 0) {
for(f=1; i > 0; f++){ //какой игрок ходит
d=f%2;
if(d==0)
d=2;
1, лист 2
printf(" Player %i ваш ход:\n ", d);
printf(" На столе лежит %i спичек\n", i);
printf(" Возьмите спички\n");
while(scanf("%i", &a) != 1)
{ fflush(stdin);
printf(" Вы должны ввести цифру!\n");
}
if(a==0)
break;
if(a>0 && a<=2*b && a<=i){ //проверка нужного числа
i = i - a;
b=a; //b - предыдущий ход
if(i==0){
printf(" Player %i win", d);
break;
}
}
else {
printf(" Вы не можете взять столько");
f=f-1; //если ввели некорректное значение, ходит тот же игрок
continue;
}
}
}
z=10;
}else
printf("Введите коректное значение");
}
}
1, лист 3
Основные порталы (построено редакторами)
