美文网首页
【消消乐】源代码

【消消乐】源代码

作者: 世缘 | 来源:发表于2019-02-13 15:14 被阅读0次

友情提示:vc++6.0需要加装easyx库,这是一个图形库(个人认为这个库不错,太适合新手做一些有意思的效果),具体教程见前文,如果没有添加的话,是不能编译运行通过的,也就见不到效果。

#include <graphics.h>

#include <stdio.h>

#include <conio.h>

#include <time.h>

#define KEY_DOWN(vk_c)(GetAsyncKeyState(vk_c)&0x8000)

typedef struct position{

    int x;

    int y;

}posType;

int index;//同色小球的个数

void init();//初始化游戏窗口

void gamebegin();//游戏开始界面

void gameplay();//玩游戏的具体过程

void close();//结束游戏,释放资源

void drawcursor(posType cur,COLORREF c1);//绘制光标

void drawtime(int sec);//绘制时间

void drawscore(int score);//绘制分数

void getsamecolorballs(posType cur,COLORREF c1);//获得光标所在位置周围的同色小球,计算同色小球的个数,并存入数组

int isValid(posType cur,COLORREF c1);//判断同色小球是否合法

void ballsfall();//小球下落

COLORREF colorArr[6]={RGB(200,0,0),RGB(0,200,0),RGB(0,0,200),RGB(200,200,0),RGB(200,0,200),RGB(0,200,200)};

posType cur;//定义当前光标位置

posType ballsArr[180];//同色小球坐标

void main()

{

    init();//初始化游戏窗口

    gamebegin();//游戏开始界面         

    gameplay();//玩游戏的具体过程

    close();//结束游戏,释放资源

}

void init()

{

    initgraph(1000,700);

}

void close()

{

    getch();

    closegraph();

}

void gamebegin()

{

    //绘制游戏边框     

    setlinecolor(RGB(50,50,50));

    setlinestyle(PS_SOLID,10);

    rectangle(255,45,745,655);

    //绘制小球

    srand((unsigned)time(NULL));   

    setlinestyle(PS_SOLID,1); 

    for(int x=280;x<740;x+=40)

    {

        for(int y=70;y<650;y+=40)

        {

            COLORREF c1=colorArr[rand()%6];   

            setfillcolor(c1);        

            setlinecolor(c1);

            fillcircle(x,y,18);

        }

    }

    //绘制移动光标

    cur.x=480;

    cur.y=390;

    drawcursor(cur,RGB(255,255,255));

    //绘制时间 drawtime(30);

    //绘制分数 drawscore(0);

}

void gameplay()

{

    int score=0;

    for(int i=300;i>0;i--)

    {

        if(i%10==0)

        {

            drawtime(i/10);

        }

        if(KEY_DOWN(VK_UP)&&cur.y>70)

        {

            drawcursor(cur,BLACK);//绘制黑光标

            cur.y-=40;//移动当前光标位置

            drawcursor(cur,WHITE);//绘制白光标

        }

        else if(KEY_DOWN(VK_DOWN)

        &&cur.y<630)

        {

            drawcursor(cur,BLACK);//绘制黑光标

            cur.y+=40;//移动当前光标位置

            drawcursor(cur,WHITE);//绘制白光标

        }

        else if(KEY_DOWN(VK_LEFT)

        &&cur.x>280)

        {

            drawcursor(cur,BLACK);//绘制黑光标

            cur.x-=40;//移动当前光标位置

            drawcursor(cur,WHITE);//绘制白光标

        }

        else if(KEY_DOWN(VK_RIGHT)

        &&cur.x<720)

        {

            drawcursor(cur,BLACK);//绘制黑光标

            cur.x+=40;//移动当前光标位置

            drawcursor(cur,WHITE);//绘制白光标

        }

        else if(KEY_DOWN(VK_RETURN)

        ||KEY_DOWN(VK_SPACE))

        {

            //获得光标所在位置周围的同色小球,计算同色小球的个数,并存入数组   

            getsamecolorballs

            (cur,getpixel(cur.x,cur.y));

            //同色小球消失一段时间(将数组中元素置黑)

            if(index>1)

            {

                for(int k=0;k<index;k++)

                {

                    setfillcolor(BLACK);   

                    setlinecolor(BLACK);   

            fillcircle(ballsArr[k].x,ballsArr[k].y,18);

                }

                //小球下落

                Sleep(500);

                ballsfall();

                score+=index;

                drawscore(score);

            }

            index=0;

        }

        Sleep(100);

    }

    cleardevice();

    settextcolor(RGB(255,0,0));

    settextstyle(80, 0, _T("黑体"));

    char s[] = "Game over";   

    outtextxy(300, 300, s);

    drawscore(score);

    Sleep(500);

}

void drawcursor(posType cur,COLORREF c1)

