Форум программистов, компьютерный форум CyberForum.ru

Бесконечный цикл, змейка - C++

Восстановить пароль Регистрация
 
Pxinxs
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 32
03.05.2014, 14:55     Бесконечный цикл, змейка #1
Делаю змейку, но столкнулся с проблемой
Есть функция движения (то есть в моем случаи отрисовка следующего элементов змеи), также есть бесконечный цикл. Но дело в том, что элементы не двигаються( а двигаються только тогда, когда пробегаюсь дебагом по программе.
Кидаю весь код для большей наглядности
Саму змейку делал структурной
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <time.h>
using namespace std;
 
enum VECTOR 
{
    vverh,
    vniz,
    vlevo,
    vpravo
}; 
struct Position                
{
    int x_pos;
    int y_pos;
};
void gotoxy(int x,int y,char c)
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
 
    _COORD pos;
    pos.X=x;
    pos.Y=y;
 
    SetConsoleCursorPosition(hConsole,pos);
    cout<<c;
}
 
const int size = 1200;
int score = 0;
int k = 4;
int n = 2;
int k1 = 1;
int n1 = 1;
 
void func_one (Position arr[], int snake_size, char symbol = '*')
{
    for (int i=0; i<snake_size; ++i)
    {
        gotoxy(arr[i].x_pos, arr[i].y_pos, symbol);
    }
}
VECTOR move (VECTOR vector)
{
    int dvishenie = _getch();
    if (dvishenie==72 && vector != vpravo)      //vlevo
        vector=vlevo;
    else if (dvishenie==80 && vector != vlevo)  //vpravo
        vector=vpravo;
    else if (dvishenie==75 && vector != vverh)  //vniz
        vector=vniz;
    else if (dvishenie==77 && vector != vniz)   //vverh
        vector=vverh;
    return vector;
}
void polojit_plus (int arr[size])
{
a:
    srand(time(0));
    int x=rand()%size+1;
    if (arr[x] != 0)
        goto a;
    gotoxy(x,0,'+');
}
void dvijhenie(Position arr[], VECTOR vector,int snake_size)
{
    int time = clock(); 
    if (time < clock())
    {
        if (vector==vlevo)
        { 
 
            arr[k].x_pos--;
            gotoxy(arr[k].x_pos,arr[n].y_pos,'*');
        }
        else if (vector==vpravo)
        {
            arr[k1].x_pos++;
            gotoxy(arr[k1].x_pos,arr[n1].y_pos,'&');
            arr[k].x_pos++;
            gotoxy(arr[k].x_pos,arr[n].y_pos,'*');
        }
        else if (vector==vverh)
        {
            arr[n].y_pos--;
            gotoxy(arr[k].x_pos,arr[n].y_pos,'*');
        }
        else if (vector==vniz)
        {
            arr[n].y_pos++;
            gotoxy(arr[k].x_pos,arr[n].y_pos,'*');
        }
    }
}
int main()
{
    Position mas_mas[6];
    mas_mas[0].x_pos = 4;
    mas_mas[0].y_pos = 2;
    mas_mas[1].x_pos = 3;
    mas_mas[1].y_pos = 2;
    mas_mas[2].x_pos = 2;
    mas_mas[2].y_pos = 2;
    int snake_size = 3;
    func_one (mas_mas,snake_size);
 
    mas_mas[k].x_pos = 4;           //голова змеи по х
    mas_mas[n].y_pos = 2;           //голова змие по у
 
    mas_mas[k1].x_pos = 1;          //хвост змеи по х
    mas_mas[n1].y_pos = 2;          //хвост змеи по у
 
    //polojit_plus(mas);
    VECTOR vector = vpravo;
    clock();                        //возвращает количество милшисекунд, которые прошли с начала игры
    while (true)
    {
        if(_kbhit())
            vector=move(vector);
 
        dvijhenie (mas_mas,vector,snake_size);
 
        Sleep(400);     
    }
    gotoxy(21,0,' ');
    cout<<endl;
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2014, 14:55     Бесконечный цикл, змейка
Посмотрите здесь:

бесконечный цикл C++
C++ Бесконечный цикл
Бесконечный цикл C++
Бесконечный цикл C++
C++ Бесконечный цикл
C++ Бесконечный цикл
C++ Бесконечный цикл
C++ Бесконечный цикл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru