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

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

Войти
Регистрация
Восстановить пароль
 
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 01:10     Оптимизация кода #1
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). Хорошая критика как ничто поможет мне)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 01:10     Оптимизация кода
Посмотрите здесь:

Оптимизация кода C++
C++ Оптимизация кода. Исходник
C++ Оптимизация кода
оптимизация кода! C++
Оптимизация кода C++
C++ оптимизация кода
оптимизация кода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 01:13     Оптимизация кода #2
Можно использовать Sleep для паузы
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5788 / 3163 / 359
Регистрация: 29.11.2010
Сообщений: 8,469
18.11.2012, 01:15     Оптимизация кода #3
C++
1
Sleep(1000); // пауза на 1 секунду
а ваш цикл - это извращение
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 01:17  [ТС]     Оптимизация кода #4
А в какой она библиотеке, подскажите?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5788 / 3163 / 359
Регистрация: 29.11.2010
Сообщений: 8,469
18.11.2012, 01:18     Оптимизация кода #5
windows.h
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 01:22     Оптимизация кода #6
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
В windows.h
Sleep(кол_во_миллисекунд);
komand0
 Аватар для komand0
8 / 8 / 0
Регистрация: 20.06.2012
Сообщений: 225
18.11.2012, 01:23     Оптимизация кода #7
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
dos.h - sleep()
synchapi.h - Sleep() - включена в Windows.h

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

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

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

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

Иногда данные и методы можно удобно объединять в структуры и классы
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 12:09  [ТС]     Оптимизация кода #9
Спасибо за критику, буду стараться. (А те переменные с странным названием я назвал случайно. Просто вечером дописывал программу, все на скорую руку делал). И еще вопрос: глобальные переменные создаются до вызова main?
komand0
 Аватар для komand0
8 / 8 / 0
Регистрация: 20.06.2012
Сообщений: 225
18.11.2012, 16:56     Оптимизация кода #10
глобальные переменные создаются до того как будут использованы) ну да, обычно до main или в заголовочном файле
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 17:05     Оптимизация кода
Еще ссылки по теме:

Оптимизация кода C++
C++ Оптимизация Кода задачи
C++ Оптимизация кода (C++)
Оптимизация кода C++
C++ Оптимизация кода

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 17:05     Оптимизация кода #11
Цитата Сообщение от coloc Посмотреть сообщение
И еще вопрос: глобальные переменные создаются до вызова main?
Они "создаются" во время компиляции.

Добавлено через 1 минуту
Цитата Сообщение от komand0 Посмотреть сообщение
ну да, обычно до main или в заголовочном файле
попробуйте создать переменную в заголовочном файле и подключить её к нескольким cpp модулям
Yandex
Объявления
18.11.2012, 17:05     Оптимизация кода
Ответ Создать тему
Опции темы

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