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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
#1

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

18.11.2012, 01:10. Просмотров 659. Ответов 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). Хорошая критика как ничто поможет мне)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 01:10     Оптимизация кода
Посмотрите здесь:

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

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

оптимизация кода - C++
Задача: определить, является ли последовательность скобок действительной. Длинна строки не превышает 100000. Например: № Input Output ...

Оптимизация кода - C++
Есть вот такой кусочек кода integer h (integer k,n) {return k–n*3 ;} . . . . . z = h (k1, n2) ; Подскажите - как его можно...

оптимизация кода - C++
Добрый вечер всем. У меня такая проблема: написал прогу, необходимо продемонстрировать ее работу. Т.е. есть L2 список, дек и массив деков,...

Оптимизация кода - C++
Как сравнить 2 строки. Вот как их задавал в ходе программы string h,b; ... char * text = NULL; if ( OpenClipboard(0) ) { ...

Оптимизация кода - C++
Программа ищет одинаковые файлы в папке где сама находится(по маске или расширению), по хэшу, и перемещает все копии в отдельную папку. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 01:13     Оптимизация кода #2
Можно использовать Sleep для паузы
MrGluck
Модератор
Эксперт CЭксперт С++
7175 / 4341 / 633
Регистрация: 29.11.2010
Сообщений: 11,803
18.11.2012, 01:15     Оптимизация кода #3
C++
1
Sleep(1000); // пауза на 1 секунду
а ваш цикл - это извращение
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 01:17  [ТС]     Оптимизация кода #4
А в какой она библиотеке, подскажите?
MrGluck
Модератор
Эксперт CЭксперт С++
7175 / 4341 / 633
Регистрация: 29.11.2010
Сообщений: 11,803
18.11.2012, 01:18     Оптимизация кода #5
windows.h
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 01:22     Оптимизация кода #6
Цитата Сообщение от coloc Посмотреть сообщение
А в какой она библиотеке, подскажите?
В windows.h
Sleep(кол_во_миллисекунд);
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.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
18.11.2012, 03:30     Оптимизация кода #8
coloc, область видимости переменной должна быть минимальна. Я даже после беглого просмотра вашео кода нашел несколько глобальных переменных, которые используются в одной функции. Собственно, их нужно перенести в эту функцию.

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

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

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

Иногда данные и методы можно удобно объединять в структуры и классы
coloc
погромист
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.11.2012, 12:09  [ТС]     Оптимизация кода #9
Спасибо за критику, буду стараться. (А те переменные с странным названием я назвал случайно. Просто вечером дописывал программу, все на скорую руку делал). И еще вопрос: глобальные переменные создаются до вызова main?
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++
Народ я тут написал простенькую программу которая вычесляет x из уровнения вида a+x=b x+a=b a+b=x Тоесть пишешь например:...

Оптимизация кода - C++
Здравствуйте! у меня есть такая функция, которая очень часто вызывается: int fun(int x_,int y_,int z_) { for(int k=0;k&lt;80;k++) {...

Оформление и оптимизация кода - C++
Собссно, сабж и есть, покритикуйте пожалуйста мой код, подскажите, что где неправильно...т.е нерационально, чем можно заменить, что лучше...

Оптимизация, редактирование кода - C++
Здраствуйте! Пишу крестики-нолики, но одно меня смущает, как это можно оптимизировать, поставить на цикл, а то ниче в голову не лезет. И...


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

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

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

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