Posts: 522
Threads: 55
Joined: Jul 2022
Reputation:
48
More feedback
the issue is related to checkmate
-----------------------
about interface:
6. it is not clear how to change the move that you are doing... only with an attempt I got that if a type a wrong input endmove the program let me choose another start move.
7. it needed a list of moves made, better if a list in two columns
8. Takeback is not available
Good Job, expert level is stimulating also if the waiting time is a bit hypnotic. (In this it remembers me the waiting time of BattleChess.)
Posts: 522
Threads: 55
Joined: Jul 2022
Reputation:
48
@Bplus
Mark that work has been a joyful experience nevertheless the IA Engine .
A good experience to translate a previous code made for console output in a graphic interface with mouse support, adaptable interface to view side, of player, the setup of a specific position of game, and let working IA engine for both sides.
Do you remember how well it danced tango when it played against itself?
:-) LOL
Posts: 357
Threads: 32
Joined: Apr 2022
Reputation:
90
02-09-2026, 04:50 PM
(This post was last modified: 02-09-2026, 08:45 PM by dbox.)
(02-09-2026, 01:17 AM)TempodiBasic Wrote: More feedback
the issue is related to checkmate... Thanks for all the great feedback! Looks like I didn't test the win condition enough. I've made some updates to fix this and provide a clearer game over message. I've posted an update to the chess API to add the following methods:
RemovePiece
Removes a piece from the board at the specified location.
Code: (Select All)
Chess.RemovePiece "C2"
SetPiece
Sets a piece at the specified board location.
Code: (Select All)
Chess.SetPiece "F1", "k"
These methods make it a lot easier to test out different scenarios and end states.
History
Returns a listing of all moves from the current game.
Code: (Select All)
ReDim hist(0) As Object
hist = Chess.History
For i = 1 To UBound(hist)
Print i; hist(i).turn; " "; hist.from; " -> "; hist.to
Next i
Here's the latest version with the changes:
As far as all of the other UI suggestions, I thought they were great. Feel free to use this as a starting point. I'd love to see a @TempodiBasic version.
Posts: 357
Threads: 32
Joined: Apr 2022
Reputation:
90
I created a consolidated programming reference for the Chess API here:
https://github.com/boxgaming/qbjs-lib/bl...-engine.md
Posts: 4,692
Threads: 222
Joined: Apr 2022
Reputation:
322
lunch and a win for desert!
724 855 599 923 575 468 400 206 147 564 878 823 652 556 bxor cross forever
Posts: 357
Threads: 32
Joined: Apr 2022
Reputation:
90
(02-10-2026, 05:53 PM)bplus Wrote: lunch and a win for desert! Well played! I think you’re ready for level 2.
Posts: 4,692
Threads: 222
Joined: Apr 2022
Reputation:
322
02-10-2026, 11:14 PM
(This post was last modified: 02-10-2026, 11:14 PM by bplus.)
LOL only at lunch time!
+1 I really like this Chess connection one of these days I will workup a proper interface with mouse, if someone else doesn't get there first.
I wonder if we can even work out an Undo, we can probably replay a game up to the previous last move.
I was wondering about an Undo when I started to move one piece but saw a better move, possibly, with another piece; though I won anyway.
724 855 599 923 575 468 400 206 147 564 878 823 652 556 bxor cross forever
Posts: 357
Threads: 32
Joined: Apr 2022
Reputation:
90
(02-10-2026, 11:14 PM)bplus Wrote: +1 I really like this Chess connection one of these days I will workup a proper interface with mouse, if someone else doesn't get there first. I'd love to see a bplus version!
Posts: 4,692
Threads: 222
Joined: Apr 2022
Reputation:
322
me too!
724 855 599 923 575 468 400 206 147 564 878 823 652 556 bxor cross forever
Posts: 4,692
Threads: 222
Joined: Apr 2022
Reputation:
322
02-12-2026, 07:05 PM
(This post was last modified: 02-12-2026, 07:37 PM by bplus.)
@dbox once again QBJS does not like something that works perfectly in QB64.
Code: (Select All) Function GetMove$
Dim As String boardX, boardY, retorn, k, b
Dim As Long mx, my, mb, bx, by
Do
While _MouseInput: Wend
mx = _MouseX: my = _MouseY ' convert into char cells
mb = _MouseButton(1)
If mb Then
Locate 14, 50: Print Space$(15)
Locate 14, 50: Print mx, my
boardX = "": boardY = ""
' check mx
If (mx Mod 4) <> 0 Then
If mx > 4 And mx < 39 Then
bx = Int((mx - 4) / 4) + 1
boardX = Chr$(64 + bx)
End If
End If
If my Mod 2 = 0 Then
If my > 3 And my < 19 Then
by = Int((my - 2) / 2)
boardY = _Trim$(Str$(9 - by))
End If
End If
Locate 15, 50: Print Space$(15)
Locate 15, 50: Print boardX, boardY
End If
If (boardX <> "") And (boardY <> "") Then
retorn = boardX + boardY
Else
k = InKey$
If Len(k) = 1 And UCase$(k) = "Q" Then
retorn = k
Else
b = b + k
If Len(b) = 2 Then retorn = b
End If
End If
Loop Until retorn <> ""
GetMove$ = retorn
End Function
BTW I had to Dim all my variables in the function GetMove$ to get it accepted by QBJS. I thought you fixed all that!
After adding the above routine I commented out the input line in chess program and used GetMove$ to accept mouse clicks or keypresses.
Here is test GetMove$ for QB64, I sim the screen QBJS writes looks like screen 0 as not screen statements say otherwise is that the problem? QBJS has no screen 0. BTW _MouseX and _MouseY in screen 0 of QB64 does char cells not pixels, same with QBJS. Otherwise I dont know why the codes perfectly in QB64 but not QBJS????
Code: (Select All) ' test qbjs get move for chess ' b+ 2026-02-12
Do Until _KeyDown(27)
PrintBoard
gm$ = ""
gm$ = GetMove$
If gm$ <> "" Then
Color 7, 0
Locate 22, 50
Print gm$; " zzz... sleeping."
Sleep
Cls
_KeyClear
End If
Loop
Function GetMove$
Dim As String boardX, boardY, retorn, k, b
Dim As Long mx, my, mb, bx, by
Do
While _MouseInput: Wend
mx = _MouseX: my = _MouseY ' convert into char cells
mb = _MouseButton(1)
If mb Then
Locate 14, 50: Print Space$(15)
Locate 14, 50: Print mx, my
boardX = "": boardY = ""
' check mx
If (mx Mod 4) <> 0 Then
If mx > 4 And mx < 39 Then
bx = Int((mx - 4) / 4) + 1
boardX = Chr$(64 + bx)
End If
End If
If my Mod 2 = 0 Then
If my > 3 And my < 19 Then
by = Int((my - 2) / 2)
boardY = _Trim$(Str$(9 - by))
End If
End If
Locate 15, 50: Print Space$(15)
Locate 15, 50: Print boardX, boardY
End If
If (boardX <> "") And (boardY <> "") Then
retorn = boardX + boardY
Else
k = InKey$
If Len(k) = 1 And UCase$(k) = "Q" Then
retorn = k
Else
b = b + k
If Len(b) = 2 Then retorn = b
End If
End If
Loop Until retorn <> ""
GetMove$ = retorn
End Function
Sub PrintBoard ' rework in QB64 to model the board for get move
Locate 4, 40: Print "Turn: " '; Chess.Turn; " "
Locate 6, 40: Print "Level: " '; levels(aiLevel)
'Locate 12, 40: Print "Enter 'Q' to Quit"
'If Chess.IsCheckMate Then
' Locate 8, 40: Color 4: Print "Check Mate"
'ElseIf Chess.IsCheck Then
' Locate 8, 40: Color 6: Print "Check"
'End If
'PrintHistory
Locate 1, 1
'Dim As String bstate, p, s
'bstate = Chess.BoardPieces
Dim p$, s$
Dim As Integer rank, file
Color 7: Print
Print " A B C D E F G H"
Print " ";
Color 8, 7: Print "|-------------------------------|"
For file = 8 To 1 Step -1
Color 7, 0
Color 7, 0: Print " " + _Trim$(Str$(file)) + " ";
For rank = Asc("A") To Asc("H")
' s$ = Chr$(rank) + _Trim$(Str$(file))
' p$ = "" ' bstate(s)
' If p$ = "" Then p$ = " "
' Color 8, 7: Print " ";
' If p$ > "A" And p$ < "Z" Then Color 15 Else Color 0
' Print p$;
' Print " "
Color 8, 7: Print "|---";
'Color 7, 0
Next rank
Print "|"
If file > 1 Then
Color 7, 0: Print " ";
Color 8, 7: Print "|-------------------------------|"
End If
Next file
Color 7, 0: Print " ";
Color 8, 7: Print "|-------------------------------|"
End Sub
Note: it does takes the keypresses from the GetMove$ function but you have to Edit above, add () to GetMove function. But the point of all my labors today was todo mouse clicks!
724 855 599 923 575 468 400 206 147 564 878 823 652 556 bxor cross forever
|