Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 9, 2023 09:48:35

Zhnech
Зарегистрирован: 2023-11-09
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Что не так с сокетами нужна помощь

Хочу написать камень ножницы бумагу на пайтоне что бы лучше понять тему сокетов, но появляется проблема с разрыванием соединения, понятно что нужно еще будет подредактировать код, поставить везде энкоды и декоды, но проблема не в этом, а в разрыве соеденения

 #host
import socket
win_score = int(input('Победный счет:'))
score1 = 0
score2 = 0
sock = socket.socket()
sock.bind(('', 9090))
sock.listen()
conn, addr = sock.accept()
conn.send('Играем до', win_score)
while score1 <= win_score or score2 < win_score:
    if score1 == score2 and score1 != 0:
        conn.send('Оба игрока абсолюты ВСЕРОСа по КНБ')
        print('Оба игрока абсолюты ВСЕРОСа по КНБ')
        if score1 == win_score:
            conn.send('Игрок 1 - абсолют ВСЕРОСа по КНБ'.encode())
            print('Игрок 1 - абсолют ВСЕРОСа по КНБ')
        if score2 == win_score:
            conn.send('Игрок 2 - абсолют ВСЕРОСа по КНБ'.encode())
            print('Игрок 2 - абсолют ВСЕРОСа по КНБ')
        player1thing = input("Камень, Ножницы или Бумага?")
        player2thing = conn.recv(1024).decode()
        if player1thing == 'Камень':
            if player2thing == 'Камень':
                res = 'Ничья'
                conn.send(res.encode())
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
            if player2thing == 'Бумага':
                res = 'Победа игрока 2'
                conn.send(res.encode())
                score2 += 1
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
            if player2thing == 'Ножницы':
                res = 'Победа игрока 1'
                conn.send(res.encode())
                score1 += 1
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
        if player1thing == 'Бумага':
            if player2thing == 'Камень':
                res = 'Победа игрока 1'
                score1 += 1
                conn.send(res.encode())
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
            if player2thing == 'Бумага':
                res = 'Ничья'
                conn.send(res.encode())
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
            if player2thing == 'Ножницы':
                res = 'Победа игрока 2'
                conn.send(res.encode())
                score2 += 1
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
        if player1thing == 'Ножницы':
            if player2thing == 'Камень':
                res = 'Победа игрока 2'
                score2 += 1
                conn.send(res.encode())
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
            if player2thing == 'Бумага':
                res = 'Победа игрока 1'
                conn.send(res.encode())
                score1 += 1
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
            if player2thing == 'Ножницы':
                res = 'Ничья'
                conn.send(res.encode())
                conn.send('Счет игрока 1:'.encode(), score1)
                conn.send('Счет игрока 2:'.encode(), score2)
conn.close()
#client
import socket
sock = socket.socket()
sock.connect(('localhost', 9090))
player2name = input('Имя игрока 2:')
ofofof = sock.recv(1024).decode()
print(ofofof)
res = ''
while res != 'Игрок 1 - абсолют ВСЕРОСа по КНБ' or res != 'Игрок 2 - абсолют ВСЕРОСа по КНБ' or res != 'Оба игрока абсолюты ВСЕРОСа по КНБ':
    player2thing = input("Камень, ножницы или бумага?")
    sock.send(player2thing.encode())
    res = sock.recv(1024).decode()
    print(res)
    score1inf = sock.recv(1024).decode
    print(score1inf)
    score2inf = sock.recv(1024).decode()
    print(score2inf)
sock.close()

Отредактировано Zhnech (Ноя. 9, 2023 10:10:59)

Прикреплённый файлы:
attachment KNBHost.py (4,2 KБ)

Офлайн

#2 Ноя. 10, 2023 05:47:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Что не так с сокетами нужна помощь

Ты лучше начни с чего-нибудь более простого. Если сокеты нужны, то просто пообщайся через сокет между двумя клиентами, подключающимися в одно время или в разное время. Не надо игру через них делать. У тебя и игра не получается, и сокеты не получаются, и ты это всё ещё соединил.

А игру сделай просто в консоли, чтобы она играла с одним игроком и с двумя игроками. Думаю, ты и без сокетов её не сделаешь.



Офлайн

#3 Янв. 19, 2024 03:29:10

herrylauu
Зарегистрирован: 2023-03-25
Сообщения: 1
Репутация: +  -1  -
Профиль   Отправить e-mail  

Что не так с сокетами нужна помощь

Одной из выдающихся особенностей A Small World Cup является упор на командную работу.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version