![Fred Z](/assets/img/avatar_default.png)
I am pausing the devel here, I have to prioritise another project. Doctests seems to be obsolete for testing network scripts. I'll be back with Pytest!
136 lines
3.9 KiB
Python
Executable File
136 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Author: freezed <freezed@users.noreply.github.com> 2018-02-06
|
|
Version: 0.2
|
|
Licence: `GNU GPL v3` GNU GPL v3: http://www.gnu.org/licenses/
|
|
|
|
roboc
|
|
=====
|
|
|
|
A multiplayer maze game over network
|
|
|
|
This is the server script, see readme.md for more details
|
|
"""
|
|
|
|
import os
|
|
from configuration import choose_maps_menu, cls, COMMANDS, \
|
|
COMMANDS_LABEL, DIRECTIONS, DIRECTIONS_LABEL, get_msg_list, \
|
|
MAP_DIRECTORY, MAP_EXTENTION, MAPS_NAME_LIST, MIN_CLIENT_NB, MOVE_STATUS, \
|
|
MOVE_STATUS_MSG, MSG_CHOOSE_MOVE, MSG_CONNECTED_CLIENT, MSG_DISCLAMER, MSG_END_GAME, \
|
|
MSG_HELP, MSG_MINIMUM_CLIENT, MSG_QUIT_GAME, MSG_REQUEST_START, MSG_START_GAME
|
|
from connectsocket import ConnectSocket
|
|
from map import Map
|
|
|
|
enough_clients = False
|
|
old_count_clients = int(0)
|
|
|
|
# DEBUT DU JEU
|
|
|
|
# Recuperation de la liste des cartes
|
|
try:
|
|
MAPS_AVAIBLE = os.listdir(MAP_DIRECTORY)
|
|
except FileNotFoundError as except_detail:
|
|
print("FileNotFoundError: «{}»".format(except_detail))
|
|
else:
|
|
for map_file in MAPS_AVAIBLE:
|
|
filename_len = len(map_file) - len(MAP_EXTENTION)
|
|
|
|
# garde les fichiers avec la bonne extention
|
|
if map_file[filename_len:] == MAP_EXTENTION:
|
|
MAPS_NAME_LIST.append(map_file[: filename_len])
|
|
|
|
# Affichage du debut de partie
|
|
cls() # vide l'ecran de la console
|
|
print(MSG_DISCLAMER)
|
|
|
|
# Affiche le menu de selection de la carte
|
|
MAP_FILENAME = choose_maps_menu()
|
|
|
|
# Démarre le réseau
|
|
GAME_NETWORK = ConnectSocket()
|
|
|
|
# Attend les connections clients et la commande de départ du jeu
|
|
while 1:
|
|
GAME_NETWORK.listen()
|
|
count_clients = GAME_NETWORK.count_clients()
|
|
|
|
# attend le nombre mini de client
|
|
if old_count_clients != count_clients:
|
|
|
|
if count_clients > MIN_CLIENT_NB:
|
|
broadcast_msg = [
|
|
MSG_CONNECTED_CLIENT.format(
|
|
count_clients,
|
|
GAME_NETWORK.list_sockets()
|
|
),
|
|
MSG_REQUEST_START,
|
|
]
|
|
enough_clients = True
|
|
|
|
else:
|
|
# envoie le nbre de client aux clients
|
|
broadcast_msg = [
|
|
MSG_MINIMUM_CLIENT.format(MIN_CLIENT_NB),
|
|
MSG_CONNECTED_CLIENT.format(
|
|
count_clients,
|
|
GAME_NETWORK.list_sockets()
|
|
)
|
|
]
|
|
enough_clients = False
|
|
|
|
# envoi les messages
|
|
for msg in broadcast_msg:
|
|
GAME_NETWORK.broadcast("server", msg)
|
|
|
|
# attend le go d'un des clients
|
|
if GAME_NETWORK.message.upper() == "PLAY" and enough_clients:
|
|
broadcast_msg = [MSG_START_GAME.format(GAME_NETWORK.u_name)]
|
|
break
|
|
|
|
old_count_clients = count_clients
|
|
|
|
# Genere la carte
|
|
GAME_MAP = Map(MAP_FILENAME, count_clients)
|
|
|
|
# DEBUT DE BOUCLE DE TOUR DE JEU
|
|
|
|
# Affichage de la carte tant que status == True
|
|
while GAME_MAP.status:
|
|
|
|
# Affiche la carte et le message
|
|
GAME_MAP.map_print(GAME_NETWORK)
|
|
|
|
# Traitement de la commande utilisateur
|
|
if user_move == COMMANDS[0]: # quitter
|
|
GAME_MAP.status = False
|
|
GAME_MAP.status_message = MSG_QUIT_GAME
|
|
|
|
elif user_move == COMMANDS[1]: # Affiche l'aide
|
|
GAME_MAP.status_message = MSG_HELP
|
|
# liste les directions
|
|
GAME_MAP.status_message += get_msg_list(
|
|
DIRECTIONS, DIRECTIONS_LABEL
|
|
)
|
|
# liste les commandes
|
|
GAME_MAP.status_message += get_msg_list(COMMANDS, COMMANDS_LABEL)
|
|
|
|
else: # Traitement du deplacement
|
|
status = GAME_MAP.move_to(user_move)
|
|
message = MOVE_STATUS_MSG[MOVE_STATUS[status]].format(user_move)
|
|
GAME_MAP.status_message = message
|
|
|
|
# La sortie est atteinte, fin de la boucle
|
|
if MOVE_STATUS[status] == 'exit':
|
|
GAME_MAP.status = False
|
|
|
|
# fin de la boucle de tour
|
|
|
|
if GAME_MAP.status is False:
|
|
print(GAME_MAP.status_message)
|
|
|
|
# Fin de partie
|
|
print(MSG_END_GAME)
|
|
GAME_MAP.map_print()
|