c语言贪吃蛇代码
基本思路:蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。#include #include #include #define BEG_X 2 #define BEG_Y 1 #define WID 20 #define HEI 20 HANDLE hout;typedef enum {UP, DOWN, LEFT, RIGHT} DIR;typedef struct Snake_body{COORD pos;//蛇身的位置struct Snake_body *next;//下一个蛇身struct Snake_body *prev;//前一个蛇身}SNAKE, *PSNAKE;PSNAKE head = NULL;//蛇头PSNAKE tail = NULL;//蛇尾//画游戏边框的函数void DrawBorder(){int i, j;COORD pos = {BEG_X, BEG_Y};for(i = 0; i < HEI; ++i){SetConsoleCursorPosition(hout, pos);for(j = 0; j < WID; ++j){if(i == 0)//第一行{if(j == 0)printf("┏");else if(j == WID - 1)printf("┓");elseprintf("━");}else if(i == HEI - 1)//最后一行{if(j == 0)printf("┗");else if(j == WID - 1)printf("┛");elseprintf("━");}else if(j == 0 || j == WID - 1)//第一列或最后一列printf("┃");elseprintf(" ");}++pos.Y;}}//添加蛇身的函数void AddBody(COORD pos){PSNAKE pnew = (PSNAKE)calloc(1, sizeof(SNAKE));pnew->pos = pos;if(!head){head = tail = pnew;}else{pnew->next = head;//新创建蛇身的next指向原先的蛇头head->prev = pnew;//原先的蛇头的prev指向新创建的蛇身head = pnew;//把新创建的蛇身作为新的蛇头}SetConsoleCursorPosition(hout, head->pos);printf("◎");}//蛇身移动的函数void MoveBody(DIR dir){PSNAKE ptmp;COORD pos = head->pos;switch(dir){case UP:if(head->pos.Y > BEG_Y + 1)--pos.Y;elsereturn;break;case DOWN:if(head->pos.Y < BEG_Y + HEI - 2)++pos.Y;elsereturn;break;case LEFT:if(head->pos.X > BEG_X + 2)pos.X -= 2;elsereturn;break;case RIGHT:if(head->pos.X < BEG_X + (WID - 2) * 2)pos.X += 2;elsereturn;break;}AddBody(pos);//添加了一个新的蛇头ptmp = tail;//保存当前的蛇尾tail = tail->prev;if(tail)tail->next = NULL;SetConsoleCursorPosition(hout, ptmp->pos);printf(" ");free(ptmp);}int main(){int ctrl;DIR dir = RIGHT;//初始蛇的方向是向右的COORD pos = {BEG_X + 2, BEG_Y + HEI / 2};system("color 0E");system("mode con cols=90 lines=30");hout = GetStdHandle(STD_OUTPUT_HANDLE);printf(" ------------贪吃蛇的移动------------");DrawBorder();//自定义几个蛇的身体AddBody(pos);pos.X += 2;AddBody(pos);pos.X += 2;AddBody(pos);pos.X += 2;AddBody(pos);pos.X += 2;AddBody(pos);pos.X += 2;AddBody(pos);pos.X += 2;AddBody(pos);//控制蛇的移动while(ctrl = getch()){switch(ctrl){case 'w':if(dir == DOWN)continue;dir = UP;break;case 's':if(dir == UP)continue;dir = DOWN;break;case 'a':if(dir == RIGHT)continue;dir = LEFT;break;case 'd':if(dir == LEFT)continue;dir = RIGHT;break;case 'q':return 0;}MoveBody(dir);}return 0;}扩展资料:实现逻辑1,可以设置光标,就能实现制定位置打印制定符号。2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。5,食物产生的位置判定,不能越界,也不能与蛇身体重合。6,蛇的转向判定,一条规则,不允许倒退。7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。9,加速减速,设置刷新休眠时间实现。参考资料来源:百度百科-C语言
慢慢看吧然后修改程序。 #define N 200#include #include #include #define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/struct Food{int x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{int x[N];int y[N];int node;/*蛇的节数*/int direction;/*蛇移动方向*/int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*//*主函数*/void main(void){Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/void Init(void){int gd=DETECT,gm;initgraph(&gd,&gm,"c:\tc");cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/for(i=50;i<=600;i+=10)/*画围墙*/{rectangle(i,40,i+10,49); /*上边*/rectangle(i,451,i+10,460);/*下边*/}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10); /*左边*/rectangle(601,i,610,i+10);/*右边*/}}/*玩游戏具体过程*/void GamePlay(void){randomize();/*随机数发生器*/food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/snake.life=0;/*活着*/snake.direction=1;/*方向往右*/snake.x[0]=100;snake.y[0]=100;/*蛇头*/snake.x[1]=110;snake.y[1]=100;snake.node=2;/*节数*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food.yes==1)/*需要出现新食物*/{food.x=rand()()%400+60;food.y=rand()()%350+60;while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/food.x++;while(food.y%10!=0)food.y++;food.yes=0;/*画面上有食物了*/}if(food.yes==0)/*画面上有食物了就要显示*/{setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/switch(snake.direction){case 1:snake.x[0]+=10;break;case 2: snake.x[0]-=10;break;case 3: snake.y[0]-=10;break;case 4: snake.y[0]+=10;break;}for(i=3;i595||snake.y[0]<55||snake.y[0]>455)/*蛇是否撞到墙壁*/{GameOver();/*本次游戏结束*/snake.life=1; /*蛇死*/}if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/{setcolor(0);/*把画面上的食物东西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node++;/*蛇的身体长一节*/food.yes=1;/*画面上需要出现新的食物*/score+=10;PrScore();/*输出新得分*/}setcolor(4);/*画出蛇*/for(i=0;i

