48619 (Разработка приложения, представляющего собой компьютерную игру "Змейка"), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Разработка приложения, представляющего собой компьютерную игру "Змейка"", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48619"

Текст 2 страницы из документа "48619"

y = rand() % 19+3; //кординаты яблока

3.проверяем объект-яблоко,попало ли оно на объект-змейку.

4. Если попало->break;

5.Если все нормально,запоминаем позицию объекта-яблоко

6.переносим курсор в эту позицию

7.присваиваем цвет объкту-яблоко

8.рисуем объект-яблоко-> символом 4(5,6)

printf("%c", 6); //рисуем яблоко каким хотим символом

// Функция старта змейки ее координат и скорости

void skorostGame(Game &g){}

1.задаем точки-размер объека-змейка

2.когда создали-запоминам позицию

3.задаем скорость передвижения объекта-змейки

4.рисуем объект-яблоко

//Функция которая двигает и рисует

int Move(Game &g){}

1.вводим координаты головы объекта- змейка

2. вводим координаты хвоста объекта- змейка

3.проверяем следующую точку по направлению.

4.проверяем объект-змейка и объект- стенка, не наехал ли объект-змейка на объект-стенка

-если да-то выход

-если нет, то продолжаем

5.проверяем объект-змейка саму на себя ,не наехали на себя

-если да – то конец

-если нет – то продолжаем

6.при создании объекта- змейка перекомпилируем змейку путем увеличения ее длины на одну точку

7.появляется новый массив, больший на 1-цу

8.при съедании объекта-яблока -закрашиваем его в цвет змейки

9.закрашиваем хвостик змеи в зеленый цвет

10.закрашиваем курсор в белый цвет(голова змейки)

Цвета.

Экранные объекты можно закрашивать разными цветами .В объекте могут присутствовать два цвета- внутренний и цвет контура.

Цвета кодируются цифрами:

enum ConsoleColor

