(QBASIC / Qb64)2D阵列Tic Tac Toe?

时间:2018-05-08 01:47:03

标签: qbasic qb64

我在C ++或Java中看到了很多关于这个问题的例子和答案,但我还没有看到QB64的问题。考虑到这是一个介绍课程,我不知道如何阅读其中任何一个。这是:

“设计一个允许两个玩家玩井字游戏的程序。一种方法是使用一个二维String数组,三行三列作为游戏板。或者,你可以使用一个带有9个元素的三维数组。数组的每个元素都应该用''或“”等字符或字符串初始化。初始化数组的另一种方法是使用数字字符,如“1”, “2”,“3”等。这将显示板,以便用户可以选择与他们想要放置“X”或“O”的位置相对应的数字。单引号用于单个字符,双引号用于字符串。在这个程序中,使用字符或字符串无关紧要,但是你必须在整个程序中保持一致,否则它将无法工作。程序应运行一个循环,执行以下操作: / p>

显示板阵列的内容

允许玩家1在棋盘上选择X的位置。程序应该要求用户输入行号和列号(如果使用1D阵列,则输入单元号)。

允许玩家2在棋盘上选择O的位置。程序应该要求用户输入行号和列号(如果使用1D阵列,则输入单元号)。

确定玩家是否获胜或是否已发生平局。如果一名球员获胜,该计划应宣布该球员为胜者并结束。如果出现平局,程序应该这样说并结束。

当游戏板上连续三个X时,玩家1获胜。当游戏板上连续有三个Os时,玩家2获胜。获胜的Xs或Ox可以出现在一行,一列或对角线上。当电路板上的所有位置都已满时,就会出现平局,但没有赢家。 “

所以人们输入他们的标记有点像战舰,例如选择C2或A3。

最终结果如下所示(包含java代码): http://www.java2s.com/Code/C/Data-Type/AsimpleTicTacToegame.htm

感谢任何帮助,提前谢谢!

编辑:我链接的Java示例是针对AI的1人游戏。我试图找出的程序是一个屏幕上的2个玩家。

1 个答案:

答案 0 :(得分:0)

无法抗拒,所以这是一个4x4 tictactoe计划:

(将其视为额外的学分作业)..

REM two-player 4d-tictactoe v1.0a pd 2018 for QB64
DIM b(16) AS INTEGER
startloop:
FOR l = 1 TO 16: b(l) = 0: NEXT: c = 0: w = 0
GOSUB displayboard
DO
    FOR q = 1 TO 2
        GOSUB getuserinput
        b(x) = q ' store array selection
        c = c + 1: IF c = 16 THEN EXIT DO
        GOSUB displayboard
        IF w THEN PRINT "Player"; w; "wins": GOTO endloop
    NEXT
LOOP
GOSUB displayboard
IF w THEN PRINT "Player"; w; "wins" ELSE PRINT "Game is draw"
endloop:
PRINT "Play again(y/n)";
DO
    _LIMIT 100
    x$ = INKEY$
    IF LCASE$(x$) = "y" THEN PRINT: GOTO startloop
    IF LCASE$(x$) = "n" THEN PRINT: EXIT DO
LOOP
END
getuserinput:
DO
    PRINT "Player#"; q; " position(1-16)";: INPUT x
    IF x >= 1 AND x <= 16 THEN
        IF b(x) <> 0 THEN
            PRINT "Not empty slot"
        ELSE
            EXIT DO
        END IF
    ELSE
        PRINT "Value is not 1-16"
    END IF
LOOP
RETURN
displayboard:
FOR l = 1 TO 13 STEP 4
    FOR m = l TO l + 3
        IF b(m) = 1 THEN PRINT "X "; ELSE IF b(m) = 2 THEN PRINT "O "; ELSE PRINT ". ";
        IF m < l + 3 THEN PRINT "| ";
    NEXT
    PRINT
    IF l < 13 THEN PRINT "-------------"
NEXT
REM checkboard : returns winner
REM horizontal
IF b(1) > 0 THEN
    IF b(1) = b(2) AND b(2) = b(3) AND b(3) = b(4) THEN w = b(1)
END IF
IF b(5) > 0 THEN
    IF b(5) = b(6) AND b(6) = b(7) AND b(7) = b(8) THEN w = b(5)
END IF
IF b(9) > 0 THEN
    IF b(9) = b(10) AND b(10) = b(11) AND b(11) = b(12) THEN w = b(9)
END IF
IF b(13) > 0 THEN
    IF b(13) = b(14) AND b(14) = b(15) AND b(15) = b(16) THEN w = b(13)
END IF
REM vertical
IF b(1) > 0 THEN
    IF b(1) = b(5) AND b(5) = b(9) AND b(9) = b(13) THEN w = b(1)
END IF
IF b(2) > 0 THEN
    IF b(2) = b(6) AND b(6) = b(10) AND b(10) = b(14) THEN w = b(2)
END IF
IF b(3) > 0 THEN
    IF b(3) = b(7) AND b(7) = b(11) AND b(11) = b(15) THEN w = b(3)
END IF
IF b(4) > 0 THEN
    IF b(4) = b(8) AND b(8) = b(12) AND b(12) = b(16) THEN w = b(4)
END IF
REM diagonal
IF b(1) > 0 THEN
    IF b(1) = b(6) AND b(6) = b(11) AND b(11) = b(16) THEN w = b(1)
END IF
IF b(4) > 0 THEN
    IF b(4) = b(7) AND b(7) = b(10) AND b(10) = b(13) THEN w = b(4)
END IF
RETURN