C++贪吃蛇小游戏

这篇博客介绍了一个C++编写的贪吃蛇小游戏,适合初学者学习。作者强调代码中包含许多新手学习的要点,不看会错过宝贵的学习机会。
摘要由CSDN通过智能技术生成

C++贪吃蛇小游戏

一.前言

1.代码有许多值得新手学习的地方
2.不看就吃亏了噢
3.如果没有值得学习的地方,我就倒立洗头!

二.代码

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
//方向键的ASCLL值:上72,左75,右77,下80
//背景颜色的代码: 0=黑色  1蓝色 2 绿色 3湖蓝色 4红色 5紫色 6黄色 7白色 8灰色 9淡蓝色
//**改变当前光标方块的背景颜色和字体颜色**//
void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {
   
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  //获取控制台的句柄
    SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//改变当前光标的背景和字体颜色
}

//**改变光标的位置**//
void gotoxy(int x, int y) {
   
    HANDLE handle;
    COORD coord;   //获取坐标轴结构体
    coord.X = x;
    coord.Y = y;
    handle = GetStdHandle(STD_OUTPUT_HANDLE);  //获取控制台句柄,值为-11
    SetConsoleCursorPosition(handle, coord);   //移动光标到x,y处
}

//**初始化地图数据**//
void restart(int bk[20][20], int look[4], int move[20][20]) {
   
    //bk为总的地图数据记录整个地图,为1时表示墙体,为2时表示dd果实,为3时表示蛇
    //look记录数据,为0时表示朝向,为1时表示长度,为3时表示胜负情况,为4表示分数
    //move记录蛇走过的路程,用来打印蛇时判断用
    int pp, qq;  //用来记录获取的随机坐标
    //接下来要初始化整个地图//
    for (int i = 0; i <= 16; i++)
        for (int j = 0; j <= 16; j++) {
   
            if (i == 0 || i == 16 || j  == 0 || j == 16)  bk[i][j] = 1;//1表示墙体
            else bk[i][j] = 0; //0表示什么都没有
            move[i][j] = 0;    //该数组用来记录蛇移动的轨迹
        }
    //将蛇初始化在8,8坐标上
    bk[8][8] = 3;
    move[8][8] = 1;//则此时8,8,上的轨迹就应该记录为1
    move[0</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C++贪吃蛇小游戏的代码示例: ```cpp #include <iostream> #include <conio.h> #include <windows.h> using namespace std; bool gameOver; const int width = 20; const int height = 20; int x, y, fruitX, fruitY, score; int tailX[100], tailY[100]; int nTail; enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; eDirection dir; void Setup() { gameOver = false; dir = STOP; x = width / 2; y = height / 2; fruitX = rand() % width; fruitY = rand() % height; score = 0; } void Draw() { system("cls"); for (int i = 0; i < width + 2; i++) cout << "#"; cout << endl; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (j == 0) cout << "#"; if (i == y && j == x) cout << "O"; else if (i == fruitY && j == fruitX) cout << "F"; else { bool printTail = false; for (int k = 0; k < nTail; k++) { if (tailX[k] == j && tailY[k] == i) { cout << "o"; printTail = true; } } if (!printTail) cout << " "; } if (j == width - 1) cout << "#"; } cout << endl; } for (int i = 0; i < width + 2; i++) cout << "#"; cout << endl; cout << "Score:" << score << endl; } void Input() { if (_kbhit()) { switch (_getch()) { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameOver = true; break; } } } void Logic() { int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = x; tailY[0] = y; for (int i = 1; i < nTail; i++) { prev2X = tailX[i]; prev2Y = tailY[i]; tailX[i] = prevX; tailY[i] = prevY; prevX = prev2X; prevY = prev2Y; } switch (dir) { case LEFT: x--; break; case RIGHT: x++; break; case UP: y--; break; case DOWN: y++; break; default: break; } if (x >= width) x = 0; else if (x < 0) x = width - 1; if (y >= height) y = 0; else if (y < 0) y = height - 1; for (int i = 0; i < nTail; i++) { if (tailX[i] == x && tailY[i] == y) gameOver = true; } if (x == fruitX && y == fruitY) { score += 10; fruitX = rand() % width; fruitY = rand() % height; nTail++; } } int main() { Setup(); while (!gameOver) { Draw(); Input(); Logic(); Sleep(10); // 控制游戏速度 } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值