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

Подтормаживающий рандом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблонные классы. Присвоение к указателю и приведение типов http://www.cyberforum.ru/cpp-beginners/thread929623.html
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два наследника: ChildOne : public ParentAbstact и ChildTwo : public ParentAbstact Есть шаблонный класс: TempClass <T> Есть глобальные экземпляры: extern TempClass<ChildOne> childOne и extern TempClass<ChildOne> childTwo Это всё из приватного фреймворка, к сожалению:cry:, дополнительную информацию я...
C++ dll 1. Можно ли использовать DLL, созданную на одном языке программирования в программе на другом языке? 2. Я так понял, DLL работает только под Windows. Есть ли возможность сделать библиотеку функций, чтобы ее можно было использовать в любой ОС, но так чтобы у пользователя библиотеки не было доступа к исходному коду? http://www.cyberforum.ru/cpp-beginners/thread929606.html
C++ Шаблоны и параметр по умолчанию
Добрый день. Вроде всё делаю по учебнику, но компилятор не пропускает: #include <iostream> #include <vector> #include <cstdlib> template<class T> bool DefaultComparand(const T &, const T &); template<class T, class Function = DefaultComparand<T>> void Ssort(std::vector<T>& base, Function fn = DefaultComparand<T>() )
C++ Указатель вне корректного диапазона
void f(T a) { T v; T p* = &v; p--; *p = a; // тут p вне корректного диапазона, почему? } объясните этот момент плиз, я так понял, что когда мы дикрементируем указатель (p--), то т.к. указатель ссылался на начальный элемент массива типа T, то теперь он может ссылаться на другой тип, типа вышел из корректного lиапазона. Но почему не будет работать присваивание корректного адреса. Или...
C++ Погрешность вычислений http://www.cyberforum.ru/cpp-beginners/thread929580.html
Читаю книгу Дейтелов "Как программировать на С++", попалась следующая задача, где нужно вводить кол-во бензина, пройденный путь, исходя из этих данных вычислять миль/галлон и вычислить средний расход бензина, когда закончится ввод. Вроде все сделал правильно, но когда ввожу данные которые приведены в качестве примера у авторов, у меня средний расход считается почему - то с очень большой...
C++ Битовые операции Здраствуйте, помогите, пожалуйста! Надо написать три функции, используя только битовые (для первых двух) и только битовые и арифметические операции (для третей), которые: 1) Функция, которая возвращает 1, если значения битов в двух заданых позициях беззнакового длинного целого числа совпадают. 2) Функция, которая меняет местами соседние группы из 16 битов в заданом беззнаковом длинном... подробнее

Показать сообщение отдельно
Бендерродригез
Сгибальщик
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1

Подтормаживающий рандом - C++

27.07.2013, 19:56. Просмотров 472. Ответов 15
Метки (Все метки)

Сделал простую змейку.
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>
#include <conio.h>
enum napr {up = 2, left, right, down};
napr headN = right;
napr hvostN = right;
COORD c, apple, head, hvost;
HANDLE h = GetStdHandle(-11);
int delay = 200;
int hod = 1;
int s4yot = 0;
char pole[30][25] = {0};
inline void gotoxy(int x, int y){
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition(h, c);
}
inline void gotoxy(COORD x){
    gotoxy(x.X, x.Y);
}
void ris(){
    system("cls");
    for(int i=0; i<25; i++){
        for(int j=0; j<30; j++){
            if(i==0 || i==24 || j==0 || j==29){
                std::cout<<(char)219;
                pole[j][i] = 1;
            }
            else std::cout<<' ';
        }
        if(i<24)std::cout<<std::endl;
    }
    gotoxy(35, 3);
    std::cout<<"$ "<<s4yot;
    head.X = 14;
    head.Y = hvost.Y = 12;
    hvost.X = 13;
    pole[14][12] = pole[13][12] = right;
    gotoxy(head);
    std::cout<<'#';
    gotoxy(hvost);
    std::cout<<8;
}
void new_apple(){
    while(1){
        srand((int)time(0));
        apple.X = rand()%28 + 1;
        apple.Y = rand()%23 + 1;
        if(pole[apple.X][apple.Y] == 0){
            pole[apple.X][apple.Y] = 6;
            gotoxy(apple);
            std::cout<<'@';
            break;
        }
    }
}
int main(){
    setlocale(0, "ASCII");
    ris();
    char kn;
    new_apple();
    while(1){
        gotoxy(head);
        std::cout<<'8';
        if(kbhit()){
            kn = getch();
            switch(kn){
            case 'w':
            case (char)230:
                if(headN == down) break;
                headN = up;
                pole[head.X][head.Y] = up;
                break;
            case 'd':
            case (char)162:
                if(headN == left) break;
                headN = right;
                pole[head.X][head.Y] = right;
                break;
            case 's':
            case (char)235:
                if(headN == up) break;
                headN = down;
                pole[head.X][head.Y] = down;
                break;
            case 'a':
            case (char)228:
                if(headN == right) break;
                headN = left;
                pole[head.X][head.Y] = left;
            }
        }
        switch(headN){
        case up:
            head.Y--;
            break;
        case right:
            head.X++;
            break;
        case down:
            head.Y++;
            break;
        case left:
            head.X--;
        }
        if(pole[head.X][head.Y] > 0 && pole[head.X][head.Y] < 6)
            break;
        gotoxy(head);
        std::cout<<'#';
        pole[head.X][head.Y] = headN;
        if(apple.X == head.X && apple.Y == head.Y){
            new_apple();
            s4yot += (1013 - hod * 13);
            if(s4yot > 15000 && s4yot < 30000) delay = 150;
            if(s4yot >= 30000 && s4yot < 50000) delay = 100;
            if(s4yot >= 50000) delay = 50;
            gotoxy(37, 3);
            std::cout<<s4yot;
            hod = 1;
        }
        else{
            gotoxy(hvost);
            std::cout<<' ';
            pole[hvost.X][hvost.Y] = 0;
            switch(hvostN){
            case up:
                hvost.Y--;
                break;
            case right:
                hvost.X++;
                break;
            case down:
                hvost.Y++;
                break;
            case left:
                hvost.X--;
                break;
            }
            hvostN = (napr)pole[hvost.X][hvost.Y];
        }
        hod++;
        if(hod > 51) hod = 51;
        Sleep(delay);
    }
    gotoxy(35, 12);
    std::cout<<"GAME OVER";
    std::cin.get();
}
Во время игры изредка случается ощутимое (четверть секунды примерно) подтормаживание при генерации нового яблока. Я что-то не так сделал с рандомом или так и должно быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru