地图网站制作百度淘宝网
news/
2025/10/5 3:55:42/
文章来源:
地图网站制作,百度淘宝网,wordpress support hls player,wordpress代码执行本文实例为大家分享了C实现贪吃蛇游戏的具体代码#xff0c;供大家参考#xff0c;具体内容如下刚学完了C语言#xff0c;便尝试的写了贪吃蛇的代码#xff0c;但是效果不佳#xff0c;很多的bug#xff0c;所以#xff0c;这个学了C#xff0c;便重新的写了这个小游戏…本文实例为大家分享了C实现贪吃蛇游戏的具体代码供大家参考具体内容如下刚学完了C语言便尝试的写了贪吃蛇的代码但是效果不佳很多的bug所以这个学了C便重新的写了这个小游戏用类来封装先是头文件struct Snake{int x, y;};class snake{public:snake() //构造函数{length 3;s[2].x 10;s[2].y 10;s[1].x 9;s[1].y 10;s[0].x 8;s[0].y 10;up right left down 0;}~snake(){}void display(); //显示蛇身函数void Rightmove(); //右移函数void Leftmove(); //左移函数void Upmove(); //上移函数void Downmove(); //下移函数int cheak(); //检查是否撞墙或撞到自身void creat_food(); //产生食物int eat_food(); //吃食物private:struct Snake s[100]; //先定义蛇身最长100int length; //当前蛇长度int x3, y3; //食物坐标int up, down, right, left; //蛇的状态是上移还是下移或...};void make_frame(); //打印框架的函数void show(); //游戏开始倒计时函数void gameover(); //游戏结束函数下面是各个函数的实现的cpp文件# include # include # include # include snake.h# define MaxLen 20# define MaxWen 30using namespace std;HANDLE hOut GetStdHandle(STD_OUTPUT_HANDLE); //获取句柄void gotoxy(HANDLE hOut, int x, int y) //输出位置的函数{COORD pos;pos.X x;pos.Y y;SetConsoleCursorPosition(hOut, pos);}void snake::display() //打印蛇身{for (int i length - 1; i 0; i--){if (i length - 1) //打印蛇头{gotoxy(hOut, s[i].x, s[i].y);cout char(15);}else //打印蛇身{gotoxy(hOut, s[i].x, s[i].y);cout *;}}gotoxy(hOut, 0, 22);}void snake::Rightmove() //右移{right 1; up down left 0;int x1, x2, y1, y2;x1 x2 s[length - 1].x;y1 y2 s[length - 1].y;s[length - 1].x; //蛇头x坐标自增for (int i length - 2; i 0; i--) //除了蛇头其他的结点都等于它的上一个结点的坐标{x2 s[i].x; y2 s[i].y;s[i].x x1; s[i].y y1;x1 x2; y1 y2;}gotoxy(hOut, x2, y2); //消除蛇移动遗留的 ‘*cout ;}void snake::Leftmove() //左移{left 1; right up down 0;int x1, x2, y1, y2;x1 x2 s[length - 1].x;y1 y2 s[length - 1].y;s[length - 1].x--; //同上for (int i length - 2; i 0; i--){x2 s[i].x; y2 s[i].y;s[i].x x1; s[i].y y1;x1 x2; y1 y2;}gotoxy(hOut, x2, y2); //同上cout ;}void snake::Downmove() //下移{down 1; right up left 0;int x1, x2, y1, y2;x1 x2 s[length - 1].x;y1 y2 s[length - 1].y;s[length - 1].y; //同上for (int i length - 2; i 0; i--){x2 s[i].x; y2 s[i].y;s[i].x x1; s[i].y y1;x1 x2; y1 y2;}gotoxy(hOut, x2, y2); //同上cout ;}void snake::Upmove() //上移{up 1; down right left 0;int x1, x2, y1, y2;x1 x2 s[length - 1].x;y1 y2 s[length - 1].y;s[length - 1].y--; //同上for (int i length - 2; i 0; i--){x2 s[i].x; y2 s[i].y;s[i].x x1; s[i].y y1;x1 x2; y1 y2;}gotoxy(hOut, x2, y2); //同上cout ;}int snake::cheak(){int flag 0;for (int i length - 2; i 0; i--) //是否撞到自身{if (s[i].x s[length - 1].x s[i].y s[length - 1].y){flag 1; //是标识符为1break;}}if (flag 1 || (s[length - 1].x 30 1 || s[length - 1].x 4) || (s[length - 1].y 1 || s[length - 1].y 20)){return 0; //检测是否撞自身或者撞墙}else{return 1;}}void snake::creat_food() //产生食物坐标{xy: x3 (rand() % (25)) 3;y3 (rand() % (17)) 2;for (int i length - 1; i 0; i--) //检查食物是否在蛇身上{if (s[i].x x3 s[i].y y3) //是就重新产生食物坐标goto xy;}gotoxy(hOut, x3, y3); //显示食物cout *;}int snake::eat_food(){if (s[length - 1].x x3 s[length - 1].y y3) //蛇头碰到食物{if (up 1) //如果蛇是在上移增加一个结点为蛇头的上一个结点{s[length].x x3;s[length].y y3 - 1;}else if (down 1) //同上{s[length].x x3;s[length].y y3 1;}else if (right 1) //同上{s[length].x x3 1;s[length].y y3;}else if (left 1) //同上{s[length].x x3 - 1;s[length].y y3;}length; //蛇长加1return 1;}elsereturn 0;}void make_frame() //打印框架函数{cout 贪吃蛇游戏 endl;gotoxy(hOut, 2, 1);cout ╔;for (int i 4; i 2 MaxWen; i){gotoxy(hOut, i, 1);printf();}for (int i 2; i MaxLen; i){gotoxy(hOut, 2, i);printf(║);}gotoxy(hOut, 2 MaxWen, 1);printf(╗);for (int i 2; i MaxLen; i){gotoxy(hOut, 2 MaxWen, i);printf(║);}gotoxy(hOut, 2, MaxLen);printf(╚);gotoxy(hOut, 2 MaxWen, MaxLen);printf(╝);for (int i 4; i 2 MaxWen; i){gotoxy(hOut, i, MaxLen);printf();}}void show() //显示操作方法和游戏开始倒计时{gotoxy(hOut, 35, 5);cout ↑: w;gotoxy(hOut, 35, 6);cout ←: a;gotoxy(hOut, 35, 7);cout ↓: s;gotoxy(hOut, 35, 8);cout →: d;gotoxy(hOut, 16, 5);cout 3;Sleep(1000);gotoxy(hOut, 16, 5);cout 2;Sleep(1000);gotoxy(hOut, 16, 5);cout 1;Sleep(1000);gotoxy(hOut, 16, 5);cout ;}void gameover() //游戏结束函数{system(cls);system(color 3B);gotoxy(hOut, 14, 5);cout GAME OVER!;gotoxy(hOut, 14, 6);cout PLAY AGAIN ? Y(yes) \ N(no);}主函数的cpp文件# include # include # include # include snake.husing namespace std;char ch;int main(){while (1){snake sn; //声明对象system(cls); //清屏system(color 3B); //背景和字体颜色调整make_frame(); //打印框架sn.display(); //显示蛇show(); //游戏开始sn.creat_food(); //产生食物while (sn.cheak()) //检查是否死亡{sn.Rightmove(); //右移sn.display(); //显示蛇身if (sn.eat_food()) //检查是否吃到食物{sn.creat_food(); //重新产生食物sn.display();}Sleep(500); //等待500Msp: if (_kbhit()) //是否有按键{ch _getch();if (ch 97 || ch 100)goto p;if (ch 115 || ch 119)break;}}pp: switch (ch) //有按键{case 119: //上移的情况{while (sn.cheak()){sn.Upmove();sn.display();if (sn.eat_food()){sn.creat_food();sn.display();Sleep(300);}Sleep(500);pw: if (_kbhit()){ch _getch();if (ch 119 || ch 115)goto pw;if (ch 97 || ch 100)goto pp;}}}break;case 97: //左移的情况{while (sn.cheak()){sn.Leftmove();sn.display();if (sn.eat_food()){sn.creat_food();sn.display();}Sleep(500);pa: if (_kbhit()){ch _getch();if (ch 97 || ch 100)goto pa;if (ch 115 || ch 119)goto pp;}}}break;case 115: //下移的情况{while (sn.cheak()){sn.Downmove();sn.display();if (sn.eat_food()){sn.creat_food();sn.display();Sleep(300);}Sleep(500);ps: if (_kbhit()){ch _getch();if (ch 115 || ch 119)goto ps;if (ch 97 || ch 100)goto pp;}}}break;case 100: //右移的情况{while (sn.cheak()){sn.Rightmove();sn.display();if (sn.eat_food()){sn.creat_food();sn.display();}Sleep(500);pd: if (_kbhit()){ch _getch();if (ch 100 || ch 97)goto pd;if (ch 119 || ch 115)goto pp;}}}break;default:break;}gameover(); //显示游戏结束是否重玩py: ch _getch();if (ch 110) //否{system(cls);break;}else if (ch 121) //是continue;elsegoto py;}return 0;}下面是游戏的截图控制台的实现不是很美观主要是由于上下和左右的间隙不一样大所以看起来不是很好看但总体还是实现了贪吃蛇关于C小游戏的更多精彩内容请点击专题 《C经典小游戏》 学习了解以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927840.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!