QBasic/高级图形
外观
< QBasic
动画本质上是指在固定时间段内变化的图形。我们将使用一个 do-loop 来实现。
SCREEN 7 ' we need to use a graphics enabled screen mode
animation 'calling the sub
SUB animation
SCREEN 7
x = 10 'set first x- coordinate
y = 10 'set first y-coordinate
DO
CLS ' going back to a blank screen so that the previous rectangle is erased
x = x + 3 ' setting increment of coordinate x
y = y + 3 ' setting increment of coordinate y
LINE (x, y)-(x + 5, y) 'drawing lines
LINE (x, y + 5)-(x + 5, y + 5)
LINE (x, y)-(x, y + 5)
LINE (x + 5, y)-(x + 5, y + 5)
SLEEP 2
LOOP UNTIL INKEY$ <> ""
END SUB
解释
- 我们从默认的 QBasic 纯文本屏幕切换到一个启用图形的屏幕。
- 我们调用了创建动画的子程序。
- 我们开始了 do-loop until 循环。这使得动画可以一直运行,直到用户按下某个键结束动画。
- 我们设置了坐标的增量。这使得方框可以绘制在新的位置,而不是同一个位置。如果希望方框只在一个方向移动,则只需要设置一个变量的增量。
- 我们从每个坐标绘制到另一个坐标的线条。请注意,每次一个坐标保持固定,而另一个坐标发生变化。(这里我指的是两个坐标集,第一个是起始坐标集,第二个是结束坐标集)
- 我们执行了一个 sleep 命令。这会暂停执行 2 秒。如果没有这个命令,do-loop 会比我们想要的更快地执行,动画会非常短暂。
- 通过使用 RND 为变量赋值,你可以创建随机、不可预测的动画。
在这一步,我们将使用 QB64 内置的 _mousehide、_mousex、_mousey、_mouseinput 和 _mousebutton 命令来控制鼠标输入。
These Functions only work in QB64!
_mousehide
screen 7
mousetrack
sub mousetrack
do while _mouseinput
cls
X = _mousex
Y = _mousey
LINE (X - 10, Y)-(X + 10, Y), 15
LINE (X, Y - 10)-(X, Y + 10), 15
IF _MOUSEBUTTON(1) THEN
IF X > A AND X < A + 25 AND Y > B AND Y < B + 25 THEN
message$ = "yes"
goto action
END IF
END IF
loop until inkey$ <> ""
- 这里第一个函数 "_mousehide" 阻止默认的指针鼠标格式显示在屏幕上。
- Mouseinput 函数获取鼠标信息。
- 接下来的函数 "_mousex" 和 "_mousey" 保存鼠标当前的 x 和 y 坐标。
- 这些代码行绘制了一个基本的触发器。
- "_mousebutton" 函数返回所按鼠标按钮的值,“1”表示按下左键。
- 如果鼠标按钮事件发生在某个封闭区域内,则会发出一个名为 "message$" 的消息。这可以在以后使用。
- 如果满足了之前的条件,则该过程跳转到行标签 "action",这里可能会执行任何命令。
- 否则,该过程循环,直到满足 "loop until" 条件。它也可以是与上面给出的条件不同的其他条件。
这些图形和动画可以用来创建一个完整的游戏。你可以使用 "Inkey$" 命令来代替 "Mouse" 函数,来创建不同的场景和情况,每个场景和情况都有完整的代码来决定下一步发生的事情。
你可以使用 ".txt" 文件来存储信息,而不是制作不包含任何用户信息的游戏。这些信息可以稍后被检索,来创建一个具有完整 “职业” 选项的游戏。