这是有问题的代码。当我加载我的保存文件时,我得到了最后保存的统计数据,但是当我转到advent2时,我在每一行都得到“Missing Operator”。我不完全确定该怎么做。
(另外,只测试未来基于文本的故事游戏的批处理代码)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/item_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:adjustViewBounds="false"
android:scaleType="centerInside"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:focusable="false"
android:focusableInTouchMode="false"/>
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:textColor="#000000"
android:textSize="15sp"
android:layout_centerHorizontal="true"
android:layout_below="@id/item_image"
android:focusable="false"
android:focusableInTouchMode="false"/>
</RelativeLayout>
答案 0 :(得分:0)
让我们通过使用游戏变量的环境变量尽可能简单地保存批量游戏的值,这些变量都以MyGame_
之类的相同前缀字符串开头:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "GameDataFile=%APPDATA%\MyGame\MyGame.dat"
if exist "%GameDataFile%" (
for /F "usebackq tokens=1,2* delims=_=" %%A in ("%GameDataFile%") do if "%%A" == "MyGame" set "%%A_%%B=%%C"
goto OutputValues
)
:NameInput
set "MyGame_Name="
set /P "MyGame_Name=Please enter your name: "
if not defined MyGame_Name goto NameInput
set "MyGame_Experience=0"
set "MyGame_Money=3"
set "MyGame_Deaths=0"
set "MyGame_Level=1"
set "MyGame_Health=5"
set "MyGame_Power=10"
:OutputValues
cls
echo Name: %MyGame_Name%
echo Experience Points: %MyGame_Experience%
echo Gold: %MyGame_Money%
echo Total Deaths: %MyGame_Deaths%
echo Current Level: %MyGame_Level%
echo Total Health Points: %MyGame_Health%
echo Power Level: %MyGame_Power%
echo/
pause
rem Other command lines for playing the game ...
:SaveValues
for /F "delims=" %%I in ("%GameDataFile%") do md "%%~dpI" 2>nul
set MyGame_ >"%GameDataFile%"
endlocal
Microsoft建议将应用程序数据保存到用户特定应用程序数据目录的公司或应用程序相关子目录中,该目录的路径由环境变量APPDATA
定义。这就是使用%APPDATA%\%~n0\%~n0.dat
的原因,其中{1}由Windows命令解释器通过此环境变量的路径扩展,%APPDATA%
按批处理文件的名称扩展,没有路径和文件扩展名。
如果此文件已存在,则 FOR 将读取不以分号开头的文件的每个非空行,并将其拆分为三个子字符串(标记):
第一个子字符串是从行的开头到下划线,如果文件未被某人使用文本编辑器修改,则该字符串应始终为字符串%~n0
。此字符串分配给循环变量MyGame
。
第二个子字符串是下划线和等号之间的环境变量的名称,它将变量名称与变量值分开。根据{{3}} A
将此子字符串分配给下一个循环变量。
第三个子串是与行尾相等的符号之后的所有内容,它是分配给循环变量B
的变量值。
IF 条件确保从文件中加载安全性,只是从C
开始区分大小写的环境变量。这种 IF 条件并不是真的需要,但它使批处理文件对数据操作更安全一些。
通常,在将文件分配给环境变量之后,检查从文件读取的每个值是否有用,以获得有效数据。在演示批处理代码中跳过此数据检查,然后输出读取值。
但是如果该文件尚不存在,则要求批处理文件用户输入名称,并使用默认值定义其他环境变量。
现在,保存游戏环境变量的值非常简单,所有相关的环境变量都以MyGame_
开头。首先,在用户的应用程序数据目录中创建子目录,并在已存在目录的情况下抑制错误消息输出。
然后命令 SET 用于打印以MyGame_
开头的所有环境变量,并按字母顺序排序,并将此输出重定向到文件中。
这个方法可以很容易地添加以MyGame_
开头的后续附加环境变量,因为如果在从文件加载数据后不存在则必须进行初始化。从MyGame_
开始加载和保存其他变量将由现有代码自动完成。此外,将值存储在数据文件中的顺序也无关紧要。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
MyGame_
...解释call /?
(批处理文件的名称)。%~n0
cls /?
echo /?
endlocal /?
for /?
goto /?
if /?
md /?
pause /?
rem /?
set /?
另见: