РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ




 

Snake – это консольное приложение “Змейка” Основная задача моделирования - это сбор статистики этой игры(кол-во набранных очков; время, от начала, до конца игры).

После двойного нажатия по файлу snake.exe откроется консоль. Вначале программа предложит ввести имя пользователя (смотри рис. В.1). После ввода имени, программа запустит игру. Управление змейкой:

- UP – вверх;

- DOWN – вниз;

- LEFT – влево;

- RIGHT – вправо.

 

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

В конце каждой игры на экран и в файл будут выведены требуемые статистические данные, которые и являются целью моделирования системы:

- время, от начала, до конца игры;

- кол - во набранных очков;

- имя пользователя(только в файл).

После вывода всех статистических данных игра начинается заново.

Для начала игры нужно будет нажать на кнопку “OK”. Что бы выйти из приложения, нужно нажать на красный крестик, в правом верхнем углу.

 

 

Приложение В

 

ЭКРАННЫЕ ФОРМЫ

 

 

 

Рисунок В.1 - начальный экран

 

 

Рисунок В.2 - вид приложения

 

 

Рисунок В.3 - статистические данные

 

 

 

Рисунок В.4 - конец игры

 

 

Рисунок В.5 - статистические данные в файле

 

Приложение Г

 

ЛИСТИНГ ПРОГРАММЫ

 

#include "stdafx.h"

#include <time.h>

#include <iomanip>

#include <Windows.h>

#include <stdlib.h>

#include <GL/glut.h>

#include <locale.h>

#include <iostream>

 

using namespace std;

 

FILE *in; //файл для записи статистики

int k=0; //счетчик очков

 

int N=30,M=20; //размер поля

int Scale=25; //масштаб

double t1, t2; // начальное и конечное время

char a[12]; //строчка для записи имени пользователя

 

int w = Scale*N; //длинна поля

int h = Scale*M; //высота поля

 

int step,num=2; //шаг

 

void DrawSnake() //рисуем змейку

{

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

{

glColor3f(0.0,0.0,0.0); //контур

glRectf(s[i].x*Scale, s[i].y*Scale, (s[i].x+1)*Scale, (s[i].y+1)*Scale);

glColor3f(0.0,0.0,0.9); //

glRectf((s[i].x+0.1)*Scale, (s[i].y+0.1)*Scale, (s[i].x+0.9)*Scale, (s[i].y+0.9)*Scale);

glColor3f(0.1,0.1,1.0); //

glRectf((s[i].x+0.1)*Scale, (s[i].y+0.7)*Scale, (s[i].x+0.9)*Scale, (s[i].y+0.9)*Scale);

glRectf((s[i].x+0.1)*Scale, (s[i].y+0.1)*Scale, (s[i].x+0.3)*Scale, (s[i].y+0.7)*Scale);

}

}

 

void Tick()

