Improve Game Strategy with LISP Function Help | Random Stone Placement

  • Thread starter Thread starter Adam
  • Start date Start date
  • Tags Tags
    Function
AI Thread Summary
The discussion revolves around a function intended for a game heuristic that places a stone in a strategic location based on the opponent's last move. The goal is to either create a winning row of five stones or block the opponent from doing so. The function is designed to randomly place a stone in one of the adjacent positions to the opponent's last move, but it currently freezes when the opponent's move is on the left edge of the board. The issue appears to stem from a lack of error checking for the row and column values generated, which may lead to illegal positions that the score function cannot handle, resulting in an infinite loop. Suggestions for improvement include implementing boundary checks to ensure that the randomly generated positions remain within the valid range of the game board.
Adam
Messages
65
Reaction score
1
Got a problem with this function. It is part of a heuristic thing for a game. If I can't get a winning row of five stones, or block a winning row from the opponent, or blah blah blah, I want it to place a stone at some random point adjacent to the opponent's last move. Basically think of a tic-tac-toe grid but larger. A 3x3 array, 0 to 9. If opponent places a stone in 4, then I want it to place randomly in 0 to 3 or 5 to 9. At the moment it almost works, but freezes if the stone is placed on the left edge of the board.

Code:
(defun rndplyr ()
  (if (null (get-history))
      (list 0 0 )
    (let ((hist (get-history))
          (lm (car (get-history))))
   
      (do ((row (+ (car lm) (+ (random 3) -1 ) ))
           (col (+ (cadr lm) (+ (random 3) -1 ) )))
          ((score (list row col) (get-board))
           (list row col)))))
  )

Any hints?
 
Computer science news on Phys.org
Your code doesn't seem to error check to see if your value for row and col lie on the board... I surmise that the score function isn't written to handle illegal values and gets itself caught in an infinite loop.
 
I have been idly browsing what Apple have to offer with their new iPhone17. There is mention of 'Vapour cooling' to deal with the heat generated. Would that be the same sort of idea that was used in 'Heat Pipes' where water evaporated at the processor end and liquid water was returned from the cool end and back along a wick. At the extreme high power end, Vapour Phase Cooling has been used in multi-kW RF transmitters where (pure) water was pumped to the Anode / or alternative Collector and...

Similar threads

Replies
8
Views
2K
Replies
18
Views
7K
Replies
11
Views
9K
Replies
3
Views
4K
Back
Top