{

Pink = 0,

Blue = 1,

Green = 2,

Cyan = 3,

Red = 4,

Magenta = 5,

Brown = 6,

LightGray = 7,

DarkGray = 8,

LightBlue = 9,

LightGreen = 10,

LightCyan = 11,

LightRed = 12,

LightMagenta = 13,

Yellow = 14,

White = 15

Если значение кода задать большим 7,будет использован остаток от его деления на 7.

При создании экранных объектов по умолчанию происходит следующее:

-информационные рамки располагаются вертикально друг под другом в правой части экрана, остальные объекты размещаются в точке с координатами(0,0)

-все объекты создаются белыми с черным контуром.

Структуры:

struct Zmeja // структура змейка

{ COORD *t; //точки

int PCount; //количество яблок

};

enum uprawlenie{LEFT,UP,RIGHT,DOWN}; //направление змейки

struct Game //даные-точности: змейки, яблок, передвижение по X и Y, задержка, направление

{

Zmeja gaduka; //змейка

COORD jabloko; //яблоко

int dx,dy, //передвижение

pause; //задержка

int nap; //направление

};

Сообщения.

функция

координаты

сообщения

Void Level()

GotoXY(10,10)

GotoXY(10,11)

<<"Wu nikogda ne wuigraete "<

<<"eslu ne bydete bdutelnu!!!"<

Void ZmejaStart()

GotoXY(10,15)

<<"Soberite 75 Jablok "<

Void STENA_2()

GotoXY(20,0)

GotoXY(64,2)

GotoXY(64,3)

GotoXY(64,4)

GotoXY(64,5)

GotoXY(64,7)

GotoXY(64,8)

GotoXY(64,9)

GotoXY(64,10)

GotoXY(64,11)

GotoXY(64,13)

GotoXY(64,14)

GotoXY(64,15)

GotoXY(64,16)

GotoXY(2,2)-(2,23)

GotoXY(61,3)-(61,23)

<< "Igra \"Zmejka\" Maiko Ekaterini" <

<< "Danue:" << endl ;

<< "Jablok:0" << endl ;

<< "Dlina:3"<< endl;

<< "Speed:0" << endl;

<< "Uprawlenie:" << endl;

<< "Esc:Wuxod" << endl;

<< "P:Pause" << endl;

<<"S:Start" << endl;

<<"L:Level" << endl;

<<":Wwerx"<

<<":Wniz"<

<<":Wlewo"<

<<":Wprawo"<

printf("*");

printf("*");

Void main()

GotoXY(15,1)

GotoXY(15,6)

GotoXY(15,7)

GotoXY(23,1)

<< "Wu wuigrali(maladec!!!)" << endl;

printf( "\n\t\t\t" );

printf( "\n\t\t\t" );

printf("Wu proigrali(xa-xa-xa!!!)\n\n\t\t\t");

Входные параметры:

1.установка позиции курсора х,у;

void GotoXY(int X, int Y)

{

COORD coord = { X, Y };

SetConsoleCursorPosition(hStdOut, coord);

}

2. Структура объекта – змейка

struct Zmeja // структура змейка

{

COORD *t; //точки

int PCount; //количество яблок

};

3. даные-точности: змейки, яблок, передвижение по X и Y

struct Game задержка, направление

{

Zmeja gaduka; //змейка

COORD jabloko; //яблоко

int dx,dy, //передвижение

pause; //задержка

int nap; //направление

};

Выходные параметры:

1.Если выиграл

GotoXY(15,1); cout << "Wu wuigrali(maladec!!!)" << endl;

GotoXY(15,6);printf( "\n\t\t\t" );

GotoXY(15,7);printf( "\n\t\t\t" );

getch();

getch();

getch();

getch();

getch();

return;

2.Если проиграл

case KONEC:

GotoXY(23,1); printf("Wu proigrali(xa-xa-xa!!!)\n\n\t\t\t");

getch();

return;

break;

5.Исходный текст программы С++

Разработка приложения, представляющего собой компьютерную игру «Змейка».

#include //стандартная библиотека

#include //случайные числа

#include //для printf

#include // для HANDLE, курсора, цвета

#include //для kbhit

#include

#include

#include

#include

#include

#include "stdafx.h"

#include // Описания математических функций

#include // Описания функций malloc и free

using namespace std;

HANDLE hConsole;

//HANDLE hStdout, hStdin;

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

void GotoXY(int X, int Y)

{

COORD coord = { X, Y };

SetConsoleCursorPosition(hStdOut, coord);

}

//Цвет

enum ConsoleColor

{

Pink = 0,

Blue = 1,

Green = 2,

Cyan = 3,

Red = 4,

Magenta = 5,

Brown = 6,

LightGray = 7,

DarkGray = 8,

LightBlue = 9,

LightGreen = 10,

LightCyan = 11,

LightRed = 12,

LightMagenta = 13,

Yellow = 14,

White = 15

};

void SetColor(ConsoleColor text, ConsoleColor background)

{

SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

struct Zmeja // структура змейка

{

COORD *t; //точки

int PCount; //количество яблок

};

enum uprawlenie{LEFT,UP,RIGHT,DOWN}; //направление змейки

struct Game //даные-точности: змейки, яблок, передвижение по X и Y, задержка, направление

{

Zmeja gaduka; //змейка

COORD jabloko; //яблоко

int dx,dy, //передвижение

pause; //задержка

int nap; //направление

};

//Функция разброски яблок

void PlusJabloko(Game &g)

{

int i,x,y;

int n = g.gaduka.PCount;

do

{

x = rand() % 56+3; //

y = rand() % 19+3; //кординаты яблока

for(i = 0; i < n; i++)

{

if(x == g.gaduka.t[i].X && y == g.gaduka.t[i].Y) // проверка чтоб яблоко не бросить на змею

break;

}

}

while(i < n);

g.jabloko.X = x; //

g.jabloko.Y = y; //запоминаем позицию яблока

SetConsoleCursorPosition(hConsole, g.jabloko); //переносим курсор в эту позицию

SetConsoleTextAttribute(hConsole,0x0c); //цвет яблока

printf("%c", 6); //рисуем яблоко каким хотим символом

}

// Функцыя старта змейки ее координат и скорости

void skorostGame(Game &g)

{

system("cls");

g.gaduka.PCount = 3; //сколько точек в змейки

g.gaduka.t = new COORD [3];//создали точки

for(int i = 0; i < 3; i++)

{

g.gaduka.t[i].X = 20 + i;

g.gaduka.t[i].Y = 20;

}

g.dx = 1;

g.dy = 0;

g.pause = 100;//скорость передвижение змеи

PlusJabloko(g);//рисуем яблока

}

void Level()

{

GotoXY(10,10);cout <<"Wu nikogda ne wuigraete "<

GotoXY(10,11);cout <<"eslu ne bydete bdutelnu!!!"<

}

void ZmejaStart()

{

GotoXY(10,15);cout <<"Soberite 75 Jablok "<

}

void STENA_2()

{

SetColor(LightBlue , Pink);GotoXY(20,0);cout << "Igra \"Zmejka\" Maiko Ekaterini" <

GotoXY(64,2);cout << "Danue:" << endl ;

GotoXY(64,3);cout << "Jablok:0" << endl ;

GotoXY(64,4); cout << "Dlina:3"<< endl;

GotoXY(64,5); cout << "Speed:0" << endl;

GotoXY(64,7); cout << "Uprawlenie:" << endl;

GotoXY(64,8); cout << "Esc:Wuxod" << endl;

GotoXY(64,9); cout << "P:Pause" << endl;

GotoXY(64,10); cout <<"S:Start" << endl;

GotoXY(64,11); cout <<"L:Level" << endl;

GotoXY(64,13);printf("%c",24);cout <<":Wwerx"<

GotoXY(64,14);printf("%c",25);cout<<":Wniz"<

GotoXY(64,15);printf("%c",27);cout<<":Wlewo"<

GotoXY(64,16);printf("%c",26);cout<<":Wprawo"<

{

SetColor(LightMagenta , Pink);

GotoXY(2,2);

int m = 0;

for(m = 0; m < 60; m++)

{

printf("*");

}

}

{

GotoXY(2,24);

int m = 0;

for(m = 0; m < 60;m++)

{

printf("*");

}

}

{

GotoXY(2,3); cout << "*"<

GotoXY(2,4); cout << "*"<

GotoXY(2,5); cout << "*"<

GotoXY(2,6); cout << "*"<

GotoXY(2,7); cout << "*"<

GotoXY(2,8); cout << "*"<

GotoXY(2,9); cout << "*"<

GotoXY(2,10); cout << "*"<

GotoXY(2,11); cout << "*"<

GotoXY(2,12); cout << "*"<

GotoXY(2,13); cout << "*"<

GotoXY(2,14); cout << "*"<

GotoXY(2,15); cout << "*"<

GotoXY(2,16); cout << "*"<

GotoXY(2,17); cout << "*"<

GotoXY(2,18); cout << "*"<

GotoXY(2,19); cout << "*"<

GotoXY(2,20); cout << "*"<

GotoXY(2,21); cout << "*"<

GotoXY(2,22); cout << "*"<

GotoXY(2,23); cout << "*"<

}

{

GotoXY(61,3); cout << "*"<

GotoXY(61,4); cout << "*"<

GotoXY(61,5); cout << "*"<

GotoXY(61,6); cout << "*"<

GotoXY(61,7); cout << "*"<

GotoXY(61,8); cout << "*"<

GotoXY(61,9); cout << "*"<

GotoXY(61,10); cout << "*"<

GotoXY(61,11); cout << "*"<

GotoXY(61,12); cout << "*"<

GotoXY(61,13); cout << "*"<

GotoXY(61,14); cout << "*"<

GotoXY(61,15); cout << "*"<

GotoXY(61,16); cout << "*"<

GotoXY(61,17); cout << "*"<

GotoXY(61,18); cout << "*"<

GotoXY(61,19); cout << "*"<

GotoXY(61,20); cout << "*"<

GotoXY(61,21); cout << "*"<

GotoXY(61,22); cout << "*"<

GotoXY(61,23); cout << "*"<

}

}

//Функция которая двигает и рисует

enum {KONEC, STENA, PLUS, MOVE};

int Move(Game &g)

{

int & n = g.gaduka.PCount;

COORD head = g.gaduka.t[n - 1]; //голова

COORD tail = g.gaduka.t[0]; //хвост

COORD next;

next.X = head.X + g.dx;

next.Y = head.Y + g.dy; //проверка следующей точки по направлению

if(next.X < 3 || next.Y 60 || next.Y > 23)//не уперлась ли в стену?

return STENA;

if(n > 4)

{

for(int i = 0; i < n; i++)

if(next.X == g.gaduka.t[i].X && next.Y == g.gaduka.t[i].Y) //не наехали ли на себя?

return KONEC;

}

if(next.X == g.jabloko.X && next.Y == g.jabloko.Y)

{

COORD*temp = new COORD[ ++n ]; //новый масив больший на 1

for(int i = 0; i < n; i++)

temp[i] = g.gaduka.t[i]; //перекопируем

temp[n - 1] = next; //добавляем одну

delete [] g.gaduka.t;

g.gaduka.t = temp;

SetConsoleCursorPosition(hConsole,head);

SetConsoleTextAttribute(hConsole, 0x0a); //закрашываем яблоко которое сели

printf("*");

SetConsoleCursorPosition(hConsole,next);

SetConsoleTextAttribute(hConsole,0x0a);

printf("%c",1);

PlusJabloko(g);

return PLUS;

}

for(int i = 0; i < n - 1; i++)

g.gaduka.t[i] = g.gaduka.t[i + 1];

g.gaduka.t[n - 1] = next;

SetConsoleCursorPosition(hConsole,tail);//закрашиваем хвостик

printf(" ");

SetConsoleCursorPosition(hConsole,head);

SetConsoleTextAttribute(hConsole, 0x0a);//красим хвост змеи в зелений цвет

printf("*");

SetConsoleCursorPosition(hConsole,next);

SetConsoleTextAttribute(hConsole,0x0f); //красим курсор в белый цвет (голову змеи)

printf("%c",1);

return MOVE;

}

void main()

{

hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //получаем дескриптор консоли

int key = 0, count = 0;

bool Pause=false;

Game g;

skorostGame(g);

STENA_2();

srand(time(0));

bool pause = false;

while(key != 27)

{

while(!kbhit()) //ждет пока нажмем

{

if(Pause==true)

{

Sleep(1);

continue;

}

switch (Move(g))//движение

{

case PLUS:

++count;

g.pause-=1;

GotoXY(64,2);cout << "Danue:" << endl ;

GotoXY(64,3); cout << "Jablok:" <

GotoXY(64,4); cout << "Dlina:" <

GotoXY(64,5); cout << "Speed:" <

GotoXY(64,7); cout << "Uprawlenie:" << endl;

GotoXY(64,8); cout << "Esc:Wuxod" << endl;

GotoXY(64,9); cout << "P:Pause" << endl;

GotoXY(64,10); cout <<"S:Start" << endl;

GotoXY(64,11); cout <<"L:Level" << endl;

GotoXY(64,13);printf("%c",24);cout <<":Wwerx"<

GotoXY(64,14);printf("%c",25);cout<<":Wniz"<

GotoXY(64,15);printf("%c",27);cout<<":Wlewo"<

GotoXY(64,16);printf("%c",26);cout<<":Wprawo"<

if (count == 75)

{

GotoXY(15,1); cout << "Wu wuigrali(maladec!!!)" << endl;

GotoXY(15,6);printf( "\n\t\t\t" );

GotoXY(15,7);printf( "\n\t\t\t" );

getch();

getch();

getch();

getch();

getch();

return;

}

break;

case STENA:

case KONEC:

GotoXY(23,1); printf("Wu proigrali(xa-xa-xa!!!)\n\n\t\t\t");

getch();

return;

break;

}

Sleep(g.pause); //Задержка

}

key = getch();

if(key=='P'||key=='p')

Pause=!Pause;

else if(key=='S'||key=='s')

ZmejaStart();

else if(key=='L'||key=='l')

Level();

else if(key==0||key==224)

{

key=getch();

if(key == 72 && g.nap != DOWN)

{

g.nap = UP;

g.dx = 0;

g.dy = -1;

}

else if(key == 80 && g.nap != UP)

{

g.nap = DOWN;

g.dx = 0;

g.dy = 1;

}

else if(key == 75 && g.nap != RIGHT)

{

g.nap = LEFT;

g.dx = -1;

g.dy = 0;

}

else if(key == 77 && g.nap != LEFT)

{

g.nap = RIGHT;

g.dx = 1;

g.dy = 0;

}

}

}

}

5.Тестирование программы.

Первоначальный вид игры при запуске

Змейка ударилась об объект стенку

Объект ударился об объект

Окончание игры змейка

7.Заключение.

В коде задачи указано максимально допустимое количество яблок, поэтому в игре предусмотрено данное ограничение. Ограничено количество игроков, ограничено количество яблок.

Можно добавить озвучивание событий игры, уровень сложности игры и разные настройки параметров игры в коде программы.Это вызвало бы больший интерес к игре.

Используемая в программе структура файла наиболее оптимально подходит для такого рода операций над файлом . Информация о игроке,

указывается в меню справа.

В целом приложение представляет собой почти самый простой вариант игры «Змейка » с набором самых необходимых функций.

8.Список литературы.

1. Начальный курс С и С++.: Учебник. /Б. И. Березин. Москва:"ДИАЛОГ-МИФИ",1999г.
2. Язык программирования С++. : Учебник. /. Страуструп. Киев:"ДиаСофт", 1993 г.

3. Введение в язык С++: Учебник. / Бьярн Страустрап.

– СПб.: 1995.

4. Структуры и алгоритмы обработки данных: Учебник. / Матьяш В.А., Путилов В.А., Фильчаков В.В. , Щёкин С.В. - Апатиты, КФ Петр ГУ, 2000

5. С++ /Дэвис Стефан Р.,4-е издание : Пер. с англ.:- М.: Издательский дом «Вильямс»,2003

6. Основы программирования: Учеб. Для сред. проф. образования /И.Г.Семакин, А.П.Шестаков. – М., 2006.

7. С++ экспресс курс: Учебник. /Лаптев В.В. – СПб.: БХВ- Петербург 2004.

8. С++ учебный курс: Учебник. /Франка П. – СПб.: Питер 2005.

9. МОДЕЛИ И CТРУКТУРЫ ДАННЫХ:/ Учебное пособие/
Д.Далека, А.С. Деревянко, О.Г.Кравец, Л.Е. Тимановская -Харьков: ХГПУ, 2000

10.Высшая математика для экономистов: учебник для студентов вузов/Н.Ш.Кремер,3-е издание.-М.:ЮНИТИ-ДАНА,2006

9.Приложения.

Приложение 1

Изменение объекта яблоко

Изменение объекта змейка

Меню на русском языке

Приложение 2

К курсовой работе прилагается диск 1.44 Мб.

39



Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4098
Авторов
на СтудИзбе
667
Средний доход
с одного платного файла
Обучение Подробнее