CoolFace
Apppublic

agnixcode/candy_crush_game

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py122 linesDownload Raw Back to root
1import random2import streamlit as st3 4# Candy types5CANDY_TYPES = ["๐Ÿฌ", "๐Ÿซ", "๐Ÿญ", "๐Ÿช", "๐Ÿ“"]6 7# Initialize the game grid8def initialize_grid(rows, cols):9    return [[random.choice(CANDY_TYPES) for _ in range(cols)] for _ in range(rows)]10 11# Display the grid as buttons12def display_grid(grid, selected):13    for r, row in enumerate(grid):14        cols = st.columns(len(row))15        for c, candy in enumerate(row):16            # Use row and column indices to generate a unique key17            button_key = f"btn_{r}_{c}"18            if (r, c) == selected:19                button_label = f"**{candy}**"  # Highlight selected candy20            else:21                button_label = candy22            if cols[c].button(button_label, key=button_key):23                return (r, c)  # Return the coordinates of the clicked candy24    return None25 26# Check for matches (horizontal and vertical)27def check_matches(grid):28    rows, cols = len(grid), len(grid[0])29    matches = set()30 31    # Check horizontal matches32    for r in range(rows):33        for c in range(cols - 2):34            if grid[r][c] == grid[r][c + 1] == grid[r][c + 2]:35                matches.update([(r, c), (r, c + 1), (r, c + 2)])36 37    # Check vertical matches38    for r in range(rows - 2):39        for c in range(cols):40            if grid[r][c] == grid[r + 1][c] == grid[r + 2][c]:41                matches.update([(r, c), (r + 1, c), (r + 2, c)])42 43    return matches44 45# Remove matched candies and drop new candies46def remove_matches(grid, matches):47    rows, cols = len(grid), len(grid[0])48 49    # Set matched candies to None50    for r, c in matches:51        grid[r][c] = None52 53    # Drop candies down and refill the grid54    for c in range(cols):55        column = [grid[r][c] for r in range(rows) if grid[r][c] is not None]56        while len(column) < rows:57            column.insert(0, random.choice(CANDY_TYPES))58        for r in range(rows):59            grid[r][c] = column[r]60 61    return grid62 63# Swap candies in the grid64def swap_candies(grid, first, second):65    if first and second:66        r1, c1 = first67        r2, c2 = second68        if (69            0 <= r1 < len(grid)70            and 0 <= c1 < len(grid[0])71            and 0 <= r2 < len(grid)72            and 0 <= c2 < len(grid[0])73        ):74            grid[r1][c1], grid[r2][c2] = grid[r2][c2], grid[r1][c1]75            return True76    return False77 78# Main Streamlit app79def main():80    st.title("Candy Crush Game")81    st.write("Match 3 or more candies to crush them! ๐Ÿฌ๐Ÿซ๐Ÿญ")82 83    rows, cols = 6, 6  # Grid size84 85    # Initialize or reset the grid86    if "grid" not in st.session_state:87        st.session_state.grid = initialize_grid(rows, cols)88        st.session_state.selected_candy = None89 90    # Display the current grid as buttons91    st.write("### Current Grid")92    selected_candy = display_grid(st.session_state.grid, st.session_state.selected_candy)93 94    # Handle candy selection95    if selected_candy:96        if st.session_state.selected_candy is None:97            st.session_state.selected_candy = selected_candy98            st.info(f"Selected candy at {selected_candy}")99        else:100            # Attempt to swap the two candies101            if swap_candies(st.session_state.grid, st.session_state.selected_candy, selected_candy):102                matches = check_matches(st.session_state.grid)103                if matches:104                    st.success("Valid move! Candies matched!")105                    st.session_state.grid = remove_matches(st.session_state.grid, matches)106                else:107                    st.warning("No match found. Swap reverted!")108                    swap_candies(st.session_state.grid, st.session_state.selected_candy, selected_candy)  # Undo the swap109            else:110                st.error("Invalid swap!")111            st.session_state.selected_candy = None  # Reset selection112 113    # Reset the game114    if st.button("Reset Game"):115        st.session_state.grid = initialize_grid(rows, cols)116        st.session_state.selected_candy = None117        st.write("Game reset!")118 119if __name__ == "__main__":120    main()121 122