Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
погромист
 Аватар для coloc
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550

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

18.11.2012, 01:10. Показов 1735. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru