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 \"Zmejka\" 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( "\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 <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;