簡體   English   中英

Python —客戶端等待服務器輸入(反之亦然)

[英]Python — Client Waiting for Server Input (and vice versa)

我是Python的新手,也是Python套接字和服務器的新手,所以請多多包涵! 基本上,我試圖在客戶端和服務器之間建立一個hang子手游戲來玩游戲。 我知道這個系統有很多缺點(包括大多數代碼在客戶端而不是服務器端,我正在努力解決,但無論如何...)

本質上,我的客戶啟動游戲,並從服務器獲取關於子手游戲“單詞”的輸入。 游戲結束后,它將再次播放init方法以重新啟動游戲。 我希望它再次等待來自服務器的輸入,因此它不會從第一次播放相同的輸入。 你有什么建議嗎?

這是我的服務器代碼:

#!/usr/bin/env python
"""
Created on Tue Jul 26 09:32:18 2016

@author: Kevin Levine / Sam Chan
"""

# Echo server program
import socket
import time

HOST = '10.232.2.162'                 # Symbolic name meaning all available interfaces
PORT = 5007           # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr

def sendClient(message):
    conn.send(message)

data = "1"
while True:  # Whole game
    if data == "1":
        while True:
            print "Enter word to be guessed."
            message = raw_input("> ")
            if message.isalpha():
                sendClient(message)
            else:
                "Your word included some non-alphabetical characters."
    data = conn.recv(1024)
    if data == "2":
        break

# data = s.recv(1024)
# clientData = conn.recv(1024)
# print "Received", clientData, "from Client"

這是我的客戶代碼:

#!/usr/bin/python
"""
Created on Tue Jul 26 09:12:01 2016

@author: Kevin Levine / Sam Chan
"""

# Echo client program
import socket
import time

HOST = '10.232.5.58'    # The remote host
PORT = 5007        # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

def sendServer(message):
    s.send(message)

class Hangman():
    def __init__(self):
        print "Welcome to 'Hangman', are you ready to play? "
        print "(1) Yup!\n(2) Nah"
        user_choice_1 = raw_input("> ")
        serverData = s.recv(1024)
        global the_word
        the_word = serverData
        if user_choice_1 == '1':

            print "Loading..."
            for t in range(3, -1, -1):
                print t, "..."
                time.sleep(1)
            self.start_game()
        elif user_choice_1 == '2':
            print "Bye bye now..."
            exit()
        else:
            print "I didn't understand you..."
            self.__init__()

    def start_game(self):
        print "Six fails, no more, no less. Try to guess the word by guessing letters!"
        self.core_game()

    def core_game(self):
        guesses = 0
        letters_used = ""
        progress = []
        for num in range(0, len(the_word)):
            progress.append("?")
        while guesses < 6:
            if "".join(progress) == the_word:
                print "Congrats! You guessed the word '%s'!" % the_word
                print "========================================"
                time.sleep(3)
                self.__init__()
            guessraw = raw_input("> ")
            guess = guessraw.lower()
            if (guess in the_word) and (guess not in letters_used):
                print "You guessed correctly!"
                letters_used += "," + guess
                self.hangman_graphic(guesses)
                print "Progress: " + self.progress_updater(guess, the_word, progress)
                print "Letter used: " + letters_used
            elif (guess not in "abcdefghijklmnopqrstuvwxyz"):
                print "Only guess letters!"
            elif (guess not in the_word) and (guess not in letters_used):
                guesses += 1
                print "That guess was wrong." 
                letters_used += "," + guess
                self.hangman_graphic(guesses)
                print "Progress: " + "".join(progress)
                print "Letter used: " + letters_used
            else:
                print "Only guess unique letters!"

    def hangman_graphic(self, guesses):
        if guesses == 0:
            print "________      "
            print "|      |      "
            print "|             "
            print "|             "
            print "|             "
            print "|             "
        elif guesses == 1:
            print "________      "
            print "|      |      "
            print "|      0      "
            print "|             "
            print "|             "
            print "|             "
        elif guesses == 2:
            print "________      "
            print "|      |      "
            print "|      0      "
            print "|     /       "
            print "|             "
            print "|             "
        elif guesses == 3:
            print "________      "
            print "|      |      "
            print "|      0      "
            print "|     /|      "
            print "|             "
            print "|             "
        elif guesses == 4:  
            print "________      "
            print "|      |      "
            print "|      0      "
            print "|     /|\     "
            print "|             "
            print "|             "
        elif guesses == 5:
            print "________      "
            print "|      |      "
            print "|      0      "
            print "|     /|\     "
            print "|     /       "
            print "|             "
        else:
            print "________      "
            print "|      |      "
            print "|      0      "
            print "|     /|\     "
            print "|     / \     "
            print "|             "
            print "GAME OVER, you lost! :("
            print "The word was ", the_word
            print "========================================"
            endmessage = 1
            sendServer(endmessage)
            self.__init__()

    def progress_updater(self, guess, the_word, progress):
        i = 0
        while i < len(the_word):
            if guess == the_word[i]:
                progress[i] = guess
                i += 1
            else:
                i += 1
        return "".join(progress)

game = Hangman()

也許您可以制作一個循環,而不是僅創建一個Hangman實例,如下所示:

while True:
    game = Hangman()

可以使用退出條件,而不是無限循環。 例如,在您的課堂上,您可能有一個布爾變量來指示游戲是否結束(例如,假設該變量的名稱為end)。

game = Hangman()
while True:
    if not game.end:
        continue
    game = Hangman()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM