Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
SysOp
 Аватар для IamSCORPION
42 / 41 / 5
Регистрация: 13.04.2009
Сообщений: 274

Оптимизация программы

08.04.2010, 02:01. Показов 780. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал простую программу, а ресурсов она использует безграничное количество. Как можно оптимизировать данную программу???

Class Main
Java
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
package galaxy;
//==============================================================================
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;
//==============================================================================
public class Main extends Frame implements Runnable, KeyListener
{
    Thread thread;  //основний потік програми
    int sleepTime = 5;
    boolean runOK = true;
    MediaTracker tracker;   //обєкт для завантаження графічних зображень
    Image backgroundImage, spaceShipImage, enemyShipImage, memoryImage;
    Vector<spaceShip> vector_spaceShip = new Vector<spaceShip>();
    Vector<enemyShip> vector_enemyShip = new Vector<enemyShip>();
    Vector<Rectangle> vector_rectangle = new Vector<Rectangle>();
    Vector<ball> vector_ball = new Vector<ball>();
    Graphics memoryGraphics;
 
    ball[] bal = new ball[3];
    int ball_Max = 3;
    static int table_width = 900, table_height = 600;
    int enemyShipsHorizontal = 8, enemyShipsVertical = 3;
    int countEnemyShip = enemyShipsVertical * enemyShipsHorizontal;
 
