From 9fdd6d900928991c505b6e8aaaea71970ff4ae06 Mon Sep 17 00:00:00 2001 From: Byron Johnson Date: Tue, 16 Jun 2020 12:56:03 -0600 Subject: [PATCH 1/2] Fix some errors in the test programs. --- TestFiles/binary_tree.cpsl | 4 ++-- TestFiles/checkers.cpsl | 22 +++++++++++----------- TestFiles/game_form.cpsl | 7 ++++--- TestFiles/hanoi.cpsl | 2 +- TestFiles/repeat.cpsl | 6 +++--- tester/TestFiles/checkers.cpsl | 22 +++++++++++----------- 6 files changed, 32 insertions(+), 31 deletions(-) diff --git a/TestFiles/binary_tree.cpsl b/TestFiles/binary_tree.cpsl index ce5c306..870852b 100644 --- a/TestFiles/binary_tree.cpsl +++ b/TestFiles/binary_tree.cpsl @@ -61,7 +61,7 @@ begin read(a); while (a <> 0) & (nodeCount < TABLEN) do nodelist[nodeCount] := a; - makeNode(a); + makeNode(); addNode(); $ add node to tree read(a); nodeCount := nodeCount + 1; @@ -70,7 +70,7 @@ begin nodeCount := nodeCount - 1; else nodelist[nodeCount] := a; - makeNode(a); + makeNode(); addNode(); $ add node to tree end; end; diff --git a/TestFiles/checkers.cpsl b/TestFiles/checkers.cpsl index 0b9231d..abe529b 100644 --- a/TestFiles/checkers.cpsl +++ b/TestFiles/checkers.cpsl @@ -14,12 +14,12 @@ begin end; for i := 24 to 39 do - gameBoard[i] := ' '; + game_board[i] := ' '; end; for i := 40 to 63 do if ((i % 8) + (i % 2)) = 0 then - game_board[i] := 'x'; + game_board[i] := 'o'; else game_board[i] := ' '; end; @@ -31,24 +31,24 @@ end; function pieces_remaining(label : char) : integer; var i, count : integer; begin - remain := 0; + count := 0; for i := 0 to 63 do if (game_board[i] = label) then - remain := remain + 1; + count := count + 1; end; end; - return remain; + return count; end; procedure print_board(); var i : integer; begin - $ write(' ', gameBoard[1], " | ", gameBoard[2], " | ", gameBoard[3], ' ', gameBoard[4], " | ", gameBoard[5], " | ", gameBoard[6], ' ', gameBoard[7], '\n'); + $ write(' ', game_board[1], " | ", game_board[2], " | ", game_board[3], ' ', game_board[4], " | ", game_board[5], " | ", game_board[6], ' ', game_board[7], '\n'); $ write("-----------\n"); i := 0; for i := 7 downto 0 do - write(gameBoard[8*i], gameBoard[8*i + 1], gameBoard[8*i + 2], gameBoard[8*i + 3], gameBoard[8*i + 4], gameBoard[8*i + 5], gameBoard[8*i + 6], gameBoard[8*i + 7], '\n'); + write(game_board[8*i], game_board[8*i + 1], game_board[8*i + 2], game_board[8*i + 3], game_board[8*i + 4], game_board[8*i + 5], game_board[8*i + 6], game_board[8*i + 7], '\n'); end; end; @@ -103,7 +103,7 @@ begin read(dir); write('\n'); - new := move_cell(cel, dir); + new := move_cell(cell, dir); end; game_board[cell] := ' '; @@ -135,7 +135,7 @@ begin read(dir); write('\n'); - new := move_cell(cel, dir); + new := move_cell(cell, dir); end; game_board[cell] := ' '; @@ -164,7 +164,7 @@ end; begin init_board(); - while (pieces_remaing('x') > 0) & (pieces_remaining('o') > 0) do + while (pieces_remaining('x') > 0) & (pieces_remaining('o') > 0) do print_board(); if (turn = 0) then @@ -183,4 +183,4 @@ begin end; write("\nGame Over.\n"); -end. \ No newline at end of file +end. diff --git a/TestFiles/game_form.cpsl b/TestFiles/game_form.cpsl index 2152afd..6b20561 100644 --- a/TestFiles/game_form.cpsl +++ b/TestFiles/game_form.cpsl @@ -19,13 +19,14 @@ var begin write("Enter ManchesterUnited score: \n"); read(hscore.score1); - Write("Enter Away team score \n"); + write("Enter Away team score \n"); read(hscore.score2); if hscore.score1 > hscore.score2 then - bool1 := true; + hscore.bool1 := true; else - bool1 := false; + hscore.bool1 := false; end; + return hscore end; diff --git a/TestFiles/hanoi.cpsl b/TestFiles/hanoi.cpsl index 0359817..6b15b4a 100644 --- a/TestFiles/hanoi.cpsl +++ b/TestFiles/hanoi.cpsl @@ -1,6 +1,6 @@ var disks : integer; -procedure moveTower(var disk: integer; source,dest,spare: character); +procedure moveTower(var disk: integer; source,dest,spare: char); begin if(disk=1) then write("Move ",disk," from ",source," to ",dest,'\n'); diff --git a/TestFiles/repeat.cpsl b/TestFiles/repeat.cpsl index 58a3403..ae5ecc4 100644 --- a/TestFiles/repeat.cpsl +++ b/TestFiles/repeat.cpsl @@ -8,15 +8,15 @@ i := 0; repeat write("i: ", i, " \n"); i := i+1; -until i < 5; +until i >= 5; repeat write("should only happen once ", i, " \n"); i := i+1; -until i < 5; +until i >= 5; while (i < 5) do write("should not happen"); end; -END. \ No newline at end of file +END. diff --git a/tester/TestFiles/checkers.cpsl b/tester/TestFiles/checkers.cpsl index 0b9231d..abe529b 100644 --- a/tester/TestFiles/checkers.cpsl +++ b/tester/TestFiles/checkers.cpsl @@ -14,12 +14,12 @@ begin end; for i := 24 to 39 do - gameBoard[i] := ' '; + game_board[i] := ' '; end; for i := 40 to 63 do if ((i % 8) + (i % 2)) = 0 then - game_board[i] := 'x'; + game_board[i] := 'o'; else game_board[i] := ' '; end; @@ -31,24 +31,24 @@ end; function pieces_remaining(label : char) : integer; var i, count : integer; begin - remain := 0; + count := 0; for i := 0 to 63 do if (game_board[i] = label) then - remain := remain + 1; + count := count + 1; end; end; - return remain; + return count; end; procedure print_board(); var i : integer; begin - $ write(' ', gameBoard[1], " | ", gameBoard[2], " | ", gameBoard[3], ' ', gameBoard[4], " | ", gameBoard[5], " | ", gameBoard[6], ' ', gameBoard[7], '\n'); + $ write(' ', game_board[1], " | ", game_board[2], " | ", game_board[3], ' ', game_board[4], " | ", game_board[5], " | ", game_board[6], ' ', game_board[7], '\n'); $ write("-----------\n"); i := 0; for i := 7 downto 0 do - write(gameBoard[8*i], gameBoard[8*i + 1], gameBoard[8*i + 2], gameBoard[8*i + 3], gameBoard[8*i + 4], gameBoard[8*i + 5], gameBoard[8*i + 6], gameBoard[8*i + 7], '\n'); + write(game_board[8*i], game_board[8*i + 1], game_board[8*i + 2], game_board[8*i + 3], game_board[8*i + 4], game_board[8*i + 5], game_board[8*i + 6], game_board[8*i + 7], '\n'); end; end; @@ -103,7 +103,7 @@ begin read(dir); write('\n'); - new := move_cell(cel, dir); + new := move_cell(cell, dir); end; game_board[cell] := ' '; @@ -135,7 +135,7 @@ begin read(dir); write('\n'); - new := move_cell(cel, dir); + new := move_cell(cell, dir); end; game_board[cell] := ' '; @@ -164,7 +164,7 @@ end; begin init_board(); - while (pieces_remaing('x') > 0) & (pieces_remaining('o') > 0) do + while (pieces_remaining('x') > 0) & (pieces_remaining('o') > 0) do print_board(); if (turn = 0) then @@ -183,4 +183,4 @@ begin end; write("\nGame Over.\n"); -end. \ No newline at end of file +end. From ff1aa0bb0bd17aa57de6748ce9da3fd1f65088de Mon Sep 17 00:00:00 2001 From: Byron Johnson Date: Tue, 16 Jun 2020 14:47:06 -0600 Subject: [PATCH 2/2] Fix the implementation of checkers. --- TestFiles/checkers.cpsl | 83 ++++++++++++++++++++++++---------- tester/TestFiles/checkers.cpsl | 83 ++++++++++++++++++++++++---------- 2 files changed, 120 insertions(+), 46 deletions(-) diff --git a/TestFiles/checkers.cpsl b/TestFiles/checkers.cpsl index abe529b..c6bc5ef 100644 --- a/TestFiles/checkers.cpsl +++ b/TestFiles/checkers.cpsl @@ -6,7 +6,7 @@ procedure init_board(); var i : integer; begin for i := 0 to 23 do - if ((i % 8) + (i % 2)) = 0 then + if (i / 8) % 2 = (i % 2) then game_board[i] := 'x'; else game_board[i] := ' '; @@ -18,7 +18,7 @@ begin end; for i := 40 to 63 do - if ((i % 8) + (i % 2)) = 0 then + if (i / 8) % 2 = (i % 2) then game_board[i] := 'o'; else game_board[i] := ' '; @@ -48,7 +48,7 @@ begin i := 0; for i := 7 downto 0 do - write(game_board[8*i], game_board[8*i + 1], game_board[8*i + 2], game_board[8*i + 3], game_board[8*i + 4], game_board[8*i + 5], game_board[8*i + 6], game_board[8*i + 7], '\n'); + write(game_board[8*i], game_board[8*i + 1], game_board[8*i + 2], game_board[8*i + 3], game_board[8*i + 4], game_board[8*i + 5], game_board[8*i + 6], game_board[8*i + 7], " ", 8*i, "-", 8*i+7, '\n'); end; end; @@ -59,15 +59,18 @@ begin adj := 0; if dir = 0 then - adj := -7; - elseif dir = 1 then adj := 9; + elseif dir = 1 then + adj := -7; elseif dir = 2 then - adj := 7; - elseif dir = 3 then adj := -9; + elseif dir = 3 then + adj := 7; end; new := new + adj; + if new >= 64 then + return -3; + end; $ This logic implements a cylinder shaped board. if game_board[new] = game_board[cell] then @@ -75,9 +78,17 @@ begin elseif game_board[new] <> ' ' then new := new + adj; + if new >= 64 then + return -4; + end; + if game_board[new] <> ' ' then new := -2; end; + + if new >= 0 then + game_board[new - adj] := ' '; + end; end; return new; @@ -90,20 +101,33 @@ begin dir := -1; new := -1; - while ~((cell > -1) & (cell < 64) & (new < 0)) do + while ~((cell > -1) & (cell < 64) & (new >= 0)) do write("\nEnter the number of a square with an x: "); read(cell); write('\n'); - write("\n3 0\n"); - write(" x \n"); - write("2 1\n"); + if ~((cell > -1) & (cell < 64)) then + print_board(); + write("Invalid cell.\n"); + elseif game_board[cell] <> 'x' then + print_board(); + write("Invalid cell.\n"); + else + write("\n3 0\n"); + write(" x \n"); + write("2 1\n"); - write("\nPick a direction: \n"); - read(dir); - write('\n'); + write("\nPick a direction: \n"); + read(dir); + write('\n'); + + new := move_cell(cell, dir); - new := move_cell(cell, dir); + if new < 0 then + print_board(); + write("Invalid move.\n"); + end; + end; end; game_board[cell] := ' '; @@ -122,20 +146,33 @@ begin dir := -1; new := -1; - while ~((cell > -1) & (cell < 64) & (new < 0)) do + while ~((cell > -1) & (cell < 64) & (new >= 0)) do write("\nEnter the number of a square with an o: "); read(cell); write('\n'); - write("\n3 0\n"); - write(" x \n"); - write("2 1\n"); + if ~((cell > -1) & (cell < 64)) then + print_board(); + write("Invalid cell.\n"); + elseif game_board[cell] <> 'o' then + print_board(); + write("Invalid cell.\n"); + else + write("\n3 0\n"); + write(" x \n"); + write("2 1\n"); - write("\nPick a direction: \n"); - read(dir); - write('\n'); + write("\nPick a direction: \n"); + read(dir); + write('\n'); - new := move_cell(cell, dir); + new := move_cell(cell, dir); + + if new < 0 then + print_board(); + write("Invalid move.\n"); + end; + end; end; game_board[cell] := ' '; diff --git a/tester/TestFiles/checkers.cpsl b/tester/TestFiles/checkers.cpsl index abe529b..c6bc5ef 100644 --- a/tester/TestFiles/checkers.cpsl +++ b/tester/TestFiles/checkers.cpsl @@ -6,7 +6,7 @@ procedure init_board(); var i : integer; begin for i := 0 to 23 do - if ((i % 8) + (i % 2)) = 0 then + if (i / 8) % 2 = (i % 2) then game_board[i] := 'x'; else game_board[i] := ' '; @@ -18,7 +18,7 @@ begin end; for i := 40 to 63 do - if ((i % 8) + (i % 2)) = 0 then + if (i / 8) % 2 = (i % 2) then game_board[i] := 'o'; else game_board[i] := ' '; @@ -48,7 +48,7 @@ begin i := 0; for i := 7 downto 0 do - write(game_board[8*i], game_board[8*i + 1], game_board[8*i + 2], game_board[8*i + 3], game_board[8*i + 4], game_board[8*i + 5], game_board[8*i + 6], game_board[8*i + 7], '\n'); + write(game_board[8*i], game_board[8*i + 1], game_board[8*i + 2], game_board[8*i + 3], game_board[8*i + 4], game_board[8*i + 5], game_board[8*i + 6], game_board[8*i + 7], " ", 8*i, "-", 8*i+7, '\n'); end; end; @@ -59,15 +59,18 @@ begin adj := 0; if dir = 0 then - adj := -7; - elseif dir = 1 then adj := 9; + elseif dir = 1 then + adj := -7; elseif dir = 2 then - adj := 7; - elseif dir = 3 then adj := -9; + elseif dir = 3 then + adj := 7; end; new := new + adj; + if new >= 64 then + return -3; + end; $ This logic implements a cylinder shaped board. if game_board[new] = game_board[cell] then @@ -75,9 +78,17 @@ begin elseif game_board[new] <> ' ' then new := new + adj; + if new >= 64 then + return -4; + end; + if game_board[new] <> ' ' then new := -2; end; + + if new >= 0 then + game_board[new - adj] := ' '; + end; end; return new; @@ -90,20 +101,33 @@ begin dir := -1; new := -1; - while ~((cell > -1) & (cell < 64) & (new < 0)) do + while ~((cell > -1) & (cell < 64) & (new >= 0)) do write("\nEnter the number of a square with an x: "); read(cell); write('\n'); - write("\n3 0\n"); - write(" x \n"); - write("2 1\n"); + if ~((cell > -1) & (cell < 64)) then + print_board(); + write("Invalid cell.\n"); + elseif game_board[cell] <> 'x' then + print_board(); + write("Invalid cell.\n"); + else + write("\n3 0\n"); + write(" x \n"); + write("2 1\n"); - write("\nPick a direction: \n"); - read(dir); - write('\n'); + write("\nPick a direction: \n"); + read(dir); + write('\n'); + + new := move_cell(cell, dir); - new := move_cell(cell, dir); + if new < 0 then + print_board(); + write("Invalid move.\n"); + end; + end; end; game_board[cell] := ' '; @@ -122,20 +146,33 @@ begin dir := -1; new := -1; - while ~((cell > -1) & (cell < 64) & (new < 0)) do + while ~((cell > -1) & (cell < 64) & (new >= 0)) do write("\nEnter the number of a square with an o: "); read(cell); write('\n'); - write("\n3 0\n"); - write(" x \n"); - write("2 1\n"); + if ~((cell > -1) & (cell < 64)) then + print_board(); + write("Invalid cell.\n"); + elseif game_board[cell] <> 'o' then + print_board(); + write("Invalid cell.\n"); + else + write("\n3 0\n"); + write(" x \n"); + write("2 1\n"); - write("\nPick a direction: \n"); - read(dir); - write('\n'); + write("\nPick a direction: \n"); + read(dir); + write('\n'); - new := move_cell(cell, dir); + new := move_cell(cell, dir); + + if new < 0 then + print_board(); + write("Invalid move.\n"); + end; + end; end; game_board[cell] := ' ';