QB64 Phoenix Edition
Worm - Human vs Computer - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1)
+--- Forum: Code and Stuff (https://qb64phoenix.com/forum/forumdisplay.php?fid=3)
+---- Forum: Works in Progress (https://qb64phoenix.com/forum/forumdisplay.php?fid=9)
+---- Thread: Worm - Human vs Computer (/showthread.php?tid=1429)



Worm - Human vs Computer - PhilOfPerth - 01-29-2023

I'm working on a remake of my Worm game, that allows a player to play against the computer. So far, it's just the algorithm for a basic unintelligent response from the computer.
It recognizes a "word" that's being constructed, finds a word that contains that group of letters, and adds a letter to either the beginning or end of that group.
More later.


RE: Worm - Human vs Computer - PhilOfPerth - 01-31-2023

I have an algorithm that lets the computer play against itself, to semi-randomly build on a word, towards a legitimate word. It's very basic at present (with lots of GoTo's etc), but this will improve, I hope. Later it will be a human v computer version of Worm. Here's the code: (Note: it needs the WordLists files)
Code: (Select All)
'Comp v Comp Worm
Screen 12
_FullScreen
Randomize Timer
Common Shared wrd$, firstfile$, srchfile$, start$, dictwrd$
' wrd$ is the word  being built,   firstlist is the reference file search for start of search,  srchlist is actual list being searched,   start$ is the list's location
'dictwrd$ is word input from wordlist,   po is position of wrd$ in dictwrd$


Seed:
wrd$ = Chr$(Int(Rnd * 26) + 65)
Locate 10, 25: Print "Start-letter: ";: Print wrd$ '                         We have the first letter

StartNewWrdSearch:
firstlist = Int(Rnd * 26) + 65 '                                             firstlist is refence point for first wordlist to be searched, so that we know when all have been searched
srchlist = firstlist

FindAWord:
srchlist = srchlist + 1: If srchlist > 90 Then srchlist = 65 '               srchlist is ascii of list about to be searched

NextList: '                                                                  point to return to after each list has been searched
start$ = "WordLists/" + Chr$(srchlist) '                                     formulate path to srchlist as "WordLists/A" etc.
Locate 12, 18: Print "List being searched: "; start$
Open start$ For Input As #1 '                                                open the selected wordlist

DictLoop:
If Not EOF(1) Then
    Input #1, dictwrd$
    If dictwrd$ = wrd$ Then '                                                only used when dictwrd$ matches wrd$
        Matched
    End If
Else
    Close #1
    GoTo FindAWord
End If
po = InStr(dictwrd$, wrd$) '                                                 look for wrd$ in dictwrd$
If po = 0 Then GoTo DictLoop '                                               if not found, get next dictwrd$
If po = 1 Then '                                                             if wrd$ is at start of dictwrd$,
    wrd$ = wrd$ + Mid$(dictwrd$, po + Len(wrd$), 1) '                        add the letter after wrd$ to wrd$
Else
    wrd$ = Mid$(dictwrd$, po - 1, 1) + wrd$ '                                but if not at start, add the letter before wrd$ to wrd$
End If
Locate 16, 36: Print Space$(20)
Locate 16, 24: Print "Search-string: "; wrd$
Locate 14, 24: Print Space$(30)
Locate 14, 24: Print "Wordlist word: "; dictwrd$
_Delay .2
GoTo DictLoop

Sub Matched
    Locate 20, 30: Print wrd$; " Matched "; dictwrd$: Sleep
End Sub












'Comp v Comp Worm
Screen 12
_FullScreen
Randomize Timer
Common Shared wrd$, firstfile$, srchfile$, start$, dictwrd$
' wrd$ is the word  being built,   firstlist is the reference file search for start of search,  srchlist is actual list being searched,   start$ is the list's location
'dictwrd$ is word input from wordlist,   po is position of wrd$ in dictwrd$


Seed:
wrd$ = Chr$(Int(Rnd * 26) + 65)
Locate 10, 25: Print "Start-letter: ";: Print wrd$ '                         We have the first letter

StartNewWrdSearch:
firstlist = Int(Rnd * 26) + 65 '                                             firstlist is refence point for first wordlist to be searched, so that we know when all have been searched
srchlist = firstlist

FindAWord:
srchlist = srchlist + 1: If srchlist > 90 Then srchlist = 65 '               srchlist is ascii of list about to be searched

NextList: '                                                                  point to return to after each list has been searched
start$ = "WordLists/" + Chr$(srchlist) '                                     formulate path to srchlist as "WordLists/A" etc.
Locate 12, 18: Print "List being searched: "; start$
Open start$ For Input As #1 '                                                open the selected wordlist

DictLoop:
If Not EOF(1) Then
    Input #1, dictwrd$
    If dictwrd$ = wrd$ Then '                                                only used when dictwrd$ matches wrd$
        Matched
    End If
Else
    Close #1
    GoTo FindAWord
End If
po = InStr(dictwrd$, wrd$) '                                                 look for wrd$ in dictwrd$
If po = 0 Then GoTo DictLoop '                                               if not found, get next dictwrd$
If po = 1 Then '                                                             if wrd$ is at start of dictwrd$,
    wrd$ = wrd$ + Mid$(dictwrd$, po + Len(wrd$), 1) '                        add the letter after wrd$ to wrd$
Else
    wrd$ = Mid$(dictwrd$, po - 1, 1) + wrd$ '                                but if not at start, add the letter before wrd$ to wrd$
End If
Locate 16, 36: Print Space$(20)
Locate 16, 24: Print "Search-string: "; wrd$
Locate 14, 24: Print Space$(30)
Locate 14, 24: Print "Wordlist word: "; dictwrd$
_Delay .2
GoTo DictLoop

Sub Matched
    Locate 20, 30: Print wrd$; " Matched "; dictwrd$: Sleep
End Sub



RE: Worm - Human vs Computer - bplus - 01-31-2023

Some very obscure words being built here. Not sure I want to play against computer Smile

The threat of AI! overwhelming superiority to lookup things.

As an alternate goal to teach words and spelling, will need a dictionary included.


RE: Worm - Human vs Computer - PhilOfPerth - 02-01-2023

(01-31-2023, 03:47 PM)bplus Wrote: Some very obscure words being built here. Not sure I want to play against computer Smile

The threat of AI! overwhelming superiority to lookup things.

As an alternate goal to teach words and spelling, will need a dictionary included.

Yes, some pretty strange ones in there; I may end up weeding the word lists, and limiting it to words of 12 letters or so as well. 
Not many of us have a vocab of 250,000-plus words! I've got about 50, and I just make up the rest Big Grin
I could probably include a Meanings function then, too - it's pretty huge for the full set.


RE: Worm - Human vs Computer - PhilOfPerth - 02-01-2023

Second thoughts:
I'll leave the Words Lists intact, so those who happen to have a longer word,  e.g. "CONGLOMERATIONS", can use it and have it recognized.
But I'll let the player choose a level (or have progressive levels), which will reflect the length of words presented by the computer.