    Font font2 = new Font("TimesRoman", Font.PLAIN,  35);
    //==========================================================================
    Main()
    {
        setTitle("Galaxy by SCORION version 1.0000000000001");
        tracker = new MediaTracker(this);
 
        //===========  фонове зображення  ======================================
        backgroundImage = Toolkit.getDefaultToolkit().getImage("background.jpg");
        tracker.addImage(backgroundImage, 0);
 
        //===========  зображення корабля  =====================================
        spaceShipImage = Toolkit.getDefaultToolkit().getImage("spaceShip.gif");
        tracker.addImage(spaceShipImage, 0);
 
        //===========  зображення ворожих кораблів  ============================
        enemyShipImage = Toolkit.getDefaultToolkit().getImage("enemyShip.gif");
        tracker.addImage(enemyShipImage, 0);
 
        //===========  встановлюєм розміри вікна програми  =====================
        setSize(table_width, table_height);
        setResizable(false);    //заборона зміни розміру вікна програми
        setVisible(true);
 
        memoryImage = createImage(getSize().width, getSize().height);
        memoryGraphics = memoryImage.getGraphics();
 
        addKeyListener(this);
 
        //===========  запуск основного потоку програми  =======================
        thread = new Thread(this);
        thread.start();
 
        //===========  закриття програми  ======================================
        this.addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent windowEvent)
            {
                System.exit(0);
            }
        });
    }
    //==========================================================================
    public void run()
    {
        //===========  визначення меж графічної області  =======================
        Rectangle edges = new Rectangle(0 + getInsets().left, 0 + getInsets().top, getSize().width - (getInsets().left + getInsets().right), getSize().height - (getInsets().top + getInsets().bottom));
 
        vector_rectangle.add(edges);
        vector_spaceShip.add(new spaceShip(spaceShipImage, edges, this));
 
        int startLocationEnemyShipX = 155, startLocationEnemyShipY = 50;
        int enemyShipHIndex, enemyShipVIndex;
        for(enemyShipVIndex = 0; enemyShipVIndex < enemyShipsVertical; enemyShipVIndex++)
        {
            for(enemyShipHIndex = 0; enemyShipHIndex < enemyShipsHorizontal; enemyShipHIndex++)
            {
                vector_enemyShip.add(new enemyShip(enemyShipImage, startLocationEnemyShipX, startLocationEnemyShipY, edges, this));
                startLocationEnemyShipX += 80;
            }
            startLocationEnemyShipY += 60;
            startLocationEnemyShipX = 155;
        }
 
        //======================================================================
        this.addKeyListener(vector_spaceShip.elementAt(0));
        
        spaceShip obj_spaceShip;
        enemyShip obj_enemyShip;
 
        int way = 1;
        while (countEnemyShip > 0)
        {
            //=======  вивід куль  =============================================
            if(0 < vector_ball.size())
            {
                for(int index_ball=0;index_ball < vector_ball.size();index_ball++)
                {
                    vector_ball.elementAt(index_ball).fly();
                }
            }
 
            //=======  вивід космічного корабля  ===============================
            obj_spaceShip = (spaceShip) vector_spaceShip.elementAt(0);
 
            //=======  вивід ворожих кораблів  =================================
            for(int enemyShipIndex = 0; enemyShipIndex < countEnemyShip; enemyShipIndex++)
            {
                obj_enemyShip = (enemyShip) vector_enemyShip.elementAt(enemyShipIndex);
                if(0 < vector_ball.size())
                {
                    if(vector_ball.elementAt(0).getPositionX() == obj_enemyShip.location.x && vector_ball.elementAt(0).getPositionY() < obj_enemyShip.location.y)
                    {
                        vector_ball.remove(0);
                        vector_enemyShip.remove(enemyShipIndex);
                        countEnemyShip -= 1;
                    }
                }
                if(0 < vector_ball.size())
                {
                    if(0 > vector_ball.elementAt(0).getPositionY()) { vector_ball.remove(0); }
                }
                
                if(obj_enemyShip.location.x == 800) { way = 2;}
                if(obj_enemyShip.location.x == 50){ way = 1; }
 
                obj_enemyShip.move(memoryGraphics, way);
            }
 
            //=====  пауза на час sleepTime  ===================================
            try { Thread.sleep(sleepTime); }
            catch (Exception exp) {System.out.println(exp.getMessage());}
 
            //=====  повне перемальовування екрану  ============================
            repaint();
        }
    }
    //==========================================================================
    @Override
    public void update(Graphics g)
    {
        if(countEnemyShip <= 0)
        {
            memoryGraphics.setColor(Color.red);
            memoryGraphics.setFont(font2);
            memoryGraphics.drawString("Нічого собі...", 340, 250);
            memoryGraphics.drawString("THE END", 360, 300);
        }
        else
        {
            //=========  фонове зображення  ========================================
            memoryGraphics.drawImage(backgroundImage, 0, 0, this);
 
            //=========  зображення космічного корабля  ============================
            vector_spaceShip.elementAt(0).draw(memoryGraphics);
 
            //=========  зображення куль  ==========================================
            if(0 < vector_ball.size())
            {
                 for(int index_ball=0;index_ball < vector_ball.size();index_ball++)
                 {
                      vector_ball.elementAt(index_ball).draw(memoryGraphics);
                 }
            }
 
            //========  зображення ворожих кораблів  ===============================
            for(int enemyShipIndex = 0; enemyShipIndex < countEnemyShip; enemyShipIndex++)
            {
                 vector_enemyShip.elementAt(enemyShipIndex).draw(memoryGraphics);
            }
            //=======  перемальовування буфера  ==================================== 
        }
        g.drawImage(memoryImage, 0, 0, this);
    }
    //==========================================================================
    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
    public void keyPressed(KeyEvent ke)
    {
        int k = ke.getKeyCode();
        //======  якщо нажати пробіл - утворюється нова куля  ==================
        if (k == KeyEvent.VK_SPACE)
        {
            vector_ball.add(new ball(vector_spaceShip.elementAt(0).getPositionX() + 25, vector_spaceShip.elementAt(0).getPositionY() - 5));
        }
    }
    //==========================================================================
    public static void main(String[] args)
    {
        new Main();
    }
}
Class ball
Java
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
package galaxy;
//==============================================================================
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
//==============================================================================
public class ball
{
    static int ballWidthSize = 10, ballHeightSize = 15;
    static int speed = 5;
    Point location;
    public ball(int posX, int posY)
    {
        this.location = new Point(posX,posY);
    }
   //==========================================================================
    public int getPositionX()
    {
        return location.x;
    }
    //==========================================================================
    public int getPositionY()
    {
        return location.y;
    }
    //==========================================================================
    public void fly()
    {
        location.y -= speed;
    }
    //==========================================================================
    public void draw(Graphics g)
    {
        g.setColor(Color.red);
        g.fillOval(location.x, location.y, ballWidthSize, ballHeightSize);
        
    }
}
Class enemyShip
Java
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
package galaxy;
//==============================================================================
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
//==============================================================================
class enemyShip
{
    int boardSpeed = 10;
    Component tank;
    Image enemyShipImage;
    Point location;
    Point velocity;
    Rectangle edges;
    //==========================================================================
    enemyShip(Image enemyShipImage, int startLocX, int startLocY, Rectangle edges, Component tank)
    {
        this.edges = edges;
        this.enemyShipImage = enemyShipImage;
        this.tank = tank;
        this.location = new Point (startLocX, startLocY);
    }
    //==========================================================================
    public void draw(Graphics g)
    {
        g.drawImage(enemyShipImage, location.x, location.y, tank);
    }
      //==========================================================================
    public int getPositionX()
    {
        return location.x;
    }
    //==========================================================================
    public int getPositionY()
    {
        return location.y;
    }
    //==========================================================================
   void move(Graphics g, int way)
    {
        if(way == 1) { location.x += 1; }
        else if(way == 2) { location.x -= 1; }
 
        g.drawImage(enemyShipImage, location.x, location.y, tank);
    }
}
Class spaceShip
Java
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
package galaxy;
//==============================================================================
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
//==============================================================================
public class spaceShip implements KeyListener
{
    static int board_x = 10, board_y = 25;
    int boardSpeed = 10;
    Component tank;
    Image spaceShipImage;
    Point location;
    Point velocity;
    Rectangle edges;
    //==========================================================================
    public spaceShip(Image spaceShipImage, Rectangle edges, Component tank)
    {
        this.edges = edges;
        this.spaceShipImage = spaceShipImage;
        this.tank = tank;
        board_x = (int) ((this.edges.getMaxX() / 7) * 3.2);
        board_y = (int) ((this.edges.getMaxY()) - 80);
    }
     //==========================================================================
    public int getPositionX()
    {
        return board_x;
    }
    //==========================================================================
    public int getPositionY()
    {
        return board_y;
    }
    //==========================================================================
    public void draw(Graphics g)
    {
        g.drawImage(spaceShipImage, board_x, board_y, tank);
    }
    //==========================================================================
    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
    public void keyPressed(KeyEvent ke)
    {
        int k = ke.getKeyCode();
        if (k == KeyEvent.VK_LEFT && board_x  > 70)
        {
            board_x -= boardSpeed;
        }
        if (k == KeyEvent.VK_RIGHT && board_x < edges.getMaxX() - 120)
        {
           board_x += boardSpeed;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2010, 02:01
Ответы с готовыми решениями:

Оптимизация программы
Здравствуйте. есть задача удалить все символы, кроме пробелов, не являющиеся буквами из какого-нибудь предложения типа и оставить хотя бы...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Оптимизация программы
Здравствуйте,задали задачку :Напишите программу, которая будет выполнять последовательность запросов вида ADD num, PRESENT num и COUNT (без...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2010, 02:01
Помогаю со студенческими работами здесь

Оптимизация программы
Я решил задачу, но она не проходит по времени. Помогите ее доделать. Число n не больше {10}^{6}, а x, y и z не превосходят {10}^{3} ...

Оптимизация программы
Задание: Решите задачу, используя только элементарные конструкции (последовательность, ветвления, циклы). Программа должна быть рабочей!...

Оптимизация программы
У меня есть задача и рабочая программа. Суть в том, что программа выполняется очень долго, а там лимит по времени и я не могу ее...

Оптимизация программы
Здравствуйте! Решил я изучить паскаль(причины и история в спойлере:)) Отучившись пол года в ЛЭТИ и благополучно вылЭтив из него, мне...

Оптимизация программы
Делаю курсовую работу по методу молекулярной динамики. Смоделировала взаимодействие 16 частиц, всё работает. При попытке сделать большее...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru