Discuz! Board

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

2023

[复制链接]

660

主题

846

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435559

烈空座 Lv:100
发表于 2023-9-24 15:41:18 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
#include <graphics.h>//包含EGE的头文件
#include <time.h>//包含随机数,时间函数 
#include<bits/stdc++.h>
using namespace std;
void food_set();


int block[40][30]={0};


int food_x;
int food_y;

int wait=0;


struct snake_2
{
	int x;
	int y;
	int color;
};
struct snake_1{
        char direct;
        int len;
        int vx;//x向速度 
        snake_2 body[1000];
}snake; 


//float randx(float min,float max)
//{
//        float r =(((float)rand())/32767)*(max-min)+min;
//        return r;        
//} 
 
void startup()//初始化 函数 
{
        //cout<<"请输入总人数(不大于1000):"; 
        //cin>>num;
        srand(time(0));//随机种子函数
        snake.direct='d';
        snake.vx=20;
        snake.len=4;
        for(int i=0;i<snake.len;i++)
        {
        	snake.body[i].x=20-i;
        	snake.body[i].y=15;
		}
        
        food_set();
         
        initgraph(800,600);    //初始化图形界面
        setcolor(RED);        //设置画图线为红色 
        setbkcolor(WHITE);//设置背景颜色为白色
        setfillcolor(RED);//设置填充颜色为红色 
        setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
        setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)        
}




void snake_move()
{
	for(int i=snake.len;i>0;i--)
	{
		snake.body[i].x=snake.body[i-1].x;
		snake.body[i].y=snake.body[i-1].y;
	}
	switch(snake.direct)
	{
		case 'w':snake.body[0].y=snake.body[1].y-1;
				 snake.body[0].x=snake.body[1].x;
				 break;
		case 's':snake.body[0].y=snake.body[1].y+1;
				 snake.body[0].x=snake.body[1].x;
				 break;
		case 'd':snake.body[0].x=snake.body[1].x+1;
				 snake.body[0].y=snake.body[1].y;
				 break;
		case 'a':snake.body[0].x=snake.body[1].x-1;
				 snake.body[0].y=snake.body[1].y;
				 break;
	}
}
 
 
void food_set()//产生食物 
{
	int flag=0;
	while(1)
	{
		flag=0;
		food_x=rand()%37+1; 
		food_y=rand()%27+1;
		for(int i=0;i<snake.len;i++)
		{
			if((food_x==snake.body[i].x)&&(food_y==snake.body[i].y))
			{
				flag=1;
				break;
			}
		}
		if(flag==0)
		{
			break;
		}
	}
	
}
 
void eat_food() //吃食物
{
	if((food_x==snake.body[0].x)&&(food_y==snake.body[0].y))
	{
		snake.len++;
		food_set();
	}
} 
 
void update() //更新函数 
{
		wait++;
		snake.vx=20-(snake.len-4)/5;
		if(wait==snake.vx)
		{
			snake_move();
			wait=1;
		}
		if(kbhit())
    	{
			snake.direct=getch();
    		snake_move();
    	}      
        
}

 
void draw() //绘制小球 
{
		setfillcolor(GREEN);//设置填充颜色为绿色 
		bar(food_x*20,food_y*20,(food_x+1)*20,(food_y+1)*20);
		
		for(int i=0;i<snake.len;i++)
		{
			setfillcolor(hsv2rgb(10*i%360, 1, 1));//设置填充颜色  参数(颜色,饱和度,明亮度) 
			bar(snake.body[i].x*20,snake.body[i].y*20,(snake.body[i].x+1)*20,(snake.body[i].y+1)*20);
		}
		
		xyprintf(20,20,"速度:%d",21-snake.vx);
		xyprintf(20,45,"得分:%d",snake.len-4);
		
		Sleep(10);
        cleardevice();               

}
 
bool gameover()
{
	if(((snake.body[0].x<0)||(snake.body[0].x>39))||((snake.body[0].y<0)||(snake.body[0].y>29)))
	{
		return true;
	}
	for(int i=1;i<snake.len;i++)
	{
		if((snake.body[i].x==snake.body[0].x)&&(snake.body[i].y==snake.body[0].y))
		{
			return true;
		}
	}
	return false;
}
 
int main()
{
        startup();//初始化 
        while(1)
        {
				draw();//绘制小球 
                update(); //更新数据
                eat_food();
                if(gameover())
                {
                	break;
				}
        } 
        
        setfont(100,0,"楷体");
        xyprintf(150,200,"GAMEOVER");//格式化输出文字
        getch();
         
        return 0;
}
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-29 22:49 , Processed in 0.057423 second(s), 28 queries .

Powered by Discuz! X3.4

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

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