【消灭星星game】

“消灭星星”(PopStar)是一款非常受欢迎的益智游戏,游戏目标是在一个网格中消除相同颜色的星星,一次消除的星星数量越多,得分越高。以下是一个简化版的消灭星星游戏的Python代码示例,用于演示基本的游戏逻辑和界面。

import random
import os
# 游戏区域大小
ROW = 10
COL = 10
# 星星的种类数
STAR_TYPES = 5
# 游戏区域
grid = [[random.randint(1, STAR_TYPES) for _ in range(COL)] for _ in range(ROW)]
def print_grid():
    """ 打印游戏区域 """
    os.system('cls' if os.name == 'nt' else 'clear')
    for row in grid:
        print(' '.join(str(x) for x in row))
def is_valid(x, y):
    """ 检查坐标是否有效 """
    return 0 <= x < ROW and 0 <= y < COL
def find_star(x, y, star_type):
    """ 深度优先搜索找到所有相邻的同色星星 """
    if not is_valid(x, y) or grid[x][y] != star_type:
        return []
    
    stars = [(x, y)]
    grid[x][y] = 0  # 标记为已访问
    for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
        stars.extend(find_star(x + dx, y + dy, star_type))
    return stars
def remove_stars():
    """ 移除所有被选择的星星 """
    global grid
    removed = set()
    for x in range(ROW):
        for y in range(COL):
            if grid[x][y] > 0:
                stars = find_star(x, y, grid[x][y])
                if len(stars) > 1:
                    removed.update(stars)
    
    # 移除星星并下落
    for x, y in removed:
        grid[x][y] = 0
    for y in range(COL):
        col = [grid[x][y] for x in range(ROW) if grid[x][y] > 0]
        for x in range(ROW - len(col), ROW):
            grid[x][y] = 0
        for x in range(ROW - len(col)):
            grid[x][y] = col[x]
def main():
    """ 主函数 """
    print("欢迎来到消灭星星游戏!")
    print("请输入要消除的星星的行和列(从0开始):")
    while True:
        print_grid()
        try:
            x, y = map(int, input("行 列: ").split())
            if not is_valid(x, y):
                raise ValueError
            stars = find_star(x, y, grid[x][y])
            if len(stars) > 1:
                for sx, sy in stars:
                    grid[sx][sy] = 0
                remove_stars()
            else:
                print("没有可以消除的星星。")
        except ValueError:
            print("无效的坐标,请重新输入。")
if __name__ == "__main__":
    main()

这个代码只是一个非常基础的版本,用于演示游戏的核心逻辑。为了成为一个完整的游戏,你可能需要添加更多的功能,比如得分系统、不同级别的难度、更美观的界面等。希望这个示例能够帮助你入门!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的用 C 语言编写的消灭星星游戏: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define ROWS 10 #define COLS 10 #define NUM_COLORS 5 // 定义星星的颜色 enum Color { RED, GREEN, BLUE, YELLOW, PURPLE }; // 星星的结构体 struct Star { enum Color color; int row; int col; int is_eliminated; }; // 初始化游戏界面,将所有星星都设为随机颜色 void init_game(struct Star board[ROWS][COLS]) { int i, j; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { board[i][j].color = rand() % NUM_COLORS; board[i][j].row = i; board[i][j].col = j; board[i][j].is_eliminated = 0; } } } // 打印游戏界面 void print_board(struct Star board[ROWS][COLS]) { int i, j; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { if (board[i][j].is_eliminated) { printf(" "); } else { switch (board[i][j].color) { case RED: printf("R "); break; case GREEN: printf("G "); break; case BLUE: printf("B "); break; case YELLOW: printf("Y "); break; case PURPLE: printf("P "); break; } } } printf("\n"); } } // 判断星星是否可以被消除,如果可以,返回 1,否则返回 0 int can_eliminate(struct Star board[ROWS][COLS], int row, int col) { int i, j; enum Color color = board[row][col].color; int num_same_color = 0; // 横向判断 for (i = 0; i < COLS; i++) { if (board[row][i].is_eliminated || board[row][i].color != color) { break; } num_same_color++; } if (num_same_color >= 3) { return 1; } // 纵向判断 num_same_color = 0; for (j = 0; j < ROWS; j++) { if (board[j][col].is_eliminated || board[j][col].color != color) { break; } num_same_color++; } if (num_same_color >= 3) { return 1; } return 0; } // 消除星星 void eliminate_star(struct Star board[ROWS][COLS], int row, int col) { board[row][col].is_eliminated = 1; } // 消除一列星星 void eliminate_column(struct Star board[ROWS][COLS], int col) { int i; for (i = 0; i < ROWS; i++) { eliminate_star(board, i, col); } } // 消除一行星星 void eliminate_row(struct Star board[ROWS][COLS], int row) { int i; for (i = 0; i < COLS; i++) { eliminate_star(board, row, i); } } // 将被消除的星星删除,并且将上面的星星下落 void drop_stars(struct Star board[ROWS][COLS]) { int i, j; for (i = ROWS - 1; i >= 0; i--) { for (j = 0; j < COLS; j++) { if (board[i][j].is_eliminated) { int k; for (k = i - 1; k >= 0; k--) { if (!board[k][j].is_eliminated) { board[i][j].color = board[k][j].color; board[i][j].is_eliminated = board[k][j].is_eliminated; board[k][j].is_eliminated = 1; break; } } } } } } // 消除所有可以被消除的星星 void eliminate_all_stars(struct Star board[ROWS][COLS]) { int i, j; int has_eliminated = 1; while (has_eliminated) { has_eliminated = 0; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { if (!board[i][j].is_eliminated && can_eliminate(board, i, j)) { eliminate_star(board, i, j); has_eliminated = 1; } } } drop_stars(board); } } int main() { struct Star board[ROWS][COLS]; srand(time(NULL)); init_game(board); print_board(board); eliminate_all_stars(board); printf("All stars are eliminated!\n"); return 0; } ``` 这个游戏的规则是:将所有可以被消除的星星都消除掉,直到没有可以被消除的星星为止。如果一行或一列中有连续三个或以上的同色星星,则这些星星就可以被消除。每次消除完星星之后,上面的星星会下落到下面来,填补空缺。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值