为什么我的代码似乎没有写入文件?

问题描述 投票:0回答:1

我正在制作一个没有 tkinter 或 pygame 的小型 ASCII 游戏,我决定显示它的应用程序将是一个小的记事本窗口。当我运行代码时,记事本会按预期打开,并且似乎会打印第一帧。当我按下任何箭头键时,我期待文件更新并将其显示在记事本中。我完全有可能忽略了一个简单的压痕错误,因为我现在很累。

import random
import keyboard
import subprocess
import time
import pyautogui
import subprocess
import time
import pyautogui
import pygetwindow as gw

def open_notepad_with_file(file_path, width, height):
    # Open Notepad with a specific file using subprocess
    subprocess.Popen(["notepad.exe", file_path])
    
    # Allow some time for Notepad to open
    time.sleep(2)
    
    # Resize the Notepad window to the specified width and height
    notepad_window = gw.getWindowsWithTitle("faln2 - Notepad")[0]
    notepad_window.resizeTo(width, height)

# Example usage
notepad_file_path = "C:\\Users\\tdane\\Downloads\\headache\\faln2"
notepad_width = 800
notepad_height = 600

##open_notepad_with_file(notepad_file_path, notepad_width, notepad_height)



# Start
battle_layer0 = list("____________________")
battle_layer1 = list("|                   |")
battle_layer2 = list("|                   |")
battle_layer3 = list("|                   |")
battle_layer4 = list("|                   |")
battle_layer5 = list("|                   |")
battle_layer6 = list("|                   |")
battle_layer7 = list("|___________________|")

battlelayers = [battle_layer0, battle_layer1, battle_layer2, battle_layer3, battle_layer4, battle_layer5, battle_layer6, battle_layer7]

start_time = time.time()
userchar = "O"
battlelayers[4][10] = userchar
pos = battlelayers[4][10]
open_notepad_with_file(notepad_file_path, notepad_width, notepad_height)
def getpos(array):
        posY=0
        for layer in array:
            posY+=1
            try:
                posX = layer.index(userchar)
                return posX, posY
            except:
                continue
while True:
    while keyboard.is_pressed("up") or keyboard.is_pressed("down") or keyboard.is_pressed("left") or keyboard.is_pressed("right"):
        posX, posY = getpos(battlelayers)
        posY -=1
        if keyboard.is_pressed("up") and posY is not 1 and posY is not 7:
            battlelayers[posY][posX] = ' '
            battlelayers[posY-1][posX] = userchar
        elif keyboard.is_pressed("down") and posY is not 7:
            battlelayers[posY][posX] = ' '
            battlelayers[posY+1][posX] = userchar
        elif keyboard.is_pressed("up") and posY is 7:
            battlelayers[posY][posX] = '_'
            battlelayers[posY-1][posX] = userchar
        elif keyboard.is_pressed("right") and posY is 7:
            battlelayers[posY][posX] = '_'
            battlelayers[posY][posX+1] = userchar
        elif keyboard.is_pressed("left") and posX is not 1 and posY is 7:
            battlelayers[posY][posX] = '_'
            battlelayers[posY][posX-1] = userchar
        elif keyboard.is_pressed("left") and posX is not 1:
            battlelayers[posY][posX] = ' '
            battlelayers[posY][posX-1] = userchar
        elif keyboard.is_pressed("right") and posX is not 19 and posY is not 7:
            battlelayers[posY][posX] = ' '
            battlelayers[posY][posX+1] = userchar
        elif keyboard.is_pressed("left") and posX is not 1 and posY is not 7:
            battlelayers[posY][posX] = ' '
            battlelayers[posY][posX-1] = userchar
            # Clear the file
        with open("C:\\Users\\tdane\\Downloads\\headache\\faln2", "w") as f:
           f.write("")
           # Write to the file
        with open("C:\\Users\\tdane\\Downloads\\headache\\faln2", "a") as f:
            for layer in battlelayers:
                f.write(f"{''.join(layer)}\n")
        time.sleep(.1)

如果评论令人困惑,或者您对其工作原理有任何疑问,或者甚至可以提供一些更快的替代方案,我愿意合作。

当我尝试将二维数组打印到控制台时,它似乎很好并且正常更新,我不这样做的原因是因为我无法将某些内容取消打印到控制台,尽管我可能会考虑为每个帧创建一个新终端并关闭上一个。

python notepad
1个回答
0
投票

您始终必须使用 f.close() 关闭文件并保存它。

© www.soinside.com 2019 - 2024. All rights reserved.