{

    setlinecolor(c1);

    rectangle(cur.x-20,cur.y- 

    20,cur.x+20,cur.y+20);

}

void drawtime(int sec)

{

    char str[30]; 

    settextcolor(RGB(255,255,0));

    settextstyle(25, 0, _T("黑体")); 

    sprintf(str,"剩余时间: %2d s",sec);   

    outtextxy(20, 50, str);

}

void drawscore(int score)

{

    char str[30];

    settextcolor(RGB(255,0,0));

    settextstyle(25, 0, _T("黑体"));

    sprintf(str,"分数: %d",score);   

    outtextxy(20, 550, str);

}

void getsamecolorballs(posType cur,COLORREF c1)

{

    ballsArr[index].x=cur.x;

    ballsArr[index].y=cur.y;

    index++;

    posType tempos;

    for(int k=0;k<4;k++)

    {

        switch(k){ 

        case 0:

        tempos.x=cur.x;

        tempos.y=cur.y-40;

        break;//上

        case 1:

        tempos.x=cur.x;

        tempos.y=cur.y+40;

        break;//下

        case 2:

        tempos.x=cur.x-40;

        tempos.y=cur.y;

        break;//左

        case 3:

        tempos.x=cur.x+40;

        tempos.y=cur.y;

        break;//右

        }

        if(isValid(tempos,c1))

        {

            getsamecolorballs(tempos,c1);

        }

    }

}

int isValid(posType cur,COLORREF c1)

{

    if(getpixel(cur.x,cur.y)!=c1)

    {

        return 0;

    }

    else

    {

        for(int k=0;k<index;k++)

        {   

            if(ballsArr[k].x==cur.x

            &&ballsArr[k].y==cur.y)

            {

                return 0;

            }

        }

        return 1;

    }

}

void rank()

{

    int i,j;

    posType temp;

    for(i=0;i<index;i++)

    {

        for(j=0;j<index-i-1;j++)

        {

            if(ballsArr[j].y>ballsArr[j+1].y)

            {

                temp=ballsArr[j];   

                ballsArr[j]=ballsArr[j+1];

                ballsArr[j+1]=temp;

            }

        }

    }

}

void ballsfall()

{

    rank();

    for(int i=0;i<index;i++)

    {

        for(int k=ballsArr[i].y;k>70;k-=40)

        {

      setfillcolor(getpixel(ballsArr[i].x,k-40));          setlinecolor(getpixel(ballsArr[i].x,k-40));        fillcircle(ballsArr[i].x,k,18);

        }

        COLORREF c1=colorArr[rand()%6];   

        setfillcolor(c1);    

        setlinecolor(c1);

        fillcircle(ballsArr[i].x,70,18);

    }

}

相关文章

  • 【消消乐】源代码

    友情提示:vc++6.0需要加装easyx库,这是一个图形库(个人认为这个库不错,太适合新手做一些有意思的效果),...

  • 2018-06-15开心消消乐游戏大全

    开心消消乐游戏大全_开心消消乐破解版2018_开心消消乐最新破解版下载 开心消消乐版本大全是当易网为广大开心消消乐...

  • 消消乐 - 消消乐2018新版

    厌倦了千篇一律的三消游戏吗?六边形消除游戏“花之密语”来陪你解闷!融合了俄罗斯方块的传统消除玩法、三消游戏的闯关乐...

  • 消消乐

    消消乐更新以后有了倍速模式,可以1.5和2倍速度玩。刚开始调2倍速感觉真的不错,可以加速玩自己不喜欢的周赛,避免不...

  • 消消乐

    时下,人们崇尚致青春。三十岁致即将逝去的青春,四十岁致已经逝去的青春。于是我便很为难地想,留给我们五十岁以上的...

  • 消消乐

    昨晚睡不着,重新玩起了消消乐。 说起来这是几年前一度非常流行的游戏了。我也曾痴迷于其中,每天睡觉前,饭后,等人的时...

  • 消消乐

    时间久了才开始明了的 需要的是偶尔的巧合 魔力鸟周围的特效 不是拥有天才般的判断 只是偶尔的好运或者无规则的顺序 ...

  • 消消乐

    有大半年时间没有玩消消乐了,今天看完让我揪心的《谁杀了她》后,拿起手机打开消消乐,以让我的心情平静一会。 一关接一...

  • 消消乐

    开心消消乐是我手机里唯一存在的一个小游戏,玩得蛮久的一个东西。平时的我很少花时间在玩游戏上面,所以越来越不感兴趣,...

  • 消消乐

    晚上,妈妈躺在床上一直捧着个手机,我很好奇妈妈到底在干什么?我就对妈妈说:“妈妈,为什么你一直捧着个手机?”妈妈...

网友评论

      本文标题:【消消乐】源代码

      本文链接:https://www.haomeiwen.com/subject/hnvleqtx.html