求c语言的贪吃蛇的代码 能运行的
// ConsoleApplication1.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #define frame_height 20 //define map size#define frame_width 40#define UP 'w' //define operate key#define DOWN 's'#define LEFT 'a'#define RIGHT 'd'int i, j, k;char ch = UP; //initial directionint grow = 0; //flag: if snake growstruct Food { int x; int y;}food;struct Snake { int x[50]; int y[50]; int len; int speed;}snake; //snake[0] is headvoid init_map(void);void update_food(void);void move_snake(void);int is_alive(void);void get_speed(void);void gotoxy(int x, int y);int main(){ init_map(); //初始化地图 while (1) { update_food(); //是否产生食物 get_speed(); //获取速度 move_snake(); //移动蛇身 Sleep(snake.speed); //移动速度 if (!(is_alive())) //蛇的死活(撞墙或自食) break; } printf("Game Over!"); _getch(); return 0;}//initializevoid init_map(void){ //initial food srand(time(NULL)); food.x = rand() % (frame_height - 2) + 1; food.y = rand() % (frame_width - 2) + 1; gotoxy(food.x, food.y); printf("!"); //initial snake snake.x[0] = frame_height / 2; snake.y[0] = frame_width / 2; gotoxy(snake.x[0], snake.y[0]); printf("@"); snake.len = 3; snake.speed = 200; for (k = 1; k0; k--) { snake.x[k] = snake.x[k - 1]; snake.y[k] = snake.y[k - 1]; } switch (ch) { case UP: snake.x[0]--; break; case DOWN: snake.x[0]++; break; case LEFT: snake.y[0]--; break; case RIGHT: snake.y[0]++; break; default: break; } gotoxy(snake.x[0], snake.y[0]); printf("@"); grow = 0; gotoxy(frame_height, 0);}//is aliveint is_alive(void){ if (snake.x[0] == 0 || snake.x[0] == frame_height - 1 || snake.y[0] == frame_width - 1 || snake.y[0] == 0) return 0; for (k = 1; k

贪吃蛇代码
TC下的代码 #include #include#include #include #include "graphics.h"#includetypedef struct{int x;int y;}node;struct{node info[40];int length;}snake;charlight[60][48];void main(){int search(int m,int n);void Light(int m,int n,int color);int settle(int key);char met=1;int i,j,direction,key1,key2=0,rm,rn;int driver=DETECT,mode=0;initgraph(&driver,&mode," ");setcolor(10);rectangle(0,0,580,450);snake.length=3;for(i=0;i<60;i++)for(j=0;j<48;j++)light[i][j]=0;snake.info[0].x=32;snake.info[1].x=32;snake.info[2].x=32;snake.info[0].y=24;snake.info[1].y=25;snake.info[2].y=26;for(i=0;i<3;i++)Light(snake.info[i].x,snake.info[i].y,8);do{if(met==1){do{rm=random(57);rn=random(44);met=0;}while(search(rm,rn));}Light(rm,rn,10);if(!bioskey(1)){key1=key2;}else{key1=bioskey(0);if((key2==0x4b00&&key1==0x4d00)||(key1==0x4b00&&key2==0x4d00)||(key1==0x4800&&key2==0x5000)||(key1==0x5000&&key2==0x4800)||(key1==0x5000&&key2==0))key1=key2;elsekey2=key1;}if(key1) met=settle(key1);if(met==2)return;for(i=0;i0;i--){snake.info[i].x=snake.info[i-1].x;snake.info[i].y=snake.info[i-1].y;}switch(key){case0x4800:snake.info[i].y--;break;case0x5000:snake.info[i].y++;break;case0x4b00:snake.info[i].x--;break;case0x4d00:snake.info[i].x++;break;}if(light[snake.info[i].x][snake.info[i].y]==1){snake.length++;snake.info[snake.length-1].x=rx;snake.info[snake.length-1].y=ry;Light(snake.info[i].x,snake.info[i].y,0);return(1);}if(snake.info[i].x>58||snake.info[i].y>44||snake.info[i].x<0||snake.info[i].y<0||light[snake.info[i].x][snake.info[i].y]==2){return(2);}Light(rx,ry,0);return(0);}
邮箱》
呵呵,没得,上网上搜,应该不难找
无法回答。

贪吃蛇的代码,在文本文档打开就可以
#include #include#include#include#include#define N 21void gotoxy(int x,int y)//位置函数{COORD pos;pos.X=2*x;pos.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}void color(int a)//颜色函数{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果){int i,j;//初始化围墙int wall[N+2][N+2]={{0}};for(i=1;i<=N;i++){for(j=1;j<=N;j++)wall[i][j]=1;}color(11);for(i=0;i0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];gotoxy(snake[i][0],snake[i][1]);color(14);cout<<"★"<

贪吃蛇cmd代码
在命令提示符下cd到C++代码link生成的exe文件所在的debug目录,然后直接输入exe文件名比如说,你的cpp文件路径为D:...example.cpp,那么你在命令提示符下输入d:回车cd d:...debug回车example回车这样就可以了

本文由 在线网速测试 整理编辑,转载请注明出处。