Win32-2048游戏

来源:互联网 发布:sql大文件导入数据库 编辑:程序博客网 时间:2024/05/21 13:43

这个游戏挺简单的,分享一下我的源码给各位看看吧(不好勿喷)

data.h头文件

#define T 4 struct node{int num[T][T];int bo[T];//标志数组int x,y;int fx[4][2];void mem(){memset(bo,0,sizeof(bo));}node(){fx[0][0]= 1,fx[0][1]= 0;fx[1][0]= 0,fx[1][1]= 1;fx[2][0]= -1,fx[2][1]= 0;fx[3][0]= 0,fx[3][1]= -1;memset(num,0,sizeof(num));}bool jugde(){for(int i=0;i<T;++i){for(int j=0;j<T;++j){  if(!num[i][j])return true;}}return false;}void left(){int u,v;for(int i=0;i<4;++i){mem();for(int j=1;j<4;++j){u = i,v=j;while(v>0&&!num[u][v-1]){num[u][v-1]=num[u][v];num[u][v]=0;v--;}if(v>0&&!bo[v-1]&&num[u][v-1]==num[u][v]){num[u][v-1]+=num[u][v];num[u][v]=0;bo[v-1]=1;}}}}void Up(){int u,v;for(int i=0;i<4;++i){mem();for(int j=1;j<4;++j){u = i,v=j;while(v>0&&!num[v-1][u]){num[v-1][u]=num[v][u];num[v][u]=0;v--;}if(v>0&&!bo[v-1]&&num[v-1][u]==num[v][u]){num[v-1][u]+=num[v][u];num[v][u]=0;bo[v-1]=1;}}}}void Right(){int u,v;for(int i=0;i<4;++i){mem();for(int j=2;j>=0;--j){u = i,v=j;while(v<3&&!num[u][v+1]){num[u][v+1]=num[u][v];num[u][v]=0;v++;}if(v<3&&!bo[v+1]&&num[u][v+1]==num[u][v]){num[u][v+1]+=num[u][v];num[u][v]=0;bo[v+1]=1;}}}}void down(){int u,v;for(int i=0;i<4;++i){mem();for(int j=2;j>=0;--j){u = i,v=j;while(v<3&&!num[v+1][u]){num[v+1][u]=num[v][u];num[v][u]=0;v++;}if(v<3&&!bo[v+1]&&num[v+1][u]==num[v][u]){num[v+1][u]+=num[v][u];num[v][u]=0;bo[v+1]=1;}}}}void Rand(){ srand(GetTickCount());x=rand()%4;y=rand()%4;while(num[x][y]){x=rand()%4;y=rand()%4;}num[x][y]=2;}};


out.h输出头文件

struct Cout {int i,j;node data; COLORREF G_BasicColor[20];void pritf(HWND hWnd){PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd,&ps);HBRUSH brush;//自定义字体{ HFONT hFont;    //字体句柄 hFont = CreateFont                        (                            60,15,    //高度20, 宽取0表示由系统选择最佳值                            0, 0,    //文本倾斜,与字体倾斜都为0                            FW_HEAVY,    //粗体                            0,0,0,        //非斜体,无下划线,无中划线                            GB2312_CHARSET,    //字符集                            OUT_DEFAULT_PRECIS,                                    CLIP_DEFAULT_PRECIS,                                    DEFAULT_QUALITY,        //一系列的默认值                            DEFAULT_PITCH | FF_DONTCARE,                                (TCHAR*)"华文细黑"    //字体名称                        ); SelectObject(hdc, hFont);}for(i=200;i<=500;i+=100){for(j=200;j<=500;j+=100){G_BasicColor[0] = RGB(250, 250, 112);    // 黄G_BasicColor[1] = RGB(220, 39, 75);     // 红G_BasicColor[2] = RGB(232, 123, 20);    // 橙G_BasicColor[3] = RGB(120, 200, 102);   // 黄G_BasicColor[4] = RGB(51, 204, 102);    // 绿G_BasicColor[5] = RGB(10, 143, 224);     // 蓝G_BasicColor[6] = RGB(153, 153, 204);   // 青G_BasicColor[7] = RGB(204, 204, 204);   // 灰int x = data.num[(i-200)/100][(j-200)/100],c=x,t=x;x=0;while(c){c/=2;x++;}if(t==0)brush = CreateSolidBrush(G_BasicColor[0]);elsebrush = CreateSolidBrush(G_BasicColor[x%7+1]);SetBkColor(hdc, G_BasicColor[x%7+1]);// 设置文字背景色SelectObject(hdc, brush);               Rectangle(hdc,i-100,j-100,i,j);  DeleteObject(brush);if(x)//字符输出处理{   TCHAR* str;str = new TCHAR[5];int c=0,da=t;while(da){   str[c++]=(da%10+'0');   da/=10;}str[c]='\0';da=0;c--;while(da<c){str[da]^=str[c];str[c]=str[da]^str[c];str[da]=str[c]^str[da];da++,c--;}TextOut(hdc,(i-100)+20,(j-100)+20,str,_tcslen(str));delete str;}}}EndPaint(hWnd,&ps); }};


main.cpp


#include <Windows.h>#include <tchar.h>#include <iostream>#include <string>#include <vector>using namespace std;#include "Data.h"#include "out.h"Cout out;LRESULT CALLBACK WndProc(HWND hWnd, UINT m, WPARAM wParam, LPARAM lParam);int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE prevInstande, LPTSTR cmd, int nCmdShow){WNDCLASSEX wcex = { 0 };wcex.cbSize = sizeof(WNDCLASSEX);wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);wcex.hInstance = hInstance;wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.lpszClassName = L"我的类";wcex.style = CS_HREDRAW | CS_VREDRAW;RegisterClassEx(&wcex);HWND hWnd = CreateWindow(L"我的类", L"2048", WS_OVERLAPPEDWINDOW,250, 70, 600, 600,HWND_DESKTOP, NULL, hInstance, NULL);out.data.Rand();//生成一个随机数if (!hWnd)return FALSE;ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);MSG msg = { 0 };while (GetMessage(&msg, NULL, 0, 0)){if(!out.data.jugde()){TCHAR* str =L"你输了!";MessageBox(hWnd,str,L"2048",1);  PostQuitMessage(0);return 0;}else{TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hWnd, UINT m, WPARAM wParam, LPARAM lParam){switch(m){   case WM_KEYDOWN:{switch(wParam){   case VK_UP:  /* out.data.Up();*/out.data.left();break;   case VK_DOWN:   /*out.data.down();*/out.data.Right();break;   case VK_LEFT:   /*out.data.left();*/out.data.Up();break;   case VK_RIGHT:   /*out.data.Right();*/out.data.down();break;}InvalidateRect(hWnd,NULL,TRUE);//自动转到输出函数return 0;}case WM_DESTROY:{PostQuitMessage(0);return 0;}case WM_PAINT:{out.data.mem();out.data.Rand();out.pritf(hWnd);}default:return DefWindowProc(hWnd,m,wParam,lParam);}return 0;}


1 0