Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13

Фрукт должен появлятся в произвольном месте на игровом поле

30.03.2017, 23:05. Показов 1253. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи!!!

Я хочу сделать маленькую игру по типу PacMan
делаю ее на Swing!

и хочу что б мой фрукт появлялся random на игровом поле
Нооо появляется где хочет!

Так вот у меня есть класс Frut
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
public class Frut {
    String name;
    Frut(){
         name="@";
ImageIcon frut;
MyGame mg;
    }   
    public String getName(){
        return name;
        
    }
    
    public ImageIcon setImFrut(){
        return new ImageIcon("apple.png");
        
    }
    
    public int cordFrX(){
        int cordFrX=1+(int)(Math.random()*13);
        return cordFrX;
    }
    public int cordFrY(){
        int cordFrY=1+(int)(Math.random()*13);
        return cordFrY;
    }
есть методы которые генерять координаты массива cordFrX,cordFrY

я хочу сделать метод что б он return этот фрукт на поле а не на тектурах!!!
Вот сама игра
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
public class MyGame extends JFrame implements KeyListener{
    JLabel [][] maps;
    Pac pac;
    Round round;
    Frut frut;
    JPanel panel;
    JLabel PacMan;
    JLabel[][] map;
    ImageIcon str;
    private String wall="0";
    private String road="1";
    private int i=1;    
    private int j=1;
 
    MyGame(){
        super("My Pacman v.1.0");
        panel= new JPanel();
        round=new Round();
        
        
        setMaps();
        
        frut= new Frut();
        pac = new Pac();
        map[i][j].setIcon(pac.setPac());
        map[i][j].setText(pac.setPacStr());
        
        setFrut();
        
        
        
        
        
        
        
        this.addKeyListener(this);
        panel.setBackground(Color.BLACK);
        panel.setLayout(new GridLayout(15, 15));
        setContentPane(panel);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(800, 600);
        setVisible(true);
    }
    @Override
public void keyPressed(KeyEvent e){
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if (!map[i][j + 1].getText().toString().equals(wall) ) {
                map[i][j++].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
                
            }
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            if (!map[i][j - 1].getText().toString().equals(wall)) {
                map[i][j--].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
                
            }
        } else if (e.getKeyCode() == KeyEvent.VK_UP) {
            if (!map[i - 1][j].getText().toString().equals(wall)){
                map[i--][j].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
            }
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            if (!map[i + 1][j].getText().toString().equals(wall) ) {
                map[i++][j].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
            }
        }
    }
    
    @Override
    public void keyReleased(KeyEvent e){
        return;
    }
    @Override
    public void keyTyped(KeyEvent e){
        return;
    }
 
public void setMaps(){
    
        int SIZE = 15;
        map = new JLabel[SIZE][SIZE];
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                map[i][j] = new JLabel();
                map[i][j].setSize(96, 60);
                map[i][j].setText(road);
                map[i][j].setIcon(round.road());
                panel.add(map[i][j]);
                
                
            }
        }
        setRound();
        
        
        
        
    }
 
 
    
    
    
 