{

for (int i=num;i>0;--i) //цикл движения змейки

{

s[i].x=s[i-1].x;

s[i].y=s[i-1].y;

}

 

if (step==0) s[0].y+=1; //движение змейки

if (step==1) s[0].x-=1;

if (step==2) s[0].x+=1;

if (step==3) s[0].y-=1;

 

for (int i=0;i<1;i++) //при попадании змейкки на еду она увеличивается

if ((s[0].x==m[i].x) && (s[0].y==m[i].y))

{

num++;

k++;

m[i].New();

}

 

for (int i=0;i<4;i++) //условие не попадания еды на камень

{

if ((n[i].x==m[0].x) && (n[i].y==m[0].y))

m[0].New();

}

 

for (int i=0;i<num;i++) //условие не попадания камня в змейку

{

if ((m[0].x==s[i].x) && (m[0].y==s[i].y))

m[0].New();

}

 

for (int i=0;i<4;i++) //конце игры при попадании в камень

if ((s[0].x==n[i].x) && (s[0].y==n[i].y))

{MessageBox(NULL,(LPCWSTR)L"Конец игры!",(LPCWSTR)L"",MB_ICONHAND |MB_OK);

num=2;

s[0].x=5; //страт новой игры с координаты (5:5) и движение змейки вправо

s[0].y=5;

step=2;

for (int i=0;i<4;i++) //создание камня при старте новой игры

n[i].New();

for (int i=0;i<1;i++) //создание еды при старте новой игры

m[i].New();

t2 = (double)clock(); // финиш

printf("| %3.1d | %-.3f \n", k, (t2 - t1)/ CLK_TCK);

cout << "|________________|______________\n";

fprintf(in,"| %3.1d | %-.3f \n", k, (t2 - t1)/ CLK_TCK);

fprintf(in,"|________________|______________\n", k, (t2 - t1)/ CLK_TCK);

t1 = (double)clock(); // старт

k = 0;

}

 

if (s[0].x>N-1) {s[0].x=0;} //условие перехода на концах экрана

if (s[0].x<0) {s[0].x=N-1;}

if (s[0].y>M-1) {s[0].y=0;}

if (s[0].y<0) {s[0].y=M-1;}

 

for (int i=1;i<num;i++) //при попадании головы змейки в её часить тела отбрасывается задняя часть

if (s[0].x==s[i].x && s[0].y==s[i].y) {k -= (num - i);num=i;}

 

}

 

 

void DrawField() //рисуем сетку поля

{

glColor3f(1.0,1.0,1.0);//цвет сетки

glBegin(GL_LINES);

for (int i=0; i<w; i+=Scale)

{glVertex2f(i,0); glVertex2f(i,h);}

for (int j=0; j<h; j+=Scale)

{glVertex2f(0,j); glVertex2f(w,j);}

glEnd();

}

 

void display() //рисуем поле

{

 

glClear(GL_COLOR_BUFFER_BIT);

 

DrawField();

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

n[i].Drawlol();

DrawSnake();

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

m[i].DrawApple();

 

glFlush();

glutSwapBuffers();

}

 

void KeyboardEvent(int key, int a, int b) //функция управления змейкой

{

switch(key)

{

case 101: if (step!=3) step=0; break;

case 102: if (step!=1) step=2; break;

case 100: if (step!=2) step=1; break;

case 103: if (step!=0) step=3; break;

}

}

 

void timer(int = 0) //таймер

{

display();

 

Tick();

 

glutTimerFunc(70,timer,0);

}

 

int main(int argc, char **argv)

{

setlocale(LC_CTYPE, "Russian");

 

fopen_s(&in, "statistics.txt", "a"); //открываем файл statistics.txt

 

cout << "Введите имя\n";

cin >> a;

 

srand(time(0));

 

cout << "_________________________________\n";

cout << "|Набранные очки |Время в игре |\n";

cout << "|________________|______________|\n";

fprintf(in,"%s\n",a);

fprintf(in,"_________________________________\n");

fprintf(in,"| Points | Time in game |\n");

fprintf(in,"|________________|______________|\n");

 

for (int i=0;i<1;i++) //создание еды

m[i].New();

for (int i=0;i<4;i++) //созданиие камня

n[i].New();

 

s[0].x=5; // начальные координаты змейки

s[0].y=5;

t1 = (double)clock(); // старт

 

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); //режим RGB

glutInitWindowSize (w, h); //окно размером w на h

glutCreateWindow ("Змейка"); //название окна

glClearColor(1.0,1.0,1.0,1.0); //цвет фона

glMatrixMode(GL_PROJECTION); //матрица

glLoadIdentity();

gluOrtho2D(0,w,0,h);

glutPositionWindow(100,100); //позиция окна в мониторе

 

glutDisplayFunc (display); //функция дисплея

glutSpecialFunc(KeyboardEvent); //функция для клавиш

glutTimerFunc(100,timer,0); //функция таймера

 

glutMainLoop(); //механизм обработки событий

fclose(in); //закрыываем файл

}

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: