我正在制作一个没有 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)
如果评论令人困惑,或者您对其工作原理有任何疑问,或者甚至可以提供一些更快的替代方案,我愿意合作。
当我尝试将二维数组打印到控制台时,它似乎很好并且正常更新,我不这样做的原因是因为我无法将某些内容取消打印到控制台,尽管我可能会考虑为每个帧创建一个新终端并关闭上一个。
您始终必须使用 f.close() 关闭文件并保存它。