Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roguelike. Мультиплеер. #4

Open
wants to merge 37 commits into
base: master
Choose a base branch
from
Open

Conversation

skychik
Copy link
Owner

@skychik skychik commented May 26, 2021

No description provided.

zhvkgj and others added 30 commits April 25, 2021 12:32
# Conflicts:
#	game-server/src/main/kotlin/ru/ifmo/sd/httpapi/routes/GameRoutes.kt
#	game-server/src/main/kotlin/ru/ifmo/sd/world/configuration/GameConfiguration.kt
…ayer-client

# Conflicts:
#	game-client/src/main/kotlin/ru/ifmo/sd/stuff/ServerAPI.kt
@skychik skychik requested a review from ottergottaott May 26, 2021 07:05
@skychik
Copy link
Owner Author

skychik commented May 26, 2021

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

  1. не всегда выходит убивать локальный сервер при закрытии клиента
  2. по-разному запускается для linux и windows (для win пока не работает)

@ottergottaott
Copy link
Collaborator

Для запуска локальной игры, нужно переключиться через меню.

Странно, что сразу коннектит, а не предлагает выбрать, но ок

Сейчас там какие-то ошибки + локальный сервер запускается через Runtime.exec(), что очень плохо,

Ага, еще карта лагает и мобы чего-то совсем не двигаются(

Copy link
Collaborator

@ottergottaott ottergottaott left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 баллов

Comment on lines +129 to +130
// val hpLabel = JLabel("HP: ")
// infoPanel.add(hpLabel, BorderLayout.WEST)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Опять какие-то закомментированные куски

}
println("Trying to start local server at port=${port}")
println(System.getProperty("user.dir"))
val cmd = "../game-server/build/install/game-server/bin/game-server" // TODO call .bat for windows
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это вот весьма странный способ. На win не будет работать, ага

println(e.localizedMessage)
started = false
}
if (started) break
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хотя бы

while (!started) { ...

а лучше вообще

while (true) {
    try {
        joinLocal()
        break
    } catch (e: Exception) {
        println(e.localizedMessage)
    }
}

До break просто не дойдем, если исключение произошло

}
}

internal fun resetMapSize() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А зачем они internal?

private fun isAvailable(portNr: Int): Boolean {
var portFree: Boolean
try {
ServerSocket(portNr).use { portFree = true }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут тоже return прямо внутри try подошел бы лучше, кажется


private fun placeEnemies(maze: Maze, healths: UnitsHealthStorage, npc: NpcEventProvider) {
val countOfEnemies = (maze.size() * gameDifficulty).toInt()
freePos.forEach { maze.freePos.add(it) }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maze.freePos.addAll(freePos)

forEach в идеале не должен нигде изменений делать

val npcMove = gameLevel.npcEventProvider.move(playerPos, maze)
npcMove.forEach { maze[it.position] = it.newMazeObj }
val newPlayerPos =
if (maze[playerPos] != null) playerPos
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше скобоки ставить, а то совсем нечитаемая елка получается

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants