48619 (Разработка приложения, представляющего собой компьютерную игру "Змейка"), страница 2
Описание файла
Документ из архива "Разработка приложения, представляющего собой компьютерную игру "Змейка"", который расположен в категории "". Всё это находится в предмете "информатика" из 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г. 3. Введение в язык С++: Учебник. / Бьярн Страустрап. – СПб.: 1995. 4. Структуры и алгоритмы обработки данных: Учебник. / Матьяш В.А., Путилов В.А., Фильчаков В.В. , Щёкин С.В. - Апатиты, КФ Петр ГУ, 2000 5. С++ /Дэвис Стефан Р.,4-е издание : Пер. с англ.:- М.: Издательский дом «Вильямс»,2003 6. Основы программирования: Учеб. Для сред. проф. образования /И.Г.Семакин, А.П.Шестаков. – М., 2006. 7. С++ экспресс курс: Учебник. /Лаптев В.В. – СПб.: БХВ- Петербург 2004. 8. С++ учебный курс: Учебник. /Франка П. – СПб.: Питер 2005. 9. МОДЕЛИ И CТРУКТУРЫ ДАННЫХ:/ Учебное пособие/ 10.Высшая математика для экономистов: учебник для студентов вузов/Н.Ш.Кремер,3-е издание.-М.:ЮНИТИ-ДАНА,2006 9.Приложения. Приложение 1 Изменение объекта яблоко Изменение объекта змейка Меню на русском языке Приложение 2 К курсовой работе прилагается диск 1.44 Мб. 39
2. Язык программирования С++. : Учебник. /. Страуструп. Киев:"ДиаСофт", 1993 г.
Д.Далека, А.С. Деревянко, О.Г.Кравец, Л.Е. Тимановская -Харьков: ХГПУ, 2000