0
点赞
收藏
分享

微信扫一扫

C++ 谁能下一百层

fbd4ffd0717b 2022-02-23 阅读 36
算法


// 板子:坐标,长度,类型(尖刺 正常 踩上去就破的),板子是否存在

#include <iostream>
#include <time.h>
#include <Windows.h>
#include <graphics.h>
#include <stdlib.h> //随机数

const int WIDTH = 480;
const int HEIGHT = 640;
const int BOARD_SPACE = 100;
struct Board
{
    int x;
    int y;
    int len;
    int type;
    bool isShow;
};
struct Role
{
    int x;
    int y;
    int h;//图片高度
    int index;  
};
struct Board board[10];
struct Role mm;

//把图片加载到程序里面来,数据都要类型来存储,
IMAGE img_borad[4];
IMAGE img_mm;

void gameInit();
void gameDraw();
void mmMove();
void boardMove();
//定时器
bool Timer(clock_t ms,int id);
int main()
{
    //创建图形窗口
    initgraph(WIDTH, HEIGHT);
    gameInit();
    while (1)
    {
        //双缓冲绘图
        BeginBatchDraw();
        cleardevice();
        gameDraw();
        EndBatchDraw();
        if (Timer(25, 0))
        {
            boardMove();
        }
        if (Timer(10, 1))
        {
            mmMove(); 
        }
        
        
    }
    getchar();

}

bool Timer(clock_t ms,int id)
{
    static clock_t t[10] = {0};
    if (clock() - t[id] > ms)
    {
        t[id] = clock();
        return true;
    }
    return false;
}
void gameInit()
{

     
    loadimage(img_borad + 0,_T("./res/flip.png"));
    loadimage(img_borad + 1, _T("./res/flip.png"));
    loadimage(img_borad + 2, _T("./res/thorn.png"));
    loadimage(img_borad + 3, _T("./res/thorn.png"));
    loadimage(&img_mm, _T("./res/player.png"));

    for (int i = 0; i < 10; i++)
    {
        if (i == 0)
        {
            board[i].y = rand() % (HEIGHT/3)+50;// 为了不超屏幕
        }
        else
        {
            board[i].y = BOARD_SPACE + board[i - 1].y;
        }
        board[i].len = 75;
        board[i].x = rand()% (WIDTH- board[i].len);// 为了不超屏幕
        
        
        board[i].type =rand()%3;//0,1,2
        board[i].isShow = true;
    }
    //游戏开始,让mm站在第一块板子上
    mm.h = 30;
    mm.x = board[0].x+board[0].len/2-mm.h/2;//mm站在第一块板子中间
    mm.y = board[0].y - mm.h;
    mm.index = 0;//在板子上
}
void gameDraw()
{
    for (int i = 0; i < 10; i++)
    {
        solidrectangle(board[i].x, board[i].y, board[i].x+ board[i].len, board[i].y+ 5);
        //用图片替代画的图
        switch (board[i].type)//0 1 2 
        {
        case 0:
            putimage(board[i].x, board[i].y, img_borad);
            break;
        case 1:
            putimage(board[i].x, board[i].y, img_borad+1);
            break;
        case 2:
            putimage(board[i].x, board[i].y, img_borad+2,SRCAND);
            putimage(board[i].x, board[i].y, img_borad+3,SRCPAINT);
            break;
        }
    }
    putimage(mm.x, mm.y, &img_mm);
}
void mmMove()
{
    if (GetAsyncKeyState(VK_LEFT))
    {
        mm.x -= 2;
    }
    if (GetAsyncKeyState(VK_RIGHT))
    {
        mm.x += 2;
    }
    //判断玩家在哪块板子上
    for (int i = 0; i < 10; i++)
    {
        int x=mm.x+mm.h/2;
        int y= mm.y+mm.h;

        if (x >= board[i].x && x< board[i].x + board[i].len
            && y>board[i].y - 20 && y < board[i].y + 20)
        {

            mm.y = board[i].y - mm.h;
            mm.index = i;
            break;
        }
        else
        {
            mm.index = -1;
        }
        if (mm.index==-1)
        {
            mm.y += 1;

            if (mm.y >= HEIGHT)
            {
                MessageBoxA(0,"游戏结束~!","",0);
                exit(0);
            }
        }
    }
}
void boardMove()
{
    for (int i = 0; i < 10; i++)
    {
        board[i].y -= 2;
        if (board[i].y < 0)
        {
            board[i].y = 10 * BOARD_SPACE;
            board[i].x = rand() % (WIDTH - 75);
            board[i].type = rand() % 3;
        }
    }
}
举报

相关推荐

0 条评论