• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-12
  • 语言: C/C++
  • 标签: VC  

资源简介

使用C语言编写贪吃蛇程序,实现计分,选择游戏难度等功能,用键盘方向键操作。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define MAXWIDTH 30
#define MAXHEIGHT 30
int xCenter = MAXHEIGHT%2==0 ? MAXHEIGHT/2 : MAXHEIGHT/2+1;
int yCenter = MAXWIDTH%2==0 ? MAXWIDTH/2 : MAXWIDTH/2+1;
int callspeed;
//程序中用到的各种字符,以及它们的颜色和类型(以数字表示)
struct{
    char *ch;
    int color;
    char type;}
charBorder = {“□“ 4 1}  //边框
charBg = {“■“ 2 2}  //背景
charSnake = {“★“ 0xe 3}  //贪吃蛇节点
charFood = {“●“ 0xc 4};  //食物
 
//用一个结构体数组保存地图中的各个点
struct{
    char type;
    int index;}
globalMap[MAXWIDTH][MAXHEIGHT];
 
//贪吃蛇有效活动范围地图的索引
struct{
    int x;
    int y;
} snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ] scoresPostion;
 
int scores = 0;  //得分
int snakeMapLen = (MAXWIDTH-2)*(MAXHEIGHT-2);
int headerIndex tailIndex;  //蛇头蛇尾对应的snakeMap中的索引(下标)
HANDLE hStdin;  //控制台句柄
 
void setPosition(int x int y){// 设置光标位置,x为行,y为列
    COORD coord;
    coord.X = 2*y;
    coord.Y = x;
    SetConsoleCursorPosition(hStdin coord);}

void setColor(int color){// 设置颜色
    SetConsoleTextAttribute(hStdin color);}

void createFood(){//创建食物
    int index rang x y;
    //产生随机数,确定 snakeMap 数组的索引 
    srand((unsigned)time(NULL));
    if(tailIndex        rang = headerIndex-tailIndex-1;
        index = rand()%rang + tailIndex + 1;
    }else{
        rang = snakeMapLen - (tailIndex - headerIndex+1);
        index = rand()%rang;
        if(index>=headerIndex){
            index += (tailIndex-headerIndex+1);
            if(index>28*28){index=tailIndex+1;} 
        }
    }
    x = snakeMap[index].x;
    y = snakeMap[index].y;
    setPosition(x y);
    setColor(charFood.color);
    printf(“%s“ charFood.ch);
    globalMap[x][y].type=charFood.type;
}
 
//死掉
void die(){
    setPosition(xCenter yCenter-5);
    setColor(0xC);
    printf(“You die! Game Over!“);
    setPosition(xCenter+1 yCenter-5);
    setColor(0xC);
    getch();
    exit(0);
}
 
// 蛇移动
void move(char direction){
    int newHeaderX newHeaderY;  //新蛇头的坐标
    int newHeaderPreIndex;  //新蛇头坐标以前对应的索引
    int newHeaderPreX newHeaderPreY;  //新蛇头的索引以前对应的坐标
    int newHeaderPreType;  //新蛇头以前的类型
    int oldTailX oldTailY;  //老蛇尾坐标
    //新蛇头的坐标
    switch(direction){
        case ‘w‘:newHeaderX = snakeMap[headerIndex].x-1;newHeaderY = snakeMap[headerIndex].y;break;
        case ‘s‘:newHeaderX = snakeMap[headerIndex].x+1;newHeaderY = snakeMap[headerIndex].y;break;
        case ‘a‘:newHeaderX = snakeMap[headerIndex].x;newHeaderY = snakeMap[headerIndex].y-1;break;
        case ‘d‘:newHeaderX = snakeMap[headerIndex].x;newHeaderY = snakeMap[headerIndex].y+1;break;}
    headerIndex = headerIndex==0 ? snakeMapLen-1 : headerIndex-1;    //新蛇头的索引
    newHeaderPreIndex = globalMap[newHeaderX][newHeaderY].index;    //新蛇头坐标以前对应的索引
    newHeaderPreX = snakeMap[headerIndex].x;    //新蛇头的索引以前对应的坐标
    newHeaderPreY = snakeMap[headerIndex

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        8018  2018-05-03 16:22  贪吃蛇代码.cpp

评论

共有 条评论