yuesezhenmei 发表于 2019-9-5 13:39:05

c语言小游戏超级玛丽行走简易编码

你们可以自己添加后续程序 我自己不想写了    需要图片的
https://pan.baidu.com/s/1p5A5RAY8T0wx2wXU-fqYAA


以下是源代码 需要easyx
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
#include <windows.h>

IMAGE wall, object, back, grass, water, tree, yme, zme;


struct square
{
        int x;
        int y;
        int left;
        int right;
        int shape;
        struct square *next;
};

struct square *wallhead;
struct square hero;
int i = 0,n=0;//人物的动态

void init();//图片初始化
void squareinit();//方块初始化
void move();//移动
void attition();//实时情况


void init()
{
        loadimage(&back, _T("./back.jpg"), 1300, 600);
        loadimage(&wall, _T("./wall.jpg"), 50, 50);
        loadimage(&object, _T("./object.jpg"), 50, 50);
        loadimage(&grass, _T("./grass.jpg"), 50, 50);
        loadimage(&water, _T("./water.jpg"), 50, 50);
        loadimage(&tree, _T("./tree.jpg"), 50, 100);
        loadimage(&yme, _T("./yme1.jpg"), 50, 50);
        loadimage(&yme, _T("./yme2.jpg"), 50, 50);
        loadimage(&yme, _T("./yme3.jpg"), 50, 50);
        loadimage(&zme, _T("./zme1.jpg"), 50, 50);
        loadimage(&zme, _T("./zme2.jpg"), 50, 50);
        loadimage(&zme, _T("./zme3.jpg"), 50, 50);
        hero.x = 600;
        hero.y = 400;
}



void squareinit()
{
        srand(time(NULL));
        struct square *temp, *p;
        int i;
        temp = (struct square *)malloc(sizeof(struct square));
        temp->next = NULL;
        for (i = 0; i<840; i++)
        {
                if (i < 60)//墙
                {
                        temp->shape = 0;
                        temp->x = i * 50;
                        temp->y = 0;
                }
                else if (i >= 60 && i < 120)
                {
                        temp->shape = 0;
                        temp->x = (i - 60) * 50;
                        temp->y = 2950;
                }
                else if (i >= 120 && i < 180)
                {
                        temp->shape = 0;
                        temp->x = 0;
                        temp->y = (i - 120) * 50;
                }
                else if (i >= 180 && i < 240)
                {
                        temp->shape = 0;
                        temp->x = 2950;
                        temp->y = (i - 180) * 50;
                }
                else if (i >= 240 && i < 260)//中间墙
                {
                        temp->shape = 1;
                        temp->x = (i - 230) * 50;
                        temp->y = 500;
                }
                else if (i >= 260 && i < 280)
                {
                        temp->shape = 1;
                        temp->x = (i - 250) * 50;
                        temp->y = 1000;
                }
                else if (i >= 280 && i < 300)
                {
                        temp->shape = 1;
                        temp->x = (i - 270) * 50;
                        temp->y = 1500;
                }
                else if (i >= 300 && i < 320)
                {
                        temp->shape = 1;
                        temp->x = (i - 290) * 50;
                        temp->y = 2000;
                }
                else if (i >= 320 && i < 340)
                {
                        temp->shape = 1;
                        temp->x = (i - 310) * 50;
                        temp->y = 2450;
                }
                else if (i >= 340 && i < 380)
                {
                        temp->shape = 1;
                        temp->x = 250;
                        temp->y = (i - 330) * 50;
                }
                else if (i >= 380 && i < 420)
                {
                        temp->shape = 1;
                        temp->x = 1500;
                        temp->y = (i - 370) * 50;
                }
                else if (i >= 420 && i < 460)//草
                {
                        temp->shape = 2;
                        temp->x = (i - 410) * 50;
                        temp->y = 250;
                }
                else if (i >= 460 && i < 500)
                {
                        temp->shape = 2;
                        temp->x = (i - 450) * 50;
                        temp->y = 300;
                }
                else if (i >= 500 && i < 540)
                {
                        temp->shape = 2;
                        temp->x = (i - 490) * 50;
                        temp->y = 2700;
                }
                else if (i >= 540 && i < 580)
                {
                        temp->shape = 2;
                        temp->x = (i - 530) * 50;
                        temp->y = 2750;
                }
                else if (i >= 580 && i < 600)//水
                {
                        temp->shape = 3;
                        temp->x = (i - 580) * 50 + 1700;
                        temp->y = 500;
                }
                else if (i >= 600 && i < 620)
                {
                        temp->shape = 3;
                        temp->x = (i - 600) * 50 + 1700;
                        temp->y = 550;
                }
                else if (i >= 620 && i < 640)
                {
                        temp->shape = 3;
                        temp->x = (i - 620) * 50 + 1700;
                        temp->y = 600;
                }
                else if (i >= 640 && i < 660)
                {
                        temp->shape = 3;
                        temp->x = (i - 640) * 50 + 1700;
                        temp->y = 650;
                }
                else if (i >= 660 && i < 680)
                {
                        temp->shape = 3;
                        temp->x = (i - 660) * 50 + 1700;
                        temp->y = 2000;
                }
                else if (i >= 680 && i < 700)
                {
                        temp->shape = 3;
                        temp->x = (i - 680) * 50 + 1700;
                        temp->y = 2050;
                }
                else if (i >= 700 && i < 720)
                {
                        temp->shape = 3;
                        temp->x = (i - 700) * 50 + 1700;
                        temp->y = 2100;
                }
                else if (i >= 720 && i < 740)
                {
                        temp->shape = 3;
                        temp->x = (i - 720) * 50 + 1700;
                        temp->y = 2150;
                }
                else if (i >= 740 && i < 760)//树
                {
                        temp->shape = 4;
                        temp->x = (i - 740) * 50 + 1700;
                        temp->y = 1000;
                }
                else if (i >= 760 && i < 780)
                {
                        temp->shape = 4;
                        temp->x = (i - 760) * 50 + 1700;
                        temp->y = 1100;
                }
                else if (i >= 780 && i < 800)
                {
                        temp->shape = 4;
                        temp->x = (i - 780) * 50 + 1700;
                        temp->y = 1200;
                }
                else if (i >= 800 && i < 820)
                {
                        temp->shape = 4;
                        temp->x = (i - 800) * 50 + 1700;
                        temp->y = 1600;
                }
                else if (i >= 820 && i < 840)
                {
                        temp->shape = 4;
                        temp->x = (i - 820) * 50 + 1700;
                        temp->y = 2400;
                }
                p = temp;
                temp = (struct square *)malloc(sizeof(struct square));
                temp->next = p;
        }
        wallhead = temp;
}


