Skip to content

Commit 3b11784

Browse files
authored
Merge pull request #1245 from mittvansh/master
Word Chain Game Plugin
2 parents 86d8fb8 + a5f08ce commit 3b11784

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

jarviscli/plugins/word_chain_game.py

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from plugin import plugin
2+
import requests
3+
import json
4+
import random
5+
import nltk
6+
from nltk.corpus import words
7+
8+
nltk.download('words')
9+
english_words = set(words.words())
10+
11+
@plugin("word chain game")
12+
def word_chain_game(jarvis, s):
13+
if s:
14+
jarvis.say("This command does not take arguments. Just type 'word chain game' to start.")
15+
return
16+
17+
def is_valid_word(word_to_check):
18+
api_url = f"https://api.dictionaryapi.dev/api/v2/entries/en/{word_to_check}"
19+
try:
20+
response = requests.get(api_url)
21+
return response.status_code == 200
22+
except requests.exceptions.RequestException:
23+
return False
24+
25+
def get_jarvis_word(starting_letter, used_words):
26+
possible_words = [word for word in english_words
27+
if word.startswith(starting_letter) and word.lower() not in used_words]
28+
if possible_words:
29+
return random.choice(possible_words).lower()
30+
return None
31+
32+
def get_initial_word():
33+
initial_words = [
34+
"example", "banana", "grape", "orange", "kiwi", "apple", "lemon", "melon", "olive", "peach",
35+
"rhythm", "synergy", "wizard", "oxygen", "quartz", "sphinx", "voyage", "utopia", "yacht", "zebra",
36+
"azure", "bronze", "crimson", "daisy", "ebony", "frost", "golden", "hazel", "indigo", "jade",
37+
"amber", "beige", "coral", "denim", "ivory", "khaki", "lavender", "magenta", "ochre", "pearl",
38+
"apricot", "burgundy", "cyan", "fuchsia", "ginger", "lime", "maroon", "navy", "orchid", "plum"
39+
]
40+
return random.choice(initial_words).lower()
41+
42+
jarvis.say("\nLet's play Word Chain! No word repeats allowed in this game.")
43+
word_chain = []
44+
score = 0
45+
last_letter = None
46+
used_words = set()
47+
48+
initial_word = get_initial_word()
49+
current_word = initial_word
50+
word_chain.append(current_word)
51+
used_words.add(current_word)
52+
score += 1
53+
last_letter = current_word[-1].lower()
54+
jarvis.say(f"I'll start! My word is: {current_word}.")
55+
56+
while True:
57+
prompt_letter = last_letter.upper() if last_letter else "?"
58+
user_word = jarvis.input(f"Your word starting with '{prompt_letter}'? (or 'stop') ").strip().lower()
59+
60+
if user_word.lower() == 'stop':
61+
jarvis.say("Game stopped by player.")
62+
break
63+
64+
if not user_word:
65+
jarvis.say("You didn't enter a word. Try again or type 'stop'.")
66+
continue
67+
68+
if last_letter and user_word[0].lower() != last_letter:
69+
jarvis.say(f"Invalid! Word must start with '{prompt_letter}'. Game Over!")
70+
break
71+
72+
if user_word in used_words:
73+
jarvis.say(f"Invalid! '{user_word}' used already. No repeats! Game Over!")
74+
break
75+
76+
if not is_valid_word(user_word):
77+
jarvis.say(f"Invalid! '{user_word}' not recognized. Game Over!")
78+
break
79+
80+
word_chain.append(user_word)
81+
used_words.add(user_word)
82+
score += 1
83+
last_letter = user_word[-1].lower()
84+
jarvis.say(f"Valid word! '{user_word}'. My turn...")
85+
86+
next_word = get_jarvis_word(last_letter, used_words)
87+
if next_word:
88+
current_word = next_word
89+
word_chain.append(current_word)
90+
used_words.add(current_word)
91+
score += 1
92+
last_letter = current_word[-1].lower()
93+
jarvis.say(f"My word is: {current_word}. Your turn starting with '{last_letter.upper()}'?")
94+
else:
95+
jarvis.say(f"I'm stuck! You win this round!")
96+
break
97+
98+
jarvis.say("\nGame Over!")
99+
jarvis.say(f"Word Chain: {', '.join(word_chain)}")
100+
jarvis.say(f"Your Score: {score}")

0 commit comments

Comments
 (0)