Курсов проект № 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.