以下是一个基于Linux的2048游戏的代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>

#define SIZE 4

int board[SIZE][SIZE];

void initializeBoard() {
    // 初始化游戏板
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            board[i][j] = 0;
        }
    }
    
    // 随机生成两个初始数字
    srand(time(0));
    int count = 0;
    while (count < 2) {
        int i = rand() % SIZE;
        int j = rand() % SIZE;
        if (board[i][j] == 0) {
            board[i][j] = 2;
            count++;
        }
    }
}

void printBoard() {
    // 打印游戏板
    printf("\n");
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf("%d\t", board[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

bool isGameOver() {
    // 检查游戏是否结束
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            if (board[i][j] == 0) {
                return false;
            }
            
            if (i != SIZE - 1 && board[i][j] == board[i + 1][j]) {
                return false;
            }
            
            if (j != SIZE - 1 && board[i][j] == board[i][j + 1]) {
                return false;
            }
        }
    }
    
    return true;
}

void addRandomNumber() {
    // 在空白位置随机添加数字2或4
    int count = 0;
    while (count < 1) {
        int i = rand() % SIZE;
        int j = rand() % SIZE;
        if (board[i][j] == 0) {
            board[i][j] = (rand() % 2 + 1) * 2;
            count++;
        }
    }
}

void swipeLeft() {
    // 向左滑动
    for (int i = 0; i < SIZE; i++) {
        int k = 0;
        for (int j = 1; j < SIZE; j++) {
            if (board[i][j] != 0) {
                if (board[i][k] == 0) {
                    board[i][k] = board[i][j];
                    board[i][j] = 0;
                } else if (board[i][k] == board[i][j]) {
                    board[i][k] *= 2;
                    board[i][j] = 0;
                    k++;
                } else {
                    k++;
                    board[i][k] = board[i][j];
                    if (j != k) {
                        board[i][j] = 0;
                    }
                }
            }
        }
    }
}

void swipeRight() {
    // 向右滑动
    for (int i = 0; i < SIZE; i++) {
        int k = SIZE - 1;
        for (int j = SIZE - 2; j >= 0; j--) {
            if (board[i][j] != 0) {
                if (board[i][k] == 0) {
                    board[i][k] = board[i][j];
                    board[i][j] = 0;
                } else if (board[i][k] == board[i][j]) {
                    board[i][k] *= 2;
                    board[i][j] = 0;
                    k--;
                } else {
                    k--;
                    board[i][k] = board[i][j];
                    if (j != k) {
                        board[i][j] = 0;
                    }
                }
            }
        }
    }
}

void swipeUp() {
    // 向上滑动
    for (int j = 0; j < SIZE; j++) {
        int k = 0;
        for (int i = 1; i < SIZE; i++) {
            if (board[i][j] != 0) {
                if (board[k][j] == 0) {
                    board[k][j] = board[i][j];
                    board[i][j] = 0;
                } else if (board[k][j] == board[i][j]) {
                    board[k][j] *= 2;
                    board[i][j] = 0;
                    k++;
                } else {
                    k++;
                    board[k][j] = board[i][j];
                    if (i != k) {
                        board[i][j] = 0;
                    }
                }
            }
        }
    }
}

void swipeDown() {
    // 向下滑动
    for (int j = 0; j < SIZE; j++) {
        int k = SIZE - 1;
        for (int i = SIZE - 2; i >= 0; i--) {
            if (board[i][j] != 0) {
                if (board[k][j] == 0) {
                    board[k][j] = board[i][j];
                    board[i][j] = 0;
                } else if (board[k][j] == board[i][j]) {
                    board[k][j] *= 2;
                    board[i][j] = 0;
                    k--;
                } else {
                    k--;
                    board[k][j] = board[i][j];
                    if (i != k) {
                        board[i][j] = 0;
                    }
                }
            }
        }
    }
}

int main() {
    initializeBoard();
    
    while (!isGameOver()) {
        printBoard();
        
        // 获取用户输入
        char move;
        printf("Enter move (w/a/s/d): ");
        scanf(" %c", &move);
        
        // 根据用户输入执行相应操作
        switch (move) {
            case 'w':
                swipeUp();
                break;
            case 'a':
                swipeLeft();
                break;
            case 's':
                swipeDown();
                break;
            case 'd':
                swipeRight();
                break;
            default:
                printf("Invalid move. Try again.\n");
                continue;
        }
        
        // 随机添加一个数字
        addRandomNumber();
    }
    
    printf("Game Over!\n");
    return 0;
}

这是一个简单的基于控制台的2048游戏实现。游戏板是一个4x4的二维数组,数字2或4随机出现在空白位置。玩家可以使用"w"、"a"、"s"和"d"键来移动数字。玩家根据移动的方向,相邻并相等的数字会相加。游戏在所有位置都被填满且无法再进行移动时结束

编写一个基于Linux的2048游戏代码

原文地址: http://www.cveoy.top/t/topic/h1Fn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录