[C] 纯文本查看 复制代码 #include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void loadImage();
void releaseImage();
void addRandomNum(int n);
bool move(int direction);
void draw();
void game2048();
#define DEVIDE 15
#define GRID_WIDTH 106
//ͼƬ
#define NUM_BLOCK 18
PIMAGE blockImgs[NUM_BLOCK], backgroundImg;
key_msg keyMsg;
int board[4][4]; //¸ñ×Ó
//int emptyBlock = 16; //¿Õ¸ñ×ÓÊý
char ch;
void start();
void getRand();
void update();
int main()
{
start();//³õʼ»¯
getRand();//Ëæ»úͼƬ²úÉú
draw();//ͼƬ»æÖÆ
while(1)
{
while(kbmsg())
{
keyMsg = getkey();
if ((keyMsg.msg == key_msg_down)&&((keyMsg.key=='A')||(keyMsg.key=='S')||
(keyMsg.key=='W')||(keyMsg.key=='D')))
{
update();
getRand();
cleardevice();
draw();
}
}
delay_fps(60);
}
getch();
return 0;
}
void loadImage()//Í¼Æ¬ÔØÈë
{
char imgName[40];
//Êý×ÖͼƬ ³õʼ»¯
for (int i = 1, num = 2; i < NUM_BLOCK; i++, num *= 2)
{
blockImgs[i] = newimage();//ÉùÃ÷
sprintf(imgName, "resource\\image\\block_%d.png", num);//×Ö·û´®¸³Öµ
getimage(blockImgs[i], imgName);//ͼƬ¶ÔÏó¸³Öµ
}
//µ×ͼ ³õʼ»¯
backgroundImg = newimage();
getimage(backgroundImg, "resource\\image\\background.png");
}
void start()//³õʼ»¯
{
initgraph(500, 500);//ͼÐγõʼ»¯
setbkcolor(WHITE);
srand(time(0));//Ëæ»úÊý³õʼ»¯
loadImage();//Í¼Æ¬ÔØÈë
setfont(25,0,"Ó×Ô²");//(×ÖÌå¸ß¶È,×ÖÌå¿í¶È(Ϊ0¼´Îª×ÔÊÊÓ¦),×ÖÐÎ)ÉèÖÃ×ÖÌåΪ25,Ó×Ô²×ÖÌå
setbkmode(TRANSPARENT); //ÉèÖÃÎÄ×Ö±³¾°É«ÎªÍ¸Ã÷(ĬÈÏΪÓб³¾°É«)
}
void draw()//ͼÐλæÖÆ
{
putimage_withalpha(NULL, backgroundImg, 0, 0);//»æÖÆ´øÍ¸Ã÷ͨµÀµÄͼÏñ
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
int x = (j + 1) * DEVIDE + j * GRID_WIDTH;
int y = (i + 1) * DEVIDE + i * GRID_WIDTH;
if (board[i][j] != 0)
putimage_withalpha(NULL, blockImgs[board[i][j]], x, y);
}
}
}
void getRand()
{
int x, y;
do
{
x = rand() % 4;
y = rand() % 4;
} while (board[x][y] != 0);
board[x][y] = rand() % 2 + 1;//1-2
}
bool judgeUpSlide()//ÉÏ»¬ÅжÏ
{
for(int i=3;i>=1;i--)
{
for(int j=3;j>=0;j--)
{
if(board[i][j]==0)
{
return true;
}
else if(board[i][j]==board[i-1][j])
{
return true;
}
}
}
return false;
}
bool judgeDownSlide()//Ï»¬ÅжÏ
{
for(int i=3;i>=1;i--)
{
for(int j=3;j>=0;j--)
{
if(board[i][j]==0)
{
return true;
}
else if(board[i][j]==board[i+1][j])
{
return true;
}
}
}
return false;
}
bool judgeLeftSlide()//×ó»¬ÅжÏ
{
for(int i=3;i>=1;i--)
{
for(int j=3;j>=0;j--)
{
if(board[i][j]==0)
{
return true;
}
else if(board[i][j]==board[i][j-1])
{
return true;
}
}
}
return false;
}
bool judgeRightSlide()//ÓÒ»¬ÅжÏ
{
for(int i=3;i>=0;i--)
{
for(int j=3;j>=1;j--)
{
if(board[i][j]==0)
{
return true;
}
else if(board[i][j]==board[i][j+1])
{
return true;
}
}
}
return false;
}
void upSlide()//ÉÏ»¬
{
for(int i=3;i>=1;i--)
{
for(int j=3;j>=0;j--)
{
if((board[i][j]!=0)&&(board[i-1][j]==0))
{
board[i-1][j]=board[i][j];
board[i][j]=0;
}
else if((board[i][j]==board[i-1][j])&&(board[i][j]!=0))
{
board[i-1][j]=(board[i-1][j])+1;
board[i][j]=0;
}
}
}
}
void downSlide()//Ï»¬
{
for(int i=0;i<3;i++)
{
for(int j=3;j>=0;j--)
{
if((board[i][j]!=0)&&(board[i+1][j]==0))
{
board[i+1][j]=board[i][j];
board[i][j]=0;
}
else if((board[i][j]==board[i+1][j])&&(board[i][j]!=0))
{
board[i+1][j]=(board[i+1][j])+1;
board[i][j]=0;
}
}
}
}
void leftSlide()//×ó»¬
{
for(int i=3;i>=0;i--)
{
for(int j=3;j>=1;j--)
{
if((board[i][j]!=0)&&(board[i][j-1]==0))
{
board[i][j-1]=board[i][j];
board[i][j]=0;
}
else if((board[i][j]==board[i][j-1])&&(board[i][j]!=0))
{
board[i][j-1]=(board[i][j-1])+1;
board[i][j]=0;
}
}
}
}
void rightSlide()//ÓÒ»¬
{
for(int i=3;i>=0;i--)
{
for(int j=0;j<3;j++)
{
if((board[i][j]!=0)&&(board[i][j+1]==0))
{
board[i][j+1]=board[i][j];
board[i][j]=0;
}
else if((board[i][j]==board[i][j+1])&&(board[i][j]!=0))
{
board[i][j+1]=(board[i][j+1])+1;
board[i][j]=0;
}
}
}
}
void update()//Êý¾Ý¸üÐÂ
{
switch(keyMsg.key)
{
case 'W':
if(judgeUpSlide()) upSlide();
break;
case 'A':
if(judgeLeftSlide()) leftSlide();
break;
case 'S':
if(judgeDownSlide()) downSlide();
break;
case 'D':
if(judgeRightSlide()) rightSlide();
break;
default:break;
}
}
|