The Brain from Australia is a 2 player board game originally made on my Tandy 2000. I could not find a copy of the rules, I peeked at my source code from the Tandy 2000 printout to figure out the rules. Hopefully I got it right.
The Game is played on a 13x13 game board with alternating orange and green spots on the board for players to place their pieces on. There are also groups of 2x2 grey squares grouped under the color spots around the board. One player plays with 26 white pieces and the other plays with 26 black pieces.
The game came be won by placing 4 of your pieces in a row and skipping one space in between each of your pieces or by occupying all 4 grey squares that are grouped of your color.
If after each player has placed all 26 of their pieces on the board and there is no winner yet, places can move the their pieces already on the board.
Hope you enjoy playing.
Donald
Code: (Select All)
_Title"The Brain Game From Australia by Donald L. Foster Jr. 2018"
' Daw Board Line (10, 10)-(725, 725), 2, BF: Line (16, 16)-(719, 719), 3, BF: Line (20, 20)-(715, 715), 15, BF
X = 56 For Z = 1To13
W = 56 For Y = 1To13 If BoardSquare(Z, Y) = 1ThenLine (W - 25, X - 25)-(W + 25, X + 25), 1, BF If (Z + Y) / 2 = Fix((Z + Y) / 2) Then V = 3Else V = 4 Circle (W, X), 24, V: Paint (W, X), V
BoardX(Z, Y) = W: BoardY(Z, Y) = X
W = W + 52 Next
X = X + 52 Next
' Setup Storage Pieces
X = 145: X(1) = 1: X(2) = 1 For Z = 1To13
W = 780 For Y = 1To4 If Y < 3Then V = 1Else V = 2 Circle (W, X), 20, PlayerColor(V): Paint (W, X), PlayerColor(V)
StorageX(V, X(V)) = W: StorageY(V, X(V)) = X
W = W + 60: X(V) = X(V) + 1 Next
X = X + 44 Next
StartGame: ' Display Player Indicator Circle (872, 65), 21, PlayerColor(Player): Paint (872, 65), PlayerColor(Player) Locate7, 106: Print"Player:"; Player;
Locate45, 94: If PlayerPieces(Player) = 27ThenPrint" Choose a Piece to Move. "; ElsePrint" Choose Location to Place Piece. ";
EndMouseInput2:
BoardPlayer(Row1, Column1) = 0: BoardPlayer(Row2, Column2) = Player Line (BoardX(Row1, Column1) - 26, BoardY(Row1, Column1) - 26)-(BoardX(Row1, Column1) + 26, BoardY(Row1, Column1) + 26), 15, BF If BoardSquare(Row1, Column1) = 1ThenLine (BoardX(Row1, Column1) - 25, BoardY(Row1, Column1) - 25)-(BoardX(Row1, Column1) + 25, BoardY(Row1, Column1) + 25), 1, BF If (Row1 + Column1) / 2 = Fix((Row1 + Column1) / 2) Then V = 3Else V = 4 Circle (BoardX(Row1, Column1), BoardY(Row1, Column1)), 24, V: Paint (BoardX(Row1, Column1), BoardY(Row1, Column1)), V Circle (BoardX(Row2, Column2), BoardY(Row2, Column2)), 20, PlayerColor(Player): Paint (BoardX(Row2, Column2), BoardY(Row2, Column2)), PlayerColor(Player)
EndTurn: ' Set WinningSquares to Zero For Z = 1To13: For Y = 1To13: WinningSquare(Z, Y) = 0: Next: Next
' Check for Winner
X = 0 For Z = 2To11Step3 For Y = 2To11Step3 If BoardPlayer(Z, Y) = Player And BoardPlayer(Z, Y + 1) = Player And BoardPlayer(Z + 1, Y) = Player And BoardPlayer(Z + 1, Y + 1) = Player Then
X = 1: WinningSquare(Z, Y) = 1: WinningSquare(Z, Y + 1) = 1: WinningSquare(Z + 1, Y) = 1: WinningSquare(Z + 1, Y + 1) = 1 End If Next Next
For Z = 1To7 For Y = 1To13 If BoardPlayer(Y, Z) = Player And BoardPlayer(Y, Z + 2) = Player And BoardPlayer(Y, Z + 4) = Player And BoardPlayer(Y, Z + 6) = Player Then
X = 1: WinningSquare(Y, Z) = 1: WinningSquare(Y, Z + 2) = 1: WinningSquare(Y, Z + 4) = 1: WinningSquare(Y, Z + 6) = 1 End If If BoardPlayer(Z, Y) = Player And BoardPlayer(Z + 2, Y) = Player And BoardPlayer(Z + 4, Y) = Player And BoardPlayer(Z + 6, Y) = Player Then
X = 1: WinningSquare(Z, Y) = 1: WinningSquare(Z + 2, Y) = 1: WinningSquare(Z + 4, Y) = 1: WinningSquare(Z + 6, Y) = 1 End If Next Next
For Z = 1To7 For Y = 1To7 If BoardPlayer(Z, Y) = Player And BoardPlayer(Z + 2, Y + 2) = Player And BoardPlayer(Z + 4, Y + 4) = Player And BoardPlayer(Z + 6, Y + 6) = Player Then
X = 1: WinningSquare(Z, Y) = 1: WinningSquare(Z + 2, Y + 2) = 1: WinningSquare(Z + 4, Y + 4) = 1: WinningSquare(Z + 6, Y + 6) = 1 End If If BoardPlayer(14 - Y, Z) = Player And BoardPlayer(12 - Y, Z + 2) = Player And BoardPlayer(10 - Y, Z + 4) = Player And BoardPlayer(8 - Y, Z + 6) = Player Then
X = 1: WinningSquare(14 - Y, Z) = 1: WinningSquare(12 - Y, Z + 2) = 1: WinningSquare(10 - Y, Z + 4) = 1: WinningSquare(8 - Y, Z + 6) = 1 End If Next Next
Winner: For Z = 1To13 For Y = 1To13 If WinningSquare(Z, Y) = 1ThenPSet (BoardX(Z, Y), BoardY(Z, Y)), PlayerColor(Player): Draw C$(Player) + Cursor$ Next Next
Locate45, 94: Print" Winner! Play Again? ( Y / N ) ";
Shogun is a 2 player board game. Each player has 7 pawns and 1 king piece. The object of the game is to either (1) capture your opponent's king or (2) capture 6 of your opponent's pawns. Pieces are captured by landing on them, like in chess. The pieces has a rotating disc inside with numbers from 1 to 4 on it. A window at the top of the piece reveals 1 of the digits on the disc. This number represents how many spaces that piece moves on that turn. There is a magnet located on the disc inside the piece and each positions on the board has a magnet in different locations. As the pieces move to different locations, the disc rotates an reveals a new number for that location. A piece can make 1 turn during it's move. There is a button at the bottom of the right hand side that allows the players to display the possible moves. This can be toggled on and off. When a player selects a piece, a white cursor surrounds that piece. If the player wishes to choose a different piece, they can select the same and the piece will be deselected. When the show moves is selected, gold cursors surround all then locations a piece can move to
I have included a photo which has a copy of the rules on it.
Hope you enjoy playing.
Code: (Select All)
_Title"Shogun 1976 - Programmed by Donald L. Foster Jr."
' Setup Piece Magnet Patterns For Z = 1To2: W = 1: For Y = 1To8: For X = 1To4: PieceValue(Z, Y, X) = Val(Mid$(PiecePattern$(Z), W, 1)): W = W + 1: Next: Next: Next
'Setup Board Magnet
W = 1: For Z = 1To8: For Y = 1To8: BoardMagnet(Z, Y) = Val(Mid$(BoardMagnetPosition$(Rotation), W, 1)): W = W + 1: Next: Next
' Setup King Location
Z = Int(Rnd * 2): If Z = 0Then BoardPiece(1, 5) = 8: BoardPiece(8, 4) = 8Else BoardPiece(1, 4) = 8: BoardPiece(8, 5) = 8
' Setup Pawn Locations For Z = 1To7
X = 0 While (X = 0)
Y = Int(Rnd * 8) + 1: If BoardPiece(1, Y) = 0Then BoardPiece(1, Y) = Z: X = 1 Wend
X = 0 While (X = 0)
Y = Int(Rnd * 8) + 1: If BoardPiece(8, Y) = 0Then BoardPiece(8, Y) = Z: X = 1 Wend Next
For Z = 1To8 For Y = 1To8 If (MouseLeftButton = -1) * (MouseX > BoardX(Z, Y) - 38) * (MouseX < BoardX(Z, Y) + 38) * (MouseY > BoardY(Z, Y) - 38) * (MouseY < BoardY(Z, Y) + 38) Then If BoardPlayer(Z, Y) = Player Then Row1 = Z: Column1 = Y: GoTo EndChoice1 End If Next Next Loop GoTo GetChooseAPieceInput
EndChoice1: ' Get Value of Piece Selected.
Piece = PieceValue(Player, BoardPiece(Row1, Column1), BoardMagnet(Row1, Column1))
' Set All Playable Moves to 0. For Z = 1To8: For Y = 1To8: Playable(Z, Y) = 0: Next: Next
' Check location for Legal Moves.
X1 = Row1: X2 = Column1: X = 0: On Piece GOSUB Piece1, Piece2, Piece3, Piece4
' Is This Location Legal? If X = 0ThenGoTo GetChooseAPieceInput
' Draw Cursor Around piece to be Moved. PSet (BoardX(X1, X2) - 38, BoardY(X1, X2) - 38), White&: Draw Cursor$
GetChooseLocationInput: Do While_MouseInput
MouseX = _MouseX: MouseY = _MouseY: MouseLeftButton = _MouseButton(1) If (MouseX > 772) * (MouseX < 946) * (MouseY > 679) * (MouseY < 711) * (_MouseButton(1) = -1) Then ButtonPressed = 1: GoSub ShowMovesButton: GoSub ButtonReleased For Z = 1To8 For Y = 1To8 If (MouseLeftButton = -1) * (MouseX > BoardX(Z, Y) - 38) * (MouseX < BoardX(Z, Y) + 38) * (MouseY > BoardY(Z, Y) - 38) * (MouseY < BoardY(Z, Y) + 38) Then
Row2 = Z: Column2 = Y: GoTo EndChoice2 End If Next Next Loop GoTo GetChooseLocationInput
EndChoice2: If (Row2 = Row1) * (Column2 = Column1) Then Reselect = 1: GoTo Cursors Else Reselect = 0
'Check if Position is Playable? If Playable(Row2, Column2) = 0ThenGoTo GetChooseLocationInput
Cursors: ' Remove Cursors from Board For Z = 1To8 For Y = 1To8
Playable(Z, Y) = 0: PSet (BoardX(Z, Y) - 38, BoardY(Z, Y) - 38), Black&: Draw Cursor$ Next Next
' Check for Reselect Piece If Reselect = 1ThenGoTo GetChooseAPieceInput
' Check for Capture If BoardPlayer(Row2, Column2) = Opponent Then
Captured(Opponent) = Captured(Opponent) + 1
X1 = CapturedX(Opponent): X2 = CapturedY(Captured(Opponent))
X3 = Opponent: X4 = BoardPiece(Row2, Column2): X5 = PieceValue(X3, X4, BoardMagnet(Row2, Column2)): GoSub DrawPiece If BoardPiece(Row2, Column2) = 8Then Winner = Player ElseIf BoardPlayer(Row2, Column2) = Opponent Then PawnCount(Opponent) = PawnCount(Opponent) - 1 End If
' Transfer Piece Information to New Location
BoardPlayer(Row2, Column2) = Player: BoardPiece(Row2, Column2) = BoardPiece(Row1, Column1)
' Remove Piece Information from Old Location
BoardPlayer(Row1, Column1) = 0: BoardPiece(Row1, Column1) = 0
' Remove Piece from Old Location If (Row1 + Column1) / 2 = Fix((Row1 + Column1) / 2) Then A& = _RGB(50, 50, 50) Else A& = _RGB(40, 40, 40) Line (BoardX(Row1, Column1) - 37, BoardY(Row1, Column1) - 37)-(BoardX(Row1, Column1) + 37, BoardY(Row1, Column1) + 37), A&, BF
'Check for King in Check.
Check = 0: X = 0 For Z = 1To8 For Y = 1To8
Playable(Z, Y) = 0 If BoardPlayer(Z, Y) = Player Then
Piece = PieceValue(Player, BoardPiece(Z, Y), BoardMagnet(Z, Y))
X1 = Z: X2 = Y: On Piece GOSUB Piece1, Piece2, Piece3, Piece4 End If Next Next
' Check for Winner If Winner > 0ThenGoTo Winner If PawnCount(Opponent) = 1Then Winner = Player: GoTo Winner
Maryann is a board game I designed and named it after my wife. I put together a board game that combine rules, features and characteristics of different board games.
The game is played on an 8x8 checkered board with 8 round discs lined up on each back row with arrows on top. The arrows point to the location where it can move to next. Each players turn consists of 2 moves. Moves consists on either one of the following: rotate player's piece, move a piece 1 space up,down, right, left, or diagonal, jump own pieces diagonal or capture opponent's piece up, down, left or right. A piece can be rotated on the same move, counts as 2 moves, Can move 1 piece twice or 2 pieces once. As pieces are removed from rows and columns the outer rows and columns are removed from the board. The winner is the player who captures their opponents first.
' Draw Game Title Message
Message$ = " Maryann ": X1 = 727: X2 = 2: X3 = 15: X4 = 4: GoSub DrawMessage Line (0, 0)-(100, 30), 0, BF
' Draw Board Line (10, 10)-(724, 724), 3, BF: ' LINE (12, 12)-(723, 723), 3, BF
X = 59 For Z = 1To8
W = 59 For Y = 1To8 If (Z + Y) / 2 = Fix((Z + Y) / 2) Then V = 0Else V = 15 Line (W - 43, X - 43)-(W + 43, X + 43), V, BF If BoardPlayer(Z, Y) > 0Then X1 = W: X2 = X: X3 = PlayerColor(BoardPlayer(Z, Y)): X4 = BoardRotate(Z, Y): GoSub DrawPiece
BoardX(Z, Y) = W: BoardY(Z, Y) = X
W = W + 88 Next
X = X + 88 Next
' Draw Piece Rotations
X = 0: V = 1 For Z = 1To7Step2
W = 0 For Y = 0To1
X1 = 810 + W: X2 = 315 + X: X3 = Player: X4 = V: GoSub DrawPiece
RotationX(Z + Y) = 810 + W: RotationY(Z + Y) = 315 + X
W = W + 110: V = V + 1 Next
X = X + 110 Next
After taking a peek at Craz1000's Master Sword game (based on the NES game Zelda) reminded me of my Zelda Clone I started in March 2018! So I brought it up, deleted all the code and started from scratch!
And here is my past Weeks worth of work on it!
Temporary controls(Defaults)
Letter controls are UPPER CASE!
A - Start Button
B - Select Button (change selection(option) in game selection screen)
Space Bar - Button A (attack)
Enter - Button B(not used yet)
Arrow Keys - Map navigation, letter selection
The Title Scroll works!
The Game Selection menus all work, Pick a game to resume, Register a name, and Elimination Mode.
Once Registering and picking your character you can Explore the map.
At the moment the map is empty, no creatures to combat, No caves or dungeons to enter. You do start with the first sword so blast and slash away!
took me a few hours to get the map traversing done, took 4 DAYS to get the title screen and game selection screens working!
Really putting this up here to see what people think of the Title screen and Selection screens, and to see if anyone can break those parts.
I should warn you it is possible to get stuck, if you change map screens and the next screen bottle necks down you can wind up stuck in rock. There is no way to undo this yet, you have to quit.
As I do not have the OPTIONS screen done yet, there is one option you can manually play with if you like, the Scale option. There are 3 settings; LINE 116:G.Scale_Factor = 1
1- Small(actual game size) 256x224px
2- Normal 512x448px
3- Large 768x672px
at scale 1 a debugging map of the game is displayed at the top of the screen, the yellow square is you.
(developed in 2.0.2, but tested on 1.4,1.5,and 1.6 all work[should work with all versions back to 1.1build82])
Type Projectile_Data
Id As_Byte' Kind of projectile; Sword\Arrow\Rock\Ball
Xloc AsInteger' Projectile location
Yloc AsInteger'
Direction As_Byte'Direction Projectile is traveling
Hits As_Byte' Hits per projectile\(AKA:damage) in half heart increments
Owner As_Byte' Who shot the projectile End Type
Type Links_Data '-----Position data-----
World As_Byte' Player in Overworld or Underworld
World_X As_Byte' Overworld X position
World_Y As_Byte' Overworld Y position
Tile_X As_Unsigned_Byte'Array X location:for Collision\entrances
Tile_Y As_Byte' Array Y location:for Collision\entrances
Screen_X AsInteger' X Position on screen
Screen_Y AsInteger' Y Position on screen
Direction As_Byte' Direction player is moving\facing '----------------------- '------Status Data------
Hearts As_Byte' Units of health: 2 units(halves) per heart
Containers As_Byte'Max number of health: total full hearts
Hits As_Byte' Used when Link has defence rings;Blue = 2 hits per 1\2 heart, Red = 4 hits per 1\2 heart '----------------------- '------Items Data-------
Sword As_Byte' which Sword does player have? Wooden-1,Silver-2,Magical-3
Weapon As_Byte'Which Weapon is in hand A? Wooden-1,Silver-2,Magical-3,Wand-4
Ring As_Byte'which does player have? 0-none, 1-blue,2-red '----------------------- '------Extra Data-------
Action As_Byte' is player; using an item, Aquiring an item\sword, or aquiring a piece of the triforce?
Shot As_Byte' player has shot sword
Projectile_id As_Byte'
Played As_Unsigned_Byte'how many times has player played?
Beaten As_Byte' Has player beaten Game 1? Game 2? '----------------------- End Type
Type Map_Data
Id As_Unsigned_Byte'Tile id
Hidden As_Byte' is there something under the tile?
Burnable As_Byte' can the tile be burnt with candle?
Pushable As_Byte' can the tile be moved by pushing?
PushableXtra As_Byte'can the tile be moved by pushing with braclet?
Is_Shop As_Byte' is there a shop here?(shop\gift\gamble)
Walkable As_Byte' can the tile be walk upon? End Type
'OPEN "debug.txt" FOR OUTPUT AS #6 Build_Map_Screen16 * Link.World_X, 11 * Link.World_Y ClearLayer Layer(6) Build_Map_in_Totallity'prebuild the entire map at the current scale factor ClearLayer Layer(1) _Font FFX(0), Layer(1) _Font FFX(0), Layer(16) Title_Screen Select_Screen
Do Select CaseGet_Input Case BUTTON_A If G.Aframe = 0And G.Atime = 0Then_SndPlay SFX(Slash): Link.Action = Attack: Press = Press + 1 Check_Link_Sword_Shot Case Up If Link.Action <> Attack Then Link.Direction = Up: Link.Action = Walking Case Down If Link.Action <> Attack Then Link.Direction = Down: Link.Action = Walking Case Right If Link.Action <> Attack Then Link.Direction = Right: Link.Action = Walking Case Left If Link.Action <> Attack Then Link.Direction = Left: Link.Action = Walking CaseElse If Link.Action = Walking Then Link.Action = None End Select
If Link.Action = GetItem Or Link.Action = GetTriforce Then IfNot_SndPlaying(Temp&) Then Link.Action = None End If '------Graphx build------ _PutImage , Layer(3), Layer(1) If Link.Action = Walking ThenMove_Link If Link.Shot ThenMove_Sword_Shot If G.Impactflag ThenImpact0, 0 Place_Link ' _PRINTSTRING (0, 0), STR$(Link.Tile_X) + STR$(Link.Tile_Y) + STR$(G.Projectile_Count), Layer(1) If G.Scale_Factor = 1Then_PutImage , Layer(8), Layer(1) _Dest Layer(1) Line (100 + 2 * Link.Tile_X, 0 + 2 * Link.Tile_Y)-Step(1, 1), _RGB32(255, 255, 0), BF _PutImage , Layer(1), Layer(0) ClearLayer Layer(1) '------------------------ IfInKey$ = Chr$(27) Then ExitFlag%% = TRUE _Limit60 Loop Until ExitFlag%%
SubAdd_Projectile (What%%, Who%%) Select Case What%% Case Sword
P(G.Projectile_Count).Owner = Who%%
P(G.Projectile_Count).Id = Sword
P(G.Projectile_Count).Direction = Link.Direction If Who%% = Player Then
P(G.Projectile_Count).Xloc = Link.Screen_X
P(G.Projectile_Count).Yloc = Link.Screen_Y Else End If
G.Projectile_Count = G.Projectile_Count + 1 End Select End Sub
SubBuild_Cave_Screen For Y%% = 0To10 For X%% = 0To15 Place_Tile_On_Screen (16 * G.Scale_Factor) * X%%, (16 * G.Scale_Factor) * Y%%, Cave(X%%, Y%%).Id, Layer(3) Next Next End Sub
SubBuild_Map_Screen (Map_X~%%, Map_Y%%) _Dest Layer(8) For Y%% = 0To10 For X%% = 0To15 Place_Tile_On_Screen (16 * G.Scale_Factor) * X%%, (16 * G.Scale_Factor) * Y%%, Hyrule(Map_X~%% + X%%, Map_Y%% + Y%%).Id, Layer(3) Next Next For Y%% = 0To87 For x~%% = 0To255 If Hyrule(x~%%, Y%%).Walkable = FALSE ThenLine (100 + 2 * x~%%, 0 + 2 * Y%%)-Step(1, 1), _RGB32(255), BF Next Next _Dest Layer(0) End Sub
SubBuild_Map_in_Totallity For Y%% = 0To87 For X~%% = 0To255
tile~%% = Hyrule(X~%%, Y%%).Id
Gy% = 17 * (tile~%% \ 20) 'get which row it comes from
Gx% = 17 * (tile~%% Mod20) 'which column position _PutImage ((16 * G.Scale_Factor) * X~%%, (16 * G.Scale_Factor) * Y%%)-Step(G.Scale_X, G.Scale_Y), Layer(7), Layer(6), (1 + Gx%, 1 + Gy%)-Step(15, 15) Next Next End Sub
SubCheck_Link_Location
Ax% = Link.World_X * 16 * (16 * G.Scale_Factor) 'gets the Left most pixel point for the current map screen
Ay% = Link.World_Y * 11 * (16 * G.Scale_Factor) 'gets the Top most pixel point for the current map screen
Tx~%% = (Ax% + Link.Screen_X - Offset_X(G.Scale_Factor) + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent x-offset+50% sprite size
Ty%% = (Ay% + Link.Screen_Y - Offset_Y(G.Scale_Factor) - 2 + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent y-offset+50% sprite size If Hyrule(Tx~%%, Ty%%).Is_Shop ThenEnter_Shop Hyrule(Tx~%%, Ty%%).Is_Shop
SubCheck_Link_Sword_Shot'Can Link shoot his sword? If Link.Hearts = Link.Containers * 2Then'Link has full hearts and can shoot IfNot_SndPlaying(SFX(SwordShot)) Then'Link did not just shoot IfNot G.Impactflag Then'Link's last shot has finished IfNot Link.Shot Then _SndPlay SFX(SwordShot)
Link.Shot = TRUE Add_Projectile Sword, Player End If End If End If End If End Sub
FunctionFind_First_Available%% (Which%%, Start%%)
Selection%% = Start%% 'always start at the first saved game slot then check Do'lets find the first available selection (if there are any saved games) If Selection%% < 4Then If Which%% = 0ThenIfRTrim$(Nick(Selection%%)) = ""Then Selection%% = Selection%% + 1Else Good_Selection%% = TRUE If Which%% = 1ThenIfRTrim$(Nick(Selection%%)) = ""Then Good_Selection%% = TRUE Else Selection%% = Selection%% + 1 Else'4 and 5 are always good selections
Good_Selection%% = TRUE End If Loop Until Good_Selection%% Find_First_Available = Selection%% End Function
FunctionGet_Input%% ()
Result%% = TRUE '-1 for no input ' SELECT CASE G.ControlType ' CASE TRUE 'Keyboard input If_KeyDown(C.KBCon_Up) Then Result%% = Up If_KeyDown(C.KBCon_Down) Then Result%% = Down If_KeyDown(C.KBCon_Left) Then Result%% = Left If_KeyDown(C.KBCon_Right) Then Result%% = Right If_KeyDown(C.KBCon_Select) Then Result%% = SELECT_BUTTON: ' DO: LOOP WHILE _KEYDOWN(C.KBCon_Select) If_KeyDown(C.KBCon_Start) Then Result%% = START_BUTTON: ' DO: LOOP WHILE _KEYDOWN(C.KBCon_Start) If_KeyDown(C.KBCon_A_Button) Then Result%% = BUTTON_A: ' DO: LOOP WHILE _KEYDOWN(C.KBCon_A_Button) If_KeyDown(C.KBCon_B_Button) Then Result%% = BUTTON_B: ' DO: LOOP WHILE _KEYDOWN(C.KBCon_B_Button) ' CASE FALSE 'joystick input 'IF C.Control_Pad THEN 'IF NOT G.Flag THEN DO: LOOP WHILE _DEVICEINPUT(C.Control_Pad) 'IF NOT C.BAD_Pad THEN ' nul%% = AxisPower(CJR%%, CJL%%, CJU%%, CJD%%) 'read directional axis values ' IF CJU%% THEN Result%% = Up ' IF CJD%% THEN Result%% = Down ' IF CJL%% THEN Result%% = Left ' IF CJR%% THEN Result%% = Right 'ELSE ' IF _BUTTON(C.Joy_Button_Up) THEN Result%% = Up ': Joy_Lock_Button (C.Joy_Button_Up) ' IF _BUTTON(C.Joy_Button_Down) THEN Result%% = Down ': Joy_Lock_Button (C.Joy_Button_Down) ' IF _BUTTON(C.Joy_Button_Left) THEN Result%% = Left ': Joy_Lock_Button (C.Joy_Button_Left) ' IF _BUTTON(C.Joy_Button_Right) THEN Result%% = Right ': Joy_Lock_Button (C.Joy_Button_Right) ' END IF ' IF _BUTTON(C.Joy_Select) THEN Result%% = SELECT_BUTTON: Joy_Lock_Button (C.Joy_Select) ' IF _BUTTON(C.Joy_Start) THEN Result%% = START_BUTTON: Joy_Lock_Button (C.Joy_Start) ' IF _BUTTON(C.Joy_A_Button) THEN Result%% = BUTTON_A: Joy_Lock_Button (C.Joy_A_Button) ' IF _BUTTON(C.Joy_B_Button) THEN Result%% = BUTTON_B: Joy_Lock_Button (C.Joy_B_Button) ' END IF ' END SELECT Get_Input = Result%% End Function
FunctionLink_Collision%% (Dir%%)
Result%% = FALSE 'start at no collision 'get links center point x\y tile position to check for collision
Ax% = Link.World_X * 16 * (16 * G.Scale_Factor) 'gets the Left most pixel point for the current map screen
Ay% = Link.World_Y * 11 * (16 * G.Scale_Factor) 'gets the Top most pixel point for the current map screen 'we now have the tile that Links center pixel is in! Select Case Dir%% Case Up
Tx~%% = (Ax% + Link.Screen_X - Offset_X(G.Scale_Factor) + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent x-offset+50% sprite size
Ty%% = (Ay% + Link.Screen_Y - Offset_Y(G.Scale_Factor) - 2 + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent y-offset+50% sprite size IfNot Hyrule(Tx~%%, Ty%%).Walkable Then Result%% = TRUE Case Down
Tx~%% = (Ax% + Link.Screen_X - Offset_X(G.Scale_Factor) + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent x-offset+50% sprite size
Ty%% = (2 + Ay% + Link.Screen_Y - Offset_Y(G.Scale_Factor) + 2 + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent y-offset+50% sprite size IfNot Hyrule(Tx~%%, Ty%%).Walkable Then Result%% = TRUE Case Left
Tx~%% = (Ax% + Link.Screen_X - Offset_X(G.Scale_Factor) - 2 + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent x-offset+50% sprite size
Ty%% = (Ay% + Link.Screen_Y - Offset_Y(G.Scale_Factor) + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent y-offset+50% sprite size IfNot Hyrule(Tx~%%, Ty%%).Walkable Then Result%% = TRUE Case Right
Tx~%% = (2 + Ax% + Link.Screen_X - Offset_X(G.Scale_Factor) + 2 + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent x-offset+50% sprite size
Ty%% = (Ay% + Link.Screen_Y - Offset_Y(G.Scale_Factor) + (16 * G.Scale_Factor \ 2)) \ 16 * G.Scale_Factor 'now add curent y-offset+50% sprite size IfNot Hyrule(Tx~%%, Ty%%).Walkable Then Result%% = TRUE End Select
Link.Tile_X = Tx~%%
Link.Tile_Y = Ty%% Link_Collision = Result%% End Function
SubMove_Link Select Case Link.Direction Case Up IfNotLink_Collision(Up) Then'nothing blocking Link If Link.Screen_Y > Offset_Y(G.Scale_Factor) Then'Link is not at the edge of the screen
Link.Screen_Y = Link.Screen_Y - 2 * G.Scale_Factor Else'player is at edge of screen to shift to next one.
G.NextScreen = Up Shift_New_Map_Screen End If End If Case Down IfNotLink_Collision(Down) Then'nothing blocking Link If Link.Screen_Y < (Offset_Y(G.Scale_Factor) + (16 * G.Scale_Factor * 10)) Then'Link is not at the edge of the screen
Link.Screen_Y = Link.Screen_Y + 2 * G.Scale_Factor Else'player is at edge of screen to shift to next one.
G.NextScreen = Down Shift_New_Map_Screen End If End If Case Left IfNotLink_Collision(Left) Then'nothing blocking Link If Link.Screen_X > Offset_X(G.Scale_Factor) Then'Link is not at the edge of the screen
Link.Screen_X = Link.Screen_X - 2 * G.Scale_Factor Else'player is at edge of screen to shift to next one.
G.NextScreen = Left Shift_New_Map_Screen End If End If Case Right IfNotLink_Collision(Right) Then'nothing blocking Link If Link.Screen_X < (Offset_X(G.Scale_Factor) + (16 * G.Scale_Factor * 15)) Then'Link is not at the edge of the screen
Link.Screen_X = Link.Screen_X + 2 * G.Scale_Factor Else'player is at edge of screen to shift to next one.
G.NextScreen = Right Shift_New_Map_Screen End If End If End Select End Sub
SubMove_Sword_Shot Static Xloc AsInteger, Yloc AsInteger, Direction As_Byte, Fstp As_Byte, Frame As_Byte If Direction = -1Or Xloc = 0Then'if no direction assigned then assign one
Direction = Link.Direction
Xloc = Link.Screen_X
Yloc = Link.Screen_Y End If Select Case Direction Case Up
Yloc = Yloc - 4 * G.Scale_Factor Case Down
Yloc = Yloc + 4 * G.Scale_Factor Case Left
Xloc = Xloc - 4 * G.Scale_Factor Case Right
Xloc = Xloc + 4 * G.Scale_Factor End Select _PutImage (Xloc, Yloc)-Step(G.Scale_X, G.Scale_Y), Layer(7), Layer(1), (1 + 17 * Frame + 68 * Direction, 239)-Step(15, 15) Select Case G.Scale_Factor Case1 If Xloc <= 272Or Xloc >= 514Or Yloc <= 212Or Yloc >= 372Then Done%% = TRUE Case2 If Xloc <= 140Or Xloc >= 630Or Yloc <= 100Or Yloc >= 430Then Done%% = TRUE Case3 If Xloc <= 16Or Xloc >= 744Or Yloc <= 96Or Yloc >= 559Then Done%% = TRUE End Select If Done%% Then Link.Shot = FALSE: G.Impactflag = TRUE: Impact Xloc, Yloc: Direction = -1: Remove_Projectile Sword, Player
Fstp = Fstp + 1 If Fstp = 2Then Fstp = 0: Frame = Frame + 1 If Frame = 4Then Frame = 0 End Sub
SubPlace_Tile_On_Screen (X%, Y%, Tile~%%, L&)
Gy% = 17 * (Tile~%% \ 20) 'get which row it comes from
Gx% = 17 * (Tile~%% Mod20) 'which column position _PutImage (Offset_X(G.Scale_Factor) + X%, Offset_Y(G.Scale_Factor) + Y%)-Step(G.Scale_X, G.Scale_Y), Layer(7), L&, (1 + Gx%, 1 + Gy%)-Step(15, 15) End Sub
SubScroll_Screen_II (Dir%%)
Cx% = Offset_X(G.Scale_Factor) 'top left corner location of map displayed
Cy% = Offset_Y(G.Scale_Factor)
Sfx% = 16 * 16 * G.Scale_Factor 'size of the map display
Sfy% = 11 * 16 * G.Scale_Factor
Lwx% = 16 * 16 * G.Scale_Factor * Link.World_X 'map area link is in
Lwy% = 11 * 16 * G.Scale_Factor * Link.World_Y Select Case Dir%% Case Up For y% = 0To Sfy% Step2 * G.Scale_Factor _PutImage (Cx%, Cy%)-Step(Sfx%, Sfy%), Layer(6), Layer(1), (Lwx%, Lwy% - y%)-Step(Sfx%, Sfy%) If y% > 16 * G.Scale_Factor Then Link.Screen_Y = Link.Screen_Y + 2 * G.Scale_Factor Place_Link _Limit60 _PutImage , Layer(1), Layer(0) Next
Link.World_Y = Link.World_Y - 1 Case Down For y% = 0To Sfy% Step2 * G.Scale_Factor _PutImage (Cx%, Cy%)-Step(Sfx%, Sfy%), Layer(6), Layer(1), (Lwx%, Lwy% + y%)-Step(Sfx%, Sfy%) If y% > 16 * G.Scale_Factor Then Link.Screen_Y = Link.Screen_Y - 2 * G.Scale_Factor Place_Link _Limit60 _PutImage , Layer(1), Layer(0) Next
Link.World_Y = Link.World_Y + 1 Case Left For x% = 0To Sfx% Step2 * G.Scale_Factor _PutImage (Cx%, Cy%)-Step(Sfx%, Sfy%), Layer(6), Layer(1), (Lwx% - x%, Lwy%)-Step(Sfx%, Sfy%) If x% > 16 * G.Scale_Factor Then Link.Screen_X = Link.Screen_X + 2 * G.Scale_Factor Place_Link _Limit60 _PutImage , Layer(1), Layer(0) Next
Link.World_X = Link.World_X - 1 Case Right For x% = 0To Sfx% Step2 * G.Scale_Factor _PutImage (Cx%, Cy%)-Step(Sfx%, Sfy%), Layer(6), Layer(1), (Lwx% + x%, Lwy%)-Step(Sfx%, Sfy%) If x% > 16 * G.Scale_Factor Then Link.Screen_X = Link.Screen_X - 2 * G.Scale_Factor Place_Link _Limit60 _PutImage , Layer(1), Layer(0) Next
Link.World_X = Link.World_X + 1 End Select Place_Link
Lwx% = 16 * 16 * G.Scale_Factor * Link.World_X
Lwy% = 11 * 16 * G.Scale_Factor * Link.World_Y _PutImage (Cx%, Cy%)-Step(Sfx%, Sfy%), Layer(6), Layer(3), (Lwx%, Lwy%)-Step(Sfx%, Sfy%) 'move new screen to layer(3) End Sub
SubShift_New_Map_Screen Select Case G.NextScreen Case Up Scroll_Screen_II Up Case Down Scroll_Screen_II Down Case Left Scroll_Screen_II Left Case Right Scroll_Screen_II Right End Select
G.NextScreen = -1 End Sub
Eigenstate is a 2 player abstract strategy board game. The game is played on a 6 X 6 checkered like game board, although the light and dark squares have no importance in the game.
Each player has each 6 identical pieces, player 1 with 6 dark pieces and player 2 with 6 light pieces. The pieces are placed on their back row respectively. There is a red dot in the center of each piece representing current position in relationship to directions and number of spaces it can move. Don’t confuse this with it’s actual location on the board. There are 24 holes in the piece surrounding the center red position on each piece. These holes when filled with a peg denotes positions on the board this piece can move in future moves in relation to where it currently located. At the start of the game, player 1, who is moving up the board from its starting location, has a peg in the position 1 up from the red center already installed. This means that piece can only move forward up the board 1 space. Whereas player 2 has a peg installed on the lower side of the peg indicating it can only move downward 1 space. As play continues, each player will be placing more pegs onto their pieces to add more choices of direction and distance a piece can move on future moves. Each player is in direct control of how a piece can move in future moves. Also, each piece can move like a Knight in Chess in the sense that it can jump over other pieces and can not be blocked. We will discuss when and how pegs are added to pieces shortly.
Each player’s turn consists of 2 moves: First a player chooses 1 of their pieces and moves it to any playable location on the board from their position according to the directions and distances from the center red dot. If no legal moves are possible, then that portion of their turn omitted. Then they make their Second move by placing 2 pegs on any of their pieces on the board. The 2 pegs be placed on the same piece if wished or on 2 separate pieces. Then their turn ends and goes to the next player.
When a piece lands on another pieces, during the first part of the move, that piece is captured and removed from the board including player’s own piece if captured.
The game ends and a winner is declared in 1 of 2 situations: If you reduce you opponent down to 1 piece, you win. Or if both players has exactly 2 pieces left each and you have filled all 24 holes with pegs on 1 of your pieces, you win.
Computer Game Play:
At the start of your turn, you’ll see on the right side of the screen your piece indictor representing your turn. You are asked to choose a piece to move. Left click on the piece you wish to move. A red cursor will surround that piece indicating it has been selected. Other black cursor(s) will appear on the board indicating where your legal moves are. If you change your mind and want to move a different piece, left click on the same piece and it will be deselected. When clicking on 1 of the playable locations, your piece will move to that new location. If during this turn you have no playable pieces, there will be a message displayed “You have no Playable Moves”, “Press <ENTER> to Continue”. Next, you are asked to choose a piece to place a peg and also mentions that you are placing the first peg. Left click on the piece you wish to place a peg on. A larger copy of the piece chose will be drawn on the right side of the board. You are asked to choose an empty peg hole to place a peg. Left click on the empty hole and the enlarged piece will be removed and a peg will be added to the chosen piece. Then you are asked to choose the second piece to add a peg. You can pick the same piece again or choose a different piece. After placing the second peg, the turn passes to the other player until there is a winner.
This game summery can be downloaded and printed as a reference.
Description:
QB64 version of Nintendo Dragon Quest (Dragon Warrior). The time has come to go on your quest to find and defeat the evil DragonLord. I hope that you have fun playing this game.
DEFAULT Controls:
It does have a better feel when playing with a Joypad but it is not required.
Start button = A (upper case)
A Button = Space bar (accept selection)
B Button = Enter (cancel action\ selection)
Arrow keys for movement
Lucky Numbers is a 2 to 4 strategy board game played with individual boards and decks of cards based on the number of players. There is a solo play version, however, I did not not include it here. Each board has spaces 4 across by 4 down to hold numbered cards. Each deck of cards are numbered from 1 to 20 and there is a deck of cards for each number of players. In example: 2 decks of cards for 2 players, 3 decks of cards for 3 players and 4 decks of cards for 4 players. The object of the game is to be the first player to completely fill your board with the numbered cards.
The game starts with each player has a n empty gameboard in front of them. All the decks of cards are shuffled together. There are 4 starting cards placed on each gameboard at the start of the game that are randomly drawn from the deck. The cards are placed in ascending order from the lowest place in the upper left corner position 1:1, the next lowest placed at position 2:2, then the next lowest at position 3:3 and the highest card place at the lower right corner position 4:4. There's an optional version, known as Michael's Version, where only one card is reveled at a time and each player places that card at one of the 4 starting locations they feel is the best spot for that card without looking at any of the face down cards. Then the player turns over the next card in the same manner until all 4 cards are placed in the 4 starting positions.
Cards can only be placed on the board in ascending order from top to bottom and from left to right with the lowest in the upper left corner to the highest in the lower tight corner and no 2 cards with the same number may be next to each other, up and down or side by side. A player may choose to draw a face down card off the top of the deck or play a face up card discarded face up on the table. Once a player draws a face down card from the deck, they stuck with card and can not play a card from the table. If the card drawn from the deck is playable, they may play it on their board or place it on to the table. You may also replace a card on your board with the card you drew from the deck or from the table if it is playable in that spot. The card you removed from your board goes to the table.
The sequence of play: You will be asked number of players, use keyboard for input. Then it will ask to use Michael's Variation, again keyboard input. There will be a thick cursor around the game board board of the player currently taking their turn. At the start of the game, that will be player 1. There is a cursor around the deck of cards indicating thru van draw a card from the deck. The card will appear next to the deck. If there are any cards on the table, there will be a cursor around the the group. To choose a card from the table, click anywhere inside the table cursor, the click on the card you wish to play. A cursor will surround only that card. You van play this card onto your board by clicking the spot on the board or you can select a different table card by re-clicking the card you selected and choose a different or draw a card from the deck.
I've included 2 different copies copies of the rules.
Hope you enjoy playing, Donald
Code: (Select All)
_Title"Lucky Numbers - Coded by Donald L. Foster Jr."
' Setup Deck of Cards
DeckCards = Players * 20 For Z = 1To DeckCards: Placed(Z) = 0: Next For Z = 1To20 For Y = 1To Players
Placed: X = Int(Rnd * DeckCards) + 1: If Placed(X) = 0Then Placed(X) = 1: DeckCard(X) = Z: DeckColor(X) = Y ElseGoTo Placed Next Next
X = 186: Board = 1 For Z = 1To2
W = 186 For Y = 1To2
U = X - 122 For T = 1To4
V = W - 122 For S = 1To4
BoardX(Board, T, S) = V: BoardY(Board, T, S) = U
V = V + 81 Next
U = U + 81 Next
BoardCenterX(Board) = W: BoardCenterY(Board) = X
Board = Board + 1
W = W + 363 Next
X = X + 363 Next
X = 186: Board = 1 For Z = 1To2 If Z = 1Then R = 2: W = 186Else R = 1: W = 367 For Y = 1To R
U = X - 122 For T = 1To4
V = W - 122 For S = 1To4
BoardX(Board, T, S) = V: BoardY(Board, T, S) = U
V = V + 81 Next
U = U + 81 Next
BoardCenterX(Board) = W: BoardCenterY(Board) = X
Board = Board + 1
W = W + 363 Next
X = X + 363 Next
X = 186: W = 186: Board = 1 For Z = 1To2
U = X - 122 For T = 1To4
V = W - 122 For S = 1To4
BoardX(Board, T, S) = V: BoardY(Board, T, S) = U
V = V + 81 Next
U = U + 81 Next
BoardCenterX(Board) = W: BoardCenterY(Board) = X
Board = Board + 1
X = X + 363: W = W + 363 Next
' Draw Board For Z = 1To Players
V = BoardCenterX(Z): U = BoardCenterY(Z) Line (V - 175, U - 175)-(V + 175, U + 175), 1, BF For Y = 1To4 For X = 1To4
X1 = BoardX(Z, Y, X): X2 = BoardY(Z, Y, X): X3 = 0: X4 = 0: DrawCard X1, X2, X3, X4 Next Next Next
' Setup Table Locations
X = 1: V = 360 For Z = 1To4
U = 800 For Y = 1To3
TableX(X) = U: TableY(X) = V
X = X + 1: U = U + 81 Next
V = V + 81 Next
V = BoardCenterX(Z): U = BoardCenterY(Z) Line (V - 176, U - 176)-(V + 176, U + 176), 15, B
For Y = 1To4
V = BoardX(Z, Y, Y): U = BoardY(Z, Y, Y) If BoardCard(Z, Y, Y) = 0Then Line (V - 39, U - 39)-(V + 39, U + 39), 15, B Else Line (V - 39, U - 39)-(V + 39, U + 39), 1, B End If Next
PlaceStartingCard: Do While_MouseInput For Y = 1To4 For X = 1To4 If BoardCard(Z, Y, X) = 0And ((Y = 1And X = 1) Or (Y = 2And X = 2) Or (Y = 3And X = 3) Or (Y = 4And X = 4)) Then If_MouseX > BoardX(Z, Y, X) - 40And_MouseX < BoardX(Z, Y, X) + 40And_MouseY > BoardY(Z, Y, X) - 40And_MouseY < BoardY(Z, Y, X) + 40And_MouseButton(1) = -1Then GoSub ReleaseButton: Line (841, 310)-(921, 390), 0, BF
X1 = BoardX(Z, Y, X): X2 = BoardY(Z, Y, X): X3 = Card: X4 = CardColor(CardColor): DrawCard X1, X2, X3, X4 Line (BoardX(Z, Y, X) - 39, BoardY(Z, Y, X) - 39)-(BoardX(Z, Y, X) + 39, BoardY(Z, Y, X) + 39), 1, B Line (BoardCenterX(Z) - 176, BoardCenterY(Z) - 176)-(BoardCenterX(Z) + 176, BoardCenterY(Z) + 176), 0, B
BoardCard(Z, Y, X) = Card: BoardColor(Z, Y, X) = CardColor: GoTo EndPlaceCard End If End If Next Next Loop
A$ = InKey$: If A$ <> ""ThenIfAsc(A$) = 27And FullScreen = 0Then FullScreen = -1: _FullScreen_SquarePixels , _SmoothElseIfAsc(A$) = 27Then FullScreen = 0: _FullScreen_Off GoTo PlaceStartingCard
' Get Hold Cards For Z = 1To4 For Y = 1To Players
HoldCard(Y, Z) = DeckCard(DeckCards): HoldColor(Y, Z) = DeckColor(DeckCards): DeckCards = DeckCards - 1 Next Next
' Sort Hold Cards For Z = 1To Players For Y = 1To4
LowCard = 100 For X = 1To4 If HoldCard(Z, X) < LowCard And Sorted(Z, X) = 0Then LowCard = HoldCard(Z, X): CardColor = HoldColor(Z, X): T = X Next
Sorted(Z, T) = 1: X1 = BoardX(Z, Y, Y): X2 = BoardY(Z, Y, Y): X3 = LowCard: X4 = CardColor(CardColor): DrawCard X1, X2, X3, X4
BoardCard(Z, Y, Y) = LowCard: BoardColor(Z, Y, Y) = CardColor Next Next
' Display Deck
X1 = 821: X2 = 240: X3 = 100: X4 = 0: DrawCard X1, X2, X3, X4: Line (777, 196)-(865, 284), 15, B Color15, 0: font& = _LoadFont(fontpath1$, 16): _Font font& Locate43, 750: Print" Draw a Card From the Deck ";
'Draw Cursor Around Table If Not Empty If TableCards > 0Then Color15, 0: Locate45, 750: Print" Or Play a Card From the Table "; Line (756, 316)-(1006, 646), 15, B Else Locate45, 750: PrintString$(70, 32);: Line (756, 316)-(1006, 646), 0, B End If
PlayDeckCard: Color15, 0: font& = _LoadFont(fontpath1$, 16): _Font font& Locate43, 750: Print" Play Card on Your Board "; Locate45, 750: Print" Or Move Card to the Table ";
ChooseTableCard: Color15, 0: font& = _LoadFont(fontpath1$, 16): _Font font& Locate43, 750: Print" Choose a Table Card to Play "; Locate45, 750: Print" Or Draw a Card From the Deck ";
ChooseBoardPosition: Color15, 0: font& = _LoadFont(fontpath1$, 16): _Font font& Locate43, 750: Print" Play Card on Your Board "; If TableCards > 0ThenLocate45, 750: Print" Or a Choose Table Card ";
Up: If Row - X >= 1Then If BoardCard(Player, Row - X, Column) = 0Then X = X + 1: GoTo Up ElseIf PlayCard > BoardCard(Player, Row - X, Column) Then X1 = 1 Else
X1 = 1 End If
X = 1
Dn: If Row + X <= 4Then If BoardCard(Player, Row + X, Column) = 0Then X = X + 1: GoTo Dn ElseIf PlayCard < BoardCard(Player, Row + X, Column) Then X2 = 1 Else
X2 = 1 End If
X = 1
Lt: If Column - X >= 1Then If BoardCard(Player, Row, Column - X) = 0Then X = X + 1: GoTo Lt ElseIf PlayCard > BoardCard(Player, Row, Column - X) Then X3 = 1 Else
X3 = 1 End If
X = 1
Rt: If Column + X <= 4Then If BoardCard(Player, Row, Column + X) = 0Then X = X + 1: GoTo Rt ElseIf PlayCard < BoardCard(Player, Row, Column + X) Then X4 = 1 Else
X4 = 1 End If
Hex is a 2 player abstract strategy board game. The goal is to be the first player to make a continuous connection of pieces that connect the ends of the board. Player 1, the blue pieces, is trying to connect the left side of the board while player 2, the red pieces, is trying to connect the top of the board to the bottom. you can use ESC to alternate between window and full screen.
Hope you enjoy playing
Donald
Code: (Select All)
_Title"Connection Board Game - Programmed by Donald L. Foster Jr. 2020-2021"
' Draw Game Board PSet (43, 74), 0: Draw"TA0D37TA60D36TA0D37TA60D36TA0D37TA60D35TA0D37TA60D36TA0D37TA60D36TA0D37TA60D36TA0D37TA60D36TA0D37TA60D35TA0D37TA60D36TA0D37TA60D36TA0D38" Draw"TA60D37TA120D37TA60D36TA120D36TA60D36TA120D36TA60D37TA120D37TA60D36TA120D36TA60D36TA120D36TA60D37TA120D37TA60D36TA120D36TA60D37TA120D37TA60D36TA120D36TA60D36TA120D37" Draw"TA0U37TA240D36TA0U37TA240D35TA0U36TA240D36TA0U37TA240D36TA0U37TA240D36TA0U37TA240D36TA0U37TA240D37TA0U37TA240D36TA0U37TA240D36TA0U37TA240D36TA0U39" Draw"TA240D36TA300D36TA240D36TA300D36TA240D36TA300D36TA240D36TA300D37TA240D37TA300D36TA240D36TA300D36TA240D37TA300D37TA240D36TA300D36TA240D36TA300D37TA240D37TA300D36TA240D36TA300D37" Draw"TA240D20TA330D30TA29.5D699TA150ND30TA0R699TA330U30TA240ND28TA330U28TA29.5U699TA150NU30TA0L699TA330D30TA0BD10P1,0BE20P2,0BR695P1,0BD630P2,0" Paint (200, 100), 9, 0
X = 92: Increase = 0: Indent = 0 For Z = 1To11
Starting = 75 For Y = 1To11 PSet (Starting + Indent + Increase, X), 15: Draw"C0TA0BL31BU18D36TA60D36TA120D36TA180D36TA240D36TA300D36BR10P3,0" ' CIRCLE (Starting + Indent + Increase, X), 28, 0
BoardX(Z, Y) = Starting + Indent + Increase: BoardY(Z, Y) = X If Y = 11Then Indent = Indent + 31: Increase = 0Else Increase = Increase + 63 Next
X = X + 55 Next
StartGame: ' Draw Player Indicator Color0, 15: Locate3, 97: Print"H E X B O A R D G A M E"; PSet (943, 100), 15: Draw BoardHex$: Paint (943, 100), PlayerColor(Player), 0
X1 = 943: X2 = 100: X3 = Player: GoSub DrawPiece Locate10, 115: Print"Player"; Player;
Locate44, 5: Print"Choose Location to Place Your Piece";
Winner: PSet (BoardX(StepRow(1), StepColumn(1)), BoardY(StepRow(1), StepColumn(1))), 15 For Z = 2To Progress: Line -(BoardX(StepRow(Z), StepColumn(Z)), BoardY(StepRow(Z), StepColumn(Z))), 15: Next
If Player = 1Then PSet (BoardX(StepRow(1), StepColumn(1)), BoardY(StepRow(1), StepColumn(1))), 15: Draw"TA300D35" PSet (BoardX(StepRow(Progress), StepColumn(Progress)), BoardY(StepRow(Progress), StepColumn(Progress))), 15: Draw"TA120D35" Else PSet (BoardX(StepRow(1), StepColumn(1)), BoardY(StepRow(1), StepColumn(1))), 15: Draw"TA0U35" PSet (BoardX(StepRow(Progress), StepColumn(Progress)), BoardY(StepRow(Progress), StepColumn(Progress))), 15: Draw"TA0D35" End If
Locate42, 5: Print" Player"; Player; "is the Winner!"; Locate44, 5: Print" Play Another Game? Y or N ";
Does anyone know board games that were programmed in BASIC (especially QB64) and that run under Windows ?
I'm interested in these classic board games: Chess, Backgammon, Checkers, Nine Men's Morris, Go, Shogi, Xiangqi.
Please list everything you can think of - including international ones, collections, works in progress...
Thank you very much !
I'll start with Chess:
Chess RF Richard Frost QB64
Chess (no AI) Bob Seguin QB64
MiniMAX Dieter Steinwender & Chrilly Donninger QuickBASIC
Chess (GUIchessminimax) FreeBASIC
Just MiniMAX Ciroth Ungol (&Steinwender & Donninger) Just BASIC
CSS-Schachprogramm Dieter Steinwender BASIC
DemoSchach H.-J. Kraas & G. Schrüfer & R. Bartel BASIC 64
JS-Schach Roland Chastain FreeBASIC
Deep BASIC Thomas Mc Burney QuickBASIC
Kanguruh Thomas Mc Burney PowerBASIC
New Proto Chess System 2.01 Sebastian D. Casciaro QBASIC 1.1
Schach und andere Strategiespiele John White BASIC
Schach G. O. Hamann & J.-J. Eden BASIC
Chess 1.0 (no AI) Craig Parmer QuickBASIC
...
Backgammon
Blot Bernhard Jacob & Hans-Jürgen Schäfer QB64
JanusBlot Bernhard Jacob & Hans-Jürgen Schäfer & Lucas Pauws QB64
...