用C语言写贪吃蛇游戏

输入头文件,设置函数,其中snakeMove()是实现蛇运动的函数,put_food()是随机放置金币的函数,printmap()是输出图像的函数, X、Y记录蛇尾的坐标,snakeX和snakeY记录蛇的初始坐标。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define SNAKE_MAX_LENGTH 100
#define SNAKE_HEAD 'H'
#define SNAKE_BODY 'X'
#define BLANK_CELL ' '
#define WALL_CELL '*'
#define food '$'
void snakeMove(char ch, int snakeX[], int snakeY[]);
void put_money(void);
void printmap(void);
void put_food(void);
int X, Y;

输出图像和放置食物的函数如下:

void put_food(){
    int x,y;
    x = rand() % 10 + 1;
    y = rand() % 10 + 1;
    while(map[y][x] != BLANK_CELL){
        x = rand() % 10 + 1;
        y = rand() % 10 + 1;
    }
    map[y][x] = food;
}
void printmap(){
    int i,j;
    for(i = 0; i < 12; i++){
        for(j = 0; j < 12; j ++)
            printf("%c", map[i][j]);
    putchar('\n');
    }
}

要实现蛇的移动和增长,蛇每移动一次,让蛇头的坐标做相应的变化,它的每一节身体的坐标变为前一节身体的坐标,蛇尾的初始坐标的字符清零。若蛇头的坐标变化后恰好为食物的坐标,则蛇的身长加一,蛇尾的初始坐标的字符不清零。
具体实现方法如下:

void snakeMove(char ch,int snakeX[], int snakeY[]){
    int i;
    X = snakeX[0];
    Y = snakeY[0];
    switch (ch){
    case 'A': case 'a':
        for(i = 0; i < snakeLength - 1; i++){
            snakeX[i] = snakeX[i + 1];
            snakeY[i] = snakeY[i + 1];
        }
        snakeX[snakeLength - 1]--;
        break;
    case 'S': case 's':
        for(i = 0; i < snakeLength - 1; i++){
            snakeX[i] = snakeX[i + 1];
            snakeY[i] = snakeY[i + 1];
        }
        snakeY[snakeLength - 1] ++;
        break;
    case 'D': case 'd':
        for(i = 0; i < snakeLength - 1; i++){
            snakeX[i] = snakeX[i + 1];
            snakeY[i] = snakeY[i + 1];
        }
        snakeX[snakeLength - 1]++;
        break;
    case 'W': case 'w':
        for(i = 0; i < snakeLength - 1; i++){
            snakeX[i] = snakeX[i + 1];
            snakeY[i] = snakeY[i + 1];
        }
        snakeY[snakeLength - 1]--;
        break;
    default:
        return ;
    }
}
int main(){
    char ch;
    int i;
    map[5][5] = food;
    printmap();
    while(1){
        ch = getch();
        snakeMove(ch, snakeX, snakeY);
        if(map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] != food)
            map[Y][X] = ' ';
        for(i = 0; i < snakeLength  - 1; i++)
            map[snakeY[i]][snakeX[i]] = SNAKE_BODY;
        if(map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] == SNAKE_BODY || map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] == WALL_CELL)
            break;
        if(map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] == food){
            for(i  = snakeLength; i > 0; i --){
                snakeY[i] = snakeY[i - 1];
                snakeX[i] = snakeX[i - 1];
            }
            snakeY[0] = Y;
            snakeX[0] = X;
            snakeLength ++;
            put_food();
        }
        map[snakeY[snakeLength - 1]][snakeX[snakeLength - 1]] = SNAKE_HEAD;
        system("cls");
        printmap();
    }
    getchar();
}

简单的贪吃蛇小游戏就这样做好了。
这里写图片描述

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值