ゲームプロセスの解釈
コンピュータは、テキストと文字列表現から単語をランダムに選択し、文字列の長さを表示します。ユーザーは1文字ずつ推測し、手動で推測結果を入力します。合計6回の推測があります。各推測の後、コンピューターは、プレーヤーが推測されたことをプレーヤーに通知します。推測結果と推測可能な残りの文字範囲には、プレーヤーの推測プロセスに関する特定のルールがあります。
推測された文字を推測できません。推測が繰り返されるたびに、コンピュータは1回警告し、合計3つの警告の機会があります。大文字と小文字以外の文字を推測することはできません。 「#」などの特殊文字。推測するたびに警告が表示されます。回数は1回減ります。警告の数がなくなると、プレーヤーがファウルを続けた場合(繰り返し推測、または他の文字を推測)大文字と小文字よりも)、推測の数は1つ減ります。プレーヤーが推測した文字は、ターゲット文字列に含まれていません。secret_letters、推測された文字の場合、推測の数は2つ減ります。ペナルティ。それが子孫である場合、推測の数は1つ減ります。この推測はプレーヤーにとって難しすぎます。ゲームの改良版を実装することは可能ですか?プレーヤーがアスタリスクを入力するたびに*コンピューターが自動的に現在のプレーヤーの推測結果に一致するテキスト内のすべての単語を出力しますか?これにより、プレイヤーの推測範囲が大幅に減少し、ゲームの難易度が低下します。
モジュラープログラミングのアイデア
このゲームを実現する方法は?最初にいくつかの関数を実装する必要があります。これらの関数は次のとおりです。
コンピューターがテキストを取得する方法テキストから単語をランダムに取得して、プレーヤーが文字を正しく推測したかどうかを判断する方法。プレーヤーの推測された文字を取得します。残りの推測可能な文字を取得します。コンピュータープレーヤーの対話プロセスのコードは個別に提供されていません。プロジェクト全体を以下に直接示します。コード
ゲームコード
絞首刑執行人ゲーム
ランダムにインポート
インポート文字列
WORDLIST_FILENAME =“ words.txt”
def load_words():#ファイルの読み取り
print( "ファイルから単語リストを読み込んでいます...") #inFile:file inFile = open(WORDLIST_FILENAME、 'r') #line:string line = inFile.readline() #wordlist :文字列の リストwordlist = line.split( )#スペースで区切られた単語 print( ""、len(wordlist)、 " wordsloaded 。")return wordlist#リストを返します
wordlist = load_words()
def choice_word(wordlist):
return random.choice(wordlist)#ランダムな単語を取得する
#プレイヤーの推測が正しいかどうかを判断する
def is_word_guessed(secret_word、letters_guessed):
list_secret = list(secret_word)# プレーヤーの推測結果にない文字がターゲットにある限り、Falseを返します。すべてある場合は 、list_secretのiに対してTrueを返します。letters_guessedに ない場合: Falseを 返します。 True
#プレイヤーが正しく推測した文字を取得する
def get_guessed_word(secret_word、letters_guessed):
length = len(secret_word) list_secret = ['_'] * length#最初にすべてのリスト要素を '_'に初期化します。foriinLetters_guessed : for j in range(length): if i == secret_word [j]:#用猜対応する文字を対応する位置の「 _ 」に置き換えますlist_secret [j] = secret_word [j] string = "" 。join (map(lambda x:str(x)、list_secret))#list to string return string
#残りの推測可能な文字範囲を取得する
def get_available_letters(letters_guessed):
#Initial推測可能な文字はすべて小文字がされている"ABCDEFGHIJKLMNOPQRSTUVWXYZ" = letters_all letters_allに私のために: 私はletters_guessed場合:#If文はプレイヤーが、私は、それを置き換える推測している with'_ ' letters_all = letters_all.replace(I、' ') の戻りletters_all
def hangman(secret_word):
list_unique = [] #secret_word でのiのsecret_word重複排除の 場合: list_uniqueにない場合:list_unique.append(i) unique_numbers = len(list_unique)#プレーヤーのスコア 母音の計算に使用される、ターゲット単語内の異なる文字の数= " aeiou " #vowel Letters print( "Welcome to the game hangman !")length = len(secret_word)#target word length print( "私は{}文字の長さの単語を考えています!"。format(length) ) times_left = 6 #プレーヤーの残りの推測の数warning_left = 3#プレーヤーの残りの警告の数 print( "残り{}の警告があります。"。format(warning_left)) print( "----- -------- ") list_guessed = [] while times_left> 0:#Playersは推測の数を使い果たしていません print("あなたは{}の推測が残っています。 "。format(times_left)) print("利用可能文字:"、get_available_letters(list_guessed)) char = input( "文字を推測してください:") x = str.lower(char) if x in list_guessed:#プレーヤーは warning_left> 0の場合に文字を推測しました: #警告の数は使い果たされていませんwarning_left- = 1 print( "おっと!あなたはすでにその文字を推測しました。{}警告が残っています:"。format(warning_left)、get_guessed_word(secret_word、list_guessed)) else:#警告の数は0です。 推測の数を減らしてくださいtimes_left -= 1 print( "おっと!あなたはすでにその文字を推測しました。警告が残っていないので、1つの推測を失います:"、get_guessed_word(secret_word、list_guessed)) else:#プレーヤーはこの文字を推測していません list_guessed.append (x)#最初にプレーヤーの推測を保存します str.isalpha(x)でない場合の結果:#warning_left >の場合、プレーヤーの入力は文字ではありません0: warning_left- = 1 print( "おっと!それは有効な文字ではありません。{}警告が残っています:"。format(warning_left)、get_guessed_word(secret_word、list_guessed)) else: times_left- = 1 print( "おっと!つまり無効な文字使用すると、1つの推測失うので、あなたは、何の警告を残していない: "get_guessed_word(secret_word、list_guessed))。 #玩家输入是字母时 のelif xのsecret_word:#玩家猜测字母在目标中 の印刷("グッド推測: "、get_guessed_word(secret_word、list_guessed)) #パレット猜出指定文字 if secret_word == get_guessed_word(secret_word、list_guessed): print(" ------------- ") print("おめでとうございます、あなたは勝ちました!」) total_score = times_left * unique_numbers print( "このゲームの合計スコアは次のとおりです:"、total_score) return else:#プレーヤーは、文字がターゲットの 印刷に含まれていないと推測します( "おっと!その文字は私の言葉に含まれていません。"、 get_guessed_word(secret_word、list_guessed)) if x in vowels: #私は正しく推測しなかった、そしてそれは母音であるtime_left- = 2 else: times_left- = 1 print( "------------- ") print("申し訳ありませんが、推測が足りませんでした。単語は{} "。format(secret_word))#プレーヤーが失敗し、ゲームが終了しまし た " ""
def del_space(string):#スペースを削除した後、文字列をリストに変換します
lst = [] for i in string: if i!= '': lst.append(i) return lst
#ルールに従って2つの単語が一致するかどうかを確認します
def match_with_gaps(my_word、other_word):
#最初に文字列をリストに変換して簡単に操作できるようにしますlist_my_word = del_space(my_word) list_other_word = list(other_word) if len(list_my_word)!= len(list_other_word):# 長さが一貫していない return False else: length = len(list_my_word) for i in range(length): #対応する位置はすべて文字であり、list_my_word [i]!= '_'およびlist_my_word [i]!= list_other_word [i]の場合は等しくありません: falseを 返します#list_my_word [i] == '_' for i in range(length): j = i + 1 for j in range(length): if list_other_word [i] == list_other_word [j] and list_my_word [i]!= list_my_word [j]: return False return本当
def show_possible_matches(my_word):
flag = 0 #一致する可能性のある単語があるかどうかをマークするために使用されます possible_word = [] #iの一致する可能性のある単語 をワードリストに 格納します:if match_with_gaps(my_word、i): flag = 1possible_word.append (i) if flag == 0: #一致する可能性のある単語がありませんprint( "一致するものが見つかりません。") else: print( "一致する可能性のある単語は次のとおりです:") for i inpossible_word : print(i、end = '') print( "")
def hangman_with_hints(secret_word):
list_unique = [] #secret_word でのiのsecret_word重複排除の 場合: list_uniqueにない場合:list_unique.append(i) unique_numbers = len(list_unique)#プレーヤーのスコア 母音の計算に使用される、ターゲット単語内の異なる文字の数= " aeiou " #vowel Letters print( "Welcome to the game hangman !")length = len(secret_word)#target word length print( "私は{}文字の長さの単語を考えています!"。format(length) ) times_left = 6 #プレーヤーの残りの推測の数warning_left = 3#プレーヤーの残りの警告の数 print( "残り{}の警告があります。"。format(warning_left)) print( "----- -------- ") list_guessed = [] while times_left> 0:#推測の数が使い果たされていない場合 print(" {}の推測が残っています。 "。format(times_left)) print("利用可能文字:"、get_available_letters(list_guessed)) char = input( "文字を推測してください:") x = str.lower(char) if x in list_guessed:#プレーヤーは warning_left> 0の場合にこの文字を推測しました: warning_left- = 1 print( "おっと!あなたはすでにその文字を推測しました。{}警告が残っています: "。format(warning_left)、get_guessed_word(secret_word、list_guessed)) else:#警告の数は0です。 推測の数を減らしてくださいtimes_left- = 1 print("おっと!あなた'すでにその文字を推測しました。警告が表示されないため、推測が1つ失われます: "、get_guessed_word(secret_word、list_guessed)) else:#プレーヤーはこの文字を推測していません list_guessed.append(x)#プレーヤーの推測結果を保存します最初に x == '*'の場合:#Yes '*'的情况 my_word = get_guessed_word(secret_word、list_guessed) show_possible_matches(my_word) elif not str.isalpha(x):# warning_left> 0の場合、プレーヤー入力は文字でも*記号でもありません: warning_left- = 1 print( "おっと!これは有効な文字ではありません。{ }警告が残っています: "。format(warning_left)、get_guessed_word(secret_word、list_guessed)) else: times_left- = 1 print("おっと!これは有効な文字ではありません。警告が残っていないので、推測が1つ失われます: "、 get_guessed_word(secret_word、list_guessed))# プレーヤー入力が secret_wordの文字elif xの場合:#プレーヤーはターゲット プリントの文字を推測します( "Goodguess:"、get_guessed_word(secret_word、list_guessed)) #プレーヤーはすべてを推測します文字 if secret_word == get_guessed_word(secret_word、list_guessed): print( "-------------") print( "おめでとうございます、勝ちました!") total_score = times_left * unique_numbers print( "あなたの合計スコア「、total_score):このゲームはあるのために 戻る :#玩家猜测字母不在目标中、他の 印刷( "おっとその手紙は私の言葉ではありません"、get_guessed_word(secret_word、list_guessed!。)) #没有猜中:母音におけるXの場合、AND是元音字母 times_left- = 2 else: times_left- = 1 print( "-------------") print( "申し訳ありませんが、推測が足りませんでした。単語は{} "。format(secret_word))#プレーヤーは失敗し、ゲームは終了します 戻る
「」
もし名前==「メイン」:
secret_word = choice_word( wordlist) hangman (secret_word)#secret_word = choice_word( wordlist )#hangman_with_hints( "apple")
コメントアウトされた部分は、ハングマンゲームの改良版、コンピュータープロンプト機能を備えたバージョンを実装することであることに注意してください。ユーザーが*を入力するたびに、コンピューターは現在の推測結果に一致するテキスト内のすべての単語を出力して、プレイヤーはリマインダーとして範囲を推測します。ゲームの効果は次のとおりです。プロジェクトコードに問題がある場合は、お気軽にご指摘ください。ありがとうございます。
記事の出典:Webゲームhttp://www.hp91.cn/Webゲーム