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

[Решено]найти баг в коде или почему не падает - C++

Восстановить пароль Регистрация
 
ser4ega
27 / 27 / 3
Регистрация: 15.11.2009
Сообщений: 143
26.01.2011, 17:20     [Решено]найти баг в коде или почему не падает #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
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <fstream.h>
#define n 20
#define m 20
 
void Painting(COORD c,HANDLE h,int *arr[])
{
   for(int i=0;i<n;i++)
    {
            for(int j=0;j<m;j++)
            {
                    c.X = j;
                    c.Y = i;
                    SetConsoleCursorPosition(h, c);
                    switch (arr[i][j])
                    {
                    case 0:cout<<" ";break;
                    case 1:cout<<"O";break;
                    case 2:cout<<"O";break;
                    }
            }
    cout<<endl;
   }
};
void CreateFirstTime(int *arr[])
{
 for(int i=0;i<n;i++)//zapolnenie massiva i pervi4naya otrisovka
    {
            for(int j=0;j<m;j++)
            {
                    if ((i==n-1)||(i==0)||(j==0)||(j==m-1)) {arr[i][j]=3;cout<<(char)254;} else{
                    arr[i][j]=0;;cout<<" ";}
            }
            cout<<endl;
    }     
};
void blockgeneration(int *arr[])
{
 int v=rand()%6;
 switch (v)
 {
 case (0):arr[1][m/2-2]=1;arr[1][m/2-1]=1;arr[1][m/2]=1;arr[1][m/2+1]=1;break;//palka
 case (1):arr[1][m/2-1]=1;arr[1][m/2]=1;arr[2][m/2-1]=1;arr[2][m/2]=1;break; //kvadrat       
 case (2):arr[1][m/2-1]=1;arr[1][m/2]=1;arr[2][m/2]=1;arr[2][m/2+1]=1;break;//z
 case (3):arr[2][m/2-1]=1;arr[2][m/2]=1;arr[1][m/2]=1;arr[1][m/2+1]=1;break;//obratnaya z
 case (4):arr[1][m/2-1]=1;arr[1][m/2]=1;arr[1][m/2+1]=1;arr[2][m/2+1]=1;break;//Г
 case (5):arr[1][m/2-1]=1;arr[1][m/2]=1;arr[1][m/2+1]=1;arr[2][m/2-1]=1;break;//obratnaya Г
 default:break;
 }     
};
void moveblockdown(int *arr[], bool*k)
{
      int b=0;
      COORD block[4];
      for(int i=0;i<n;i++)
    {
            for(int j=0;j<m;j++)
            {
                   if (arr[i][j]==1)
                   {
                   if((arr[i+1][j]!=2)&&(arr[i+1][j]!=3)) 
                   {
                   block[b].X=j; 
                   block[b].Y=i;
                   b++; 
                   }
                   else 
                   {
                   arr[i][j]=2;
                   *k=true;
                   }
                   }
            }
    }
     if (b==4) for(int i=0;i<4;i++) 
     {
     arr[block[3-i].Y][block[3-i].X]=0; 
     block[3-i].Y+=1;
     arr[block[3-i].Y][block[3-i].X]=1;          
     }
};
 
//INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN INT MAIN 
int main()
{
    srand(time(0));
    COORD c;
    char g,oldg='s';
    bool music =true;
    int ii=0,ij=0,sl=100;
    bool k=true,kold=false;
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    int **arr;
    arr=new int*[n]; for(int i=0;i<n;i++) arr[i]=new int[m];//2-уже лежащие блоки
    CreateFirstTime(arr);
   while(true)
    {
    if(kbhit() ) g=(char)getch();
    if (k==true){blockgeneration(arr); k=false;}
    moveblockdown(arr,&k);
   /* switch(g){
              case('d'):oldg=g;if(arr[ii][ij+1]!=2){arr[ii][ij+1]=arr[ii][ij];ij++;}else break;
              case('D'):oldg=g;if(){arr[ii][ij]=0;ij++;}else break;
              case('a'):oldg=g;if(){arr[ii][ij]=0;ij--;}else break;
              case('A'):oldg=g;if(){arr[ii][ij]=0;ij--;}else break;
              case('w'):oldg=g;if(){arr[ii][ij]=0;ii--;}else break;
              case('W'):oldg=g;if(){arr[ii][ij]=0;ii--;}else break;
              case('s'):oldg=g;if(){arr[ii][ij]=0;ii++;}else break;
              case('S'):oldg=g;if(){arr[ii][ij]=0;ii++;}else break;
              case('M'):music=!music;g=oldg;continue; break;
              case('m'):music=!music;g=oldg;continue;break;
              case('p'): while(!kbhit()) Sleep(100);
              case('P'): while(!kbhit()) Sleep(100);
              default:g=oldg;continue;break;
              }      */
    Painting(c,h,arr);
    Sleep(sl);
    }
    system("PAUSE");
}
Добавлено через 15 минут
баг проявляется после того, как первый блок упадет на пол. Следующий за ним с большой вероятностью стопорится и начинается генерация нового блока. так все и происходит. почему начинается генерация нового, хотя старый блок еще не упал - вот в чем вопрос

Добавлено через 1 минуту
"палки" почему то не стопорятся О_о

Добавлено через 1 минуту
все. баг найден, всем спасибо за поддержку)

Добавлено через 41 секунду
да, он заключается в неверном присвоении упавшим блокам "2"=) , что делает их лежащими блоками

Добавлено через 1 минуту
как закрыть тему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2011, 17:20     [Решено]найти баг в коде или почему не падает
Посмотрите здесь:

C++ Найти ошибку в коде, он у меня матрицу должен вывести и колличество положительных элементов но рандомом он только 0 выходит почему?
C++ Ошибка или баг в Dev C++?
C++ Баг или фича
C++ Почему падает программа?
Баг в коде(псевдо-рандомные числа) C++
C++ std::regex : баг на сайте или баг компилятора?
Баг в коде (статическая структура) C++
C++ Почему программа падает при сортировке массивов больших размерностей

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

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

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