Discuz! Board

 找回密码
 立即注册
查看: 803|回复: 0

2023.3.4.

[复制链接]

5

主题

5

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2023-3-4 19:33:48 | 显示全部楼层 |阅读模式
[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;
	}
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-31 13:37 , Processed in 0.066202 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表