Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Серверная часть для фреймворкового приложения / 19 сообщений из 19, страница 1 из 1
26.08.2013, 16:12:37
    #38377595
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
Написал с горем пополам простое клиентское фреймворковое приложение(с помощью swing,awt).
Мне уже посоветовали книжку Killer Game Programming in Java , но пока оно слишком сильное для меня, да и еще там реализация сервера только в конце книги, а приступить к обдумыванию темы хочется уже сейчас.
Хочется его модернизировать и сделать возможным, чтобы 2 пользователя могли находиться в одном общем пространстве (с помощью двух клиентов)
Посоветуйте в какую сторону читать! И что?
...
Рейтинг: 0 / 0
26.08.2013, 16:33:35
    #38377626
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
это решение должно быть связано с сокетами скорее всего)
советуем
...
Рейтинг: 0 / 0
26.08.2013, 16:37:32
    #38377630
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
пока Шилда почитаю про Сеть, пока молчите(
...
Рейтинг: 0 / 0
26.08.2013, 17:21:29
    #38377683
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
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.
package Shooter2Dv26082013;

import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] ar) {
        int serverPort = 6666; // здесь обязательно нужно указать порт к которому привязывается сервер.
        String address = "127.0.0.1"; // это IP-адрес компьютера, где исполняется наша серверная программа.
        // Здесь указан адрес того самого компьютера где будет исполняться и клиент.

        try {
            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
            System.out.println("Any of you heard of a socket with IP address " + address + " and port " + serverPort + "?");
            Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
            System.out.println("Yes! I just got hold of the program.");

            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом.
            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));
            String line = null;
            System.out.println("Type in something and press enter. Will send it to the server and tell ya what it thinks.");
            System.out.println();

            while (true) {
                line = keyboard.readLine(); // ждем пока пользователь введет что-то и нажмет кнопку Enter.
                System.out.println("Sending this line to the server...");
                out.writeUTF(line); // отсылаем введенную строку текста серверу.
                out.flush(); // заставляем поток закончить передачу данных.
                line = in.readUTF(); // ждем пока сервер отошлет строку текста.
                System.out.println("The server was very polite. It sent me this : " + line);
                System.out.println("Looks like the server is pleased with us. Go ahead and enter more lines.");
                System.out.println();
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
    }
}

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.
package Shooter2Dv26082013;

import java.net.*;
import java.io.*;
public class Server {
    public static void main(String[] ar)    {
        int port = 6666; // случайный порт (может быть любое число от 1025 до 65535)
        try {
            ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
            System.out.println("Waiting for a client...");

            Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
            System.out.println("Got a client :) ... Finally, someone saw me through all the cover!");
            System.out.println();

            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);

            String line = null;
            while(true) {
                line = in.readUTF(); // ожидаем пока клиент пришлет строку текста.
                System.out.println("The dumb client just sent me this line : " + line);
                System.out.println("I'm sending it back...");
                out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
                out.flush(); // заставляем поток закончить передачу данных.
                System.out.println("Waiting for the next line...");
                System.out.println();
            }
        } catch(Exception x) { x.printStackTrace(); }
    }
}


Вот нашел клиент-сервер с помощью socket'ов.
Можно ли с помощью класса DataInputStream прочитать объект. У этого класса реализованы getString, getShort, но нету ничего с объектами. Как передать объект по сокету? (да я знаю, что информация передается по битам)
Или просто за несколько заходов читать информацию? Или существует еще дополнительный класс?
...
Рейтинг: 0 / 0
26.08.2013, 18:22:57
    #38377781
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaaКак передать объект по сокету?При помощи сериализации .
...
Рейтинг: 0 / 0
27.08.2013, 10:33:41
    #38378223
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
почитал про сокеты, сериализацию теперь возник новый вопрос: что оставлять на клиентской части, а что на серверной?
В двух словах. Есть Player(игрок), есть Background(задний фон собственно, на нем происходит вся прорисовка), фон зациклен.
Есть еще класс SpectralDagger - по сути говоря треугольник, который движется до конца области видимости.
Если Player или SpectralDagger сталкиваются с противниками Enemy (реализованы с помощью потоков, появляются за зоной видимости, после прохождения зоны видимости удаляются), то происходит действие какое-то и проигрывается музыка EventMusic (тут помогает ExecutorService). А так же помимо всего AudioThread фоновая музыка играет в отдельном потоке.
source
AudioThread________________________________
Код: 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.
package Shooter2Dv26082013;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 23.08.13
 * Time: 9:33
 */
