本人是小白,自己对着视频编了一个贪吃蛇能编译但是运行出错,求大神帮忙修改一下代码

打工的社畜 打工的社畜 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include <graphics.h>


#define M 200
#define WD 10
#define RX 600
#define RY 400
#define LX 0
#define LY 0
#define UP 0X1177
#define DOWN 0X1F73
#define LEFT 0X1E61
#define RIGHT 0X2064
#define ESC 0x011b


struct Food
{
int x[200];
int y[200];
int yes;
}food;


struct snake
{
int x[M];
int y[M];
int node;
int direction;
int life;//0活1死
}snake;

void DrawGrid(void)//画界面
{
setcolor(DARKGRAY); //灰色
setlinestyle(PS_SOLID, 1);//设置线型
for(int i=0;i<=RY;i+=WD)
line(LX,i,RX,i);
for(i=0;i<=RX;i+=WD)
line(i,LY,i,RY);
}

int XY(int *x,int *y)//随机生成食物坐标
{

*x=rand()%(RX-LX)/WD*WD;
*y=rand()%(RY-LY)/WD*WD;
return 0;
}

void SnakeDraw(struct snake *p)
{
setcolor(RED); //画出蛇
for(int i=0; i<p->node; i++)
rectangle(p->x[i], p->y[i],
p->x[i]+WD, p->y[i]+WD); //每1节画1个方框
}


void snakemove(struct snake *p)//蛇的移动
{
for(int i=0; i<p->node-1; i++)//蛇的每个环节往前移动
{
p->x[i]=p->x[i-1];
p->y[i]=p->y[i-1];
}
switch(p->direction)//蛇头移动,0,1,2,3表示上下左右
{
case 2: p->y[0]-=WD; break;
case 4: p->y[0]+=WD; break;
case 6: p->x[0]-=WD; break;
case 8: p->x[0]+=WD; break;
}
}

void snakeinit(struct snake *p){//蛇的初始化

p->life=0;
p->direction=(int)((rand()%3)+1)*2;//2,4,6,8
p->node=2;
XY(p->x,p->y);
p->x[1]=p->x[0]+WD;
p->y[1]=p->y[0];

}

void snakecheck(struct snake *p){

for(int i=0;i<=p->node;i++){
if(p->x[0]==p->x[i]&&p->y[0]==p->y[i])
p->life=1;//蛇死
if(p->x[0]<LX||p->x[0]>RX||p->y[0]<LY||p->y[0]>RY)
p->life=1;
}
}
void foodcheck(struct snake *p){
int x=0,*m=&x;
int y=0,*n=&y;
int XY(int *m,int *n);
if(p->x[0]==x&&p->y[0]==y){
setcolor(0);//蛇吃到食物就要把食物去掉
rectangle(x,y,x+WD,y+WD);
p->x[p->node]=-10;
p->y[p->node]=-10;
p->node++;
}
}
int dircheck(int key,int dir){
if(key==UP==1 && dir!=2)
dir=2;
else if(key==DOWN==1 && dir!=8)
dir=8;
else if(key==LEFT==1 && dir!=4)
dir=4;
else if(key==RIGHT==1 && dir!=6)
dir=6;
return dir;
}

int Readkey()
{
if (_kbhit() == 0 ) //没有按键
return 0;
int ch=getch(); //读键盘扫描码
if(ch==0xE0) //表明按了扩展键(光标键是扩展键)
ch=getch (); //扩展键需要再读一次,得到扫描码
return (ch);
}

void gameplay(void){
int x=0,*m=&x;
int y=0,*n=&y;
food.yes=1;
struct snake k;

while (1){
while(!kbhit())
{
if(food.yes==1){
int XY(int *m,int *n);
setcolor(RED);
rectangle(x,y,x+WD,y+WD);
food.yes=0;
}

snakemove(&k);
snakecheck(&k);
foodcheck(&k);
if(k.life==1)
break;
SnakeDraw(&k);
}
int key=Readkey();
if(key==ESC)
break;

}
}

void main(){
struct snake p;
gameplay();
DrawGrid();
snakeinit(&p);
SnakeDraw(&p);
snakemove(&p);
snakecheck(&p);
foodcheck(&p);
Readkey();
dircheck(Readkey(),p.direction);
}






...全文

相关推荐

基于verilog实现贪吃蛇游戏的程序

一旦代码经过验证,就可以通过JTAG(Joint Test Action Group)接口将编译后的比特流下载到FPGA中,实现硬件上的实时运行。

Jiuxiang3

纯Java Swing写的贪吃蛇游戏工程,带完整源码和可直接运行的主程序

用标准Java SE开发的贪吃蛇小游戏,不依赖任何第三方库,JDK 8及以上即可编译运行。项目包含Snake、Egg、Dir、Yard四个核心类和langxisnake主入口,分工明确:Snake处理蛇身坐标与增长逻辑,Egg实现食物随机生成,Dir封装上下左右方向枚举,Yard负责绘图、游戏循环和事件响应。所有功能都已实现——键盘控制蛇移动、方向实时切换、碰撞检测(撞墙/自咬)、食物吃取判定、得分实时统计、游戏结束提示。代码逐行手写整理自浪曦网教学视频,注释简洁清晰,适合边学边练,能帮助理解Swing事件

ss78901

基于stm32f4的贪吃蛇程序及演示视频

同时,"贪吃蛇.mp4"应该是一个演示视频,展示了游戏的实际运行效果,帮助我们直观地了解项目的完成度和用户体验。

银耳凤梨汤

贪吃蛇的FPGA代码

在编写贪吃蛇的Verilog代码时,我们需要考虑以下几个关键部分:1. **游戏逻辑**:这部分代码负责游戏的规则,包括蛇的移动、食物生成、碰撞检测等。

a1103688841

贪吃蛇游戏编程,含源代码,运行库

结果展示:展示游戏运行截图和视频,以及最终的用户体验。7. 总结与反思:对整个项目的经验总结,可能存在的问题和未来改进的方向。

zhoutao12345600
评论 2
收藏 已收藏
分享
返回顶部
打工的社畜
C语言 70,040 成员 243,237 内容