Не могу сделать систему запоминания рекордов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
crazymix
Сообщения: 4
Зарегистрирован: 26 июн 2014, 03:45

Помогите,хочу в свою игру добавить рекорды.Проблема в том,что рекорд не сохраняется.
код:

Код: Выделить всё

#include <windows.h>
#include <glut.h>
#include <iostream>
#include <time.h>

using namespace std;
int score = 0;
int record = 0;
int N = 52,M = 25;

int Scale=25;


int w = Scale*N;
int h = Scale*M;

int dir,num=2;

struct 
{ int x;
  int y;}  s[100];

class Fructs
{ 
public:
	int x,y;

    void New()
    {  x=rand() % N;
        y=rand() % M;   }
	
    void DrawApple()
   {   glColor3f(0.0,1.0,0.0);
       glRectf(x*Scale,y*Scale,(x+1)*Scale,(y+1)*Scale); }

} m[10];

 void DrawSnake()
 {  
  glColor3f(0.0,0.0,1.5);
  for (int i=0;i<num;i++)
    {glRectf(s[i].x*Scale, s[i].y*Scale, (s[i].x+0.9)*Scale, (s[i].y+0.9)*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 (dir==0) s[0].y+=1;      
    if (dir==1) s[0].x-=1;        
    if (dir==2) s[0].x+=1;         
    if (dir==3) s[0].y-=1;         

  for (int i=0;i<10;i++)
    if ((s[0].x==m[i].x) && (s[0].y==m[i].y)) 
      {num++; m[i].New();score++;}
	if(num ==2){score = 0;}
	
	if (s[0].x>N) {if(score >record){record = score;}cout <<"your score:" <<score <<endl <<"your record:" <<record <<endl;glutDestroyWindow(1); system("pause"); exit(0);}  
	if (s[0].x<0) {if(score >record){record = score;}cout <<"your score:" <<score <<endl <<"your record:" <<record <<endl;glutDestroyWindow(1); system("pause"); exit(0);}
  if (s[0].y>M)  {if(score >record){record = score;}cout <<"your score:" <<score <<endl <<"your record:" <<record <<endl;glutDestroyWindow(1); system("pause"); exit(0);}  
  if (s[0].y<0)  {if(score >record){record = score;}cout <<"your score:" <<score <<endl <<"your record:" <<record <<endl;glutDestroyWindow(1); system("pause"); exit(0);}
 
 for (int i=1;i<num;i++)
	 if (s[0].x==s[i].x && s[0].y==s[i].y)  num=i;
if (num >100){
	system("pause");
	cout <<"you win";}
 }
 


void DrawField()
  {
   glColor3f(0.0,0.7,0.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();

    DrawSnake(); 

   for (int i=0;i<10;i++)
     m[i].DrawApple();

   glFlush();
   glutSwapBuffers();
}

void KeyboardEvent(int key, int a, int b)
{   
    switch(key)
    {
        case 101 : 	dir=0; break;
         case 102:   dir=2; break;
        case 100 :  dir=1; break;
        case 103 :  dir=3; break;
     }
}

void timer(int = 0)
{
  display();

  Tick();
       
 glutTimerFunc(60,timer,0);
}

int main(int argc, char **argv) {
	
	srand(time(0));
	
	for (int i=0;i<10;i++)
		m[i].New();
	


glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize (w, h);
glutCreateWindow ("HardcoreSnake"); 
glClearColor(1.0,1.0,0.6,1.0);  //цвет фона
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);

glutDisplayFunc (display);
glutSpecialFunc(KeyboardEvent);
glutTimerFunc(50,timer,0);

glutMainLoop();
}
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

А где должны храниться эти записи? В каком-то файле? Но во всём коде нет даже и намёка на попытку открыть какой-либо файл и что-то в него записать.
crazymix
Сообщения: 4
Зарегистрирован: 26 июн 2014, 03:45

либо txt,либо в любом другом формате.
crazymix
Сообщения: 4
Зарегистрирован: 26 июн 2014, 03:45

B этом вся проблема не знаю как. Пробовал в header не запоминает.формат любой.
расположение папка с игрой.
crazymix
Сообщения: 4
Зарегистрирован: 26 июн 2014, 03:45

WinMain писал(а):А где должны храниться эти записи? В каком-то файле? Но во всём коде нет даже и намёка на попытку открыть какой-либо файл и что-то в него записать.
B этом вся проблема не знаю как. Пробовал в header не запоминает.формат любой.
расположение папка с игрой.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Да вопрос просто поставлен так, что создаётся впечателние, что сохранение имплементировано, но по какой-то причине не работает, и ты просишь посмотреть, почему не работает. Точнее формулируй вопросы в будущем.

Вариантов, как можно реализовать сохранение, на самом деле два. Либо сохранять в файл (см. класс ofstream), либо в реестре Windows (см. функции для работы с реестром тут).

Само собой, в обоих случаях рекорды нужно шифровать хотя бы элементарным логическим сдвигом с чексуммой, чтобы догадливые пользователи не могли слишком уж просто подправить рекорды вручную.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить