Смекни!
smekni.com

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

1) “Змейку”, которая может двигаться в ограниченной плоскости. Маневрами “Змейки” должен управлять играющий. “Змейка” должна увеличиваться в размерах при столкновении с “яблоком” и погибать при столкновении с “стеной”, при пересечении самой себя и при выходе за границы плоскости заданной программистом.

2) “Яблоко” или другой объект, при столкновении с которым “Змейка” “съедает” его(увеличивается в длину в зависимости от условий заданных программистом.

3) “стена” объект при столкновении с которым змейка погибает.

“змейка” может управляться с помощью клавиш на форме, игра может иметь счетчик набранных очков, таблицу лучших игроков, которая может сохранятся и считываться из файла, а также другие элементы которые увеличивают играбельность игры.

4.Опиание алгоритма решения в псевдокоде (команды в виде текста на русском языке).

Алгоритм.

1) Описываются переменные и константы

2) Выбор начальных координат случайным образом

3) Прорисовка начального положения

4) Генерация на поле яблок случайным образом

5) Проверка: не появилось ли яблоко на черве.

6) Управление “Змейкой” с клавиатуры.

7) Проверка: “не укусила” ли “змейка сама себя”, если укусила выводится информационное окно (Информационная форма), в противном случае переходим к следующему пункту.

8) Проверка: “не съела” ли “змейка” “яблоко” если съела, то наращиваем ей хвост и переходим к пункту 3), в противном случае см. Следующий пункт.

9) Перерисовка “Змейки”

Игра на ловкость “Змейка”

Законченный вариант игры змейка должен содержать:

4) “Змейку”, которая может двигаться в ограниченной плоскости. Маневрами “Змейки” должен управлять играющий. “Змейка” должна увеличиваться в размерах при столкновении с “яблоком” и погибать при столкновении с “стеной”, при пересечении самой себя и при выходе за границы плоскости заданной программистом.

5) “Яблоко” или другой объект, при столкновении с которым “Змейка” “съедает” его(увеличивается в длину в зависимости от условий заданных программистом.

6) “стена” объект при столкновении с которым змейка погибает.

“змейка” может управляться с помощью клавиш на форме, игра может иметь счетчик набранных очков, таблицу лучших игроков, которая может сохранятся и считываться из файла, а также другие элементы которые увеличивают играбельность игры.

Функции управления экранными объектами.

сообщение назначение аргументы
GotoXY( ) Размещение объекта Координаты х,у
Level() Вы никогда не выиграете, если не будете бдительны Координаты х,у
Move(Game &g) Функция которая двигает и рисует Game &g
PlusJabloko(Game &g) Функция разброски яблок Game &g
skorostGame(Game &g) Функция старта змейки ее координат и скорости Game &g
SetColor(ConsoleColor text, ConsoleColor background) Изменение цвета ConsoleColor text, ConsoleColor background
STENA_2() Функция рисования стены Координаты х,у стены
ZmejaStart() Старт игры GotoXY(10,15)
Main() Главная функция

Описание функций.

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

void PlusJabloko(Game &g){}

1.Процесс….int x,y,i;

Int n=g.gaduka.pCount;

2.Заводим цикл do while ,в котором задаем координаты объекта- яблоко

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

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 "<<endl; <<"eslu ne bydete bdutelnu!!!"<<endl;
Void ZmejaStart() GotoXY(10,15) <<"Soberite 75 Jablok "<<endl;
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 &bsol;"Zmejka&bsol;" Maiko Ekaterini" <<endl; << "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"<<endl; <<":Wniz"<<endl; <<":Wlewo"<<endl; <<":Wprawo"<<endl; printf("*"); printf("*");
Void main() GotoXY(15,1) GotoXY(15,6) GotoXY(15,7) GotoXY(23,1) << "Wu wuigrali(maladec!!!)" << endl; printf( "&bsol;n&bsol;t&bsol;t&bsol;t" ); printf( "&bsol;n&bsol;t&bsol;t&bsol;t" ); printf("Wu proigrali(xa-xa-xa!!!)&bsol;n&bsol;n&bsol;t&bsol;t&bsol;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( "&bsol;n&bsol;t&bsol;t&bsol;t" );

GotoXY(15,7);printf( "&bsol;n&bsol;t&bsol;t&bsol;t" );

getch();

getch();

getch();

getch();

getch();

return;

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

case KONEC:

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

getch();

return;

break;


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

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

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

#include <time.h> //случайные числа

#include <stdio.h> //для printf

#include <windows.h> // для HANDLE, курсора, цвета

#include <conio.h> //для kbhit

#include <math.h>

#include <io.h>

#include <iostream>

#include <fcntl.h>

#include <string.h>

#include "stdafx.h"

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

#include <stdlib.h> // Описания функций 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 "<<endl;

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