void move()
{
        struct square *walltemp, *temp, *f;
        char key;
        int result = 0;
        while (1)
        {
                walltemp = wallhead;
                if (kbhit())
                {
                        key = getch();
                        if (key == 'w' || key == 'W')
                        {
                                while (walltemp != NULL)
                                {
                                        walltemp->y += 10;
                                        walltemp = walltemp->next;
                                }
                                temp = wallhead;
                                while (temp != NULL)
                                {
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x+50 >= hero.x&&temp->x+50 <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y+50 >= hero.y&&temp->y+50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x+50 >= hero.x&&temp->x+50 <= hero.x + 50) && (temp->y+50 >= hero.y&&temp->y+50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        temp = temp->next;
                                }
                                if (result == 1)
                                {
                                        f = wallhead;
                                        while (f != NULL)
                                        {
                                                f->y -= 10;
                                                f = f->next;
                                        }
                                        result = 0;
                                }
                        }
                        else if (key == 's' || key == 'S')
                        {
                                while (walltemp != NULL)
                                {
                                        walltemp->y -= 10;
                                        walltemp = walltemp->next;
                                }
                                temp = wallhead;
                                while (temp != NULL)
                                {
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x + 50 >= hero.x&&temp->x + 50 <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y + 50 >= hero.y&&temp->y + 50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x + 50 >= hero.x&&temp->x + 50 <= hero.x + 50) && (temp->y + 50 >= hero.y&&temp->y + 50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        temp = temp->next;
                                }
                                if (result == 1)
                                {
                                        f = wallhead;
                                        while (f != NULL)
                                        {
                                                f->y += 10;
                                                f = f->next;
                                        }
                                        result = 0;
                                }
                        }
                        if (key == 'a' || key == 'A')
                        {
                                hero.left = 1;
                                hero.right = 0;
                                while (walltemp != NULL)
                                {
                                        walltemp->x += 10;
                                        walltemp = walltemp->next;
                                }
                                temp = wallhead;
                                while (temp != NULL)
                                {
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x + 50 >= hero.x&&temp->x + 50 <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y + 50 >= hero.y&&temp->y + 50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x + 50 >= hero.x&&temp->x + 50 <= hero.x + 50) && (temp->y + 50 >= hero.y&&temp->y + 50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        temp = temp->next;
                                }
                                if (result == 1)
                                {
                                        f = wallhead;
                                        while (f != NULL)
                                        {
                                                f->x -= 10;
                                                f = f->next;
                                        }
                                        result = 0;
                                }
                        }
                        else if (key == 'd' || key == 'D')
                        {
                                hero.left = 0;
                                hero.right = 1;
                                while (walltemp != NULL)
                                {
                                        walltemp->x -= 10;
                                        walltemp = walltemp->next;
                                }
                                temp = wallhead;
                                while (temp != NULL)
                                {
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x + 50 >= hero.x&&temp->x + 50 <= hero.x + 50) && (temp->y >= hero.y&&temp->y <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x >= hero.x&&temp->x <= hero.x + 50) && (temp->y + 50 >= hero.y&&temp->y + 50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        if ((temp->x + 50 >= hero.x&&temp->x + 50 <= hero.x + 50) && (temp->y + 50 >= hero.y&&temp->y + 50 <= hero.y + 50))
                                        {
                                                result = 1;
                                        }
                                        temp = temp->next;
                                }
                                if (result == 1)
                                {
                                        f = wallhead;
                                        while (f != NULL)
                                        {
                                                f->x += 10;
                                                f = f->next;
                                        }
                                        result = 0;
                                }
                        }
                }
                attition();
                Sleep(10);
                cleardevice();
        }
}

void attition()
{
        struct square *walltemp;
        walltemp = wallhead;
        BeginBatchDraw();
        putimage(0, 0, &back);
        if (hero.left == 1 && hero.right == 0)
        {
                putimage(hero.x, hero.y, &zme);
        }
        else if (hero.left == 0 && hero.right == 1)
        {
                putimage(hero.x, hero.y, &yme);
        }
        while (walltemp != NULL)
        {
                if (walltemp->shape == 0)
                {
                        putimage(walltemp->x, walltemp->y, &object);
                }
                else if (walltemp->shape == 1)
                {
                        putimage(walltemp->x, walltemp->y, &wall);
                }
                else if (walltemp->shape == 2)
                {
                        putimage(walltemp->x, walltemp->y, &grass);
                }
                else if (walltemp->shape == 3)
                {
                        putimage(walltemp->x, walltemp->y, &water);
                }
                else if (walltemp->shape == 4)
                {
                        putimage(walltemp->x, walltemp->y, &tree);
                }
                walltemp = walltemp->next;
        }
        EndBatchDraw();
        n++;
        if (n == 15)
        {
                i++;
                n = 0;
        }
        if (i == 2)
        {
                i = 0;
        }
}

void main()
{
        initgraph(1300, 600);
        setbkcolor(BLACK);
        cleardevice();
        init();
        squareinit();
        move();
        system("pause");
        closegraph();
}

//BeginBatchDraw();
//EndBatchDraw();

yuesezhenmei 发表于 2019-9-5 13:42:24

有什么需要我修改的 可以发消息

haya 发表于 2019-9-5 23:45:47

0

whofly 发表于 2019-9-6 13:09:08

我看你不错

aodirs8 发表于 2019-9-6 21:12:00

小甲鱼

fcyasddd 发表于 2019-9-6 21:24:52

6666666666

chenchao1999 发表于 2019-9-6 23:17:25

看看

心音子谦 发表于 2019-9-7 00:08:07

学校?,

希德奥 发表于 2019-9-7 15:30:18

大佬huo冰阔落

cielphantom 发表于 2019-9-7 16:46:00

6

rtvr8000 发表于 2019-9-7 17:36:26

鉴赏一下

rtvr8000 发表于 2019-9-7 17:44:04

为什么总是在这儿编译错误通不过呢?!#include <graphics.h>

yuesezhenmei 发表于 2019-9-7 20:27:07

rtvr8000 发表于 2019-9-7 17:44
为什么总是在这儿编译错误通不过呢?!#include

easyx下载这个软件我说了啊

yuesezhenmei 发表于 2019-9-7 20:27:40

心音子谦 发表于 2019-9-7 00:08
学校?,

我是 学医的 这个只是爱好

一个账号 发表于 2019-9-8 20:28:56

看看

一个账号 发表于 2019-9-8 20:32:00

http://p2.so.qhmsg.com/t01797b97cf4b2dd9c9.jpg

huanzhilian 发表于 2019-9-8 22:00:10

了解一下

yzyx 发表于 2019-9-8 22:18:03

修改

284115671 发表于 2019-9-9 09:03:49

康康

yuesezhenmei 发表于 2019-9-9 11:17:29

一个账号 发表于 2019-9-8 20:32


其实 你只要把图片和 .cpp 下载就好 放在一个文件夹 其他的 你运行时会自动生成
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: c语言小游戏超级玛丽行走简易编码