在c语言中,写一个贪吃蛇程序,请问贪吃蛇的自动移动函数怎么写

作者&投稿:殷勤菡 (若有异议请与网页底部的电邮联系)
c语言用vc编写的贪吃蛇怎么实现未点击按键时,按原来方向自动移动。~

# include# include# include# include# include//#define KEYCODE//#define TESTSNAKE#define maxx 23#define maxy 38typedef struct Snake //定义蛇结构体{ int x; int y; struct Snake *next;}snake;snake *head = NULL; //初始化头尾指针snake *tail = NULL;snake *egg = NULL;vx = 1;vy = 0;int speed=5;void checkkey();void Pos(); //设置光标函数void Startgame(); //游戏开始void Gamecircle(); //游戏循环void Creatmap(); //创建地图void Inisnake(); //初始化蛇身void Printsnake(); //打印蛇void Snakemove(); //蛇移动void Deletetail(); //去头void Dessnake();int newegg();void printegg();int eategg();void main(){ #ifdef KEYCODE checkkey(); #endif Startgame(); Gamecircle(); Dessnake(); Pos(maxx+2,4); system("pause");}void Pos(int y,int x) //设置控制台光标位置{ HANDLE hOutput; //建立一个句柄 COORD pos; //定义光标位置 pos.X=xnext) if(t==0xcdcdcdcd) { printf("数据完整性破坏
系统将退出");t=0; }}void Gamecircle(){int ch,tick=1; while(1) { Sleep(25); if(kbhit()){ ch=getch(); if(ch==27) break; // ESC键退出 if(ch==224) ch=getch(); else continue; switch(ch){ case 72 : {if(vy==0) vy = -1; vx = 0; break;} // ↑ case 80 : {if(vy==0) vy = 1; vx = 0; break;} // ↓ case 77 : {if(vx==0) vx = 1; vy = 0; break;} // ← case 75 : {if(vx==0) vx = -1; vy = 0; break;} // → case 141: {if(speed > 1 ) speed--; break;} // Ctrl+↑为加速, case 145: {if(speed x = 12; pTemp->y = 5; if (NULL == head) //节点接入链表 { head = pTemp; tail = pTemp; } for (i =1;ix = 12+i; pTemp->y = 5; head->next = pTemp; head = pTemp; } head->next = NULL; // 最后一个节点next置空}void Dessnake() //初始化蛇身(尾添加){ snake * t; while(tail!=NULL) // 还有节点 { t=tail->next; free(tail); tail =t; } if(egg) free(egg);}void Printsnake() //输出蛇{ snake *pTempPrint = tail; while(pTempPrint != NULL) { Pos(pTempPrint->x,pTempPrint->y); printf("■"); pTempPrint = pTempPrint->next; }}void Snakemove() //蛇前进(添新头去尾){ snake * Newhead; int x = head->x, y = head->y; int delt=0; if( vx ){ y += vx; if (y > maxy ) { delt = y - maxy ; y = maxy; } if ( y maxx/2)? -vx:vx); x += ((x>maxx/2)? -delt : delt); vx = 0; } } else{ x += vy; if (x > maxx ) { delt = x - maxx ; x = maxx; } if ( x maxy/2)? -vy:vy); y += ((y>maxy/2)? -delt : delt); vy = 0; } } Newhead = (snake *)malloc(sizeof(snake)); //添加新尾 Newhead->x = x; Newhead->y = y ; Newhead->next = NULL; head->next = Newhead; //先连后断 head = Newhead;}void printegg(){ Pos(egg->x,egg->y); printf("■");}int newegg(){ snake * t; int i; if(!(egg = (snake *)malloc(sizeof(snake)))) return 0; for(i=0;ix = rand()%maxx+1; egg->y = rand()%maxy+1; for(t=tail;t;t=t->next) if(t->x == egg->x && t->y == egg->y) break; if(!t) break; } if(i>=10000) return 0; egg->next = NULL; printegg(); return 1;}int eategg(){ int x=head->x,y=head->y; if((x+vy==egg->x) && (y+vx==egg->y)) { head->next = egg; head = egg; newegg(); return 1; } else return 0;}void Deletetail() //去尾{ snake *p,*p1,*p2; p1 = tail; // p2 = NULL; p2 = p1->next; //p2得到倒数第二节的地址 Pos(p1->x,p1->y); printf(" "); //尾节点用空格代替 free(p1); //释放尾节点 tail = p2; //尾指针挪到倒数第二节 p = head; //输出蛇身 while(p2->next != NULL) p2 = p2->next; Pos(p2->x,p2->y); printf("■"); }void checkkey(){ int ch; printf("键盘键码测试,ESC退出...
"); while(1) { if(kbhit()){ ch=getch(); if(ch==27) break; // ESC键退出 if(ch==224) {printf("%d",ch); ch=getch(); }else continue; printf("%d
",ch); } }}上面是一个部分实现的贪吃蛇,里面就通过延时等待,实现了自动的移动。主要在void Gamecircle()函数中。
如还有问题,请追问

