3

シンプルなゲームを作ろうとしていますが、それを機能させてネットワーク経由で複数のものを送信する方法を理解できません。最初はうまくいきますが、10回は行くはずです。現在は乱数を 1 つしか送信していませんが、ゲームが再開されて新しい番号が必要になったときに、新しい乱数を 1 つ送信したいと考えています。

サーバ

import socket, random               

sock = socket.socket()
host = socket.gethostname()
port = 12345
sock.bind((host, port))
sock.listen(5)

c, addr = sock.accept()

cpu = random.choice(range(0, 3))
c.send(cpu)

gameon = c.recv(int(1024))

クライアント

import socket, random

sock = socket.socket()  # Create a socket object
host = socket.gethostname()  # Get local machine name
port = 12345  # Reserve a port for your service.
sock.connect((host, port))

GAMEON = 'Rock', 'Paper', 'Scissors'
game = 0
iwin = 0
ilose = 0
tie = 0

while game < 10:

    for i in range(0, 3):
        print "%d %s" % (i + 1, GAMEON[i])

    player = int(input ("Choose from 1-3: ")) - 1
    cpu = int(sock.recv(1024))
    print cpu

    print""

    print "%s vs %s" % (GAMEON[player], GAMEON[cpu])
    print ""
    if cpu != player:
      if (player - cpu) % 3 < (cpu - player) % 3:
        print "Player wins\n"
        iwin += 1
      else:
        print "CPU wins\n"
        ilose += 1
    else:
      print "TIE!\n"
      tie += 1 
    game += 1
    sock.send(str(game))
print"Game is done"
print"you win: ", (iwin), "Times"
print"computer wins: ", (ilose), "Times"
print"tie: ", (tie), "Times"
4

2 に答える 2

2

入札するにはスレッドが必要です。

サンプルコード

# Listen
s.listen(10)
print 'Socket now listening on port ' + str(PORT) + "..."

while 1:
    # wait
    conn, addr = s.accept()

    print 'Connected with ' + addr[0] + ":" + str(addr[1])

    # Let's fork a thread for each request
    processThread = threading.Thread(target=processConnection, args=(conn, addr[0]));
    processThread.start()


s.close()

あなたは次のprocessConnectionようになります:

# Process Connection
def processConnection(conn, ip):
    print "Thread started..."
    print "-------------------------------------------------------------";

    cpu = random.choice(range(0, 3))
    conn.send(cpu)

    gameon = conn.recv(int(1024))

    conn.close()

更新 1

サーバーがクライアントと通信し続ける必要がある場合は、これを行います。サーバーは、クライアントがメッセージを送り返すのを待ちます。クライアントが何かを送信すると、サーバーは乱数を返します。クライアントがこれ以上データを必要としない場合は、接続を閉じるだけでサーバー ループが終了します。

import socket, random               

sock = socket.socket()
host = socket.gethostname()
port = 12345
sock.bind((host, port))
sock.listen(5)

c, addr = sock.accept()

white True:
    cpu = random.choice(range(0, 3))
    c.send(cpu)

    gameon = c.recv(int(1024))

    if gameon is None:
        break
于 2013-01-12T16:12:04.817 に答える
2

問題は、サーバーが 1 つの要求を処理してから停止することです。ある種のwhileループに入れる必要があります。

Python で基本的な IM サーバー/クライアントを作成しました

于 2013-01-12T16:15:10.843 に答える