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
- Win32-2048游戏
- Win32游戏编程
- [Win32] 打字游戏
- Win32 贪吃蛇游戏
- Win32游戏壳
- C++ WIN32(游戏壳)
- [Win32] 打字游戏MFC版
- Win32游戏制作之---FreakOut
- Win32游戏制作之---Bizzard
- Win32游戏制作之---SwordsMan
- Win32实现简单游戏引擎
- VS2008基于Win32游戏平台的构
- 五子棋游戏代码(在win32项目)
- 贪吃蛇游戏win32 application实现
- 射击游戏(OpenGL/C++/win32 SDK)
- C 语言 win32 游戏编程 - 贪吃蛇
- 3D游戏引擎一 win32编程
- C++ WIN32(如何使用游戏壳)
- Windows108个系统命令:
- struts标签库中ognl表达式获取Action中对象的原理
- 文档对象DOM
- 大嘴巴漫谈笔记-抽样分布与假设检验
- [TYVJ 1927] 『Citric II』一道防AK好题 · 模拟
- Win32-2048游戏
- 变量命名规范
- 【软考】——数据流图
- cf 20a BerOS file system
- 理解红黑树的节点插入和删除
- C语言打印指针(地址)的值
- 黑马程序员——OC语言日志——NSMutableString和NSMutableArray 的介绍及使用
- 二:Windows100个系统命令
- javascript基本使用 9 ------call,apply