只要记住一点,只有蛇头才会每次赋予新的坐标,之后的身体都是copy前一个节点的坐标,链表结构里应该有x,y坐标信息,我以前就是这么做的,可行

自动移动可以通过定时器实现。
每个定时周期蛇头往移动方向移动一个位置,比如往左,x减一。后面的蛇身移动到前一个之前的位置。


C语言 贪心算法求背包问题
是你的冒泡排序出了问题~你吧 原来的1-2-3号按照东西的价值重新排列现在的1-2-3对应原来的2-1-3了 所以 你输出的时候是按 1-2-3输出的话 就等于第一个是原来的X2 第二个是X1第三个是X3 而且你的冒泡排序用错了 只比较了 P[0]\/K[0]和P[1]\/K[1] P[1]\/K[1]和P[2]\/K[2...

c语言小游戏代码
color = rand()%15 + 1; \/\/rand()函数是产生随机数的一个随机函数。C语言里还有 srand()函数等。\/\/头文件:stdlib.h if(color == 14) color -= rand() % 13 + 1; \/\/变色 SetColor(color); gotoxy(ix*2, iy); printf("■"); } if(Snake[ix][iy] == Snake_Len) { gotoxy(ix*2, ...

C语言结构体运用?
您好,已根据您的要求贴出代码。说明:× 不知什么原因代码无法直接粘贴上来,只能发图片,尽请谅解。× 成绩字段中,贪方便采用了 正整数 数据类型,当然您有小数要求也可以改成小数型。× 第三步的循环操作其实是等价与 5个变量相加的 代码第一部分 代码第二部分 运行程序测试 ...

c语言贪心算法的问题
内容我没看 但是你最后是不是多了一个endl?cout<<endl<<"Number of fish expected:"<<' '<<maxn<<endl;

c语言计算
计算顺序确实是:c=(--a)+(--a)+(a++);以a=10为例:第一个(--a)之后,a=9,c=9;第二个(--a)之后,a=8,c=9+8=17;最后加上(a++),先算c=17+a=25,a再自加,所以a=9

C语言题求解啊,,,完全没思路TT
。。这题明显是基础贪心。。。你学了几年的编程。。以下给出思路:因为他可选择的是连续的,所以可以得到贪心策略:f[i]=max(f[i-1],0)+a[i],其中f[i]表示从第1道菜到第i道菜所获得的最大愉快度。注意:别以为这是DP,它其实就是贪心!因为这题的普遍无后效性,所以贪心也可以对。如...

C语言基础知识总结大全
在C语言中,是没有办法直接定义子字符串数据类型的,需使用数组来定义所要的字符串,形式如下: char 字符串名称[长度] = "字符串内容"; char 字符串名称[长度] = {'字符串1','字符串2',...,'字符串n','\\0'}; 注: []中的长度可以省略不写; 采用第二种方式最后一个元素必须是'\\0',表示结束; 第...

C语言中prime的作用
prime的作用就是判断一个数是否为素数(也称“质数”)。例如:include <stdio.h> int IsPrime(int n){ if (n <= 1) return 0;if (n % 2 == 0) return n == 2;for (int i = 3; ; i += 2){ if (i > n\/i) break; \/\/ 等价于 i*i > n, 不用开方 if (n % i =...

C语言基础知识总结大全
字符串与数组在C语言中,是没有办法直接定义子字符串数据类型的,需使用数组来定义所要的字符串,形式如下: char字符串名称[长度]=“字符串内容”。 char字符串名称[长度]={'字符串1','字符串2','字符串n','\\0'}。 注:中的长度可以省略不写。 采用第二种方式最后一个元素必须是'\\0',表示结束。 第二种...

C语言while(x<=3)x++,y=x+++x;
y=x+++x;就是下面两的意思:y=x+x;x=x+1;C编译器在解释表达式操作符时遵循“贪心法”,即将变量后的符号最多地与该变量结合组成一个能正确解释的表达。尽管将y=x+++x;视为y=x+(++x);也能正确解释,但不符合“贪心法”规则,所以是错误的。

凤凰县17793599359: 用C语言编写贪吃蛇游戏的程序 -
朱邰腹膜: 回答:Mr.emily 大师 6月3日 16:45 #define N 200 #include<graphics.h> #include<stdlib.h> #include<dos.h> #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define Esc 0x011b int i,key; int score=0; int ...

凤凰县17793599359: 求用c语言编写的贪吃蛇程序 -
朱邰腹膜: #include <stdio.h> #include <graphics.h> #include <stdlib.h> #include <dos.h> /*引用的库函数*/ #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b/*宏定义键名*/ #define N 200 int i,key; ...

凤凰县17793599359: 用c语言编写的贪食蛇游戏 -
朱邰腹膜: 这是一个成功的贪吃蛇代码(c语言编写的),希望你能看懂!慢慢看: #define N 200 #include <graphics.h> #include <stdlib.h> #include <dos.h> #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ...

凤凰县17793599359: C语言的贪吃蛇源代码 -
朱邰腹膜: //******友情提示:如想速度快点,请改小_sleep(500)函数中参数***** #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <time.h> const int H = 8; //地图的高 const int L = 16; //地图的长 char GameMap[H][L]; ...

凤凰县17793599359: 求贪吃蛇C语言代码 -
朱邰腹膜: #define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b int i,key; int score=0;/*得分*/ int gamespeed=50000;/*游戏速...

凤凰县17793599359: c语言 贪吃蛇 程序 -
朱邰腹膜: /* 贪吃蛇程序 by champking */#define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b int i,key; int score = 0;/*得分*/ int ...

凤凰县17793599359: C语言可以编写贪吃蛇游戏吗? -
朱邰腹膜: 当然可以边游戏了,汉字可以用点阵显示,如果是windows c 的话显示汉字就更简单了!游戏窗体可以用windows c 编程实现! 给你一个贪吃蛇的游戏吧,在tc 下编译成功!可以q聊:969370950#include #include #include #include ...

凤凰县17793599359: 跪求用c语言设计贪吃蛇软件的详解,急需!!!!!! -
朱邰腹膜: 贪吃蛇游戏c程序代码#define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b int i,key; int score=0;/*得分*/ int ...

凤凰县17793599359: 贪吃蛇游戏用C语言怎么编写
朱邰腹膜: 在内存中定义一个数组,存储当前局面(如果棋盘小(<15)可以选用unsigned char类型,否则用int,蛇身就用1,2,3,4,5这样的数字序列表示,每走一格,根据当前方向将下一格数字变一下,把尾巴也处理一下,),每一秒刷新一下(向前走一格),每刷新一下,就重绘一遍当前局面(可以用prinrf函数,也可以用绘图函数), 总之方法很多很多,自己下来可以思索一下

凤凰县17793599359: C语言编写贪吃蛇需要用哪些函数?? -
朱邰腹膜: #include <graphics.h> #include <stdlib.h> #include <dos.h> /*引用的库函数*/ #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b/*宏定义键名*/ #define N 200 int i,key; int level;/*游戏等...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网