贪吃蛇小游戏—小白的进阶之路的开始

该程序的实现主要是通过Easyx实现的大多数功能,因为没能够继续完善所以只展现一部分简单的代码(大一上刚开始的时候学习的,就当作是开始吧)

#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>
int flag = 0, m, n, flag1 = 1;
COLORREF p, q;
typedef struct node {
    int x;
    int y;
}Array;
void wall()
{
    int i;
    setfillcolor(RGB(25, 25, 112));
    for (i = 0; i <= 620; i += 20)
    {
        rectangle(i, 0, 620, 20);//上方的墙
        fillrectangle(i, 0, 620, 20);
        rectangle(620, i, 640, 460);//右边的墙
        fillrectangle(620, i, 640, 460);
        rectangle(i, 460, 640, 480);//下面的墙
        fillrectangle(i, 460, 640, 480);
        rectangle(0, i, 20, 480);//左边的墙
        fillrectangle(0, i, 20, 480);
    }
}
void fruit()
{
    if (flag == 0)
    {
        m = rand() % 580 + 20;
        n = rand() % 420 + 20;
        p = getpixel(m, n);
        if (p != q)
        {
            circle(m, n, 5);
            flag = 1;
        }
    }
}
int main()
{
    initgraph(640, 480);
    Array a[10];
    int i, k = 0;
    char ch1 = 54, ch2 = 54;
    srand((unsigned)time(NULL));
    BeginBatchDraw();//开始绘制背景
    IMAGE img1, img;
    loadimage(&img1, _T("E:\\solve problem\\lsnack\\Debug\\fate1.jpg"), 599, 439);//设置背景
    putimage(21, 21, &img1);
    a[0].x = 60;//初始化结构体数组起点
    a[0].y = 20;
    rectangle(a[0].x, a[0].y, a[0].x + 20, a[0].y + 20);
    wall();
    setfillcolor(RGB(225, 165, 0));
    fillrectangle(a[0].x, a[0].y, a[0].x + 20, a[0].y + 20);
    for (i = 1; i <= 2; i++)
    {
        a[i].x = a[i - 1].x - 20;
        a[i].y = a[i - 1].y;
        rectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);//画出连续的矩形
        setfillcolor(GREEN);
        fillrectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);
        q = getpixel(a[i].x + 10, a[i].y + 10);
    }
    FlushBatchDraw();
    while (1)
    {
        BeginBatchDraw();
        if (_kbhit())
        {
            k = i;
            ch1 = _getch();
            if ((ch1 == 56 && ch2 != 50) || (ch1 == 50 && ch2 != 56) || (ch1 == 52 && ch2 != 54) || (ch1 == 54 && ch2 != 52))
            {
                while (!_kbhit())
                {
                    for (k = i; k > 0; k--)
                    {
                        a[k].y = a[k - 1].y;
                        a[k].x = a[k - 1].x;
                    }
                    putimage(21, 21, &img1);
                    switch (ch1)
                    {
                    case 56:a[0].y -= 20;  break;//上
                    case 50:a[0].y += 20;  break;//下
                    case 52:a[0].x -= 20;  break;//左
                    case 54:a[0].x += 20;  break;//右
                    }
                    solidcircle(m, n, 5);
                    setfillcolor(RGB(225, 165, 0));
                    fillcircle(m, n, 5);
                    for (k = 0; k < i; k++)
                    {
                        rectangle(a[k].x, a[k].y, a[k].x + 20, a[k].y + 20);//最前方的矩形
                        setfillcolor(GREEN);
                        fillrectangle(a[k].x, a[k].y, a[k].x + 20, a[k].y + 20);
                        setfillcolor(RGB(225, 165, 0));
                        fillrectangle(a[0].x, a[0].y, a[0].x + 20, a[0].y + 20);
                    }
                    Sleep(200);//这个部分应该采取分关卡的形式去比较速度,但是并没有写完
                    if (a[0].x < m + 5 && a[0].x + 20 > m - 5 && a[0].y < n + 5 && a[0].y + 20 > n - 5)
                    {
                        flag = 0;
                        i++;
                        clearcircle(m, n, 5);
                        rectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);
                        setfillcolor(GREEN);
                        fillrectangle(a[i].x, a[i].y, a[i].x + 20, a[i].y + 20);
                    }
                    for (k = 3; k < i; k++)
                        if (a[0].x == a[k].x&&a[0].y == a[k].y)
                        {
                            initgraph(300, 150);
                            loadimage(&img, L"E:\\solve problem\\lsnack\\Debug\\game over.jpg", 300, 150);
                            putimage(0, 0, &img);
                            FlushBatchDraw();
                            system("pause");
                            closegraph;
                            exit(0);
                        }
                    if (a[0].x < 20 || a[0].x > 600 || a[0].y < 20 || a[0].y > 440)
                    {
                        initgraph(300, 150);
                        IMAGE img;
                        loadimage(&img, L"E:\\solve problem\\lsnack\\Debug\\game over.jpg", 300, 150);
                        putimage(0, 0, &img);
                        FlushBatchDraw();
                        system("pause");
                        closegraph;
                        exit(0);
                    }
                    if (i >= 20)//判断达到吃到多少个就通关(事实上这一步骤还可以完善,例如用一个记录分数的牌子)
                    {
                        initgraph(300, 150);
                        IMAGE img2;
                        loadimage(&img2, L"E:\\solve problem\\lsnack\\Debug\\PASS.jpg", 300, 150);
                        putimage(0, 0, &img2);
                        FlushBatchDraw();
                        system("pause");
                        closegraph;
                        exit(0);
                    }
                    ch2 = ch1;
                    fruit();
                    FlushBatchDraw();
                }
            }
        }
        if (a[0].x < m + 5 && a[0].x + 20 > m - 5 && a[0].y < n + 5 && a[0].y + 20 > n - 5)
            clearcircle(m, n, 5);
        FlushBatchDraw();
    }
    system("pause");
    closegraph;
    return 0;
}

从这里开始的c语言编程之路
这个程序以及代码还有很多很多地方待完善不过只能等到自己什么时候有时间再来操作了
现在是大一下也决定好要先转型学一下web前端开发,之前草草的学了数据结构但是并不是很理想,现在看来只会觉得当时的自己还不够认真,没有集中精力专心去做那件事,不过即便是看上去的很努力也把自己累个半死
等空闲时间再陆陆续续贴一些之前自己刷题的代码吧(比如蓝桥杯的,杭电oj的)
还是要加油啊,虽然说转专业依旧艰难,但是总得继续下去的

猜你喜欢

转载自blog.csdn.net/Around_corner/article/details/70384111
今日推荐