Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
coloc
погромист
411 / 247 / 30
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
#1

Оптимизация кода

18.11.2012, 01:10. Просмотров 814. Ответов 10
Метки нет (Все метки)

main:
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
#include <iostream>
#include <conio.h>
#include "keyBuffer.h"
#include "pause.h"
#include <windows.h>
 
const char up1=201,up2=187;   
const char down1=200,down2=188;   
const char vertical=186,horizontal=205; 
const char ship=219;    
const char round=250; 
const int Y = 20;
const int X = 50;
char matrix[X][Y];
int x = 1; 
int y = 1; 
char key;
int dx = 1; 
int dy = 0;
int r9d = 1; 
int stovp4uk = 1;
int currentDX; int currentDY;
 
using namespace  std;
 
void endGame()
{
     system("cls");
     cout << "You lose!!!";
     system("PAUSE >> void");
}
 
void drawTable()
{
     system("cls");
     //âåðõ äîøêè...
     cout << "\t";
     cout << up1;
     for(int i = 0; i < X; i++)
     {
             cout << horizontal;
             }
     cout << up2 << endl; 
     
     /*  ГЏГЋГ—ГЂГ’ГЋГЉ ÌÀËÞÂÀÍÍß ÑÈÌÂÎËÀ  */
     
     //...ГІГіГІ Г¬Г*ëþºòüñÿ Г±Г*Г¬Г* Г¬Г*òðèöÿ...
     //öèêë ГїГЄГЁГ© Г¬Г*ëþº ê³ëüê³ñòü ðÿä³â (Гі). ГЋГ±ГІГ*Г*ВіГ© ðÿä ïðîïóñêГ*ВєГІГ±Гї...
     for(int i = 0; i < (r9d - 1); i++)
     {
            cout << "\t" << vertical;
            for(int j = 0; j < X; j++)
            {
                    cout << " ";
            }
            cout << vertical;        
            cout << "\n";
     }
     cout << "\t" << vertical; //ïî÷Г*òîê Г¬Г*ëþâГ*Г*Г*Гї ðÿäó Гў ÿêîìó çì³éêГ*
     
     
     //öèêë ГїГЄГЁГ© Г¬Г*ëþº â³äñòГ*Г*Гј ГўВіГ¤ ГЄГ°Г*Гѕ äî ïî÷Г*òêîâîãî ñèìâîëó (Гµ)
     for(int i = 0; i < stovp4uk; i++)
     { 
            cout << " ";                                            
     }
     
     
     cout << matrix[x][y]; //âèâîäèòü Г*Г* ГҐГЄГ°Г*Г* Г±Г*Г¬ ñèìâîë
     
     //äîäГ*Вє ïðîá³ëè äëÿ Г§Г*âåðøåГ*Г*Гї ðÿäêГ*
     for(int i = 0; i < ((X-1) - stovp4uk); i++)
     {
             cout << " ";
     }
     
     
 
     cout << vertical << "\n";
     //äîäГ*Вє ðÿäêè 
     for(int i = 0; i < (Y - r9d); i++)
     {
             cout << "\t" << vertical;
             for(int j = 0; j < X; j++)
             {
                    cout << " ";
             }
             cout << vertical << "\n";
     }   
     /*  ГЉВІГЌГ…Г–Гњ ÌÀËÞÂÀÍÍß ÑÈÌÂÎËÀ  */
     
     
     
     
     //...Г* ГІГіГІ Г*ГЁГ§        
     cout <<"\t";
     cout << down1;
     for(int i = 0; i < X; i++)
     {
             cout << horizontal;
             }
      cout << down2;
      }               
int main()
{
    matrix[x][y] = '@';
    bool alpha = false;
    while(!alpha)
    {
    drawTable();
    /*x = x + dx; y = y + dy;
    r9d = r9d + dy; stovp4uk = stovp4uk + dx;
    matrix[x][y] = '@';*/
    if(x < 1) { alpha = true; endGame(); }
    if(y < 1) { alpha = true; endGame(); }
    if(x > (X - 2)) { alpha = true; endGame(); }
    if(y > 20) { alpha = true; endGame(); }
    key = KursorKeyPressed();
    switch(key)
    {
               case 3: dy = -1; //UP
                        dx = 0;
               break;
               case 4: dy = 1; //DOWN
                        dx = 0;
               break;
               case 1: dx = -1; //LEFT
                        dy = 0;
               break;
               case 2: dx = 1; //RIGHT
                        dy = 0;
               break;
               default: dx = currentDX;  dy = currentDY; break;             
    }
    
    x = x + dx; y = y + dy;
    r9d = r9d + dy; stovp4uk = stovp4uk + dx;
    matrix[x][y] = '@';
    currentDX = dx; currentDY = dy;
    pPause();
}
    /*cout << endl;
    //cout << "X: " << x << "      " << "Y: " << y;                                                                                   
    getch();*/
    return 0;
}
пауза:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
#include "pause.h"
 
//ÏÀÓÇÀ
void pause()
{
     int i = 1;
     while(i < 10000000)
     {
             i = i + 1;
     }
}
void pPause()
{
     for(int i = 0; i < 3; i++)
     {
             pause();
             }
}
обработчик нажатий клавиш:
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
#include <iostream>
#include <conio.h>
#include "keyBuffer.h"
#include <windows.h>
#include <stdio.h> 
 
