Windows 批量卡牌游戏无法正常运行,不知道如何解决
Windows batch card game not working properly, don't know how to fix
所以对于我们的计算机科学 class,我们必须编写一个随机生成卡片的程序,我决定批量生成卡片,因为我是一个 大菜鸟 XD
我有信心我能做到,因为我对此很有经验。即使 batch 无论如何都不是一个好的 'language' 如果你要这么称呼它的话。我能够通过一些努力自己解决大部分问题。然而,我仍然有一些问题我不知道如何解决。
我不知道如何解决的最大问题是...
- 文本显示不正确。
- 数字(我用于 AI 和卡片生成的基础)有时没有在变量中正确定义。
- 不管我做什么,积分系统就是不工作。
- 如果我跳过 'TIMEOUT' 或 'PAUSE'。
,它有时会随机地决定让我崩溃
- 一些 'IF' 语句没有正确执行,即使它们与其他语句完全相同。
如果这个问题太宽泛,我很抱歉,但我真的不知道如何总结它。
这是我的纸牌游戏 link:http://pastebin.com/t2S3yWk5
这是我们的问题:
1) 创建一个程序来生成两个随机数 - 一个映射到花色(红桃、方块、梅花或黑桃),另一个映射到牌(A、2、3、.... . 杰克, 女王, 国王)
*Mine is slightly different, it generates two different suits based on two random numbers.*
2) 创建一个将生成随机卡片的程序,然后要求用户走高、走低或退出。如果玩家选择更高,则下一张牌必须具有更高的价值,否则玩家就出局了。同样适用于 Lower.
3)扩展之前的程序,用户将在游戏开始时select一张王牌。如果该牌是王牌,则无论该牌的价值如何,游戏都会继续。该程序将保留分数并将分数保存到高分文件中。用户还将能够显示当前的高分文件。
我想自己尝试做这些事情(上面列出的)。我只是需要帮助来修复我现有的程序。
我希望如果您阅读本文,可以给我一些建议或为我的一些问题提供解决方案。提前致谢! :3
好消息;您的代码没有 super 错误,它只是一堆看起来很多的小东西。一些差一错误和一个缺失的变量,我只能假设是通过复制和粘贴复制的。
Text not being displayed properly
我假设这是您的代码产生的 "Access denied" 错误,而不是 AI 的注释。这是因为 >
和 <
用于输出重定向,因此您添加的表情试图在您无权访问的地方创建文件。摆脱它们(推荐)或使用 ^
来逃避它们(^>:)
)。
Numbers (I use for the base of the AI and card generation) sometimes not being defined properly in variables
%random% %% 5
会产生集合 0、1、2、3、4 中的一个数字。您目前没有 if
说明如果随机选择 0 会发生什么.如果选择 0,则添加 if
语句或让代码返回到该部分的顶部。
The point system just refuses to work no matter what I do
你会踢自己的...
您的 set
语句缺少赋值部分。 SET /A %p1p% + 2
应该是 SET /A p1p=%p1p% + 2
等等(或者 set /a p1p+=2
如果你认为这样看起来更好)。
If sometimes randomly just flat out decides to crash on me if I skip a 'TIMEOUT' or 'PAUSE'
我无法复制它,但当我删除这些语句时,代码似乎工作正常。
Some 'IF' statements not being executed properly even though they're exactly the same as the other ones
您的评论指出了第 119-132 行,其中包括分配分数的 if
语句。请参阅上文了解为什么这些不起作用。
对您的代码的一些其他建议
您的变量名应该更具描述性。例如,ctog
没有告诉我该变量应该是什么;我可以查看代码以了解它的作用,但在没有任何上下文的情况下,它可以做任何事情。
您应该将 /i
标志添加到检查您放下了哪张牌的 if 语句中,以便 C1 和 c1 得到相同的处理。与此相关的是,您应该在玩家输入 C1 或 C2 以外的内容时添加检查。您甚至可以像之前那样使用 choice
命令。
:pvic 缺少一个 exit
命令,所以如果你赢了,你会自动重新玩。再加上你只检查 lt 是否等于 2,而不是大于或等于 2,如果你赢了就没有办法停止比赛。此外,关于游戏结束条件的主题,没有关于是否绑定计算机的 if
声明。
cp1 和 num1 实际上是同一个变量,没有理由同时拥有(与 cp2/num2、ap1/num3 和 ap2/num4 相同)。
您需要在 :pc1 的末尾添加某种 goto
,这样 :pc2 就不会在 :pc1 完成后自动 运行。
所以对于我们的计算机科学 class,我们必须编写一个随机生成卡片的程序,我决定批量生成卡片,因为我是一个 大菜鸟 XD 我有信心我能做到,因为我对此很有经验。即使 batch 无论如何都不是一个好的 'language' 如果你要这么称呼它的话。我能够通过一些努力自己解决大部分问题。然而,我仍然有一些问题我不知道如何解决。
我不知道如何解决的最大问题是...
- 文本显示不正确。
- 数字(我用于 AI 和卡片生成的基础)有时没有在变量中正确定义。
- 不管我做什么,积分系统就是不工作。
- 如果我跳过 'TIMEOUT' 或 'PAUSE'。 ,它有时会随机地决定让我崩溃
- 一些 'IF' 语句没有正确执行,即使它们与其他语句完全相同。
如果这个问题太宽泛,我很抱歉,但我真的不知道如何总结它。
这是我的纸牌游戏 link:http://pastebin.com/t2S3yWk5
这是我们的问题:
1) 创建一个程序来生成两个随机数 - 一个映射到花色(红桃、方块、梅花或黑桃),另一个映射到牌(A、2、3、.... . 杰克, 女王, 国王)
*Mine is slightly different, it generates two different suits based on two random numbers.*
2) 创建一个将生成随机卡片的程序,然后要求用户走高、走低或退出。如果玩家选择更高,则下一张牌必须具有更高的价值,否则玩家就出局了。同样适用于 Lower.
3)扩展之前的程序,用户将在游戏开始时select一张王牌。如果该牌是王牌,则无论该牌的价值如何,游戏都会继续。该程序将保留分数并将分数保存到高分文件中。用户还将能够显示当前的高分文件。
我想自己尝试做这些事情(上面列出的)。我只是需要帮助来修复我现有的程序。
我希望如果您阅读本文,可以给我一些建议或为我的一些问题提供解决方案。提前致谢! :3
好消息;您的代码没有 super 错误,它只是一堆看起来很多的小东西。一些差一错误和一个缺失的变量,我只能假设是通过复制和粘贴复制的。
Text not being displayed properly
我假设这是您的代码产生的 "Access denied" 错误,而不是 AI 的注释。这是因为 >
和 <
用于输出重定向,因此您添加的表情试图在您无权访问的地方创建文件。摆脱它们(推荐)或使用 ^
来逃避它们(^>:)
)。
Numbers (I use for the base of the AI and card generation) sometimes not being defined properly in variables
%random% %% 5
会产生集合 0、1、2、3、4 中的一个数字。您目前没有 if
说明如果随机选择 0 会发生什么.如果选择 0,则添加 if
语句或让代码返回到该部分的顶部。
The point system just refuses to work no matter what I do
你会踢自己的...
您的 set
语句缺少赋值部分。 SET /A %p1p% + 2
应该是 SET /A p1p=%p1p% + 2
等等(或者 set /a p1p+=2
如果你认为这样看起来更好)。
If sometimes randomly just flat out decides to crash on me if I skip a 'TIMEOUT' or 'PAUSE'
我无法复制它,但当我删除这些语句时,代码似乎工作正常。
Some 'IF' statements not being executed properly even though they're exactly the same as the other ones
您的评论指出了第 119-132 行,其中包括分配分数的 if
语句。请参阅上文了解为什么这些不起作用。
对您的代码的一些其他建议
您的变量名应该更具描述性。例如,ctog
没有告诉我该变量应该是什么;我可以查看代码以了解它的作用,但在没有任何上下文的情况下,它可以做任何事情。
您应该将 /i
标志添加到检查您放下了哪张牌的 if 语句中,以便 C1 和 c1 得到相同的处理。与此相关的是,您应该在玩家输入 C1 或 C2 以外的内容时添加检查。您甚至可以像之前那样使用 choice
命令。
:pvic 缺少一个 exit
命令,所以如果你赢了,你会自动重新玩。再加上你只检查 lt 是否等于 2,而不是大于或等于 2,如果你赢了就没有办法停止比赛。此外,关于游戏结束条件的主题,没有关于是否绑定计算机的 if
声明。
cp1 和 num1 实际上是同一个变量,没有理由同时拥有(与 cp2/num2、ap1/num3 和 ap2/num4 相同)。
您需要在 :pc1 的末尾添加某种 goto
,这样 :pc2 就不会在 :pc1 完成后自动 运行。