可以用dev直接运行哦
声音文件已被注释
#define _CRT_SECURE_NO_WARNINGS 1
//#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include<algorithm>
#include<conio.h>
#include <ctime>
#include<iostream>
#include<vector>
#include <mmsystem.h>
#include <fstream>
#include<set>
#include<map>
#pragma comment(lib,"Winmm.lib")//播放音乐
using namespace std;
int RangeX = 6, RangeY = 6;
int Range_hight = 20, Range_width = 20;
void About_games();//关于游戏
void help();//游戏帮助
void start_game();//开始游戏
void point_rang();//积分排名
void mainmenu();//主菜单
void gotoxy(int x, int y);//空格数与换行数
void pause_game();//暂停游戏
void myPause(int tn);//延时关闭
void show(); //打印边界
void jixushow(); //打印边界
void print_Snake();//绘制字符画 --蛇
void Game_difficulty();//游戏难度
void background_musicss();//背景音乐
int setColor(int c);//自定义颜色
void game_over();//游戏结束
void background___musicss();//死亡音乐
void all_date(struct Snake* snake, struct Foodxy* food);//打印游戏过程的数据
void move_snake(struct Snake* snake);//蛇的移动
void get_food(struct Snake* snake, struct Foodxy* food);//普通食物生成
void get_tanchi(struct Snake* snake, struct Foodxy* food);//加成食物生成
void print_snake(struct Snake* snake);//打印蛇
void eat_tan(struct Snake* snake, struct Foodxy* food);//食物加成
void eat_food(struct Snake* snake, struct Foodxy* food);//吃食物
void update(struct Snake* snake);//数据初始化
void through_wall(struct Snake* snake, char ch);//穿墙
int if_die(struct Snake* snake);//判断蛇是否死
vector<pair<string, int >>aa;
map<int, string>qqqq;
multiset<string>bb;
int i, j, p, q, temp, ppppp;
int fen;//分数
int earn;//额外分
int a[2]; //用于记住蛇尾坐标,其中a[0]、a[1]分别表示横、竖坐标
int ff;//退出游戏的标志量
int xx, yy;//继续后的食物坐标
int tan_x, tan_y;//贪吃的食物的坐标。
struct point {
//积分结构
char name[20];
int fen;
} all_points[50];
/*bool cmp(point a, point b) {
//自定义排序
return a.fen > b.fen;
}*/
bool cmp(pair<string, int>a, pair<string, int>b) {
return a.second > b.second;
}
struct Snake {
//蛇的数据
int x[100];
int y[100];
int food_count;
int snake_length;
int speed;
};
struct Foodxy {
//食物坐标
int x;
int y;
};
void gotoxy(int x, int y) {
//空格数与换行数
COORD c;
c.X = x;
c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int setColor(int c) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
return 0;
}
//void background_musicss() {
//背景音乐
//
// mciSendString(TEXT("open E:\\贪吃蛇\\素材\\音乐.mp3 alias jpmusic"), NULL, 0, NULL);
// mciSendString(TEXT("play jpmusic "), NULL, 0, NULL);
//
//}
//void background___musicss() {
//死亡音乐
//
// mciSendString(TEXT("open E:\\贪吃蛇\\素材\\死亡.mp3 alias jpmusic"), NULL, 0, NULL);
//
// mciSendString(TEXT("play jpmusic"), NULL, 0, NULL);
//}
//void background_picturezhu() {
//主界面图片
//
// initgraph(922, 481);
// IMAGE img_bk;
// loadimage(&img_bk, _T("F:\\素材\\图片.jpg"));
// putimage(0, 0, &img_bk); // 在坐标(0 , 0 )位置显示IMAGE 对象
// _getch();
// closegraph();
//
//}
void all_date(struct Snake* snake, struct Foodxy* food) {
fen = 10 * snake->food_count + (400 - snake->speed) / 10;
gotoxy(80, 5);
printf("level : %d", snake->food_count / 5 + 1); //打印游戏等级
gotoxy(80, 8);
printf("score : %d", fen + earn); //打印游戏得分
//分数=10*snake+(300-speed)/10
gotoxy(80, 11);
printf("eat food : %d", snake->food_count); //打印产生食物个数
gotoxy(80, 14);
printf("speed : %03dms", snake->speed); //打印游戏速度
gotoxy(80, 17);
printf("foodX : %d", food->x); //打印食物的横坐标
gotoxy(80, 20);
printf("foodY : %d", food->y); //打印食物的竖坐标
//printf(" x: %d y: %d", snake->x[snake->snake_length - 1], snake->y[snake->snake_length - 1]+1000);
}
void move_snake(struct Snake* snake) {
//蛇的移动
gotoxy(snake->x[0], snake->y[0]);
printf(" "); /* 清除蛇尾*/
for (i = 1; i < snake->snake_length; i++) {
/* 后一节的坐标依次取代前一节的坐标 */
snake->x[i - 1] = snake->x[i];
snake->y[i - 1] = snake->y[i];
}
}
//产生食物
void get_food(struct Snake* snake, struct Foodxy* food) {
srand((unsigned)time(NULL)); //初始化随机数
while (1) {
/* 产生食物的条件:1.在游戏窗口内 2.不在蛇的身上 */
food->x = rand() % 56;//得到食物的横坐标
food->y = rand() % 24; //得到食物的竖坐标
if (food->x <= 13 || food->y <= 5 || (food->x == tan_x && food->y == tan_y)) {
//越界跳过
continue;
}
if (snake->x[snake->snake_length - 1] % 2 != food->x % 2)continue;/******/
for (i = 0; i < snake->snake_length; i++) {
/* 判断食物是否在蛇的身上,如果在蛇身上,则重新产生;否则,打印蛇身 */
if (food->x == snake->x[i] && food->y == snake->y[i]) {
break;
}
}
if (i == snake->snake_length) {
xx = food->x;
yy = food->y;
gotoxy(food->x, food->y);
setColor(15);
printf("●");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//字体颜色
break;
}
}
}
void get_tanchi(struct Snake* snake, struct Foodxy* food) {
srand((unsigned)time(NULL)); //初始化随机数
while (1) {
/* 产生食物的条件:1.在游戏窗口内 2.不在蛇的身上 */
tan_x = rand() % 56 - 2;//得到食物的横坐标
tan_y = rand() % 24 - 1; //得到食物的竖坐标
if (tan_x <= 13 || tan_y <= 5 || (food->x == tan_x && food->y == tan_y)) {
//越界跳过
continue;
}
if (snake->x[snake->snake_length - 1] % 2 != tan_x % 2)continue;/******/
for (i = 0; i < snake->snake_length; i++) {
/* 判断食物是否在蛇的身上,如果在蛇身上,则重新产生;否则,打印蛇身 */
if (tan_x == snake->x[i] && tan_y == snake->y[i]) {
break;
}
}
if (i == snake->snake_length) {
gotoxy(tan_x, tan_y);
setColor(6);
printf("★");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//字体颜色
break;
}
}
}
void print_snake(struct Snake* snake) {
//打印蛇
for (i = 0; i < snake->snake_length; i++) {
gotoxy(snake->x[i], snake->y[i]);
if (i == 0) {
//setColor(2);
printf("○");//■ //打印蛇尾
} else if (i == snake->snake_length - 1) {
//setColor(i % 16);
printf("¤");//■ //打印蛇头
} else {
//setColor(i % 16);
printf("⊙"); //■ //打印蛇身
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//字体颜色
}
}
//吃加成
void eat_tan(struct Snake* snake, struct Foodxy* food) {
if (snake->x[snake->snake_length - 1] == tan_x && snake->y[snake->snake_length - 1] == tan_y) {
//贪吃食物的加成
get_tanchi(snake, food);
earn += 20;//加20分。
}
}
//吃食物
void eat_food(struct Snake* snake, struct Foodxy* food) {
if (snake->x[snake->snake_length - 1] == food->x && snake->y[snake->snake_length - 1] == food->y) {
/* 如果蛇头位置与食物位置相同,吃食物 */
snake->snake_length++; //吃一个食物,蛇身增长一节
for (i = snake->snake_length - 1; i >= 1; i--) {
/* 蛇后节坐标依次赋值给蛇前一节的坐标,依次得到蛇身及蛇头的坐标 */
snake->x[i] = snake->x[i - 1];
snake->y[i] = snake->y[i - 1];
}
snake->x[0] = a[0]; //得到蛇尾移动前的横坐标
snake->y[0] = a[1]; //得到蛇尾移动前的竖坐标
get_food(snake, food); //重新产生食物
snake->food_count++; //食物的个数增1
if (snake->food_count % 1 == 0) {
/* 当蛇吃1个食物时,速度加快10毫秒 */
if (snake->speed <= 30)
snake->speed -= 3;
else if (snake->speed <= 60)
snake->speed -= 5;
else snake->speed -= 10;
}
}
}
void update(struct Snake* snake) {
//数据初始化
snake->x[0] = 30 + 2; //初始化蛇的横坐标
snake->y[0] = 9 + 10 / 2; //初始化蛇的竖坐标
snake->speed = ppppp; //初始化蛇的速度为ppppp
snake->snake_length = 3; //初始化蛇的长度为3节//
snake->food_count = 0; //初始化蛇吃的个数为0
fen = 0;
earn = 0;
for (i = 1; i < snake->snake_length; i++) {
/* 依次得到蛇身、蛇头的坐标 */
snake->x[i] = snake->x[i - 1] + 2;
snake->y[i] = snake->y[i - 1];
}
}
//穿墙
void through_wall(struct Snake* snake, char ch) {
if (ch == 119 && snake->y[snake->snake_length - 1] == RangeY - 2) {
snake->y[snake->snake_length - 1] = RangeY + Range_hight - 3; //如果蛇在上框且向上移动,穿墙
}
if (ch == 115 && snake->y[snake->snake_length - 1] == RangeY + Range_hight - 2) {
snake->y[snake->snake_length - 1] = RangeY - 1; //如果蛇在下框且向下移动,穿墙
}
if (ch == 97 && snake->x[snake->snake_length - 1] < RangeX + 7) {
snake->x[snake->snake_length - 1] = RangeX + 2 * Range_width + 10; //如果蛇在左框且向左移动,穿墙
}
if (ch == 100 && snake->x[snake->snake_length - 1] > RangeX + Range_width + 30) {
snake->x[snake->snake_length - 1] = 14; //如果蛇在右框且向右移动,穿墙
}
}
//判断蛇是否死
int if_die(struct Snake* snake) {
/* 当蛇头碰到自身时,蛇死 ,返回值为0 */
for (i = 0; i < snake->snake_length - 1; i++) {
if (snake->x[snake->snake_length - 1] == snake->x[i] && snake->y[snake->snake_length - 1] == snake->y[i]) {
return 0;
}
}
return 1;
}
void show() {
//打印边界
gotoxy(12, 4);
printf("╔");
gotoxy(58, 4);
printf("╗");
gotoxy(12, 24);
printf("╚");
gotoxy(58, 24);
printf("╝");
for (int i = 13; i < 58; i++) {
//上
Sleep(15);
gotoxy(i, 4);
printf("═");
gotoxy(i, 24);
printf("═");//═
}
/*for (int i = 14; i < 58; i++) {
//下
gotoxy(i, 24);
printf("-");//═
}*/
for (int i = 5; i < 24; i++) {
Sleep(15);
gotoxy(12, i);
printf("║");
gotoxy(58, i);
printf("║");
}
/*for (int i = 5; i < 24; i++) {
// Sleep(50);
gotoxy(58, i);
printf("║");
}*/
}
void jixushow() {
//打印边界
gotoxy(12, 4);
printf("╔");
gotoxy(58, 4);
printf("╗");
gotoxy(12, 24);
printf("╚");
gotoxy(58, 24);
printf("╝");
for (int i = 13; i < 58; i++) {
//上
gotoxy(i, 4);
printf("═");
gotoxy(i, 24);
printf("═");//═
}
/*for (int i = 14; i < 58; i++) {
//下
gotoxy(i, 24);
printf("-");//═
}*/
for (int i = 5; i < 24; i++) {
gotoxy(12, i);
printf("║");
gotoxy(58, i);
printf("║");
}
/*for (int i = 5; i < 24; i++) {
// Sleep(50);
gotoxy(58, i);
printf("║");
}*/
}
void print_Snake() {
//绘制字符画 --蛇
//background_picturezhu();//背景图片
system("cls");//清屏
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//字体颜色
gotoxy(40, 1);
Sleep(950);
setColor(6);
printf("/^\\/^\\"); //蛇眼睛
Sleep(50);
gotoxy(39, 2);
printf("|_O| O|"); //蛇眼睛
Sleep(50);
gotoxy(38, 2);
setColor(2);
printf("_");
Sleep(50);
gotoxy(30, 3);
setColor(2);
printf("\\/"); //蛇信
Sleep(50);
gotoxy(36, 3);
setColor(2);
printf("/");
Sleep(50);
gotoxy(42, 3);
setColor(6);
printf(" \\_/"); //蛇眼睛
Sleep(50);
gotoxy(46, 3);
setColor(10);
printf(" \\");
Sleep(50);
gotoxy(31, 4);
setColor(12);
printf("\\____"); //舌头
Sleep(50);
gotoxy(37, 4);
printf("_________/");
Sleep(50);
gotoxy(36, 4);
setColor(2);
printf("|");
Sleep(50);
gotoxy(48, 4);
setColor(10);
printf("\\");
Sleep(50);
gotoxy(37, 5);
setColor(2);
printf("\\_______"); //蛇嘴
Sleep(50);
gotoxy(49, 5);
setColor(6);
printf("\\");
Sleep(50);
gotoxy(44, 6);
printf("| | \\"); //下面都是画蛇身
Sleep(50);
gotoxy(43, 7);
printf("/ / \\");
Sleep(50);
gotoxy(42, 8);
printf("/ / \\ \\");
Sleep(50);
gotoxy(40, 9);
printf("/ / \\ \\");
Sleep(50);
gotoxy(39, 10);
printf("/ / \\ \\");
Sleep(50);
gotoxy(38, 11);
printf("/ / _----_ \\ \\");
Sleep(50);
gotoxy(37, 12);
printf("/ / _-~ ~-_ | |");
Sleep(50);
gotoxy(36, 13);
printf("( ( _-~ _--_ ~-_ _/ |");
Sleep(50);
gotoxy(37, 14);
printf("\\ ~-____-~ _-~ ~-_ ~-_-~ /");
Sleep(50);
gotoxy(38, 15);
printf("~-_ _-~ ~-_ _-~");
Sleep(50);
gotoxy(40, 16);
printf("~--______-~ ~-___-~");
Sleep(1000);
}
void start_game() {
system("cls");
char ch = 100;
char CH = 100;
struct Snake s, * snake = &s; //定义蛇的结构体指针并指向蛇 的结构体
struct Foodxy f, * foodxy = &f;
show();//游戏范围
update(snake);//数据初始化
get_tanchi(snake, foodxy);//贪心食物随机生成。
get_food(snake, foodxy);//食物的随机生成
ff = 0;
int suiji = 0;
while (1) {
suiji++;
all_date(snake, foodxy);
a[0] = snake->x[0]; //记住蛇尾的横坐标
a[1] = snake->y[0]; //记住蛇尾的竖坐标
j = 0;
if (_kbhit()) {
/* 判断是否按下键盘,如果按下,ch接收键盘输入 */
ch = _getch();
if (_kbhit()) {
/* 如果快速按键盘,则加速 */
Sleep(20);
j = 1;
}
}
//gotoxy(80, 22);
//printf("%d %d", abs(tan_x-snake->x[snake->snake_length - 1]), abs(tan_y-snake->y[snake->snake_length - 1]));
if (abs(tan_x - snake->x[snake->snake_length - 1]) <= 8 && abs(tan_y - snake->y[snake->snake_length - 1]) <= 5) {
//gotoxy(80, 22);
//printf("%d %d", snake->x[snake->snake_length - 1], snake->y[snake->snake_length - 1]);
int tttttt;
tttttt = rand() % 10;
if (tttttt >= 5) {
gotoxy(tan_x, tan_y);
printf(" ");
get_tanchi(snake, foodxy);
}
}
switch (ch) {
case 119: {
/* 向上移动 */
CH = 119;
move_snake(snake); //移动蛇
snake->y[snake->snake_length - 1] -= 1; //蛇头的竖坐标向上移,即减1
break;
}
case 115: {
/* 向下移动 */
CH = 115;
move_snake(snake); //移动蛇
snake->y[snake->snake_length - 1] += 1; //蛇头的竖坐标向下移,即加1
break;
}
case 97: {
/* 向左移动 */
CH = 97;
move_snake(snake); //移动蛇
snake->x[snake->snake_length - 1] -= 2; //蛇头的横坐标向左移,即减2
break;
}
case 100: {
/* 向右移动 */
CH = 100;
move_snake(snake); //移动蛇
snake->x[snake->snake_length - 1] += 2; //蛇头的横坐标向右移,即加2
break;
}
case 32: {
pause_game();
break;
}
default: {
ch = CH;
switch (ch) {
case 119: {
/* 向上移动 */
CH = 119;
move_snake(snake); //移动蛇
snake->y[snake->snake_length - 1] -= 1; //蛇头的竖坐标向上移,即减1
break;
}
case 115: {
/* 向下移动 */
CH = 115;
move_snake(snake); //移动蛇
snake->y[snake->snake_length - 1] += 1; //蛇头的竖坐标向下移,即加1
break;
}
case 97: {
/* 向左移动 */
CH = 97;
move_snake(snake); //移动蛇
snake->x[snake->snake_length - 1] -= 2; //蛇头的横坐标向左移,即减2
break;
}
case 100: {
/* 向右移动 */
CH = 100;
move_snake(snake); //移动蛇
snake->x[snake->snake_length - 1] += 2; //蛇头的横坐标向右移,即加2
break;
}
}
break;
}
}
if (ff == 2)break;
if (ff == 3)exit(0);
if (ff == 1) {
jixushow();
gotoxy(xx, yy);
setColor(15);
printf("●");
gotoxy(tan_x, tan_y);
setColor(6);
printf("★");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//字体颜色
ch = CH;
ff = 0;
}
through_wall(snake, ch); //穿墙
eat_tan(snake, foodxy); //吃加成
eat_food(snake, foodxy); //吃食物
print_snake(snake); //打印蛇
if (if_die(snake) == 0) {
/* 游戏结束条件:蛇碰到自身 */
//mciSendString(TEXT("close jpmusic"), NULL, 0, NULL);//当前音乐关闭
//background___musicss();//死亡音乐
gotoxy(33, 14);
printf("Game Over");
Sleep(2000);
game_over();
system("cls");
// mciSendString(TEXT("close jpmusic"), NULL, 0, NULL);//当前音乐关闭
//background_musicss();//背景音乐
mainmenu();
break;
}
if (j == 0) {
Sleep(snake->speed); //延迟时间
} else {
Sleep(10);
}
}
if (ff == 2)
mainmenu();
}
void Game_difficulty() {
system("cls");
gotoxy(48, 10);
printf("难 度 选 择");
gotoxy(50, 12);
printf("1.我就玩玩");
gotoxy(50, 14);
printf("2.再快一点?");
gotoxy(50, 16);
printf("3.飞的感觉");
gotoxy(86, 29);
printf("请在输入法英文状态下开始游戏");
gotoxy(0, 29);
printf("你的选择:");
char n;
cin >> n;
switch (n) {
case '1':
system("cls");
ppppp = 400;
break;
case '2':
system("cls");
ppppp = 200;
break;
case '3':
system("cls");
ppppp = 100;
break;
default:
system("cls");
Game_difficulty();
break;
}
}
void point_rang() {
qqqq[1] = "Winner";
//qqqq[2] = "2nd";
//qqqq[3] = "3rd";
//qqqq[4] = "4th";
//qqqq[5] = "5th";
//qqqq[6] = "6th";
//qqqq[7] = "7th";
//qqqq[8] = "8th";
//qqqq[9] = "9th";
//qqqq[10] = "10th";
char aba[15][15] = {
{
" "},{
"Winner"},{
"2nd"},{
"3rd"},{
"4th"},{
"5th"},{
"6th"},{
"7th"},{
"8th"},{
"9th"},{
"10th"} };
int i, j, k, l;
system("cls");
gotoxy(44, 2);
printf("积 分 排 名 如 下:(前10)\n\n");
gotoxy(33, 6);
cout << "Ranking";
gotoxy(50, 6);
cout << " Name" << " " << "Score";
aa.clear();
ifstream in("数据.txt");
if(in) {
int tt;
in >> tt;
for (int i = 0; i < tt; i++) {
int fenn;
string ss;
in >> ss >> fenn;
aa.push_back(make_pair(ss, fenn));
}
in.close();
}
else{
ofstream outstuf;
outstuf.open("数据.txt");
ofstream out("数据.txt");
out<<0<<endl;
out.close();
}
sort(aa.begin(), aa.end(), cmp);
j = 8;
int ii = 1;
if (aa.size() == 0) {
gotoxy(44, 15);
setColor(4);
printf("目前无人在榜,赶快上榜吧!!!");
}
for (auto& i : aa) {
if (ii == 1)setColor(4);//积分排名颜色渐变
else if (ii > 1 && ii <= 4)setColor(6);
else if (ii > 4 && ii <= 7)setColor(14);
else setColor(7);
if (qqqq[ii] == "Winner") {
gotoxy(37 - qqqq[ii].size() / 2, j);//居中
cout << aba[ii++];
} else {
gotoxy(36 - qqqq[ii].size() / 2, j);//居中
cout << aba[ii++];
}
gotoxy(55 - i.first.size() / 2, j);//居中
cout << i.first;
gotoxy(75 - (int)log10(i.second) / 2, j);//居中
cout << i.second;
j += 2;
if (ii > 10)break;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//颜色归位
gotoxy(0, 29);
printf("任意键返回:");
/*int m;
scanf("%d",&m);
switch(m) {
case 1:
system("cls");
mainmenu();
break;
}*/
char input;
while (1) {
if (_kbhit()) {
system("cls");
input = _getch();
mainmenu();
break;
}
}
}
void help() {
system("cls");//清屏
gotoxy(50, 4);
printf("利用键盘控制小蛇的移动\n");
gotoxy(49, 6);
printf("通过吃到食物获得积分加成\n");
gotoxy(53, 8);
printf("附带提速效果\n");
gotoxy(35, 10);
printf("蛇在移动中只有碰到自己才会死亡,碰到墙壁会穿过继续进行");
gotoxy(55, 12);
printf("w 上");
gotoxy(55, 14);
printf("a 左");
gotoxy(55, 16);
printf("s 下");
gotoxy(55, 18);
printf("d 右");
gotoxy(53, 20);
printf("space 暂停");
gotoxy(86, 29);
printf("请在输入法英文状态下开始游戏");
gotoxy(0, 29);
printf("任意键返回:");
char input;
while (1) {
if (_kbhit()) {
system("cls");
input = _getch();
mainmenu();
break;
}
}
}
void About_games() {
system("cls");
gotoxy(10, 3);
printf("开发成员:");
gotoxy(17, 5);
printf("---------------------------------");
gotoxy(17, 7);
printf("-----------------------------");
gotoxy(17, 9);
printf("--------------------------------");
gotoxy(55, 2);
printf("4.26更新:游戏框架成型");
gotoxy(55, 4);
printf("5.31更新:加入核心代码");
gotoxy(55, 6);
printf("6.1更新:优化蛇穿墙的各种参数");
gotoxy(55, 8);
printf("6.3更新:优化食物随机出现的坐标,使蛇可以精确吃到食物");
gotoxy(55, 10);
printf("6.4更新:优化暂停过程中的无法再次调用函数的错误");
gotoxy(55, 12);
printf("6.4更新:增加积分排名的颜色变换并对蛇的速度进行优化");
gotoxy(55, 14);
printf("6.5更新:加入加成食物,加入蛇死亡音效");
gotoxy(55, 16);
printf("6.6更新:调整加成食物被吃几率,更加符合贪吃的定义");
gotoxy(55, 18);
printf("6.8更新:微调主页面内容位置,使其居中");
gotoxy(55, 20);
printf("6.9更新:调整只有空格会暂停其他的不会");
gotoxy(55, 22);
printf("6.23更新:自动创建本地txt");
int m;
gotoxy(0, 29);
printf("任意键返回:");
char input;
while (1) {
if (_kbhit()) {
system("cls");
input = _getch();
mainmenu();
break;
}
}
}
void pause_game() {
//游戏暂停
system("cls");
gotoxy(50, 10);
printf("1.继续游戏");
gotoxy(50, 14);
printf("2.返回主页面");
gotoxy(50, 18);
printf("3.退出游戏");
gotoxy(0, 29);
printf("你的选择:");
char n;
cin >> n;
switch (n) {
case '1':
system("cls");
ff = 1;
//start_game();
break;
case '2':
system("cls");
ff = 2;
mainmenu();
break;
case '3':
system("cls");
ff = 3;
break;
}
}
void game_over() {
aa.clear();
system("cls");
gotoxy(50, 10);
printf("很遗憾,游戏结束");
gotoxy(20, 18);
printf("您的得分是 :%d 分", fen + earn);
gotoxy(20, 20);
printf("请输入您的英文名字 ");
string s;
cin >> s;
int tt;
aa.push_back(make_pair(s, fen + earn));
ifstream in("数据.txt");
if(in) {
in >> tt;
for (int i = 0; i < tt; i++) {
int fenn;
string ss;
in >> ss >> fenn;
if (ss.size() == 0)continue;
aa.push_back(make_pair(ss, fenn));
}
in.close();
ofstream out("数据.txt");
//sort(aa.begin(), aa.end(), cmp);
out << tt + 1 << endl;
for (auto& i : aa) {
out << i.first;
out << " ";
out << i.second << endl;
}
/*for (int i = 0; i < 10; i++) {
out << i << endl;
}*/
out.close();
}
else{
ofstream outstuf;
outstuf.open("数据.txt");
ofstream out("数据.txt");
out<<1<<endl;
out<<s<<" "<<fen+earn<<endl;
out.close();
}
}
void mainmenu() {
////开始界面
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |
FOREGROUND_BLUE);//字体颜色
gotoxy(48, 7);
printf("贪 吃 蛇");
Sleep(100);
gotoxy(53, 10);
printf("1.开始游戏");
Sleep(100);
gotoxy(53, 12);
printf("2.游戏帮助");
Sleep(100);
gotoxy(53, 14);
printf("3.关于游戏");
Sleep(100);
gotoxy(53, 16);
printf("4.积分排名");
Sleep(100);
gotoxy(53, 18);
printf("5.退出游戏");
Sleep(100);
gotoxy(0, 29);
printf("你的选择:");
char n;
cin >> n;
switch (n) {
case '1':
Game_difficulty();
start_game();
break;
case '2':
help();////帮助界面
break;
case '3':
About_games();
break;
case '4':
point_rang();////积分排名系统
break;
case '5':
myPause(2);//延时2秒退出
break;
default:
system("cls");
mainmenu();
break;
}
}
void myPause(int tn) {
//延时关闭
system("cls");
gotoxy(50, 14);
printf("感谢您的使用");
gotoxy(0, 29);
{
int t0 = time(NULL), last = t0, now = t0;
tn += t0;
int n = -2;
gotoxy(n += 2, 29);
cout << (tn - now);
while ((now = time(NULL)) < tn)
if (last != now) {
gotoxy(n += 2, 29);
cout << (tn - now);
last = now;
}
}
exit(0);
}
int main() {
system("mode con cols=115 lines=30 ");//窗口大小
//background_musicss();//背景音乐
print_Snake();
mainmenu();
return 0;
}