using namespace std;
int KursorKeyPressed(void)
{
        if(GetAsyncKeyState(VK_LEFT))
        {
            keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);//ÎòæèìГ*ГҐГ¬ ГЄГ*îïêó
            return 1;//LEFT
            
        }
        if(GetAsyncKeyState(VK_RIGHT))
        {  
            keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP, 0);//ÎòæèìГ*ГҐГ¬ ГЄГ*îïêó
            return 2;//RIGHT
        }
        if(GetAsyncKeyState(VK_UP))
        {
            keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);//ÎòæèìГ*ГҐГ¬ ГЄГ*îïêó
            return 3;//UP
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//ÎòæèìГ*ГҐГ¬ ГЄГ*îïêó
            return 4; //DOWN
        }
}

ну и хедеры
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//header 1
#ifndef KEY
#define KEY
int KursorKeyPressed(void);
#endif
 
 
//header 2
#ifndef PAUSE
#define PAUSE
void pause(void);
void pPause(void);
#endif
Как можно оптимизировать код, чтобы нагрузка на процессор меньшей была (проблема в функции пауза) И как можно увеличить частоту обновления игрового поля (чтобы не было бликов)

З.Ы. Взгляните опытным глазом на код, скажите какие ошибки при оформлении кода (сам то я знаю что для других это наверное каша, но я стараюсь оформлять код хорошо (без всяких там goto). Хорошая критика как ничто поможет мне)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 01:10
Ответы с готовыми решениями:

Оптимизация кода
Здравствуйте! у меня есть такая функция, которая очень часто вызывается: int...

Оптимизация кода
Помогите оптимизировать код. суть программы такая, принимает на вход...

Оптимизация кода
Пожалуйста форумчане как можно сократить этот код Особенно от 27 до 90 строки...

Оптимизация кода (C++)
Добрый вечер. У меня есть две функции. Вопрос:&quot;Как оптимизировать этот код,...

Оптимизация кода
Как сравнить 2 строки. Вот как их задавал в ходе программы string h,b; ......

10
Croessmah
++Ͻ
14487 / 8268 / 1553
Регистрация: 27.09.2012
Сообщений: 20,312
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 01:13 #2
Можно использовать Sleep для паузы
1
MrGluck
Модератор
Эксперт CЭксперт С++
8070 / 4923 / 1430
Регистрация: 29.11.2010
Сообщений: 13,339
18.11.2012, 01:15 #3
C++
1
Sleep(1000); // пауза на 1 секунду
а ваш цикл - это извращение
1
coloc
погромист
411 / 247 / 30
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 01:17  [ТС] #4
А в какой она библиотеке, подскажите?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8070 / 4923 / 1430
Регистрация: 29.11.2010
Сообщений: 13,339
18.11.2012, 01:18 #5
windows.h
1
Croessmah
++Ͻ
14487 / 8268 / 1553
Регистрация: 27.09.2012
Сообщений: 20,312
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 01:22 #6
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
В windows.h
Sleep(кол_во_миллисекунд);
1
komand0
8 / 8 / 4
Регистрация: 20.06.2012
Сообщений: 225
18.11.2012, 01:23 #7
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
dos.h - sleep()
synchapi.h - Sleep() - включена в Windows.h

есть еще delay()
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
18.11.2012, 03:30 #8
coloc, область видимости переменной должна быть минимальна. Я даже после беглого просмотра вашео кода нашел несколько глобальных переменных, которые используются в одной функции. Собственно, их нужно перенести в эту функцию.

Назания переменных должны быть осмысленны. Что такое alpha, stovp4uk?

Для функции, которая возвращает код нажатой клавиши лучше переделать возвращаемое значение на enum. и внутри enum человеческим языком прописать left, right,...

Не стесняйтесь создавать доп функции. Я бы вынес свитч из мейна, например.

Иногда данные и методы можно удобно объединять в структуры и классы
1
coloc
погромист
411 / 247 / 30
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 12:09  [ТС] #9
Спасибо за критику, буду стараться. (А те переменные с странным названием я назвал случайно. Просто вечером дописывал программу, все на скорую руку делал). И еще вопрос: глобальные переменные создаются до вызова main?
0
komand0
8 / 8 / 4
Регистрация: 20.06.2012
Сообщений: 225
18.11.2012, 16:56 #10
глобальные переменные создаются до того как будут использованы) ну да, обычно до main или в заголовочном файле
1
Croessmah
++Ͻ
14487 / 8268 / 1553
Регистрация: 27.09.2012
Сообщений: 20,312
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 17:05 #11
Цитата Сообщение от coloc Посмотреть сообщение
И еще вопрос: глобальные переменные создаются до вызова main?
Они "создаются" во время компиляции.

Добавлено через 1 минуту
Цитата Сообщение от komand0 Посмотреть сообщение
ну да, обычно до main или в заголовочном файле
попробуйте создать переменную в заголовочном файле и подключить её к нескольким cpp модулям
1
18.11.2012, 17:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 17:05

Оптимизация кода
В общем дело такое, мне нужно 2 одинаковые программы(небольшие), только одна...

Оптимизация кода
Доброго времени сутки господа у меня к вам вопрос как можно оптимызуваты данный...

Оптимизация кода
Покритикуйте, если не сложно. А еще очень интересно, как теперь это сделать в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru