c语言 贪吃蛇 求大食物代码。ps:每吃四个食物随机出现一个加大分值的食物,与小食物同时存在。。

并要求大食物是在指定时间内显示的,过段时间自动没吃到就消失。。

第1个回答  2012-12-17
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
typedef struct snake
{
int a;
int b;
struct snake *u;
struct snake *n;
}snake,*snake1;
typedef struct food
{
int a;
int b;
}food;
int main()
{
char c,c0 = 'd';
int i,j,k,n=1,t,at;
snake p,q;
snake *dd,*dd0,*dd1,*dd2;
food f;
srand(time(NULL));
p.u = NULL;
p.n = &q;
p.a = 5;p.b = 6;q.a = 5;q.b = 5;
q.u = &p;q.n = NULL;
dd=dd2= &q;
f.a=(rand()%15+1);
f.b=(rand()%15+1);
while(1)
{
srand(time(NULL));
system("cls");
for(i = 0;i < 17;i ++)
{
for(j = 0; j < 17;j++)
{

if(i == 0 )
printf("▁");
else if(i == 16)
printf("▔");
else if(j == 0)
printf("▕");
else if(j == 16)
printf("▏");
else if(i == p.a && j == p.b)
printf("◆");
else if(i == f.a && j == f.b)
printf("☆");
else
{
t = 0;
dd = dd2;
for(k = 0; k < n ;k++)
{
if(i == dd->a && j == dd->b)
{
printf("¤");
t = 1;
break;
}

dd = dd->u;
}
if(t == 0)
printf(" ");
}

}printf("\n");
}
at = 0;
dd =dd2;
for(i=0;i<n;i++)
{
if(p.a == dd->a && p.b == dd->b)
{
printf("game over!!\n");
for (int iii=0;iii<1000;iii++) {};
exit(0);
}
dd = dd->u;
}
if(p.a == f.a && p.b == f.b)
{
dd = dd2;
at =1;
f.a = (rand()%15+1);
f.b = (rand()%15+1);
for(i=0;i<n;i++)
{
if(f.a == dd->a && f.b == dd->b)
{
f.a = dd2->a;
f.b = dd2->b;
break;
}
}
n++;
}
if(kbhit())
{
c = getch();
dd = dd2;
if(c == 'w' && c0 != 's')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
if(p.a == 1)
p.a = 15;
else
p.a = (p.a-1)%15;
}
else if(c == 's' && c0 != 'w')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
p.a = (p.a%15)+1;
}
else if(c == 'a' && c0 != 'd')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
if(p.b == 1)
p.b = 15;
else
p.b = (p.b-1)%15;
}
else if(c == 'd' && c0 != 'a')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
p.b = (p.b%15)+1;
}
else
{
goto qq;
}
c0 = c;
}
else
{
qq: if(c0 == 'w')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
if(p.a == 1)
p.a = 15;
else
p.a=(p.a-1)%15;
}
else if(c0 == 's')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
p.a=(p.a%15)+1;
}
else if(c0 == 'a')
{

if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
if(p.b == 1)
p.b = 15;
else
p.b=(p.b-1)%15;
}
else if(c0 == 'd')
{
if(at == 1)
{
dd0 =(snake1)malloc(sizeof(snake));
dd0->a = dd2->a;dd0->b = dd2->b;
dd0->n = NULL;dd0->u = dd2;
dd2=dd0;
}
dd = dd2;
for(i = 0; i<n ; i++)
{
dd1 = dd->u;
dd->b = dd1->b;
dd->a = dd1->a;
dd = dd->u;
}
p.b=(p.b%15)+1;

}
}
fflush(stdin);
dd = &q;
_sleep(0);
}
}
第2个回答  2012-12-16
思路:你把所有的食物放在一个结构数组或者链表中,结构中包含其存在时间,永久存在的小食物的存在时间可以设置为-1;大食物的存在时间可以设置为倒计时描述。然后每隔1秒钟就检查这个链表,更新时间值,到0 了就删掉。

ps.用C++类的话可能会更直观方便一些。追问

看不懂诶,有源代码吗???

本回答被网友采纳
第3个回答  2019-06-19
楼楼,你解决这个问题了吗,解决了可以帮帮我吗,谢谢啦

c语言 贪吃蛇 求大食物代码。ps:每吃四个食物随机出现一个加大分值的...
typedef struct snake { int a;int b;struct snake *u;struct snake *n;}snake,*snake1;typedef struct food { int a;int b;}food;int main(){ char c,c0 = 'd';int i,j,k,n=1,t,at;snake p,q;snake *dd,*dd0,*dd1,*dd2;food f;srand(time(NULL));p.u = NULL;p....

C语言课程设计,贪吃蛇应该怎么做?
贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。 2.2程序整体设计说明 一个游戏要有开始部分...

求c语言控制面板贪吃蛇源代码
Create_Food(); \/\/随机产生食物 for(i = 0; i < H; i++) \/\/地图显示 { for(j = 0; j < L; j++)printf("%c", GameMap[i][j]);printf("\\n");} printf("\\n小小C语言贪吃蛇\\n");printf("按任意方向键开始游戏\\n");getch(); \/\/先接受一个按键,使蛇开始往该方...

贪吃蛇c语言代码
if(food.yes==1)\/*需要出现新食物*\/

c语言贪吃蛇代码
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; ...

C语言C++图形库---贪吃蛇大作战【附源码】
创建食物,定义函数createFood,随机生成食物位置,确保不与蛇的任何节点重合。主函数中,调用此函数并在界面显示食物。实现吃掉食物后蛇长大逻辑,在snakeMove函数中判断蛇头与食物重合,若重合则蛇长度加1,并重新生成食物。检查游戏结束条件,若蛇头触及窗体边界或吃掉自身,游戏结束。定义函数isGameOver,主...

求贪吃蛇C语言代码,有一定功能要求
\/*游戏速度自己调整*\/struct Food{ int x;\/*食物的横坐标*\/ int y;\/*食物的纵坐标*\/ int yes;\/*判断是否要出现食物的变量*\/}food;\/*食物的结构体*\/struct Snake{ int x[N]; int y[N]; int node;\/*蛇的节数*\/ int direction;\/*蛇移动方向*\/ int life;\/...

求C语言贪吃蛇代码能在DEV上运行通过的贪吃蛇,不要TC上的啊我们老师上课...
void createfood()\/\/随机出现食物{ snake *food_1; srand((unsigned)time(NULL)); food_1=(snake*)malloc(sizeof(snake)); while((food_1->x%2)!=0) { \/\/保证其为偶数,使得食物能与蛇头对其 food_1->x=rand()%52+2; } food_1->y=rand()%24+1; q=head; while(q->next==NULL) { if...

c语言小游戏代码
void putFod( ) \/\/投放食物 { if (Flag == 1) \/\/如吃到食物才执行以下操作,生成另一个食物 { while (1) { int i,n= 1; srand((unsigned)time(NULL)); \/\/初始化随机数发生器srand( ) fod.x = rand( ) % (W - 4) + 2; \/\/产生在游戏框范围内的一个x坐标值 fod.y = rand( ) % ...

c语言实训贪吃蛇报告书
通过随机函数产生随机数,控制游戏过程食物的出现.定义键盘操作,控制游戏过程蛇的移动方向.画出边界,并判断游戏是否结束.统计游戏过程蛇吃的食物数量,计算并输出游戏成绩.(4)调试过程: 测试数据及结果,出现了哪些问题,如何修改的 这里,你就写一下你平时出错的地方,与如何修改的.这里我也不好帮你写....

相似回答