Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13

Игра начинающего программиста

07.12.2015, 22:52. Показов 1704. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем проблема такая есть игра, когда её запускаешь, то какой бы ты не выбрал уровень сложности то все равно выпадают только 2 вида картинок, а их 7!
Код игры:
okno:
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
// Подключения необходимых библиотек
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
// Класс окна, в котором размещено игровое поле
class okno extends JFrame
{   
    private static final long serialVersionUID = 1L;
    private pole gameP; // Закрытая Переменная класса - игровое поле
    private int slogn; // Закрытая Переменная класса - сложность игры
    
    // Обработчик событий нажатий на клавиши
    private class myKey implements KeyListener  
    {
            // Метод, который срабатывает при нажатии
            public void keyPressed(KeyEvent e)
            {
                // Получение кода нажатой клавиши
                int key_ = e.getKeyCode();
                
                // Выход из программы, если нажат - Esc 
                if (key_==27) System.exit(0);                               
                
                else if (key_==37) // Если нажата стрелка влево
                {
                    // Контроль перемещения влево за пределы окна
                    if (gameP.x-30>-48) gameP.x-=30;
                    else gameP.x=752;
                }
                
                /*else if (key_==38) // Если нажата стрелка вверх
                {
                    // Контроль перемещения вверх за пределы окна
                    if (gameP.y-30>0) gameP.y-=30;
                    else gameP.y=465;
                }
                
            else if (key_==40) // Если нажата стрелка down
            {
                // Контроль перемещения down за пределы окна
                if (gameP.y+30<465) gameP.y+=30;
                else gameP.y=0;
            }*/
                
                else if (key_==39) // Если нажата стрелка вправо
                {
                    // Контроль перемещения вправо за пределы окна                    
                    if (gameP.x+30<752) gameP.x+=30;
                    else gameP.x=-48;
                }
                
            }
            public void keyReleased(KeyEvent e) {}
            public void keyTyped(KeyEvent e) {}
       }                
    
    // Конструктор класса
    public okno(int slogn)
    {
        // Помещение сложности, выбранной пользователем в переменную класса
        this.setSlogn(slogn);
        // Подключение обработчика события для клавиатуры к окну     
        addKeyListener(new myKey());
        // Установка активности окна
        setFocusable(true);
        
        // Задание размеров и положения окна
        setBounds(10,10,800,600);
        // Задание заголовка окна
        setTitle("Игра: Помоги системному администратору");
        // Запрет изменения размеров окна
        setResizable(false);
        // Операция завершения работы приложения при 
        // закрытии окна
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // Создание объекта - игрового поля
        gameP = new pole(slogn);
        // Прикрепление (вложение) панели - игрового поля в окно
        Container con = getContentPane();
        con.add(gameP);
        
        // Сделать окно видимым 
        setVisible(true);
    }
 
    public int getSlogn() {
        return slogn;
    }
 
    public void setSlogn(int slogn) {
        this.slogn = slogn;
    }
}
 
game:
 
// Подключения необходимых библиотек
import javax.swing.*;
 
// Главный класс игры
public class game {
 
    //private static okno window;
 
    private static okno window;
 
    // Главный метод, который запускает игру
    public static void main(String[] args) {
        
           // Вызов диалогового окна для ввода сложности игры
           String rez = JOptionPane.showInputDialog(null,"Введите сложность игры от 1 до 7:","Сложность игры",1);
           
           // Помещение результата выбора в переменную целого типа
           int slogn = rez.charAt(0)-'0';
           
           // Проверка, что введена цифра от 1 до 7
           if ((slogn>=1)&&(slogn<=7))
           {
              setWindow(new okno(slogn));
           }
    }
 
    public static okno getWindow() {
        return getWindow();
    }
 
    public static void setWindow(okno window) {
        game.window = window;
    }
 
}
 
pole:
 
import javax.imageio.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
 
class pole extends JPanel
{
      private Image shapka; 
      private Image fon; 
      public int x = 400;
      private int slogn; 
      public int summ=0;
      private podar[] gamePodar; 
 
      private podar[] gameBomb;
 
      private Image end_game; 
      public Timer timerUpdate,timerDraw; 
 
       public pole(int slogn)
       {           
           this.slogn = slogn;            
           try
           {
             shapka = ImageIO.read(new File("shapka.png"));
           }
           catch(IOException ex) {}
 
           try
           {
             fon = ImageIO.read(new File("fon.png"));
           }
           catch(IOException ex) {}
 
           try
           {
             end_game = ImageIO.read(new File("end_game.png"));
           }
           catch(IOException ex) {}        
 
           gamePodar = new podar[7];
           for (int n=0;n<7;n++)
           {
               try
               {
                   gamePodar[n] = new podar(ImageIO.read(new File("n"+n+".png")));
               }
               catch (IOException ex) {}
           }
       
           gameBomb = new podar[7];
           for (int i=0;i<7;i++)
           {
               try
               {
                   gameBomb[i] = new podar(ImageIO.read(new File("d"+i+".png")));
               }
               catch (IOException ex) {}
           }
 
           
           timerUpdate = new Timer(3000,new ActionListener() {              
                public void actionPerformed(ActionEvent e) {
                   updateStart();
                }
            });         
           timerUpdate.start();                
           
           timerDraw = new Timer(50,new ActionListener() {              
                public void actionPerformed(ActionEvent e) {
                   repaint(); 
                }
            });         
           timerDraw.start(); 
                                                                            
       }
           
