贪吃蛇,但可以双人
首先声明本代码修改于该文章,只是稍微增加一些其它功能:http://t.csdn.cn/zvvh9
我们需要下载一个插件,名字叫做EasyX.
如图:
点进去,然后点击下载

随后安装,之后打开

点击下一步,

之后点安装就行了,最好第一个和第二个都安装起
之后打开visual stduio 2022,新建项目。
之后点开项目,点击属性如图:

然后将SDL检查改为否,并且将字符集改为使用多字节字符集:


随后创建一个game.h的头文件,game.cpp的源文件,再创建一个main.cpp的源文件.如图:

其中,game.h文件下的代码为:
#include
#include
#include
#include
#include
#define SNAKE_SIZE 360int Initgame(int a);
void Drawgame(int a);
void KeyControl(int a);
void snakemove(int a);
void Eatfood();
game.cpp文件的代码为:
#include"game.h"
enum DIRECTOR
{UP,DOWN,LEFT,RIGHT,
};
struct Snake1
{int size;int director;int speed;int r;int score;POINT section[SNAKE_SIZE];
}snake1;
struct Snake2
{int size;int director;int speed;int r;int score;POINT section[SNAKE_SIZE];
}snake2;
struct Food
{int x;int y;int r;bool flag;DWORD color;
}food;
int Initgame(int a)
{initgraph(1500, 600);settextstyle(40, 40, "黑体");srand((unsigned int)time(NULL));if (a == 1){snake1.speed = 10;snake1.r = 5;food.r = rand() % 10 + 5;}else if (a == 2){snake1.speed = 20;snake1.r = 10;food.r = rand() % 10 + 10;}else if (a == 3){snake1.speed = 30;snake1.r = 15;food.r = rand() % 10 + 15;}else if (a == 4){snake1.r = 10;snake1.speed = 20;snake2.r = 10;snake2.speed = 20;snake2.size = 3;snake2.director = LEFT;snake1.director = RIGHT;food.r = rand() % 10 + 10;for (int i = 0; i <= snake2.size - 1; i++){snake2.section[i].x = 10 * ((snake2.size - 1) - i) + 500;snake2.section[i].y = 20;}}else{printf("输入错误,请重新开始游戏");closegraph();}snake1.size = 3;snake1.director = RIGHT;for (int i = 0; i <= snake1.size - 1; i++){snake1.section[i].x = 10 * ((snake1.size - 1) - i) + 50;snake1.section[i].y = 20;}food.x = rand() % 600;food.y = rand() % 600;food.color = GREEN;food.flag = true;snake1.score = 0;snake2.score = 0;return 1;
}
void Drawgame(int a)
{char num[100]; char mun[100];int n = snake1.score; int m = snake2.score;BeginBatchDraw();//双缓冲setbkcolor(BLACK);cleardevice();if (a == 4){setfillcolor(RGB(255,99,71));for (int i = 0; i < snake2.size; i++){solidcircle(snake2.section[i].x, snake2.section[i].y, snake2.r);}settextcolor(RGB(255, 99, 71));settextstyle(40, 40, "黑体");sprintf(mun, "%d", m);outtextxy(1000, 400, mun);}setfillcolor(WHITE);for (int i = 0; i < snake1.size; i++){solidcircle(snake1.section[i].x, snake1.section[i].y, snake1.r);}setfillcolor(GREEN);if (food.flag){solidcircle(food.x, food.y, food.r);}for (int i = 0; i < 30; i++){settextcolor(BLUE);settextstyle(20, 20, "黑体");outtextxy(982, i * 20, "|");}settextcolor(WHITE);settextstyle(40, 40, "黑体");outtextxy(1000, 200, "得分:");sprintf(num, "%d", n);outtextxy(1000, 300, num);EndBatchDraw();
}
void snakemove(int a)
{if (a == 4){for (int i = snake2.size - 1; i > 0; i--){snake2.section[i] = snake2.section[i - 1];}switch (snake2.director){case RIGHT:snake2.section[0].x += snake2.speed;if (snake2.section[0].x + snake2.r >= 1000){k:settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto k;}break;case LEFT:snake2.section[0].x -= snake2.speed;if (snake2.section[0].x - snake2.r <= 0){m:settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto m;}break;case UP:snake2.section[0].y -= snake2.speed;if (snake2.section[0].y - snake2.r <= 0){s:settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto s;}break;case DOWN:snake2.section[0].y += snake2.speed;if (snake2.section[0].y - snake2.r >= 600){g:cleardevice;settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto g;}break;default:break;}}for (int i = snake1.size - 1; i > 0; i--){snake1.section[i] = snake1.section[i - 1];}switch (snake1.director){case RIGHT:snake1.section[0].x += snake1.speed;if (snake1.section[0].x + snake1.r >= 1000){K:settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto K;}break;case LEFT:snake1.section[0].x -= snake1.speed;if (snake1.section[0].x - snake1.r <= 0){P:settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto P;}break;case UP:snake1.section[0].y -= snake1.speed;if (snake1.section[0].y - snake1.r <= 0){G:settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto G;}break;case DOWN:snake1.section[0].y += snake1.speed;if (snake1.section[0].y - snake1.r >= 600){F:cleardevice;settextcolor(RED);settextstyle(40, 40, "黑体");outtextxy(100, 200, "你失败了,游戏结束");goto F;}break;default:break;}}
void KeyControl(int a)
{if (_kbhit()){switch (_getch()){case 'I':if (snake2.director != DOWN){snake2.director = UP;}break;case 'K':if (snake2.director != UP){snake2.director = DOWN;}break;case 'J':if (snake2.director != RIGHT){snake2.director = LEFT;}break;case 'L':if (snake2.director != LEFT){snake2.director = RIGHT;}break;case 'W':if (snake1.director != DOWN){snake1.director = UP;}break;case 'S':if (snake1.director != UP){snake1.director = DOWN;}break;case 'A':if (snake1.director != RIGHT){snake1.director = LEFT;}break;case 'D':if (snake1.director != LEFT){snake1.director = RIGHT;}break;case ' ':while (1){if (_getch() == ' ');return;}break;}}/*if (_kbhit()){switch (_getch()){case 'w':case 'W':case 72:if (snake1.director != DOWN){snake1.director = UP;}break;case 's':case 'S':case 80:if (snake1.director != UP){snake1.director = DOWN;}break;case 'a':case 'A':case 75:if (snake1.director != RIGHT){snake1.director = LEFT;}break;case 'd':case 'D':case 77:if (snake1.director != LEFT){snake1.director = RIGHT;}break;case ' ':while (1){if (_getch() == ' ');return;}break;}}*/
}
void Eatfood()
{int d = snake1.r;if (snake1.section[0].x - snake1.r - 1 >= food.x - food.r && snake1.section[0].x - snake1.r - 1 <= food.x + food.r && snake1.section[0].y - snake1.r - 1 <= food.y + food.r && snake1.section[0].y + snake1.r - 1 >= food.y - food.r){snake1.size++;food.flag = false;snake1.score++;}if (snake2.section[0].x - snake2.r - 1 >= food.x - food.r && snake2.section[0].x - snake2.r - 1 <= food.x + food.r && snake2.section[0].y - snake2.r - 1 <= food.y + food.r && snake2.section[0].y + snake2.r - 1 >= food.y - food.r){snake2.size++;food.flag = false;snake2.score++;}if (!food.flag){food.x = rand() % 800;food.y = rand() % 570 + snake1.r;food.color = GREEN;food.r = rand() % 10 + d;food.flag = true;}
}
main.cpp文件的代码为:
#include"game.h"
int main()
{int a;printf("请输入你想挑战的难度:\n");printf("1.简单\n");printf("2.普通\n");printf("3.困难\n");printf("4.双人模式\n");scanf_s("%d", &a);int c=Initgame(a); while (c){Drawgame(a);KeyControl(a);snakemove(a);Eatfood();Sleep(80);}return 0;
}
这样,就可以运行起了
简单模式下:

普通模式下:
困难模式下:
双人模式下:

注意:开始时需要将字母改为大写,其中白色的蛇的控制上下左右的按键为WSAD,空格为暂停。
控制另一条蛇的按键为IKJL,空格为暂停.
不同模式下蛇的大小和蛇行进速度不一样。
欢迎大家修改代码,让其变得更加有趣。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
