Discuz! Board

 找回密码
 立即注册
查看: 338|回复: 0

贪吃蛇(完整版)

[复制链接]

49

主题

70

帖子

23万

积分

论坛元老

Rank: 8Rank: 8

积分
232976

大王燕 Lv:51
发表于 2023-2-19 16:56:58 | 显示全部楼层 |阅读模式
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
#include <graphics.h>             //包含EGE的头文件
#include<time.h>
using namespace std;
int width=800;
int hight=600;
int number;
int count1=0,count2;
char ch;
int score,score_flag;
int f_x,f_y;
int flag=0;
int wait;
float inx(int min,int max)
{
    float t=rand()%(max-min)+min;
    return t;
}
struct snake_body
{
    int x;
    int y;
};
struct snake
{
    int len;
    int v;
    snake_body s_b[100];
    char dir;
}s[1];
void foodset()
{
	while(1)
	{
		flag=0;
		f_x=rand()%37+1;
	    f_y=rand()%27+1;
	    for(int i=0;i<s[0].len;i++)
	    {
	    	if(s[i].s_b[i].x==f_x&&s[i].s_b[i].y==f_y)
			{
				flag=1;
				break;
			}	
		}
	    if(flag==0)
		{
			break;
		}
	}

} 
void start()
{
    s[0].len = 4;
    s[0].v = 50;
    s[0].dir = 'd';
    for(int i=0;i<4;i++)
    {
        s[0].s_b[i].x=20-i;
        s[0].s_b[i].y=15;
    }
    initgraph(width, hight);//初始化图形界面
    setcolor(RED);//设置画图线为红色
    setbkcolor(WHITE);//设置背景颜色为白色
    setfillcolor(RED);//设置填充颜色为红色
    
}
void move_snake()
{
    for(int i=s[0].len;i>0;i--)
    {
        s[0].s_b[i].x=s[0].s_b[i-1].x;
        s[0].s_b[i].y=s[0].s_b[i-1].y;
    }
    switch(s[0].dir)
    {
        case 'w': s[0].s_b[0].y-=1;
        break;
        case 'a': s[0].s_b[0].x-=1;
        break;
        case 's': s[0].s_b[0].y+=1;
        break;
        case 'd': s[0].s_b[0].x+=1;
        break;
    }
}
void update()
{
     
    if(kbhit())
    {
        s[0].dir = getch();
        move_snake();
    }//按键响应
    wait++;
    if(wait==s[0].v)
    {
    	move_snake();
    	wait=0;
	}
}
void food_eat()
{
	if(s[0].s_b[0].x==f_x&&s[0].s_b[0].y==f_y)
	{
		s[0].len+=1;
		s[0].v=50-s[0].len-4/5;
		count1+=1;
		foodset();
	}
}
void  draw()
{
    for(int i=0;i<s[0].len;i++)
    {
        setfillcolor(hsv2rgb(10*i%360, 1, 1));//设置填充颜色  参数(颜色,饱和度,明亮度)
        bar(20*s[0].s_b[i].x,20*s[0].s_b[i].y,20*s[0].s_b[i].x+20,20*s[0].s_b[i].y+20);
    }
	setfillcolor(GREEN);
	bar(f_x*20,f_y*20,f_x*20+20,f_y*20+20);
    xyprintf(20,20,"分数:%d",count1);//格式化输出文字
    xyprintf(20,60,"长度:%d",s[0].len);//格式化输出时间     
    Sleep(10);
    cleardevice();//绘制球体
}
bool gameover()
{
    if((s[0].s_b[0].x>39)||(s[0].s_b[0].y>29)||(s[0].s_b[0].x<0)||(s[0].s_b[0].y<0))//w.xl<w.xr+ball[0].r&&w.yr+ball[0].r<w.yr
    {     
    	return true;
    }   
	for(int i=1;i<s[0].len;i++)
	{
		if((s[0].s_b[0].x==s[0].s_b[i].x)&&(s[0].s_b[0].y==s[0].s_b[i].y))
		{
			return true;
		}
	}
    return false;
}
int main()
{
   start();
   foodset();
   while(1)
   {
        draw();
        update();
        food_eat();
		if(gameover()) break;
   }
	getch();                            //暂停,等待键盘按键
    closegraph();        //关闭图形界面   
    return 0;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 02:32 , Processed in 0.051902 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表