Discuz! Board

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

2.18

[复制链接]

5

主题

5

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2023-2-18 17:57:08 | 显示全部楼层 |阅读模式
#include <graphics.h>
#include <time.h>

#define Block_szie 20
#define Width 40
#define Height 30

int food_x,food_y;
int gameover;
int wait;

struct Snake_data
{
    int x;
    int y;
    int color;
};

struct Snake
{
    char direct;
    int snake_len;
    int snake_v;
    Snake_data snake_d[1000];
}snake0,snake1;

void moveSnake(Snake &s)//ÒÆ¶¯Éß
{
        for(int i=(s.snake_len)-1;i>=0;i--)
        {
                s.snake_d[i+1].x=s.snake_d[i].x;
                s.snake_d[i+1].y=s.snake_d[i].y;
        }
        switch(s.direct)
        {
                case'w':
                case'W':
                case'i':
                case'I':
                        s.snake_d[0].x=s.snake_d[1].x;
                        s.snake_d[0].y=s.snake_d[1].y-1;
                        break;
                case's':
                case'S':
                case'k':
                case'K':
                        s.snake_d[0].x=s.snake_d[1].x;
                        s.snake_d[0].y=s.snake_d[1].y+1;
                        break;
                case'd':
                case'D':
                case'l':
                case'L':
                        s.snake_d[0].x=s.snake_d[1].x+1;
                        s.snake_d[0].y=s.snake_d[1].y;
                        break;
                case'a':
                case'A':
                case'j':
                case'J':
                        s.snake_d[0].x=s.snake_d[1].x-1;
                        s.snake_d[0].y=s.snake_d[1].y;
                        break;
                default:
                        break;
        }
}

void startup()//Æô¶¯
{
        snake0.direct='d';
        snake0.snake_len=4;
        snake0.snake_v=10;
        for(int i=0;i<=3;i++)
        {
                snake0.snake_d[i].x=(Width/2)-i;
                snake0.snake_d[i].y=(Height/2);
        }
        snake1.direct='d';
        snake1.snake_len=4;
        snake1.snake_v=10;
        for(int i=0;i<=3;i++)
        {
                snake1.snake_d[i].x=(Width/3)-i;
                snake1.snake_d[i].y=(Height/2);
        }
    srand(time(0));//Ëæ»úÖÖ×Óº¯Êý
    initgraph(Width*Block_szie, Height*Block_szie, INIT_RENDERMANUAL);              //³õʼ»¯Í¼ÐνçÃæ
    setcolor(BLACK);    //ÉèÖû­Í¼ÏßΪºìÉ«
    setbkcolor(WHITE);//ÉèÖñ³¾°ÑÕɫΪ°×É«
    setfillcolor(LIGHTGRAY);//ÉèÖÃÌî³äÑÕɫΪdz»ÒÉ«
     
    setfont(20,0,"Ó×Ô²");//(×ÖÌå¸ß¶È,×ÖÌå¿í¶È(Ϊ0¼´Îª×ÔÊÊÓ¦),×ÖÐÎ)ÉèÖÃ×ÖÌåΪ25,Ó×Ô²×ÖÌå
    setbkmode(TRANSPARENT); //ÉèÖÃÎÄ×Ö±³¾°É«ÎªÍ¸Ã÷(ĬÈÏΪÓб³¾°É«)
}
  
void show_snake()//ÏÔʾ
{
    int i,j;
    //Éß
    for(i=0;i<snake0.snake_len;i++)
    {
        setfillcolor(hsv2rgb((10*i)%360, 1, 1));//ÉèÖÃÌî³äÑÕÉ«  ²ÎÊý£¨ÑÕÉ«£¬±¥ºÍ¶È£¬Ã÷ÁÁ¶È£©
        bar(snake0.snake_d[i].x*Block_szie,snake0.snake_d[i].y*Block_szie,(snake0.snake_d[i].x+1)*Block_szie,(snake0.snake_d[i].y+1)*Block_szie);
    }
    for(i=0;i<snake1.snake_len;i++)
    {
        setfillcolor(hsv2rgb((10*i+50)%360, 1, 1));//ÉèÖÃÌî³äÑÕÉ«  ²ÎÊý£¨ÑÕÉ«£¬±¥ºÍ¶È£¬Ã÷ÁÁ¶È£©
        bar(snake1.snake_d[i].x*Block_szie,snake1.snake_d[i].y*Block_szie,(snake1.snake_d[i].x+1)*Block_szie,(snake1.snake_d[i].y+1)*Block_szie);
    }
    //ʳÎï   
    xyprintf(20,20,"Íæ¼Ò1µÃ·Ö£º%d",snake0.snake_len-4);//¸ñʽ»¯Êä³öÎÄ×Ö
    xyprintf(20,40,"Íæ¼Ò2µÃ·Ö£º%d",snake1.snake_len-4);//¸ñʽ»¯Êä³öÎÄ×Ö
}

void show_food()
{
    int i,j;
    for(i=0;i<Width;i++)
    {
            for(j=0;j<Height;j++)
            {
                //setcolor(WHITE);  //ÉèÖû­Í¼ÏßΪ°×É«
                setfillcolor(WHITE);//ÉèÖÃÌî³äÑÕɫΪdz»ÒÉ«
                bar(i*Block_szie,j*Block_szie,(i+1)*Block_szie,(j+1)*Block_szie);
            }
        }
    setfillcolor(GREEN);//ÉèÖÃÌî³äÑÕÉ«
    bar(food_x*Block_szie,food_y*Block_szie,(food_x+1)*Block_szie,(food_y+1)*Block_szie);
}

void update0()//Êý¾Ý¸üÐÂ
{
        //moveSnake(snake0);
        //Sleep(100);
        wait++;
        if(wait==snake0.snake_v)
        {
                moveSnake(snake0);
                moveSnake(snake1);
                wait=0;
        }
        if(kbhit())
    {
            char ch;
        ch = getch();
        if((ch=='w')||(ch=='a')||(ch=='s')||(ch=='d'))
        {
            snake0.direct=ch;
            moveSnake(snake0);
        }
        if((ch=='i')||(ch=='j')||(ch=='k')||(ch=='l'))
        {
            snake1.direct=ch;
            moveSnake(snake1);
        }
    }
}


void food_set()
{
a:        food_x=rand()%(Width-2)+1;
        food_y=rand()%(Height-2)+1;
        for(int i=0;i<snake0.snake_len;i++)
        {
                if((food_x==snake0.snake_d[i].x)&&(food_y==snake0.snake_d[i].y))
                {
                        goto a;
                }
        }
}

void eat_food()
{
        if((snake0.snake_d[0].x==food_x)&&(snake0.snake_d[0].y==food_y))
        {
                snake0.snake_len++;
                food_set();
        }
        if((snake1.snake_d[0].x==food_x)&&(snake1.snake_d[0].y==food_y))
        {
                snake1.snake_len++;
                food_set();
        }
}

bool game_over()//1½áÊø
{
        if((snake0.snake_d[0].x>=40)||(snake0.snake_d[0].y>=30)||(snake0.snake_d[0].x<0)||(snake0.snake_d[0].y<0))
        {
                return true;
        }
        for(int i=1;i<snake0.snake_len;i++)
        {
                 if((snake0.snake_d[0].x==snake0.snake_d[i].x)&&(snake0.snake_d[0].y==snake0.snake_d[i].y))
                 return true;
        }
        if((snake1.snake_d[0].x>=40)||(snake1.snake_d[0].y>=30)||(snake1.snake_d[0].x<0)||(snake1.snake_d[0].y<0))
        {
                return true;
        }
        for(int i=1;i<snake1.snake_len;i++)
        {
                 if((snake1.snake_d[0].x==snake1.snake_d[i].x)&&(snake1.snake_d[0].y==snake1.snake_d[i].y))
                 return true;
        }
        return false;
}


int main()
{
b:  startup();
    food_set();
    getch();
    while(1)
    {
        cleardevice();
        show_food();
        show_snake();
        update0();
        //update1(snake1);
        eat_food();
        /*if(game_over())
        {
            xyprintf(300,300,"Íæ¼Ò1ÊäÁË");
            break;
        }*/

        Sleep(10);
    }
     
    Sleep(2000);
    xyprintf(300,320,"°´rÖØÐ¿ªÊ¼");
    while(1)
    {
        if(kbhit())
        {
            int temp = getch();
            if(temp =='r')
            {
                goto b;
            }
        }   
    }

    return 0;
}
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-30 12:02 , Processed in 0.053667 second(s), 21 queries .

Powered by Discuz! X3.4

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

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