       public void paintComponent(Graphics gr)
       {
           super.paintComponent(gr);
           gr.drawImage(fon, 0, 0, null); 
           gr.drawImage(shapka, x, 465, null); 
           ///!!!!!!!!!!!!!!!!!!!!!!!!!ОТРИСОВКА СЧЕТА ИГРЫ
           String str=Integer.toString(summ);
            gr.setFont(new Font("Courier New", Font.ITALIC, 30));
            gr.setColor(Color.white);
            gr.drawString(str, 50, 50);
 
 
           for (int i=0;i<7;i++)
           {
                   gamePodar[i].draw(gr); 
                   if (gamePodar[i].act==true) 
                   {
                   if ((gamePodar[i].y+gamePodar[i].img.getHeight(null))>=470)
                   {
                        if (Math.abs(gamePodar[i].x - x) > 75) 
                        {
                            gr.drawImage(end_game, 0, 0, null); 
                            timerDraw.stop();
                            timerUpdate.stop(); 
                            break; 
                        }
                        else {
                            gamePodar[i].act=false;
                            //СЧЕТ
                            summ=summ+1;
                        
                        }
                   }
                   }
           }
       
       //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
       for (int i=0;i<7;i++)
       {
               gameBomb[i].draw(gr); 
               if (gameBomb[i].act==true) 
               {
               if ((gamePodar[i].y+gameBomb[i].img.getHeight(null))>=470)
               {
                    if (Math.abs(gameBomb[i].x - x) < 75) 
                    {
                        gr.drawImage(end_game, 0, 0, null); 
                        timerDraw.stop();
                        timerUpdate.stop(); 
                        break; 
                    }
                    else gameBomb[i].act=false;
                  //СЧЕТ
                    summ=summ+1;
                    
               }
               }
       }
   
 
        }
      
       private void updateStart()
       {
           int kol=0; 
           for (int i=0;i<7;i++) 
           {
              if (gamePodar[i].act==false) 
              {
                 if (kol<slogn) 
                 {
                   gamePodar[i].start(); 
                   gameBomb[i].start();
                   break; 
                 }
              }
              else kol++; 
           }
       }       
}
 
