Игра "Сапер"
Рассмотрение основных особенностей языка программирования С, анализ преимуществ и возможностей. Общая характеристика ключевых этапов создания игры "Сапер", написанной на языке высокого уровня С. Знакомство с функциями библиотек stdio.h, conio.h, time.h.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.02.2019 |
Размер файла | 781,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Курсовая работа является примером реализации задачи об игре «Сапер», написанной на языке высокого уровня С.
Особенность языка С заключается в том, что будучи языком высокого уровня, он сохранил многие черты языка низкого уровня. Язык С расположен между языками высокого уровня и языками низкого уровня, и в этом его сильные и одновременно слабые стороны.
Как и язык ассемблера (язык низкого уровня), язык программирования С может непосредственно управлять памятью компьютера. С другой стороны, С обладает чертами языков высокого уровня, поэтому программы на языке С читать и создавать легче, чем программы на языке ассемблера. Язык С является очень удобным для написания системных программ, но в программах на языке С для иных целей зачастую трудней разобраться, нежели в программах, написанных на других языках. Язык С также имеет меньше возможностей для автоматической проверки программ, чем некоторые друге языки высокого уровня.
1.Основная часть
игра библиотека язык
При запуске игры, пользователь видит игровое поле. Иллюстрацию игры можно наблюдать на рисунке 1.
Рисунок 1. Игровое поле
Суть игры заключается в том, что игрок не должен попасть на мину. Поле продемонстрировано на рисунке 2.
Рисунок 2. Попадание в мину
Игрок ходит до тех пор, пока откроет все поле. Положение символов на игровом поле после открытия всего поля продемонстрировано на рисунке 3.
Рисунок 3. Победа
Игрок ввел координату: А0, пример на рисунке 4.
Рисунок 4. Координата: A0
Положение символов после ввода координаты А0.Поле продемонстрировано на рисунке 5.
Рисунок 5. Игровое поле после ввода в координаты А0
Заключение
В ходе курсовой работы была реализована игра «Сапер». В ней игрок пытается не попасть на мину. В случае, если игрок попадает на мину, то он проигрывает.
Программа была написана на языке программирования С в текстовом редакторе «Notepad++». Игра разработана с помощью компилятора «MinGW».
В программе были использованы функции библиотек stdio.h, conio.h, time.h, а также возможности синтаксиса языка С.
Библиографический список
1. Керниган, Б. Язык программирования Си / Б.Керниган, Д. Ритчи Издание 3-е, исправленное. Перевод с английского под редакцией Вс. С. Штаркмана. Невский Диалект, СПб: 2001.
2. Страуструп, Б. Язык программирования С++ Второе дополненное издание
3. Павловская, Т.А. С и С++ структурное программирование / Т.А.Павловская, Ю.А.Щупак. Питер, СПб: 2003.
Приложение А
Листинг программы
#include <stdio.h>
#include <time.h>
#include <conio.h>
#define N 10
#define M 10
#define true 1
#define false 0
int matrix[N][N];
int open[N][N];
// проверяет ячейку на мину, выход за пределы возвращает false
int mine(int i, int j)
{
if((i>=0) && (i<N))
{
if((j>=0) && (j<N))
{
if(matrix[i][j]==-1)
return true;
}
}
Листинг А 1, лист 1
return false;
}
// проверяет ячейку на пустоту (true), выход за пределы массива возвращает false
int empty(int i, int j)
{
if((i>=0) && (i<N))
{
if((j>=0) && (j<N))
{
if(matrix[i][j]==0)
return true;
}
}
return false;
}
// рекурсивная функция, которая открывает поля в точке попадания
void clean(int i,int j)
{
// проверим на выход за пределы массива
if((i>=0) && (i<N))
{
Листинг А 1, лист 2
if((j>=0) && (j<N))
{
// проверим, не было ли открыто поле раньше
if(!open[i][j])
{
// откроем
open[i][j]=true;
// если поле пустое (=0), просто пооткрываем всех его соседей
if(matrix[i][j]==0)
{
clean(i-1,j-1);
clean(i-1,j);
clean(i-1,j+1);
clean(i,j-1);
clean(i,j+1);
clean(i+1,j-1);
clean(i+1,j);
clean(i+1,j+1);
}
// если не пустое (!=0) открываем только пустых (=0) соседей
Листинг А 1, лист 3
else
{
if(empty(i-1,j-1)) clean(i-1,j-1);
if(empty(i-1,j)) clean(i-1,j);
if(empty(i-1,j+1)) clean(i-1,j+1);
if(empty(i,j-1)) clean(i,j-1);
if(empty(i,j+1)) clean(i,j+1);
if(empty(i+1,j-1)) clean(i+1,j-1);
if(empty(i+1,j)) clean(i+1,j);
if(empty(i+1,j+1)) clean(i+1,j+1);
}
}
}
}
}
// рисует минное поле с учетом открытых и закрытых полей и вспомогательные оси
void draw_matrix()
int x, y;
system("color 0F");
printf(" |A|B|C|D|E|F|G|H|I|J|\n");
Листинг А 1, лист 4
for(x=0; x<N; x++)
{
printf("%i|", x);
for(y=0; y<N; y++)
{
if(open[x][y])
{
if(matrix[x][y]==-1) printf("*|");
else if(matrix[x][y]==0) printf("-|");
else printf("%i|", matrix[x][y]);
}
else{
printf("#|");
}
}
printf("\n");
}
}
Листинг А 1, лист 5
void fin(int loser)
{
system("cls");
draw_matrix();
if(loser)
{
printf("\n\n");
printf("Игра окончена!!!");
}
else
{
printf("\n\n");
printf("Победил!!!");
}
printf("\n\n\n\n");
getch();
}
// в случае проигрыша эта функция откроет все мины
void openmines()
{
int i, j;
for(i=0; i<N; i++)
{
Листинг А 1, лист 6
for(j=0; j<N; j++)
{
if(matrix[i][j]==-1)
open[i][j]=true;
}
}
}
// проверяет, все ли поле открыто, кроме мин (таково условие победы)
int checkwin()
{
int x, y;
for(x=0; x<N; x++)
{
for(y=0; y<N; y++)
{
if((matrix[x][y]!=-1) && (!open[x][y]))
return false;
}
}
return true;
}
Листинг А 1, лист 7
int main()
{
int x,c,i,j,k=0;
char s[3];
// инициализация
srand((int)time(NULL));
//все чистим
for(c=0; c<100; c++)
{
matrix[c/10][c%10]=false;
open[c/10][c%10]=false;
}
//заполняем массив поля минами
for(c=0; c<M; c++)
{
do
{
i=rand()%N;
j=rand()%N;
}
while(matrix[i][j]!=0);
matrix[i][j]=-1;
}
Листинг А 1, лист 8
//заполняем массив поля цифрами
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(matrix[i][j]!=-1)
{
k=0;
if(mine(i-1,j-1)) k++;
if(mine(i-1,j)) k++;
if(mine(i-1,j+1)) k++;
if(mine(i,j-1)) k++;
if(mine(i,j+1)) k++;
if(mine(i+1,j-1)) k++;
if(mine(i+1,j)) k++;
if(mine(i+1,j+1)) k++;
matrix[i][j]=k;
}
}
}
Листинг А 1, лист 9
//главный игровой цикл
while(true)
{
//чистим экран от старого рисунка
system("cls");
//рисуем поле
draw_matrix();
printf("\n");
//запрашиваем координаты удара
printf("Введите координаты удара. Пример: A0 ");
scanf("%s",&s);
//переводим координаты в цифровой вид
if((s[0]>=65) && (s[0]<=74))
j=s[0]-65; // буква в промежутке от A до J
else
if((s[0]>=97) && (s[0]<=106))
j=s[0]-97; // буква в промежутке от a до j
else
continue; // если введены неверные значения, возврат в начало цикла
if((s[1]>=48)&&(s[1]<=57))
i=s[1]-48;
else
continue;
Листинг А 1, лист 10
//далее проверяем все восемь окрестных полей на пустые клетки
//и если надо показываем некий кусок поля (ну, много пустых клеток, например)
clean(i,j);
if(mine(i,j))
{
openmines();
fin(true);
break;
} // программа покидает цикл в случае проигрыша
if(checkwin())
{
fin(false);
break;
} // или победы
}
}
Листинг А 1, лист 11
Размещено на Allbest.ru
Подобные документы
Разработка программы "Сапер", удовлетворяющей необходимым требованиям эффективности в интегрированной среде программирования Microsoft Visual C++. Специфика создания Windows-приложений. Применение логической игры для развития интереса к обучению у детей.
курсовая работа [511,1 K], добавлен 01.06.2013Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.
курсовая работа [1,1 M], добавлен 17.10.2012Выбор языка и среды программирования, его обоснование. Методика и этапы реализации заданной игрой программными средствами. Принципы разработки пояснительной записки для описания функциональных возможностей разработанного программного приложения.
курсовая работа [354,8 K], добавлен 02.03.2014Основные подходы при создании Windows приложений. Изучение навыков работы с 2D графикой в Windows приложениях. Методы генерации псевдослучайных чисел. Разработка игры "Сапер" с расположением мин на основе нескольких методов генерации случайных чисел.
курсовая работа [63,2 K], добавлен 18.02.2009Рассмотрение основных этапов создания приложения "Записная книжка", основное предназначение. Анализ способов выбора среды программирования. Знакомство с элементом управления Data Grid View. Общая характеристика методов конструкции языка программирования.
контрольная работа [1002,4 K], добавлен 21.06.2014Транслятор как программа или техническое средство, выполняющее трансляцию программы. Рассмотрение основных особенностей постройки лексического анализатора. Знакомство с этапами разработки транслятора с ограниченного подмножества языка высокого уровня.
курсовая работа [580,5 K], добавлен 06.08.2013Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.
курсовая работа [799,4 K], добавлен 13.06.2013Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
курсовая работа [381,7 K], добавлен 10.05.2018Исследование классификации компьютерных игр, двигателей прогресса индустрии для персональных компьютеров. Характеристика общей структуры, протокола и текста программы, сценария и процесса игры. Изучение алгоритмизации и программирования на языке Паскаль.
реферат [2,1 M], добавлен 16.09.2011Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016