// 板子:坐标,长度,类型(尖刺 正常 踩上去就破的),板子是否存在
#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;
}
}
}