public class AudioThread implements Runnable{
    @Override
    public void run() {

                try {
                    String path = "res/sounds/background.mp3";
                    Player p = new Player(getClass().getClassLoader().getResourceAsStream(path));
                    p.play();
                } catch (JavaLayerException e) {
                    e.printStackTrace();
                }

    }
}


Background
Код: 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.
package Shooter2Dv26082013;

import javax.swing.*;
import javax.swing.Timer;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 23.08.13
 * Time: 9:29
 */
public class Background extends JPanel implements ActionListener, Runnable {
    public int countCollisions=0;
    private int moneyForKilling=4000;
    private int time = 20;                       // 0.02s
    Timer mainTimer = new Timer(time, this);
    Image img = new ImageIcon(getClass().getClassLoader().getResource("res/pics/background.jpg")).getImage();

    Player p = new Player();
    SpectralDagger sd = new SpectralDagger(p.y);

    Thread enemiesFactory = new Thread(this);
    Thread audioThread = new Thread(new AudioThread());

    List<Enemy> enemies = new ArrayList<Enemy>();

    public Background(){
        mainTimer.start();
        enemiesFactory.start();
        audioThread.start();
        addKeyListener(new MyKeyAdapter());
        setFocusable(true);
    }

    private void increaseMoney(){
        p.money++;
    }

    private class MyKeyAdapter extends KeyAdapter{
       public void keyPressed(KeyEvent e){
          p.keyPressed(e);
          sd.keyPressed(e);


       }
       public void keyReleased(KeyEvent e){
          p.keyReleased(e);
       }
    }

    public void paint(Graphics g){
        g.drawImage(img,p.layer1,0,null);
        g.drawImage(img,p.layer2,0,null);
        g.drawImage(sd.img,sd.x,sd.y,null);
        g.drawImage(p.img,p.x,p.y,null);
        g.setColor(Color.BLUE);
        g.drawString("Money: "+p.money/time,100,30);
        g.drawString("Kills: "+countCollisions,200,30);

        Iterator<Enemy> i = enemies.iterator();
        while (i.hasNext()){
            Enemy e = i.next();
            if (e.x <= -100) i.remove();
            else {
            e.move();
            g.drawImage(e.img,e.x,e.y,null);
            }

    }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        p.move();
        sd.move(p.y);
        repaint();
        testCollisionWithEnemies();
        increaseMoney();

    }

    private void testCollisionWithEnemies() {
        Iterator<Enemy> i = enemies.iterator();
        while (i.hasNext()){
            Enemy e = i.next();
            if (sd.getRect().intersects(e.getRect())) {
            ExecutorService executor = Executors.newSingleThreadExecutor();
            countCollisions++;
            p.money=p.money+moneyForKilling;
                executor.submit(new EventMusic(countCollisions));
                executor.shutdown();
            i.remove();}
            if (p.getRect().intersects(e.getRect())) {
                JOptionPane.showMessageDialog(null,"Вы проиграли! ! !");
                System.exit(1);}
        }
    }

    @Override
    public void run(){
        while(true){
            Random random = new Random();
            try {
                if (p.v!=0) {
                Thread.sleep(random.nextInt(1000));
                enemies.add(new Enemy(1100,
                        random.nextInt(300),
                        this)); }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
}


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.
package Shooter2Dv26082013;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 26.08.13
 * Time: 16:59
 */
import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] ar) {
        int serverPort = 6666; // здесь обязательно нужно указать порт к которому привязывается сервер.
        String address = "127.0.0.1"; // это IP-адрес компьютера, где исполняется наша серверная программа.
        // Здесь указан адрес того самого компьютера где будет исполняться и клиент.

        try {
            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
            System.out.println("Any of you heard of a socket with IP address " + address + " and port " + serverPort + "?");
            Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
            System.out.println("Yes! I just got hold of the program.");

            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом.
            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));
            String line = null;
            System.out.println("Type in something and press enter. Will send it to the server and tell ya what it thinks.");
            System.out.println();

            while (true) {
                line = keyboard.readLine(); // ждем пока пользователь введет что-то и нажмет кнопку Enter.
                System.out.println("Sending this line to the server...");
                out.writeUTF(line); // отсылаем введенную строку текста серверу.
                out.flush(); // заставляем поток закончить передачу данных.
                line = in.readUTF(); // ждем пока сервер отошлет строку текста.
                System.out.println("The server was very polite. It sent me this : " + line);
                System.out.println("Looks like the server is pleased with us. Go ahead and enter more lines.");
                System.out.println();
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
    }
}


Enemy
Код: 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.
package Shooter2Dv26082013;

import javax.swing.*;
import java.awt.*;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 22.08.13
 * Time: 9:29
 */
public class Enemy extends Player {
    int x;
    int y;
    Background background;
    Image img = myGetImage();

    public Enemy (int x, int y, Background background){
        this.x=x;
        this.y=y;
        this.background=background;
    }

    public Rectangle getRect(){
        return new Rectangle(x,y,100,120);
    }

    @Override
    public void move() {
      x=x-background.p.v;
    }

    private Image myGetImage(){
        Random rand = new Random();
        int value = rand.nextInt(4)+1;
        if (value==1) { Image img = new ImageIcon(getClass().getClassLoader().getResource("res/models/shaker.png")).getImage(); return img; }
        else if (value==2) { Image img = new ImageIcon(getClass().getClassLoader().getResource("res/models/dragonknight.png")).getImage(); return img; }
        else if (value==3)  { Image img = new ImageIcon(getClass().getClassLoader().getResource("res/models/sandking.png")).getImage(); return img; }
        else { Image img = new ImageIcon(getClass().getClassLoader().getResource("res/models/beastmaster.png")).getImage(); return img; }
    }
}


EventMusic
Код: 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.
package Shooter2Dv26082013;

import java.util.Random;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

public class EventMusic implements Runnable{
    private int countCollisions;
    @Override
    public void run() {
            String path=null;
            switch (this.countCollisions){
                case 1: path="res/sounds/firstblood.mp3"; break;
                case 2: path="res/sounds/megakill.mp3"; break;
                case 3: path="res/sounds/tripplekill.mp3"; break;
                case 4: path="res/sounds/ultrakill.mp3"; break;
                case 10: path="res/sounds/ownage.mp3"; break;
                case 20: path="res/sounds/unstoppable.mp3"; break;
                case 30: path="res/sounds/godlike.mp3"; break;
                case 40: path="res/sounds/holyshit.mp3"; break;
                    default:
                        Random rand = new Random();
                        int value = rand.nextInt(3)+1;
                        if (value==1){ path="res/sounds/defaultkill1.mp3"; break;}
                        if (value==2){ path="res/sounds/defaultkill2.mp3"; break;}
                        else { path="res/sounds/defaultkill3.mp3"; break;}
            }
            try {
                Player p = new Player(getClass().getClassLoader().getResourceAsStream(path));
                p.play();
                p.close();
            } catch (JavaLayerException e) {
                e.printStackTrace();
            }
        }
    public EventMusic(Integer countCollisions){
        this.countCollisions=countCollisions;
    }
 }


Main
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package Shooter2Dv26082013;

import javax.swing.*;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 23.08.13
 * Time: 9:29
 */
public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Dota2 Shooter");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000, 520);
        frame.add(new Background());
        frame.setResizable(false);
        frame.setVisible(true);

    }
}


Player
Код: 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.
package Shooter2Dv26082013;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 23.08.13
 * Time: 9:29
 */
public class Player {
    public static final int MAX_V=50;
    public static final int MAX_TOP=10;
    public static final int MAX_BTM=350;
    Image img_c = new ImageIcon(getClass().getClassLoader().getResource("res/models/spectre.png")).getImage();
    Image img_u = new ImageIcon(getClass().getClassLoader().getResource("res/models/spectre_up.png")).getImage();
    Image img_d = new ImageIcon(getClass().getClassLoader().getResource("res/models/spectre_down.png")).getImage();
    Image img= img_c;
    public int money=0;
    public int lvl=1;
    int v=0;
    int dv;
    int s;

    int x=10;
    int y=130;
    int dy=0;

    int layer1=0;
    int layer2=1914;
    public void move(){
       s+=v;
       v+=dv;
       if (v<=0) v=0;
       if (v>=MAX_V) v=MAX_V;
       y-=dy;
       if (y<=MAX_TOP) y=MAX_TOP;
       if (y>=MAX_BTM) y=MAX_BTM;
       if (layer2-v <=0){
           layer1=0;
           layer2=1914;
       }
       else {
       layer1-=v;
       layer2-=v;
       }
   }

    public Rectangle getRect(){
        return new Rectangle(x,y,130,120);
    }

    public void keyPressed(KeyEvent e){
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_RIGHT) {
            dv=1;
        }
        if (key == KeyEvent.VK_LEFT) {
            dv=-1;
        }
        if (key == KeyEvent.VK_UP) {
            dy=10;
            img=img_u;
        }
        if (key == KeyEvent.VK_DOWN) {
            dy=-10;
            img=img_d;
        }
    }
    public void keyReleased(KeyEvent e){
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_RIGHT|| key==KeyEvent.VK_LEFT) {
            dv=0;
        }
        if (key == KeyEvent.VK_UP|| key==KeyEvent.VK_DOWN) {
            dy=0;
            img=img_c;
        }
    }

}


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.
package Shooter2Dv26082013;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 26.08.13
 * Time: 16:59
 */
import java.net.*;
import java.io.*;
public class Server {
    public static void main(String[] ar)    {
        int port = 6666; // случайный порт (может быть любое число от 1025 до 65535)
        try {
            ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
            System.out.println("Waiting for a client...");

            Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
            System.out.println("Got a client :) ... Finally, someone saw me through all the cover!");
            System.out.println();

            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);

            String line = null;
            while(true) {
                line = in.readUTF(); // ожидаем пока клиент пришлет строку текста.
                System.out.println("The dumb client just sent me this line : " + line);
                System.out.println("I'm sending it back...");
                out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
                out.flush(); // заставляем поток закончить передачу данных.
                System.out.println("Waiting for the next line...");
                System.out.println();
            }
        } catch(Exception x) { x.printStackTrace(); }
    }
}


SpectralDagger
Код: 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.
package Shooter2Dv26082013;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 26.08.13
 * Time: 9:17
 */
public class SpectralDagger extends Player {
    public static final int MAX_X=1500;
    public static final int MIN_DX=0;
    public static final int MAX_DX=10;
    public static final int START_X=50;
    public static final int START_Y=50;

    Image img = new ImageIcon(getClass().getClassLoader().getResource("res/models/spectraldagger.png")).getImage();

    int x=MAX_X;
    int y;
    int dx=MIN_DX;
    int py;

    public void move(Integer newPlayerY){
        py=newPlayerY+START_X;
        x+=dx;
        if (x<=START_X) x=START_X;
        if (x>=MAX_X) {x=MAX_X;  dx=MIN_DX;}
    }

    public Rectangle getRect(){
        return new Rectangle(x,y,128,55);
    }

    public void keyPressed(KeyEvent e){
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_SPACE) {
            if (x==MAX_X) {x=START_X; dx=MAX_DX; y=py;}
            else {dx=MAX_DX; }
        }
    }
    public SpectralDagger(Integer startPlayerY){
        this.y=startPlayerY+START_Y;
    }

}



Вопрос: Что оставить на клиенте и что нужно на сервере?
Музыка и анимация вся у клиента? На сервер отсылаем только координаты игрока.. Получаем координаты противников и других игроков? А что делать с музыкой? Когда один из клиентов столкнется с противником, надо чтобы звук в двух клиентах играл.
...
Рейтинг: 0 / 0
27.08.2013, 11:00:31
    #38378276
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
Игры очень специфичная штука для архитектуры.
Это на gameDev_ru
Тут архитектура про "работать". Она отличается.
...
Рейтинг: 0 / 0
27.08.2013, 11:12:59
    #38378303
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
это задача про передачу и обработку данных с помощью TCP/IP
я мог бы передавать другие данные, например циферки какие-нибудь, с разных клиентов, их обрабатывать и возвращать обратно
я вот набросал мини-рисунок, посмотрел что получилось и понял что почти все придется переписать^^
есть желающие помочь советами в моем нелегком для меня пути?) можете начать прямо с этой модели, что в ней плохо?
опускаем оптимизацию и все прочее, пока надо сделать костыль.
...
Рейтинг: 0 / 0
27.08.2013, 11:32:53
    #38378337
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaaэто задача про передачу и обработку данных с помощью TCP/IP
я мог бы передавать другие данные, например циферки какие-нибудь, с разных клиентов, их обрабатывать и возвращать обратно
- можно передать ЛЮБЫЕ данные по потоколу.
Есть библиотеки которые помогают преобразовать объект в поток и родить его потом обратно - сериализация.
Что тут думать - пиши. Не вижу проблемы.
А что оставлять на сервере ДЛЯ игр - специфично.
Для sql_ru это клиент-сервер + тонкий клиент.
...
Рейтинг: 0 / 0
27.08.2013, 11:47:51
    #38378370
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
это задача про передачу и обработку данных с помощью TCP/IP
я мог бы передавать другие данные, например циферки какие-нибудь, с разных клиентов, их обрабатывать и возвращать обратно
я вот набросал мини-рисунок, посмотрел что получилось и понял что почти все придется переписать^^
есть желающие помочь советами в моем нелегком для меня пути?) можете начать прямо с этой модели, что в ней плохо?
опускаем оптимизацию и все прочее, пока надо сделать костыль.
...
Рейтинг: 0 / 0
27.08.2013, 11:48:30
    #38378372
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
мда, ну просто капец, модераторы спасайте
не первый раз возвращаюсь в хроме по ссылкам и мне пишет, сообщение опубликовано
...
Рейтинг: 0 / 0
27.08.2013, 14:07:58
    #38378637
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
Есть проблема.

Client class
Код: 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.
package Shooter2Dv27082013;

/**
 * Created with IntelliJ IDEA.
 * User: Eldar N.
 * Date: 26.08.13
 * Time: 16:59
 */
import javax.swing.*;
import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] ar) {
        JFrame frame = new JFrame("Dota2 Shooter");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000, 520);
        Background bg = new Background();
        frame.add(bg);
        frame.setResizable(false);
        frame.setVisible(true);

        int serverPort = 6666; // здесь обязательно нужно указать порт к которому привязывается сервер.
        String address = "127.0.0.1"; // это IP-адрес компьютера, где исполняется наша серверная программа.
        // Здесь указан адрес того самого компьютера где будет исполняться и клиент.
        Player p = new Player();
        try {
            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
            System.out.println("Any of you heard of a socket with IP address " + address + " and port " + serverPort + "?");
            Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
            System.out.println("Yes! I just got hold of the program.");

            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом.
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
            System.out.println("Streams are created. Let's try send these objects");
            System.out.println();
            // Получем объекты с помощью входного и выходного потоков сокета

            System.out.println("P.x : "+bg.p.x);

                ObjectInputStream ois = new ObjectInputStream(sin);
                System.out.println("Work here2");
                ObjectOutputStream oos = new ObjectOutputStream(sout);
                System.out.println("Work here3");
                oos.writeObject(bg.p);
                oos.flush();
                oos.close();    /*
                System.out.println("Player X: " + bg.p.x + " Player Y: " + bg.p.y);
                bg.p = (Player) ois.readObject();
                ois.close();
                System.out.println("New X: " + p.x + "New Y: "+p.y);
                System.out.println("Looks like the server is pleased with us. Go ahead and enter more lines.");
                System.out.println();          */


            System.out.println("P.x : "+bg.p.x);

        } catch (Exception x) {
            x.printStackTrace();
        }
    }
}


Результат:
Код: java
1.
2.
3.
4.
5.
Any of you heard of a socket with IP address 127.0.0.1 and port 6666?
Yes! I just got hold of the program.
Streams are created. Let's try send these objects

P.x : 10


WTF? Почему нет моих "Work here2", "Work here3". Ну а дальше вообще молчу.
...
Рейтинг: 0 / 0
27.08.2013, 15:32:33
    #38378800
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
новый вопрос.
Я планирую запускать клиент на локальном компьютере в несколько окон, следовательно IP и порт будут одинаковые.
Как сделать так, чтобы новое подключение характеризовалось как уникальное? Как подсоединиться несколькими клиентами на один сокет?(или надо создавать пул сокетов?)
Код: java
1.
if (true) HOW?
...
Рейтинг: 0 / 0
27.08.2013, 16:02:23
    #38378858
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaaЯ планирую запускать клиент на локальном компьютере в несколько окон

это че такое? несколько программ что ли?
eldarkaaследовательно IP и порт будут одинаковые.

нифига, порт клиента будет разный
...
Рейтинг: 0 / 0
27.08.2013, 16:05:38
    #38378869
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
почему порт будет разный? если я в программе четко задал порт и хочу запустить программу два раза, то порт у них будет одинаковый и законнектиться сможет один...
как сделать чтобы одна программа подключалась N раз?
блин, я же вроде внятно написал(
...
Рейтинг: 0 / 0
27.08.2013, 16:18:33
    #38378890
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaa,
порты монопольно захватываются процессом. _Обычно_
...
Рейтинг: 0 / 0
27.08.2013, 16:20:38
    #38378894
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaa,
осталось чуть, до библиотеки клиент-сервер
...
Рейтинг: 0 / 0
27.08.2013, 16:27:38
    #38378911
goalinternet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaa,

попробуйте использовать apache mina
http://mina.apache.org/mina-project/index.html
у них есть туториал, у вас очень много вопросов отпадет http://mina.apache.org/mina-project/quick-start-guide.html
...
Рейтинг: 0 / 0
27.08.2013, 16:57:40
    #38378985
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Серверная часть для фреймворкового приложения
eldarkaaпочему порт будет разный? если я в программе четко задал порт и хочу запустить программу два раза, то порт у них будет одинаковый и законнектиться сможет один...
как сделать чтобы одна программа подключалась N раз?
блин, я же вроде внятно написал( у Socket туева хуча конструкторов, тебе нужен
Код: java
1.
Socket s=new Socket("127.0.0.1",55555);


у клиента порт будет разный
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Серверная часть для фреймворкового приложения / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]