public void setRound(){
    
    for(int i=0;i<=14;i++){
        for(int j=0;j<=14;j++){
            map[0][j].setText(wall);
            map[0][j].setIcon(round.wall());
            
            map[i][14].setText(wall);
            map[i][14].setIcon(round.wall());
            map[14][j].setText(wall);
            map[14][j].setIcon(round.wall());
            map[i][0].setText(wall);
            map[i][0].setIcon(round.wall());
            
            
        }
    }
    map[3][2].setText(wall); map[3][2].setIcon(round.wall());
    map[3][3].setText(wall); map[3][3].setIcon(round.wall());
    map[3][4].setText(wall); map[3][4].setIcon(round.wall());
    
    map[3][10].setText(wall); map[3][10].setIcon(round.wall());
    map[3][11].setText(wall); map[3][11].setIcon(round.wall());
    map[3][12].setText(wall); map[3][12].setIcon(round.wall());
    
    map[1][7].setText(wall); map[1][7].setIcon(round.wall());
    map[2][7].setText(wall); map[2][7].setIcon(round.wall());
    map[3][7].setText(wall); map[3][7].setIcon(round.wall());
    map[4][7].setText(wall); map[4][7].setIcon(round.wall());
    
 
    map[13][7].setText(wall); map[12][7].setIcon(round.wall());
    map[12][7].setText(wall); map[13][7].setIcon(round.wall());
    
    map[7][1].setText(wall); map[7][1].setIcon(round.wall());
    map[7][2].setText(wall); map[7][2].setIcon(round.wall());
    map[7][3].setText(wall); map[7][3].setIcon(round.wall());
    map[7][4].setText(wall); map[7][4].setIcon(round.wall());
    map[7][5].setText(wall); map[7][5].setIcon(round.wall());
    
    map[7][13].setText(wall); map[7][13].setIcon(round.wall());
    map[7][12].setText(wall); map[7][12].setIcon(round.wall());
    map[7][11].setText(wall); map[7][11].setIcon(round.wall());
    map[7][10].setText(wall); map[7][10].setIcon(round.wall());
    map[7][9].setText(wall); map[7][9].setIcon(round.wall());
    
    map[12][1].setText(wall); map[12][1].setIcon(round.wall());
    map[12][2].setText(wall); map[12][2].setIcon(round.wall());
    map[12][3].setText(wall); map[12][3].setIcon(round.wall());
    
    map[12][11].setText(wall); map[12][11].setIcon(round.wall());
    map[12][12].setText(wall); map[12][12].setIcon(round.wall());
    map[12][13].setText(wall); map[12][13].setIcon(round.wall());
    
    map[10][4].setText(wall); map[10][4].setIcon(round.wall());
    map[10][5].setText(wall); map[10][5].setIcon(round.wall());
    map[10][6].setText(wall); map[10][6].setIcon(round.wall());
    map[10][7].setText(wall); map[10][7].setIcon(round.wall());
    map[10][8].setText(wall); map[10][8].setIcon(round.wall());
    map[10][9].setText(wall); map[10][9].setIcon(round.wall());
    map[10][10].setText(wall); map[10][10].setIcon(round.wall());
    
    map[9][7].setText(wall); map[9][7].setIcon(round.wall());
    map[8][7].setText(wall); map[8][7].setIcon(round.wall());
    map[7][7].setText(wall); map[7][7].setIcon(round.wall());
    
    
}
 
public void setFrut(){
    while(map[frut.cordFrX()][frut.cordFrY()].getText().equals(wall)){
        if(!map[frut.cordFrX()][frut.cordFrY()].getText().equals(wall)){
            map[frut.cordFrX()][frut.cordFrY()].setText(frut.name);
            map[frut.cordFrX()][frut.cordFrY()].setIcon(frut.setImFrut());
            
        }
        break;
    }
}   
 
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2017, 23:05
Ответы с готовыми решениями:

PictureBox и рисование в произвольном месте
Добрый день. Столкнулся с такой задачей. В PictureBox в на задний план помещаю рисунок. Теперь по верх данного рисунка мне надо...

Вывод фигуры в произвольном месте формы
Добрый день не могу разобраться как сделать чтобы фигура (квадрат или треугольник или круг) выводилась в произвольном месте формы, но не...

Нарисовать линию на игровом поле
Задание: нарисовать на игровом поле линию(потом переделаю на то что нужно) при клике Проблема: поле рисую на ура, а вот линия при клике...

13
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
31.03.2017, 21:39
Как понять то что нужен чтобы появился рандомно на поле НО он появляеться где хочет????
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
31.03.2017, 22:37
Метод получения координат делай рекурсивный, и проверку если координата совпадает со стеной метод вызывается повторно
0
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13
31.03.2017, 23:23  [ТС]
подскажите как сделать рекурсивный метод!
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
31.03.2017, 23:38
Java
1
2
3
4
5
6
7
8
9
10
public void setCord () {
 
setX; // получаешь координату
setY; // получаешь координату
if (setX==null && setY == null) { //проверка по этим координатам стена или пусто
//пишешь свой код
} else //если координаты не пустые заново вызывается метод
setCord();
 
}
1
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13
01.04.2017, 12:08  [ТС]
Появляется везде даже на стенках!!!! на который я не хочу что б они появлявлясь ставлю проверку в цыкле while(){
} а оно всеровно где хочет там и рандомится!
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
01.04.2017, 12:29
ValdisNUK, значит проверку не так делаешь, кусок кода с проверкой кинь
0
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13
01.04.2017, 12:33  [ТС]
Java
1
2
3
4
5
6
7
8
public void setFrut(){
    
    while(map[frut.cordFrX][frut.cordFrY].getText().toString().equals(wall)){
        frut.setRandomFr();
        break;
    }
    map[frut.cordFrX][frut.cordFrY].setText(frut.name);
    map[frut.cordFrX][frut.cordFrY].setIcon(frut.setImFrut());
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
01.04.2017, 12:38
Лучший ответ Сообщение было отмечено ValdisNUK как решение

Решение

что за break
Если тебе нужен что бы цикл работал пока не примет правильные координаты, то зачем его останавливать?)
0
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13
01.04.2017, 12:49  [ТС]
емае ))) вот я даю ))) спасибо большое за помощь ))) просто уже так голова забита была что ужас)))
убрал break; и все заработалООоооо))) а можно еще один вопрос )))
со слушателями)))

Добавлено через 3 минуты
Так вот у меня есть тут два слушателя !!! первый отвечает за ходьбу персонажа на panel
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
    @Override
public void keyPressed(KeyEvent e){
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if (!map[i][j + 1].getText().toString().equals(wall) ) {
                map[i][j++].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
                if(map[i][j+1].getText().toString().equals(frut.name)){
                    countFrut++;
                frut=new Frut((int)(Math.random()*14),(int)(Math.random()*14));
                setFrut();
            
                
                }
            }
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            if (!map[i][j - 1].getText().toString().equals(wall)) {
                map[i][j--].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
                
                if(map[i][j-1].getText().toString().equals(frut.name)){
                    countFrut++;
                    frut=new Frut((int)(Math.random()*14),(int)(Math.random()*14));
                    setFrut();
                    
                    
                    }
                
            }
        } else if (e.getKeyCode() == KeyEvent.VK_UP) {
            if (!map[i - 1][j].getText().toString().equals(wall)){
                map[i--][j].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
                
                if(map[i-1][j].getText().toString().equals(frut.name)){
                    countFrut++;
                    frut=new Frut((int)(Math.random()*14),(int)(Math.random()*14));
                    setFrut();
                    
                    
                    
                    }
            }
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            if (!map[i + 1][j].getText().toString().equals(wall) ) {
                map[i++][j].setIcon(round.road());
                map[i][j].setIcon(pac.setPac());
                map[i][j].setText(pac.setPacStr());
                if(map[i+1][j].getText().toString().equals(frut.name)){
                    countFrut++;
                    frut=new Frut((int)(Math.random()*14),(int)(Math.random()*14));
                    setFrut();
                    
                    
                    }
            }
        }
        back();
    }
есть еще второй
который отвечает за кнопку Start !!!
так вот когда я загружаю первую панель с кнопкой Start!!
то перестает работать слушатель который отвечает за ходьбу перса!!!
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
public void InitListeners(){
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            toPanel();
            
            
        }
    });
}
public void toPanel(){
    panel2.setVisible(false);
    setContentPane(panel);
    panel.setVisible(true);
    
    }
public void toPanelEnd(){
    
        panel.setVisible(false);
        setContentPane(panel3);
        panel3.setVisible(true);
        
    
}
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
01.04.2017, 13:02
ValdisNUK, это долго код смотреть, но попробуй дописать repaint;
0
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13
01.04.2017, 13:14  [ТС]
нет, не получается!
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
01.04.2017, 13:24
ValdisNUK, скидывай весь код на git
0
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 13
01.04.2017, 13:30  [ТС]
А есть у вас Icq или Facebook хотел б добавить вас в друзья !!!

Добавлено через 1 минуту
А есть у вас icq или Facebook хотел б вас добавить в друзья!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2017, 13:30
Помогаю со студенческими работами здесь

Надо нарисовать кнопку х в произвольном месте формы
Привет! У меня есть окно, в котором по ряду причин кнопки сворачивания и закрытия не отображаются как в остальных окнах, мне надо...

Вставка числового значения в произвольном месте файла
Коллеги, всем привет. Я новичок и учусь программировать на c++. Есть текстовый файл, в котором находятся 9 значений, а-ля таблица...

Вставка строки/столбца в таблицу в произвольном месте
Поискал в гугле, но не нашёл ответа на вопрос. Можно ли вставить новый ряд перед существующим. Я знаю про setItem, но как я понял новый...

Как установить Label в произвольном месте формы?
Здравствуйте, у меня такой воnрос , читаю книгу Макса Шлее , тут есть тема nро размеры окна виджета ,так вот есть код ...

Получение xaml элемента в произвольном месте дерева
Подскажите как получить в C# код определенного элемента находящегося в окне При условии того что фаил кода не прикреплен к окну и тем...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru