在python中使用线程创建游戏

2024-10-02 00:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个滚动条(游戏中,玩家似乎要跑无限远,直到他们死去)。在

我知道库和模块的存在(比如pygame),这使得创建游戏变得更加容易,但是我试图在没有任何外部模块的情况下实现它。我在控制台窗口运行我的代码。在

我的代码:

import os, time, threading, keyboard

key = False
def checkForJump(i, key, character):
    while True:
        if key:
            character = " xo                                                                                                                     "
            print(character)
            key = False
        time.sleep(0.05)
        i, character = printScreen(i, character)


i = 1
character = "  x                                                                                                                     "
def printScreen(i, character):

    sky1 =  "               *                                       *                               oooo                (())         "
    sky2 = "                           ____                                                     oooo                *                "
    space1 = "                                                                                                                        "
    space2 = "                                                                                                                        "

    land = "------------------------------------------------------------------------------------------------------------------------"


    os.system("cls")
    print((sky1[i:] + sky1[:i] +  "\n" + sky2[i:] + sky2[:i] + "\n") * 3)
    print("\n\n")
    print(space1)
    print(space2)
    print(character)
    print(land)
    i += 1
    i = i % 120

    return i, character


t = threading.Thread(target=checkForJump, args=(i, key, character))
t.daemon = True
t.start()

while True:
    key = keyboard.is_pressed('q')

我的问题是:我使用线程(我是一个完全的初学者),因为我需要在检查任何用户输入时保持背景移动。在这种情况下,我检查是否按下了“q”。如果是的话,我希望我的角色变成“xo”而不是“x”。但是,当我按“q”键时,没有任何变化。在


Tags: 模块key代码falsetrue游戏timeos
1条回答
网友
1楼 · 发布于 2024-10-02 00:22:22

问题是您将key作为参数传递给checkForJump函数,该函数为该函数生成{}的本地副本,因此在checkForJump中key始终为False。您应该访问全局键变量:

import os, time, threading, keyboard

key = False
def checkForJump(i, character):
    global key
    while True:
        if key:
            character = " xo                                                                                                                     "
            print(character)
            key = False
        time.sleep(0.05)
        i, character = printScreen(i, character)


i = 1
character = "  x                                                                                                                     "
def printScreen(i, character):

    sky1 =  "               *                                       *                               oooo                (())         "
    sky2 = "                           ____                                                     oooo                *                "
    space1 = "                                                                                                                        "
    space2 = "                                                                                                                        "

    land = "                                                            "


    os.system("cls")
    print((sky1[i:] + sky1[:i] +  "\n" + sky2[i:] + sky2[:i] + "\n") * 3)
    print("\n\n")
    print(space1)
    print(space2)
    print(character)
    print(land)
    i += 1
    i = i % 120

    return i, character


t = threading.Thread(target=checkForJump, args=(i, character))
t.daemon = True
t.start()

while True:
    key = keyboard.is_pressed('q')

虽然对于这个简单的例子来说这是可行的,但是使用全局变量在线程之间传递消息不是一个好主意,而且很容易变得混乱。您可能想看看queue library,这是一种更好的线程间通信方式。在

相关问题 更多 >

    热门问题