podar:
/* Подключения необходимых библиотек*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
// Класс для подарка, падающего сверху
class podar {
    
    public Image img; // Изображение подарка
    public int x,y; // Положение подарка на игровом поле, в пикселях, x - отступ слева, y - отступ сверху
    public Boolean act; // Переменная логического типа, показывающая активность подарка, есть он игровом поле или нет
    Timer timerUpdate; // Таймер, отвечающий за движение подарка вниз
    
    // Конструктор класса
    public podar(Image img)
    {
        // Создание и настройка таймера, отвечающего за движение подарка вниз
        timerUpdate = new Timer(150,new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
                vniz(); // Метод, осуществляющий движение подарка вниз
        }
        });     
        this.img = img; // Передача изображения из круглых скобок Конструктора класса в переменную класса
        act=false; // Изначально делаем подарок неактивным, отсутствующим на игровом поле        
    }
    
    // Метод, выполняющий активизацию подарка на игровом поле, вывод его сверху игрового поля
    public void start()
    {
        timerUpdate.setDelay(100); // Установка временной задержки для таймера
        timerUpdate.start(); // Запуск таймера
        y = 0; // Отступ сверху в пикселях
        x = (int)(Math.random()*700); // Отступ слева в пикселях, получаем случайным образом от 0 до 700
        act = true; // 
    }
    
    // Метод, осуществляющий движение подарка вниз 
    public void vniz()
    {
       if (act==true) // Если подарок активен на игровом поле
       {
          y+=9; // Увеличение отступа сверху на 10 пикселей
       }
       if ((y+img.getHeight(null))>=470) // Если подарок достиг нижней границы
       {
          timerUpdate.stop(); // Остановка таймера
       }
    }
    
    // Метод, выполянющий отрисовку подарка на игровом поле, если он активен
    public void draw(Graphics gr)
    {
        if (act==true)
        {
           gr.drawImage(img,x,y,null); // Рисование изображения
        }       
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2015, 22:52
Ответы с готовыми решениями:

Нужна литература для начинающего программиста по java
нужна литература для начинающего программиста по java из того ненормального изобилия литературы которое выложено на этом форуме...

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

Какая должна быть зарплата у начинающего Java-программиста?
Подскажите, сколько денег нужно предложить молодому начинающему, но очень сообразительному и образованному джависту, чтобы он пришел к нам...

13
 Аватар для FireOwl
62 / 44 / 14
Регистрация: 01.07.2009
Сообщений: 145
08.12.2015, 00:24
1) Классы стоит называть с большой буквы. Это здорово повышает читаемость кода.
2) Зачем каждому подарку свой таймер? Есть же общий updateTimer. Можно двигать все подарки в нем.
3) Вот этот блок
Java
1
2
3
4
5
try
{
    end_game = ImageIO.read(new File("end_game.png"));
}
catch(IOException ex) {}
стоит вынести в отдельную функцию. Чтобы не копипастить одинаковые блоки кода. Как-нибудь так:
Java
1
2
3
4
5
public Image loadImage(String filename) {
    try {
        return ImageIO.read(new File(filename));
    } catch(IOException e) { e.printStackTrace(); }
}
4) Не стоит инициализировать новый объект Font при каждой отрисовке:
Java
1
gr.setFont(new Font("Courier New", Font.ITALIC, 30));
Лучше вынеси его в поле класса, и инициализируй один раз, в конструкторе. А в функции paintComponent только обращайся к нему.
Java
1
gr.setFont(font);
5) Таймер updateStart наверное стоит заменить на таймер update. И вызывать его раз в 50, как repaint. А внутри - уже делать проверки, и двигать подарки. (К пункту 2)
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13
08.12.2015, 07:13  [ТС]
FireOwl, а Вы бы не могли полностью код переписать а то я не очень понял что, куда?
0
 Аватар для FireOwl
62 / 44 / 14
Регистрация: 01.07.2009
Сообщений: 145
08.12.2015, 10:36
SashaZayats, нет полностью не могу =) Нет времени.
Попытался вчера найти ошибку, о которой написано в стартовом посте, но не нашел. Зато взгляд зацепился за несколько других вещей которые можно улучшить и поправить. Собственно о них и был мой пост.
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
08.12.2015, 10:58
SashaZayats, мне кажется у вас путаница с переменной slogn
она у вас и локальная и переменная класса и где-то сеттеры используются
посмотрите в дебаге, что в итоге передается в методы
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13
08.12.2015, 12:16  [ТС]
Можно поподробнее?
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
08.12.2015, 12:40
что подробнее?

вы определитесь
либо локальную переменную используете и передаете ее в параметрах конструктора и метода
Цитата Сообщение от SashaZayats Посмотреть сообщение
int slogn = rez.charAt(0)-'0';
либо поле класса
Цитата Сообщение от SashaZayats Посмотреть сообщение
private int slogn; // Закрытая Переменная класса - сложность игры
и тогда параметры вообще не нужны
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13
08.12.2015, 20:01  [ТС]
Можешь написать код?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.12.2015, 20:14
ты точно программист?
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13
08.12.2015, 20:32  [ТС]
Я только учусь, взял за основу одну игру и начал переделывать!
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.12.2015, 20:35
так начал переделывать или кто-то за тебя должен переделывать?
в чем цимес такого подхода?
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13
08.12.2015, 20:48  [ТС]
У меня возникла проблема, если бы я сам смог решить её я бы просил помощи!
0
 Аватар для FireOwl
62 / 44 / 14
Регистрация: 01.07.2009
Сообщений: 145
09.12.2015, 02:08
SashaZayats, если только учишься, лучше написать игру самому, чем переделывать чужой исходник. Причем такого сомнительного качества.

Вот тут можно почитать отличные туториалы по играм на Java Swing: http://zetcode.com/tutorials/javagamestutorial/
Есть примеры классических игр типа арканоида и змейки.
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 13
09.12.2015, 17:04  [ТС]
Всем спасибо! Тему считаю закрытой!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2015, 17:04
Помогаю со студенческими работами здесь

Вопрос от начинающего программиста
Добрый день! Интересует вопрос: возможно ли отметить и измерить длину обозначенных отрезков на изображении в VB. Если да, то подскажите...

Трудности начинающего программиста
Всем привет, сегодня я решил начать изучать С++, так как в школе я прогуливал уроки информатики, поэтому в программировании я ничего не...

Сборка начинающего программиста
Здравствуйте! Учусь на программиста. Возникла необходимость собрать новый ПК(т.к. старому 7 - ой году уже...). В железе не очень...

Для начинающего программиста
Здравствуйте, уважаемые Гуру программирования под 1С. Я начинающий программист 1С. Я часто смотрел вакансии и очень сталкивался в...

Cтратегия развития начинающего программиста
Здравствуйте уважаемые форумчане. Работаю 5 месяцев с низкой зарплатой в неком ОАО, пишем мы на Qt(c/c++) и то в основном тесты, основное...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru