Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для kaheu
34 / 0 / 1
Регистрация: 19.08.2013
Сообщений: 246

в чём ошибка?

31.05.2014, 14:51. Показов 573. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
недавно начал учить java и решил написать простую сетевую игру, но при запуске игры после соединения персонажи не могут двигатся а соединение не установлено, никак не могу понять в чём проблема, я не правильно создал поток?
server:
Кликните здесь для просмотра всего текста
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
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
 
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class gs extends Canvas implements Runnable {
    private static final long serialVersionUID = 1L;
    
    private boolean running;
    
    public static int WIDTH = 700;
    public static int HEIGHT = 700;
    public static String NAME = "game";
    
    private boolean leftPressed = false;
    private boolean rightPressed = false;
    private boolean downPressed = false;
    private boolean upPressed = false;
    
    public static Sprite hero;
    public static int x = 100;
    public static int y = 100;
    public static Sprite p2;
    public static int x2 = 0;
    public static int y2 = 0;
    public static String sx2;
    public static String sy2;
    public String cx2;
    public String cy2;
    
    public void start() {
        running = true;
        new Thread(this).start();
    }
    
    public void run() {
        long lastTime = System.currentTimeMillis();
        long delta;
        
        init();
        init2();
        
        while(running) {
            delta = System.currentTimeMillis() - lastTime;
            lastTime = System.currentTimeMillis();  
            render();
            try {
                update(delta);
            } catch (InterruptedException e) {
                
                e.printStackTrace();
            }
        }
    }
    
    public void init() {
        addKeyListener(new KeyInputHandler());
        hero = getSprite("man.png");
    }
    public void init2() {
        addKeyListener(new KeyInputHandler());
        p2 = getSprite("man.png");
    }
    
    public void render() {
        BufferStrategy bs = getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(2);
            requestFocus();
            return;
        }
        
        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, getWidth(), getHeight());
        hero.draw(g, x, y);
        p2.draw(g, x2, y2);
        g.dispose();
        bs.show();
    }
    
    public void update(long delta) throws InterruptedException {
        if (leftPressed == true) {
            x--;
            Thread.sleep(3);
            System.out.println(x);
            if(x < -1)
            {
               leftPressed = false;
            }
            
        }
        if (rightPressed == true) {
            x++;
            Thread.sleep(3);
            System.out.println(x);
            if(x > 616)
            {
               rightPressed = false;
            }
        }
            if (downPressed == true) {
                y++;
                Thread.sleep(3);
                System.out.println(y);
                if(y > 616)
                {
                   downPressed = false;
                }
            }
            if (upPressed == true) {
                y--;
                Thread.sleep(3);
                System.out.println(y);
                if(y < -1)
                {
                   upPressed = false;
                }
            }
            
        }
    
 
    public Sprite getSprite(String path) {
        BufferedImage sourceImage = null;
        
        try {
            URL url = this.getClass().getClassLoader().getResource(path);
            sourceImage = ImageIO.read(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        Sprite sprite = new Sprite(Toolkit.getDefaultToolkit().createImage(sourceImage.getSource()));
        
        return sprite;
    }
    public class multi extends Thread
    {
         public void run()
         {
             new Thread(this).start();
        int port = 12345;
        try{
            ServerSocket ss = new ServerSocket(port);
             Socket socket = ss.accept();    
             InputStream sin = socket.getInputStream();
             OutputStream sout = socket.getOutputStream();
             DataInputStream in = new DataInputStream(sin);
             DataOutputStream out = new DataOutputStream(sout);
             BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
            while(true)
            {
            cx2 = in.readUTF();
            x2 = Integer.valueOf( cx2 ).intValue();
            cy2 = in.readUTF();
            y2 = Integer.valueOf( cy2 ).intValue();
            sx2 = String.valueOf( x );
            out.writeUTF(sx2);
            sy2 = String.valueOf( y );
            out.writeUTF(sy2);
            }
        }catch(Exception x) { x.printStackTrace(); }
         }
    }
    
    public static void main(String[] args) {
        gs game = new gs();
        game.setPreferredSize(new Dimension(WIDTH, HEIGHT));
        JFrame frame = new JFrame(gs.NAME);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(game, BorderLayout.CENTER);
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
        game.start();
    }
    
    private class KeyInputHandler extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_A) {
                if (x > -1)
                {
                leftPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_D) {
                if(x < 616)
                {
                rightPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_S) {
                if(y < 616)
                {
                downPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_W) {
                if(y > -1)
                {
                upPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_P) {
                {
                     gs c = new gs() ;
                     c.start() ;
                }
            }
        } 
        
        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_A) {
                leftPressed = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_D) {
                rightPressed = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_S) {
                downPressed = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_W) {
                upPressed = false;
            }
        
        }
    }
}

Client:
Кликните здесь для просмотра всего текста
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
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.*;
 
import javax.swing.JOptionPane;
import javax.swing.JDialog;
import javax.swing.JTextField;
 
import java.beans.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
 
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
public class gc extends Canvas implements Runnable {
    private static final long serialVersionUID = 1L;
    
    private boolean running;
    
    public static int WIDTH = 700;
    public static int HEIGHT = 700;
    public static String NAME = "Valtog's game";
    
    private boolean leftPressed = false;
    private boolean rightPressed = false;
    private boolean downPressed = false;
    private boolean upPressed = false;
    
    public static Sprite hero;
    public static int x = 0;
    public static int y = 0;
    public static Sprite player2;
    public static String sx2;
    public static String sy2;
    public static int x2 = 0;
    public static int y2 = 0;
    public String cx2;
    public String cy2;
    
    public void start() {
        running = true;
        new Thread(this).start();
    }
    
    public void run() {
        long lastTime = System.currentTimeMillis();
        long delta;
        
        init();
        init2();
        
        while(running) {
            delta = System.currentTimeMillis() - lastTime;
            lastTime = System.currentTimeMillis();  
            render();
            try {
                update(delta);
            } catch (InterruptedException e) {
                
                e.printStackTrace();
            }
        }
    }
    
    public void init() {
        addKeyListener(new KeyInputHandler());
        hero = getSprite("man.png");
    }
    public void init2() {
        addKeyListener(new KeyInputHandler());
        player2 = getSprite("man.png");
    }
    
    
    public void render() {
        BufferStrategy bs = getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(2);
            requestFocus();
            return;
        }
        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, getWidth(), getHeight());
        hero.draw(g, x, y);
        player2.draw(g, x2, y2);
        g.dispose();
        bs.show();
    }
    
    public void update(long delta) throws InterruptedException {
        if (leftPressed == true) {
            x--;
            Thread.sleep(3);
            System.out.println(x);
            if(x < -1)
            {
               leftPressed = false;
            }
            
        }
        if (rightPressed == true) {
            x++;
            Thread.sleep(3);
            System.out.println(x);
            if(x > 616)
            {
               rightPressed = false;
            }
        }
            if (downPressed == true) {
                y++;
                Thread.sleep(3);
                System.out.println(y);
                if(y > 616)
                {
                   downPressed = false;
                }
            }
            if (upPressed == true) {
                y--;
                Thread.sleep(3);
                System.out.println(y);
                if(y < -1)
                {
                   upPressed = false;
                }
            }
            
        }
    
 
    public Sprite getSprite(String path) {
        BufferedImage sourceImage = null;
        
        try {
            URL url = this.getClass().getClassLoader().getResource(path);
            sourceImage = ImageIO.read(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        Sprite sprite = new Sprite(Toolkit.getDefaultToolkit().createImage(sourceImage.getSource()));
        
        return sprite;
    }
    public class multi extends Thread
    {
         public void run()
         {
             int serverPort = 12345;
             String address = JOptionPane.showInputDialog(null, "Ip чата:");
                try {
                     InetAddress ipAddress = InetAddress.getByName(address);
                     Socket socket = new Socket(ipAddress, serverPort);
                     InputStream sin = socket.getInputStream();
                     OutputStream sout = socket.getOutputStream();
                     DataInputStream in = new DataInputStream(sin);
                     DataOutputStream out = new DataOutputStream(sout);
                     BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
            while(true)
            {
            cx2 = in.readUTF();
            x2 = Integer.valueOf( cx2 ).intValue();
            cy2 = in.readUTF();
            y2 = Integer.valueOf( cy2 ).intValue();
            sx2 = String.valueOf( x );
            out.writeUTF(sx2);
            sy2 = String.valueOf( y );
            out.writeUTF(sy2);
            }
        }catch(Exception x) { x.printStackTrace(); }
         }
    }
    
    public static void main(String[] args) {
             
        gc game = new gc();
        game.setPreferredSize(new Dimension(WIDTH, HEIGHT));
        JFrame frame = new JFrame(gc.NAME);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(game, BorderLayout.CENTER);
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
        game.start();
    }
    
    private class KeyInputHandler extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_A) {
                if (x > -1)
                {
                leftPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_D) {
                if(x < 616)
                {
                rightPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_S) {
                if(y < 616)
                {
                downPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_W) {
                if(y > -1)
                {
                upPressed = true;
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_P) {
                {
                     gc c = new gc();
                     c.start();
                }
            }
        }
        
        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_A) {
                leftPressed = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_D) {
                rightPressed = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_S) {
                downPressed = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_W) {
                upPressed = false;
            }
        
        }
 
    }
}

класс sprite
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Sprite {
    private Image image;
    
    public Sprite(Image image) {
        this.image = image;
    }
 
    public int getWidth() {
        return image.getWidth(null);
    }
 
    public int getHeight() {
        return image.getHeight(null);
    }
    
    public void draw(Graphics g,int x,int y) {
        g.drawImage(image,x,y,null);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2014, 14:51
Ответы с готовыми решениями:

Ошибка method range of object global failed в чем ошибка
Sub ПроверкаВвода() Dim A As Range Dim B As Range Dim i As...

Ошибка -is not a valid integer value (не является допустимым целым значением), не понимаю в чем ошибка
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

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

1
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
31.05.2014, 16:02
Я бы хотел помочь, но, боюсь, это легче переписать, чем вникать. Я вам даю совет как ООП программист - научитесь правильно моделировать структуру проекта. Программируя на ООП языках, следует понимать концепцию ООП. ТАк вот, концепция подразумевает использование целой структуры-иерархии классов, вспомогательных классов/интерфейсов/оберток и так далее. Ваш проект сейчас написан на уровне процедурного программирования - алгоритмический подход. Но это неправильно с точки зрения Java, как, прежде всего, ООП языка программирования.

Объекты должны общаться между собой. Запомните это. Теперь к вашему проекту. Сервер и клиент должны тоже общаться. Но начать нужно с вопроса - а для чего нужна модель "клиент-сервер" ? Все очень просто. Иногда возникают ситуации, когда нескольким пользователям нужно вместе что-то делать, как, например, в сетевых играх, тогда им нужно как-то взаимодействовать друг с другом. Таким образом, все, что происходит на стороне клиента - это все, что хочет делать пользователь - то есть он хочет, к примеру, двинуться, но сам клиент не может решить - может он двигаться или нет, потому что есть место серверной логики - ведь именно сервер играет роль "сборщика" информации всех клиентов, обработчика этой информации и центра принятия решений.

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

Это может выглядеть запутанно, но вы должны продумать модель взаимодействия клиента и сервера.

В общем, почитайте эту статью. Все станет на места.

Надеюсь, суть ясна.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2014, 16:02
Помогаю со студенческими работами здесь

Ошибка "Stack around the variable 'text' was corrupted"
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка. #include &lt;iostream&gt; ...

В чем ошибка?По одной строке нормально в базу заходят,а две сразу вылетает ошибка?
INSERT INTO `jos_menu` (`id`, `menutype`, `name`, `alias`, `link`, `type`, `published`, `parent`, `componentid`, `sublevel`, `ordering`,...

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка?
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Ошибка 2 error LNK2019, не пойму в чем ошибка
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ &quot;int __cdecl game(void)&quot; (?game@@YAHXZ) в...

В чем ошибка? При запуске программы открывается консоль и сразу ошибка о завершении программы
К тому же выдает warning: deprecated conversion from string constant to 'char*' . #include &lt;iostream&gt; #include &lt;string.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru