Курсов проект № 1 по “Интернет програмиране с Java”
1.1. Морски шах
Автори: Димитър Георгиев,
Светлин Наков
Версия: 0.9
Последна промяна: 22.03.2004
Да се напише програма на Java, която използвайки възможностите на пакета java.net реализира сървър за игра на морски шах. Сървърът предоставя възможност на няколко потребителя едновременно да играят по двойки един срещу друг морски шах по класическите правила на тази игра.
Клиентското приложение си комуникира със сървъра по следния модел: изпраща точно 1 ред текст и след това чете редове текст (отговор от сървъра), докато стигне до празен ред. Едва тогава може отново да праща. Сървърът трябва да реализира следните команди:
HELO username – задава име на потребител. Тази команда се използва само в началото, след като клиентското приложение се свърже към сървъра. Пример:
клиент: |
HELO pesho |
сървър: |
+OK, registered as [pesho] |
Друг пример:
клиент: |
HELO pesho |
сървър: |
-Error, such user already exists: [pesho] |
Останалите команди са валидни само след успешно изпълнение на командата HELO:
LIST – връща списък на всички потребители, свързани към сървъра. Пример:
клиент: |
LIST |
сървър: |
pesho zer0Kewl m0rpheus |
LISTGAMES – връща списък на всички потребители, които са създали игра и чакат да се появи втори играч, който да се включи да играе срещу тях. Пример:
клиент: |
LISTGAMES |
сървър: |
m0rpheus gosho |
JOINGAME username – включва се в играта, създадена от зададения потребител. Ако в сървъра няма регистриран потребител, който чака противник, срещу когото да играе, се връща грешка. Пример:
клиент: |
JOINGAME m0rpheus |
сървър: |
+OK. Game starting. You will play second. |
Пример за грешка:
клиент: |
JOINGAME kiro |
сървър: |
-Error: This game is already full. |
Още един пример:
клиент: |
JOINGAME koko |
сървър: |
-Error: No such user [koko]. |
CREATEGAME – създава нова игра и започва да чака за включване на противник. Командата връща резултата си едва след като противникът се включи. Пример:
клиент: |
CREATEGAME |
сървър: |
(waits for some other user to join this game) +User kiro joined your game. 1 2 3 4 5 6 7 8 9 Please enter your move: |
Когато играта започне двамата играчи се редуват да играят един след друг. Докато единият играч е на ход, другият чака сървърът да го уведоми, че противникът е местил и е негов ход. При невалиден ход сървърът подканва играчът, който го е посочил да играе отново. Ходовете се означават с числа от 1 до 9. които съответстват на полетата от дъската. При победа на някой от играчите сървърът уведомява другия играч и му прекъсва връзката. Ето как би могла да изглежда конзолата на потребителя bira при една примерна игра:
клиент: |
HELO bira |
сървър: |
+OK, registered as [bira] |
клиент: |
LIST |
сървър: |
pesho vodka |
клиент: |
JOINGAME mente |
сървър: |
+Error: No such user [mente]. |
клиент: |
CREATEGAME |
сървър: |
(waits for some other user to join this game) +User vodka joined your game. 1 2 3 4 5 6 7 8 9 Please enter your move: |
клиент: |
5 (waiting vodka to play) |
сървър: |
Vodka’s move is [8]. 1 2 3 4 0 6 7 X 9 Please enter your move: |
клиент: |
4 (waiting vodka to play) |
сървър: |
Vodka’s move is [2]. 1 X 3 0 0 6 7 X 9 Please enter your move: |
клиент: |
6 |
сървър: |
1 X 3 0 0 0 7 X 9 You won! (server closes the connection) |
Ето как би могла да изглежда конзолата на потребителя vodka при същата игра:
клиент: |
HELO pepelianka |
сървър: |
-Error, such user already exists: [pepelianka] |
клиент: |
MENTE |
сървър: |
-Error: Invalid command [MENTE]. |
клиент: |
HELO vodka |
сървър: |
+OK, registered as [vodka] |
клиент: |
JOINGAME bira |
сървър: |
+OK. Game starting. You will play second. (waiting for bira to play) Bira’s move is [5]. 1 2 3 4 0 6 7 8 9 Please enter your move: |
клиент: |
8 (waiting vodka to play) |
сървър: |
Bira’s move is [4]. 1 2 3 0 0 6 7 X 9 Please enter your move: |
клиент: |
2 (waiting vodka to play) |
сървър: |
Bira’s move is [6]. 1 X 3 0 0 0 7 X 9 You lost! (server closes the connection) |
Трябва да се поддържа обслужване на много потребители едновременно играещи отделни партии, независими една от друга. Един потребител може да играе само в не повече от една партия в даден момент. По желание можете да направите и друг потребителски интерфейс, но описаната функционалност трябва задължително да се покрива.
Не е задължително да пишете клиентско приложение. За клиент може да се използва стандартен telnet.