погромист
 Аватар для coloc
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550

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

18.11.2012, 01:10. Показов 1744. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2012, 01:10
Ответы с готовыми решениями:

Оптимизация кода
Пожалуйста форумчане как можно сократить этот код Особенно от 27 до 90 строки #include &lt;iostream&gt; using namespace std; int...

Оптимизация кода
Доброго времени суток. Имеется такой код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { ...

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

10
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2012, 01:13
Можно использовать Sleep для паузы
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.11.2012, 01:15
C++
1
Sleep(1000); // пауза на 1 секунду
а ваш цикл - это извращение
1
погромист
 Аватар для coloc
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
18.11.2012, 01:17  [ТС]
А в какой она библиотеке, подскажите?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.11.2012, 01:18
windows.h
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2012, 01:22
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
В windows.h
Sleep(кол_во_миллисекунд);
1
 Аватар для komand0
8 / 8 / 4
Регистрация: 20.06.2012
Сообщений: 225
18.11.2012, 01:23
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
dos.h - sleep()
synchapi.h - Sleep() - включена в Windows.h

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

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

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

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

Иногда данные и методы можно удобно объединять в структуры и классы
1
погромист
 Аватар для coloc
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
18.11.2012, 12:09  [ТС]
Спасибо за критику, буду стараться. (А те переменные с странным названием я назвал случайно. Просто вечером дописывал программу, все на скорую руку делал). И еще вопрос: глобальные переменные создаются до вызова main?
0
 Аватар для komand0
8 / 8 / 4
Регистрация: 20.06.2012
Сообщений: 225
18.11.2012, 16:56
глобальные переменные создаются до того как будут использованы) ну да, обычно до main или в заголовочном файле
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2012, 17:05
Цитата Сообщение от coloc Посмотреть сообщение
И еще вопрос: глобальные переменные создаются до вызова main?
Они "создаются" во время компиляции.

Добавлено через 1 минуту
Цитата Сообщение от komand0 Посмотреть сообщение
ну да, обычно до main или в заголовочном файле
попробуйте создать переменную в заголовочном файле и подключить её к нескольким cpp модулям
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2012, 17:05
Помогаю со студенческими работами здесь

Оптимизация кода
Нужно както упростить програму /* Дан массив а если в нем встречается такой элемент что а &lt;a то а элемент нужно удалить его из...

Оптимизация кода
В С++ я совсем недавно, вот задали задачку: Перемножить 2 матрицы MxМ, элементами которых являются матрицы NxN. Код я вроде написал,...

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

Оптимизация кода
if (sum % 10 == 1 || sum % 10 == 2 || sum % 10 == 3 || sum % 10 == 4) Можно ли как-то оптимизировать данную &quot;строку&quot;? За...

Оптимизация кода
Доброго времени сутки господа у меня к вам вопрос как можно оптимызуваты данный код? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...


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

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

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru