Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Worm - Human vs Computer
#1
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.
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#2
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
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#3
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.
b = b + ...
Reply
#4
(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.
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#5
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.
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply




Users browsing this thread: 2 Guest(s)