File size: 4,679 Bytes
b99447d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9110820
0c93272
b99447d
9110820
b99447d
9110820
 
0c93272
9110820
b99447d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d3e44c3
 
 
 
 
 
 
b99447d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

import numpy as np
import streamlit as st

# Define game constants
LETTER_VALUES = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4, 'I': 1, 'J': 8, 'K': 5, 'L': 1, 'M': 3, 'N': 1, 'O': 1, 'P': 3, 'Q': 10, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 4, 'X': 8, 'Y': 4, 'Z': 10, ' ': 0}
TILE_DISTRIBUTION = {'A': 9, 'B': 2, 'C': 2, 'D': 4, 'E': 12, 'F': 2, 'G': 3, 'H': 2, 'I': 9, 'J': 1, 'K': 1, 'L': 4, 'M': 2, 'N': 6, 'O': 8, 'P': 2, 'Q': 1, 'R': 6, 'S': 4, 'T': 6, 'U': 4, 'V': 2, 'W': 2, 'X': 1, 'Y': 2, 'Z': 1, ' ': 2}

def get_tile():
    """Get a random tile from the bag."""
    tiles = []
    for tile, count in TILE_DISTRIBUTION.items():
        tiles.extend([tile] * count)
    return np.random.choice(tiles)

def get_word_score(word, letter_values):
    """Calculate the score for a given word."""
    score = 0
    for letter in word:
        score += letter_values[letter]
    return score

def display_board(board):
    """Display the game board."""
    headers = [''] + [str(i+1) for i in range(len(board))]
    data = [headers]
    for i in range(len(board)):
        row = [chr(i+65)]
        for j in range(len(board[i])):
            row.append(chr(board[i][j]))
        data.append(row)
    st.table(data=data)


# Create the game board
board = np.zeros((15, 15), dtype=int)

# Create a rack of tiles for the user to choose from
rack = []
for i in range(7):
    rack.append(get_tile())

# Display the board and rack
st.write('Scrabble Game')
display_board(board)
st.write('Rack:', rack)

# Allow the user to select a tile and place it on the board
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ']
tile = st.selectbox('Select a tile:', letters)

expander = st.expander('Select a position on the board')
with expander:
    row = st.number_input('Row:', min_value=1, max_value=15, value=1)
    col = st.number_input('Column:', min_value=1, max_value=15, value=1)

if st.button('Place tile'):
    # Check if the selected tile is in the rack
    if tile in rack:
        # Place the tile on the board
        row -= 1
        col -= 1
        board[row][col] = tile
        rack.remove(tile)
    
    # Calculate the score for the word
    word = ''
    for i in range(len(board)):
        for j in range(len(board[i])):
            if board[i][j] != 0:
                word += chr(board[i][j])
        if len(word) > 1:
            score = get_word_score(word, LETTER_VALUES)
            st.write(word, ':', score, 'points')
        word = ''

    # Refill the rack with new tiles
    while len(rack) < 7 and len(TILE_DISTRIBUTION) > 0:
        tile = get_tile()
        rack.append(tile)
        TILE_DISTRIBUTION[tile] -= 1
        if TILE_DISTRIBUTION[tile] == 0:
            del TILE_DISTRIBUTION[tile]

    # Display the updated board and rack
    display_board(board)
    st.write('Rack:', rack)
else:
    st.write('Tile not in rack.')


st.markdown("""
Create a top ten game list for word games that you can write in computer code.
Sure, here's a list of the top ten word games that can be implemented in computer code:

Scrabble: A classic game where players take turns creating words on a board using letter tiles and scoring points based on the letters used and placement on the board.

Boggle: In this game, players must find as many words as possible by connecting adjacent letters on a grid of letter cubes within a fixed time limit.

Crosswords: A game where players must fill in a grid of white and black squares with words that fit a series of clues.

Hangman: A game where players must guess a hidden word by suggesting letters, with each incorrect guess resulting in the drawing of a part of a stick figure on a noose.

Word jumble: In this game, players are presented with a scrambled word or phrase and must unscramble it to reveal the correct order of letters.

Word search: A puzzle where players must find a list of hidden words within a grid of letters, often arranged in a pattern or theme.

Typing games: These games test players' typing speed and accuracy by presenting them with a series of words or phrases to type within a certain time limit.

Anagrams: A game where players must create as many words as possible using the letters from a given word or phrase.

Word association: A game where players take turns saying a word that is associated with the previous word, creating a chain of related words.

Ghost: A game where players take turns saying letters, attempting to form a word. The catch is that each player must add a letter to the word, but cannot form a complete word themselves or they lose the round.
""")