Форум сайта python.su
Хочу написать камень ножницы бумагу на пайтоне что бы лучше понять тему сокетов, но появляется проблема с разрыванием соединения, понятно что нужно еще будет подредактировать код, поставить везде энкоды и декоды, но проблема не в этом, а в разрыве соеденения
#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)
Прикреплённый файлы: KNBHost.py (4,2 KБ)
Офлайн
Ты лучше начни с чего-нибудь более простого. Если сокеты нужны, то просто пообщайся через сокет между двумя клиентами, подключающимися в одно время или в разное время. Не надо игру через них делать. У тебя и игра не получается, и сокеты не получаются, и ты это всё ещё соединил.
А игру сделай просто в консоли, чтобы она играла с одним игроком и с двумя игроками. Думаю, ты и без сокетов её не сделаешь.
Офлайн
Одной из выдающихся особенностей A Small World Cup является упор на командную работу.
Офлайн