如何用C语言写贪吃蛇
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<window...
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <time.h>
#include <math.h>
#define H 25
#define W 40
void map();
int move(struct snake * p);
void key(char key, int * direction);
struct snake//蛇的结构体
{
int * x, * y;
int joint;//蛇的长度
int direction;//蛇的方向
int life;
}play;
void gotoxy(int x, int y)
{
COORD c;
c.X = 2 * x, c.Y = y; //本游戏只使用双字节符号
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void main()
{
int i,j;
struct snake * p;
p=(struct snake *)malloc(sizeof(struct snake));
p->x=(int *)malloc(sizeof(int));
p->y=(int *)malloc(sizeof(int));
p->x[0] = 15;
p->y[0] = 12;
p->x[1] = 15;
p->y[1] = 13;
p->x[2] = 15;
p->y[2] = 14;
p->x[3] = 15;
p->y[3] = 15;
p->direction=1;
p->joint=4;
printf("%d %d %d %d ",p->x[0],p->y[0],p->direction);
char ch;
while(1)
{
if(kbhit())
{
ch = getch();
key(ch,&p->direction);
p->joint++;//在这里我想测试下蛇的长度是否会增加
}
move(p);
Sleep(200);
}
getch();
}
void key(char key, int * direction)
{
if(key == 'w'&& (*direction)!=2)
(*direction)=1;
else if(key == 's'&& (*direction)!=1)
(*direction)=2;
else if(key == 'a'&& (*direction)!=4)
(*direction)=3;
else if(key == 'd'&& (*direction)!=3)
(*direction)=4;
}
int move(struct snake * p)
{
int i;
int food = 0;
if(p->direction == 1)
p->y[0]=p->y[0]-1;
else if(p->direction == 2)
p->y[0]=p->y[0]+1;
else if(p->direction == 3)
p->x[0]=p->x[0]-1;
else if(p->direction == 4)
p->x[0]=p->x[0]+1;
p->x[p->joint] = p->x[p->joint-1];
p->y[p->joint] = p->y[p->joint-1];
gotoxy(p->x[p->joint],p->y[p->joint]);
printf(" ");
for(i = (p->joint-1);i > 0;--i)
{
p->x[i] = p->x[i-1];
p->y[i] = p->y[i-1];
}
gotoxy(p->x[i],p->y[i]);
printf("■");
return 0;
}
我定义了蛇的长度是4,但是显示出来的蛇长度只有3、这个问题要怎么解决、
对于迟到食物蛇的长度就增加、这个要怎么实现、我原本只是通过改变长度来解决,但是在运行的时候蛇刚开始的时候可以正常增加长度,但是到达一定长度就会出现问题
不要一来就复制一堆代码让我看、我要的是帮我找出这个程序的错误并修正 展开
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <time.h>
#include <math.h>
#define H 25
#define W 40
void map();
int move(struct snake * p);
void key(char key, int * direction);
struct snake//蛇的结构体
{
int * x, * y;
int joint;//蛇的长度
int direction;//蛇的方向
int life;
}play;
void gotoxy(int x, int y)
{
COORD c;
c.X = 2 * x, c.Y = y; //本游戏只使用双字节符号
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void main()
{
int i,j;
struct snake * p;
p=(struct snake *)malloc(sizeof(struct snake));
p->x=(int *)malloc(sizeof(int));
p->y=(int *)malloc(sizeof(int));
p->x[0] = 15;
p->y[0] = 12;
p->x[1] = 15;
p->y[1] = 13;
p->x[2] = 15;
p->y[2] = 14;
p->x[3] = 15;
p->y[3] = 15;
p->direction=1;
p->joint=4;
printf("%d %d %d %d ",p->x[0],p->y[0],p->direction);
char ch;
while(1)
{
if(kbhit())
{
ch = getch();
key(ch,&p->direction);
p->joint++;//在这里我想测试下蛇的长度是否会增加
}
move(p);
Sleep(200);
}
getch();
}
void key(char key, int * direction)
{
if(key == 'w'&& (*direction)!=2)
(*direction)=1;
else if(key == 's'&& (*direction)!=1)
(*direction)=2;
else if(key == 'a'&& (*direction)!=4)
(*direction)=3;
else if(key == 'd'&& (*direction)!=3)
(*direction)=4;
}
int move(struct snake * p)
{
int i;
int food = 0;
if(p->direction == 1)
p->y[0]=p->y[0]-1;
else if(p->direction == 2)
p->y[0]=p->y[0]+1;
else if(p->direction == 3)
p->x[0]=p->x[0]-1;
else if(p->direction == 4)
p->x[0]=p->x[0]+1;
p->x[p->joint] = p->x[p->joint-1];
p->y[p->joint] = p->y[p->joint-1];
gotoxy(p->x[p->joint],p->y[p->joint]);
printf(" ");
for(i = (p->joint-1);i > 0;--i)
{
p->x[i] = p->x[i-1];
p->y[i] = p->y[i-1];
}
gotoxy(p->x[i],p->y[i]);
printf("■");
return 0;
}
我定义了蛇的长度是4,但是显示出来的蛇长度只有3、这个问题要怎么解决、
对于迟到食物蛇的长度就增加、这个要怎么实现、我原本只是通过改变长度来解决,但是在运行的时候蛇刚开始的时候可以正常增加长度,但是到达一定长度就会出现问题
不要一来就复制一堆代码让我看、我要的是帮我找出这个程序的错误并修正 展开
7个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询