• 【颓废篇】easyx--2048


    整天待在机房是不是,一直保持学术的态度就比较的难啊~

    所以本蒟蒻就在学术之余学了些奇技淫巧,然后就写了一些奇奇怪怪的程序啊,比如让我们小组dalao们都颓得不亦乐乎的2048~~

    当然,2048的实现还是非常简单的对不对,我的写法估计更麻烦,我相信会有更方便的方式实现。。。

    当然了,OI界学习的信息组dalao们写的程序多半是Console Application啊,就一个黑洞洞的窗口,画个图只能是字符画,看上去会很无聊,缺少图形的界面,于是,本蒟蒻学习了一种奇妙的东西——easyx

    当然了,这种有趣的东西机房弱爆了的DEV C++是不滋磁的啊,所以本蒟蒻又引进了一个非常强大的IDE啊,Visual Studio。。

    这个东西非常的强大,当然平时写写Console的我等是体会不到它的高端的,每写一个程序还要建一个项目,就显得特别蠢~~

    但是,真正建个什么颓废的项目的时候,VS的强大就体现了。。。

    //我是不是扯淡太多了

    终于,今天下午能愉快的放假回家了,就在这里贴一贴代码啊~

    开发环境:vs2015Professional  语言:C/C++

    //2048  源码
    #pragma once
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    const COLORREF bkcolor = 0xFFF070;
    const COLORREF cmdcolor = 0xFFA080;
    const COLORREF emptycolor = 0xE0F0FF;
    const COLORREF scorecolor = 0xE0F0FF;
    
    const int      wndWidth = 470;
    const int      wndHeight = 640;
    const int      PicWidth = 100;
    
    const int      PicX[4] = { 20,130,240,350 };
    const int      PicY[4] = { 190,300,410,520 };
    
    const int      Point[11] = { 2,4,8,16,32,64,128,256,512,1024,2048 };
    
    #define t_srand srand((unsigned)time(NULL))
    #define my_rand ((rand()|rand()<<16)%1000000007)
    
    IMAGE image[12];
    IMAGE number[10];
    
    int board[4][4] = { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} };
    
    BOOL play[4][4];
    
    BOOL End = FALSE;
    int total = 0;
    int record = 0;
    
    const char* FILENAME = "Image\010.bmp";
    
    //Function.h
    #pragma once
    
    #include "Preparation.h"
    
    void Game_Init();
    void Load_Image();
    int  Get_Highest();
    void Load_Highest();
    void New_Number();
    void Msg_React();
    void Move_Up();
    void Move_Down();
    void Move_Left();
    void Move_Right();
    void Put_Number(int, BOOL);
    
    void Game_Init()
    {
    	Load_Image();
    	record=Get_Highest();
    	
    	initgraph(wndWidth, wndHeight);
    	setbkcolor(bkcolor);
    	cleardevice();
    	setfillcolor(cmdcolor);
    	fillrectangle(-1, -1, wndWidth + 1, 171);
    	setfillcolor(emptycolor);
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    			fillrectangle(PicX[i], PicY[j], PicX[i] + PicWidth, PicY[j] + PicWidth);
    	}
    	fillrectangle(wndWidth - 180, 40, wndWidth - 20, 80);
    	fillrectangle(wndWidth - 180, 90, wndWidth - 20, 130);
    	Put_Number(record, 1);
    	Put_Number(0, 0);
    	New_Number();
    	New_Number();
    }
    
    void Load_Image() //A AA 
    { 
    	loadimage(&image[1], _T("Image\2.bmp"), PicWidth, PicWidth);
    	loadimage(&image[2], _T("Image\4.bmp"), PicWidth, PicWidth);
    	loadimage(&image[3], _T("Image\8.bmp"), PicWidth, PicWidth);
    	loadimage(&image[4], _T("Image\16.bmp"), PicWidth, PicWidth);
    	loadimage(&image[5], _T("Image\32.bmp"), PicWidth, PicWidth);
    	loadimage(&image[6], _T("Image\64.bmp"), PicWidth, PicWidth);
    	loadimage(&image[7], _T("Image\128.bmp"), PicWidth, PicWidth);
    	loadimage(&image[8], _T("Image\256.bmp"), PicWidth, PicWidth);
    	loadimage(&image[9], _T("Image\512.bmp"), PicWidth, PicWidth);
    	loadimage(&image[10], _T("Image\1024.bmp"), PicWidth, PicWidth);
    	loadimage(&image[11], _T("Image\2048.bmp"), PicWidth, PicWidth);
    
    	loadimage(&number[0], _T("Image\000.bmp"), 20, 40);
    	loadimage(&number[1], _T("Image\001.bmp"), 20, 40);
    	loadimage(&number[2], _T("Image\002.bmp"), 20, 40);
    	loadimage(&number[3], _T("Image\003.bmp"), 20, 40);
    	loadimage(&number[4], _T("Image\004.bmp"), 20, 40);
    	loadimage(&number[5], _T("Image\005.bmp"), 20, 40);
    	loadimage(&number[6], _T("Image\006.bmp"), 20, 40);
    	loadimage(&number[7], _T("Image\007.bmp"), 20, 40);
    	loadimage(&number[8], _T("Image\008.bmp"), 20, 40);
    	loadimage(&number[9], _T("Image\009.bmp"), 20, 40);
    }
    
    int Get_Highest()
    {
    	using namespace std;
    	fstream gamefile;
    	int game_point;
    	gamefile.open(FILENAME, ios::in);
    	if (!gamefile)
    	{
    		gamefile.open(FILENAME, ios::out);
    		gamefile << 0;
    		return 0;
    	}
    	gamefile >> game_point;
    	if (game_point > 100000000 || game_point % 4)
    		return 0;
    	return game_point;
    }
    
    void Load_Highest()
    {
    	if (total < record)
    		return;
    	using namespace std;
    	fstream gamefile;
    	gamefile.open(FILENAME, ios::out);
    	gamefile << total;
    	record = total;
    	Put_Number(total, 1);
    }
    
    void New_Number()
    {
    	
    	if (End) return;
    	t_srand;
    	int type = abs(my_rand) % 10;
    	int Number = 0;
    	int NumberX = 4, NumberY = 4;
    
    	if (type < 7)
    		Number = 1;
    	else
    		Number = 2;
    
    	do
    	{
    		NumberX = abs(my_rand) % 4;
    		NumberY = abs(my_rand) % 4;
    		type++;
    	} while (board[NumberX][NumberY]);
    
    	board[NumberX][NumberY] = Number;
    
    	BeginBatchDraw();
    	putimage(PicX[NumberY], PicY[NumberX], &image[Number]);
    	EndBatchDraw();
    }
    
    void Msg_React()
    {
    	if (End) return;
    	int k1 = _getch();
    	int k2 = 0;
    	switch (k1)
    	{
    	case 224:
    		k2 = _getch();
    		switch (k2)
    		{
    		case 72:
    			Move_Up();
    			break;
    		case 80:
    			Move_Down();
    			break;
    		case 75:
    			Move_Left();
    			break;
    		case 77:
    			Move_Right();
    		default:
    			break;
    		}
    		break;
    	case 87:
    	case 119:
    		Move_Up();
    		break;
    	case 83:
    	case 115:
    		Move_Down();
    		break;
    	case 65:
    	case 97:
    		Move_Left();
    		break;
    	case 68:
    	case 100:
    		Move_Right();
    		break;
    	default:
    		break;
    	}
    	Load_Highest();
    }
    
    void Move_Up()
    {
    	for (int i = 0; i < 4; i++)
    		for (int j = 0; j < 4; j++)
    			play[i][j] = FALSE;
    	BOOL flag = FALSE;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			if (!board[i][j]) continue;
    			int find = i - 1;
    			int data = board[i][j];
    			while (find >= 0)
    			{
    				if (!board[find][j])
    				{
    					board[find][j] = board[find + 1][j];
    					board[find + 1][j] = 0;
    					flag = TRUE;
    					find--;
    				}
    				else if (board[find][j] == data && !play[find][j])
    				{
    					board[find][j] = data + 1;
    					total += Point[data];
    					board[find + 1][j] = 0;
    					play[find][j] = true;
    					flag = TRUE;
    					find--;
    				}
    				else find = -1;
    			}
    		}
    	}
    	BeginBatchDraw();
    	int Empty_Count = 0;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			if (board[i][j])
    			{
    				putimage(PicX[j], PicY[i], &image[board[i][j]]);
    			}
    			else
    			{
    				fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
    				Empty_Count++;
    			}
    		}
    	}
    	Put_Number(total, 0);
    	EndBatchDraw();
    	if (!Empty_Count)
    	{
    		End = TRUE;
    		return;
    	}
    	if (flag)
    		New_Number();
    }
    
    void Move_Down()
    {
    	for (int i = 0; i < 4; i++)
    		for (int j = 0; j < 4; j++)
    			play[i][j] = FALSE;
    	BOOL flag = FALSE;
    	for (int i = 2; i >= 0; i--)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			if (!board[i][j]) continue;
    			int find = i + 1;
    			int data = board[i][j];
    			while (find <= 3)
    			{
    				if (!board[find][j])
    				{
    					board[find][j] = board[find - 1][j];
    					board[find - 1][j] = 0;
    					flag = TRUE;
    					find++;
    				}
    				else if (board[find][j] == data && !play[find][j])
    				{
    					board[find][j] = data + 1;
    					total += Point[data];
    					board[find - 1][j] = 0;
    					play[find][j] = true;
    					flag = TRUE;
    					find++;
    				}
    				else find = 4;
    			}
    		}
    	}
    	BeginBatchDraw();
    	int Empty_Count = 0;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			if (board[i][j])
    			{
    				putimage(PicX[j], PicY[i], &image[board[i][j]]);
    			}
    			else
    			{
    				fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
    				Empty_Count++;
    			}
    		}
    	}
    	Put_Number(total, 0);
    	EndBatchDraw();
    	if (!Empty_Count)
    	{
    		End = TRUE;
    		return;
    	}
    	if (flag)
    		New_Number();
    }
    
    void Move_Left()
    {
    	for (int i = 0; i < 4; i++)
    		for (int j = 0; j < 4; j++)
    			play[i][j] = FALSE;
    	BOOL flag = FALSE;
    	for (int j = 1; j < 4; j++)
    	{
    		for (int i = 0; i < 4; i++)
    		{
    			if (!board[i][j]) continue;
    			int find = j - 1;
    			int data = board[i][j];
    			while (find >= 0)
    			{
    				if (!board[i][find])
    				{
    					board[i][find] = board[i][find + 1];
    					board[i][find + 1] = 0;
    					flag = TRUE;
    					find--;
    				}
    				else if (board[i][find] == data)
    				{
    					board[i][find] = data + 1;
    					total += Point[data];
    					board[i][find + 1] = 0;
    					play[i][find] = TRUE;
    					flag = TRUE;
    					find--;
    				}
    				else find = -1;
    			}
    		}
    	}
    	BeginBatchDraw();
    	int Empty_Count = 0;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			if (board[i][j])
    			{
    				putimage(PicX[j], PicY[i], &image[board[i][j]]);
    			}
    			else
    			{
    				fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
    				Empty_Count++;
    			}
    		}
    	}
    	Put_Number(total, 0);
    	EndBatchDraw();
    	if (!Empty_Count)
    	{
    		End = TRUE;
    		return;
    	}
    	if (flag)
    		New_Number();
    }
    
    void Move_Right()
    {
    	for (int i = 0; i < 4; i++)
    		for (int j = 0; j < 4; j++)
    			play[i][j] = FALSE;
    	BOOL flag = FALSE;
    	for (int j = 2; j >= 0; j--)
    	{
    		for (int i = 0; i < 4; i++)
    		{
    			if (!board[i][j]) continue;
    			int find = j + 1;
    			int data = board[i][j];
    			while (find <= 3)
    			{
    				if (!board[i][find])
    				{
    					board[i][find] = board[i][find - 1];
    					board[i][find - 1] = 0;
    					flag = TRUE;
    					find++;
    				}
    				else if (board[i][find] == data && !play[i][find])
    				{
    					board[i][find] = data + 1;
    					total += Point[data];
    					board[i][find - 1] = 0;
    					play[i][find] = TRUE;
    					flag = TRUE;
    					find++;
    				}
    				else find = 4;
    			}
    		}
    	}
    	BeginBatchDraw();
    	int Empty_Count = 0;
    	for (int i = 0; i < 4; i++)
    	{
    		for (int j = 0; j < 4; j++)
    		{
    			if (board[i][j])
    			{
    				putimage(PicX[j], PicY[i], &image[board[i][j]]);
    			}
    			else
    			{
    				fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
    				Empty_Count++;
    			}
    		}
    	}
    	Put_Number(total, 0);
    	EndBatchDraw();
    	if (!Empty_Count)
    	{
    		End = TRUE;
    		return;
    	}
    	if (flag)
    		New_Number();
    }
    
    void Put_Number(int NUMBER,BOOL flag)
    {
    	if (flag)
    	{
    		for (int i = 1; i <= 8; i++)
    		{
    			putimage(wndWidth - (20 + 20 * i), 40, &number[NUMBER % 10]);
    			NUMBER /= 10;
    		}
    	}
    	else
    	{
    		for (int i = 1; i <= 8; i++)
    		{
    			putimage(wndWidth - (20 + 20 * i), 90, &number[NUMBER % 10]);
    			NUMBER /= 10;
    		}
    	}
    }
    
    
    //main.cpp
    #include "Preparation.h"
    #include "function.h"
    
    void main()
    {
    	Game_Init();
    	while (!End)
    	{
    		Msg_React();
    	}
    	Sleep(500);
    	closegraph();
    }

    上面提到的图片??
    其实你们可以自己找哦~~
    上面是2048的每个数字~~下面的是显示高分的数字。。看你们的心情咯~~
  • 相关阅读:
    Winform DataGridView单元格的提示信息
    Winform DataGridView添加列头checkbox
    C#解析Json
    Winform 下拉框绑定问题
    Excel数据复制到Winform控件ListView
    ListView 复制到剪切板
    C#定时器
    Winform程序只允许运行一个程序实例
    集合
    java中的锁
  • 原文地址:https://www.cnblogs.com/enzymii/p/8412162.html
Copyright © 2020-2023  润新知