最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)問題回答小游戲

 更新時間:2021年12月10日 11:12:00   作者:我的天才女友  
這篇文章主要介紹了利用Python制作一個簡單的知識競賽小游戲,可以實現(xiàn)回答問題功能,文中的示例代碼介紹詳細,感興趣的同學快跟隨小編一起學習吧

讀取問題

如下所示,我們在文本中寫了一個問題,然后將其讀取出來。

“黃河遠上白云間,一片孤城萬仞山?!钡淖髡呤钦l?

王之渙

李白

白居易

杜甫

file = open("1.txt", "r")
question_coll = file.readlines()
file.close()
print(file)

運行之后發(fā)現(xiàn)報錯,查詢之后發(fā)現(xiàn)編碼格式不正確。

設(shè)置了讀取的編碼格式發(fā)現(xiàn)可以讀取文本的內(nèi)容

file = open("1.txt", encoding='utf-8')

繪制回答面板

為了方便讀取,新建一個類來儲存文件中的問題

# 問題類
class Question:

    # 回答列表
    answer_question = []

    # 正確答案
    answer_index = 1

    """問題類"""
    def __init__(self, question):
        self.question = question

導入問題,將文件中的問題保存在qustion中

from question import Question

因為文件的格式是固定的以6為一個問題的所有行數(shù)。

將問題

questionList = []
for i in range(int(len(question_coll) / 6)):
    que_all = question_coll[i * 6: i * 6 + 6]
    que = Question(que_all[0].rstrip())
    que.answer_question = [que_all[1].rstrip(), que_all[2].rstrip(), que_all[3].rstrip(), que_all[4].rstrip()]
    que.answer_index = int(que_all[5].rstrip())
    questionList.append(que)

封裝屏幕上顯示文字的打印

def draw_text(window_screen, font_size, content, starting_x, starting_y, text_color=WHITE, bg_color=BLACK):
    # 繪制文字
    # 設(shè)置字體
    font = pygame.font.SysFont("方正粗黑宋簡體", font_size)
    text1 = font.render(content, True, text_color, bg_color)
    window_screen.blit(text1, (starting_x, starting_y))

顯示問題

draw_text(screen, 48, "知識競賽", 180, 20)
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    tips = "當前一共有" + str(len(questionList)) + "個問題,目前是第" + str(index) + "個。"
    draw_text(screen, 18, tips, 20, 140, bg_color=WHITE, text_color=BLACK)
    current_que = questionList[index - 1]
    question_main = "問題" + str(index) + ". " + current_que.question
    draw_text(screen, 16, question_main, 20, 200, bg_color=WHITE, text_color=BLACK)
    for i in range(len(current_que.answer_question)):
        option = str(i + 1) + ". " + current_que.answer_question[i]
        draw_text(screen, 16, option, 40, 260 + i * 40, bg_color=WHITE, text_color=BLACK)

    pygame.display.update()

這樣就實現(xiàn)了問題的顯示

回答問題

首先我們給出提示,為了方便確認問題是否回答,答案正確與否,我們在問題類中添加變量

    # 是否回答
    answeredFlg = False

    # 回答是否正確
    rightFlg = False

根據(jù)這些變量設(shè)置文字。

    if current_que.answeredFlg:
        if current_que.rightFlg:
            print("回答正確,是" + current_que.answer_question[current_que.answer_index])
        else:
            print("回答錯誤,正確答案是" + current_que.answer_question[current_que.answer_index])
    else:
        draw_text(screen, 16, "請按下1、2、3、4來回答答案", 40, 460, bg_color=WHITE, text_color=RED)

如果按下按鍵,根據(jù)答案的正確與否給與響應(yīng)的提示。

 if current_que.answeredFlg:
        if current_que.rightFlg:
            str1 = "回答正確,是" + current_que.answer_question[current_que.answer_index - 1]
            draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=GREEN)
        else:
            str1 = "回答錯誤,正確答案是" + current_que.answer_question[current_que.answer_index - 1]
            draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=RED)
    else:
        draw_text(screen, 16, "請按下1、2、3、4來回答答案", 40, 460, bg_color=WHITE, text_color=RED)

問題切換

為了方便用戶切換問題,在窗口上添加對應(yīng)的按鈕。

import pygame.font


class Button:

    def __init__(self, screen, msg, start_x, start_y):
        # 設(shè)置按鈕的尺寸和其他屬性
        self.screen = screen
        self.width, self.height = 200, 50
        self.button_color = (0, 255, 0)
        self.text_color = (255, 255, 255)
        self.font = pygame.font.SysFont("方正粗黑宋簡體", 20)

        # 創(chuàng)建按鈕的rect對象,并使其居中
        self.rect = pygame.Rect(0, 0, self.width, self.height)
        self.rect.left = start_x
        self.rect.right = start_y
        # 按鈕的標簽只需創(chuàng)建一次
        self._prep_msg(msg)

    def _prep_msg(self, msg):
        """將msg渲染為圖像,并讓按鈕居上"""
        self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)
        self.msg_image_rect = self.msg_image.get_rect()
        self.msg_image_rect.center = self.rect.center

    def draw_button(self):
        # 繪制一個用顏色填充的按鈕,在繪制文本
        self.screen.fill(self.button_color, self.rect)
        self.screen.blit(self.msg_image, self.msg_image_rect)

answer_question.py

	btn1 = Button(screen, "next", 300, 500)
    btn1.draw_button()

修改對應(yīng)的按鈕顏色,并添加上一個按鈕。

通過是否回答和是否有下一個或者上一個控制按鈕的顯示

    if current_que.answeredFlg and index < len(questionList):
        btn1 = Button(screen, "下一個", 300, 500)
        btn1.draw_button()
    if index > 1:
        btn2 = Button(screen, "上一個", 50, 500)
        btn2.draw_button()

給按鈕添加事件

        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse_pos = pygame.mouse.get_pos()
            if btn1.rect.collidepoint(mouse_pos):
                if current_que.answeredFlg and index < len(questionList):
                    index += 1
            if btn2.rect.collidepoint(mouse_pos) and index > 1:
                index -= 1

完整代碼

answer_question.py 主程序

import pygame, sys
from pygame.locals import *
from question import Question
from button import Button

# 讀取問題
file = open("1.txt", encoding='utf-8')
question_coll = file.readlines()
file.close()
questionList = []
for i in range(int(len(question_coll) / 6)):
    que_all = question_coll[i * 6: i * 6 + 6]
    que = Question(que_all[0].rstrip())
    que.answer_question = [que_all[1].rstrip(), que_all[2].rstrip(), que_all[3].rstrip(), que_all[4].rstrip()]
    que.answer_index = int(que_all[5].rstrip())
    questionList.append(que)


# 顏色變量
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 初始化面板
pygame.init()
screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("知識競賽")

# 當前問題
index = 1


def draw_text(window_screen, font_size, content, starting_x, starting_y, text_color=WHITE, bg_color=BLACK):
    # 繪制文字
    # 設(shè)置字體
    font = pygame.font.SysFont("方正粗黑宋簡體", font_size)
    text1 = font.render(content, True, text_color, bg_color)
    window_screen.blit(text1, (starting_x, starting_y))


# 按鈕
btn1 = Button(screen, "下一個", 300, 500)
btn2 = Button(screen, "上一個", 50, 500)
while True:
    answer_index = 0
    # 填充白色
    screen.fill(WHITE)
    draw_text(screen, 48, "知識競賽", 180, 20)
    tips = "當前一共有" + str(len(questionList)) + "個問題,目前是第" + str(index) + "個。"
    draw_text(screen, 18, tips, 20, 140, bg_color=WHITE, text_color=BLACK)
    current_que = questionList[index - 1]
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_1:
                answer_index = 1
            if event.key == K_2:
                answer_index = 2
            if event.key == K_3:
                answer_index = 3
            if event.key == K_4:
                answer_index = 4
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse_pos = pygame.mouse.get_pos()
            if btn1.rect.collidepoint(mouse_pos):
                if current_que.answeredFlg and index < len(questionList):
                    index += 1
            if btn2.rect.collidepoint(mouse_pos) and index > 1:
                index -= 1

    question_main = "問題" + str(index) + ". " + current_que.question
    draw_text(screen, 16, question_main, 20, 200, bg_color=WHITE, text_color=BLACK)
    for i in range(len(current_que.answer_question)):
        option = str(i + 1) + ". " + current_que.answer_question[i]
        draw_text(screen, 16, option, 40, 260 + i * 40, bg_color=WHITE, text_color=BLACK)
    if answer_index != 0:
        current_que.answeredFlg = True
        current_que.rightFlg = answer_index == current_que.answer_index
    if current_que.answeredFlg:
        if current_que.rightFlg:
            str1 = "回答正確,是" + current_que.answer_question[current_que.answer_index - 1]
            draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=GREEN)
        else:
            str1 = "回答錯誤,正確答案是" + current_que.answer_question[current_que.answer_index - 1]
            draw_text(screen, 16, str1, 40, 460, bg_color=WHITE, text_color=RED)
    else:
        draw_text(screen, 16, "請按下1、2、3、4來回答答案", 40, 460, bg_color=WHITE, text_color=RED)
    if current_que.answeredFlg and index < len(questionList):
        btn1.draw_button()
    if index > 1:
        btn2.draw_button()
    pygame.display.update()

問題類 qustion.py

# 問題類
class Question:
    """問題類"""

    # 回答列表
    answer_question = []

    # 正確答案
    answer_index = 1

    # 是否回答
    answeredFlg = False

    # 回答是否正確
    rightFlg = False

    def __init__(self, question):
        self.question = question


按鈕類 button.py

import pygame.font


class Button:

    def __init__(self, screen, msg, start_x, start_y):
        # 設(shè)置按鈕的尺寸和其他屬性
        self.screen = screen
        self.width, self.height = 200, 50
        self.button_color = (255, 192, 128)
        self.text_color = (255, 255, 255)
        self.font = pygame.font.SysFont("方正粗黑宋簡體", 20)

        # 創(chuàng)建按鈕的rect對象,并使其居中
        self.rect = pygame.Rect(0, 0, self.width, self.height)
        self.rect.left = start_x
        self.rect.top = start_y
        # 按鈕的標簽只需創(chuàng)建一次
        self._prep_msg(msg)

    def _prep_msg(self, msg):
        """將msg渲染為圖像,并讓按鈕居上"""
        self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)
        self.msg_image_rect = self.msg_image.get_rect()
        self.msg_image_rect.center = self.rect.center

    def draw_button(self):
        # 繪制一個用顏色填充的按鈕,在繪制文本
        self.screen.fill(self.button_color, self.rect)
        self.screen.blit(self.msg_image, self.msg_image_rect)

問題文本文件 1.txt

“黃河遠上白云間,一片孤城萬仞山?!钡淖髡呤钦l?

王之渙

李白

白居易

杜甫

1

“落霞與孤鶩齊飛”的下一句是?

攜酒對情人

秋水共長天一色

抱琴開野室

林塘花月下

2?

以上就是Python實現(xiàn)問題回答小游戲的詳細內(nèi)容,更多關(guān)于Python問題回答游戲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python文件如何讀取read()函數(shù)

    Python文件如何讀取read()函數(shù)

    這篇文章主要介紹了Python文件如何讀取read()函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Selenium爬取b站主播頭像并以昵稱命名保存到本地

    Selenium爬取b站主播頭像并以昵稱命名保存到本地

    這篇文章主要介紹了使用Selenium自動化爬取b站主播頭像并以昵稱命名保存到本地的方法,代碼簡單完整,對于大家練習Selenium自動化有一定的幫助,需要的朋友可以參考下
    2021-04-04
  • python35種繪圖函數(shù)詳細總結(jié)

    python35種繪圖函數(shù)詳細總結(jié)

    Python有許多用于繪圖的函數(shù)和庫,比如Matplotlib,Plotly,Bokeh,Seaborn等,這只是一些常用的繪圖函數(shù)和庫,Python還有其他繪圖工具,如Pandas、ggplot等,選擇適合你需求的庫,可以根據(jù)你的數(shù)據(jù)類型、圖形需求和個人偏好來決定,本文給大家總結(jié)了python35種繪圖函數(shù)
    2023-08-08
  • 淺談用VSCode寫python的正確姿勢

    淺談用VSCode寫python的正確姿勢

    本篇文章主要介紹了淺談用VSCode寫python的正確姿勢,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Python?Pandas中DataFrame.drop_duplicates()刪除重復值詳解

    Python?Pandas中DataFrame.drop_duplicates()刪除重復值詳解

    在實際處理數(shù)據(jù)中,數(shù)據(jù)預(yù)處理操作中,常常需要去除掉重復的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于Python?Pandas中DataFrame.drop_duplicates()刪除重復值的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能

    Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能

    這篇文章主要介紹了Ubuntu下使用Python實現(xiàn)游戲制作中的切分圖片功能,涉及Python針對圖片的讀取、載入、切分運算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 使用Django和Postgres進行全文搜索的實例代碼

    使用Django和Postgres進行全文搜索的實例代碼

    這篇文章主要介紹了使用Django和Postgres進行全文搜索,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python中xrange和range的區(qū)別

    python中xrange和range的區(qū)別

    這篇文章主要介紹了python中xrange和range的區(qū)別,需要的朋友可以參考下
    2014-05-05
  • Python操作mongodb數(shù)據(jù)庫進行模糊查詢操作示例

    Python操作mongodb數(shù)據(jù)庫進行模糊查詢操作示例

    這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫進行模糊查詢操作,結(jié)合實例形式分析了Python連接MongoDB數(shù)據(jù)庫及使用正則表達式進行模糊查詢的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Python更換pip源方法過程解析

    Python更換pip源方法過程解析

    這篇文章主要介紹了Python更換pip源方法過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05

最新評論

乌海市| 册亨县| 龙胜| 临泉县| 客服| 交口县| 汝州市| 长宁区| 梁山县| 乐昌市| 赤壁市| 岳池县| 广州市| 济南市| 合阳县| 汝州市| 进贤县| 曲靖市| 丰城市| 海丰县| 垦利县| 晋州市| 泰兴市| 岑溪市| 文安县| 缙云县| 胶州市| 政和县| 河南省| 安多县| 新和县| 无锡市| 西乌珠穆沁旗| 湖南省| 电白县| 青海省| 肃南| 苍山县| 霍邱县| 金湖县| 沅陵县|