贪吃蛇小游戏(仅支持C++11及以上)
2025-05-11 11:10:42
发布于:福建
#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
using namespace std;
mt19937 rnd(time(0));
const int WIDTH = 30, HEIGHT = 20;
bool gameOver;
int x, y, fruitX, fruitY, score,tim;
int tailX[300], tailY[300], nTail;
enum Direction { STOP, LEFT, RIGHT, UP, DOWN };
Direction dir;
void Setup() {
gameOver = false;
dir = STOP;
x = WIDTH>>1;
y = HEIGHT>>1;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
score = 0;
}
void Draw() {
system("cls");
for(int i=0; i<WIDTH+2; i++) putchar('#');
putchar('\n');
for(int i=0; i<HEIGHT; i++) {
for(int j=0; j<WIDTH; j++) {
if(j == 0) putchar('#');
if(i == y && j == x) putchar('O'); // 蛇头
else if(i == fruitY && j == fruitX) putchar('F'); // 食物
else {
bool printTail = false;
for(int k=0; k<nTail; k++) {
if(tailX[k] == j && tailY[k] == i) {
putchar('o');
printTail = true;
}
}
if(!printTail) putchar(' ');
}
if(j == WIDTH-1) putchar('#');
}
putchar('\n');
}
for(int i=0; i<WIDTH+2; i++) putchar('#');
cout << "\n得分:" << score << " 时停:"<<tim<<"\n";
}
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;
default:
break;
}
}
}
void Logic() {
int prevX = tailX[0], prevY = tailY[0];
tailX[0] = x;
tailY[0] = y;
for(int i=1; i<nTail; i++) {
swap(tailX[i], prevX);
swap(tailY[i], prevY);
}
switch(dir) {
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
case UP:
y--;
break;
case DOWN:
y++;
break;
}
if(x >= WIDTH || x < 0 || y >= HEIGHT || y < 0) gameOver = true;
if(x == fruitX && y == fruitY) {
score += rnd()%6+10;
fruitX = rand() % WIDTH;
fruitY = rand() % HEIGHT;
nTail++;
}
}
int main() {
Setup();
while(!gameOver) {
Draw();
Input();
Logic();
if(score>=3000) {
tim=5;
} else if(score>=1800) {
tim=5+(3000-score)/48;
} else if(score>=1000) {
tim=30+(1800-score)/20;
} else if(score>=500) {
tim=70+(1000-score)/10;
} else if(score>=200) {
tim=120+(500-score)/6;
} else {
tim=170+(200-score)/5;
}
Sleep(tim);
}
return 0;
}
这里空空如也
有帮助,赞一个