工具

 VS13

项目描述:
本项目是一个2048游戏,基于Win32开发,以C++语言为编程基础。在游戏中,方块的出现完全随机,仅出现在空方格中。当方块出现时,方块上的数字有 90% 的几率为2, 10% 的几率为4。合并规则主要是上下左右移动后,相同的数合并,不相同的数原样输出,要判断每一行或每一列有没有相同的,还有一点就是,数字有移动,就产生新的数,没有,什么都不用做。
项目框架:

效果图:
紫粉色区为预留区,添加其他功能使用

主程序

// _2048.cpp : 定义应用程序的入口点。
//#include "stdafx.h"
#include "_2048.h"#define MAX_LOADSTRING 100
MCI_OPEN_PARMS m_mciOpen;
MCI_PLAY_PARMS m_mciPlay;
bool PlayMp3(TCHAR* szFileNmae);
HMENU   hmenu1 = CreateMenu();
HMENU   hmenu2 = CreateMenu();
HMENU   hmenu3 = CreateMenu();
HMENU   g_hmenu = CreateMenu();
TCHAR cBuffer[] = _T("src/ Continued Story.mp3");
// 全局变量:
HINSTANCE hInst;                                // 当前实例
TCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名HWND g_hwnd;
CManage *mGame = NULL;
// 此代码模块中包含的函数的前向声明:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPTSTR    lpCmdLine,_In_ int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO:  在此放置代码。MSG msg;HACCEL hAccelTable;// 初始化全局字符串LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC__2048, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC__2048));HDC hdc = GetDC(g_hwnd);mGame = new CManage(hdc);mGame->InitGame();// 主消息循环: ZeroMemory(&msg, sizeof(msg));while (msg.message != WM_QUIT){if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg);}hdc = GetDC(g_hwnd);mGame->UpdataGame();mGame->RenderGame(hdc);if (mGame->Gamejudge()){TCHAR* str = L"你输了!";WORD Val = MessageBox(g_hwnd, str, L"2048", 0);if (Val == IDYES)SendMessage(g_hwnd, WM_DESTROY, 0, 0);}if (mGame->isWin()){TCHAR* str = L"恭喜你,组成2048赢得胜利!";WORD Val=MessageBox(g_hwnd, str, L"2048", 0);if (Val == IDYES)SendMessage(g_hwnd, WM_DESTROY, 0, 0);}ReleaseDC(g_hwnd, hdc);}DEL_OBJ(mGame);/*while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}*/return (int) msg.wParam;
}//
//  函数:  MyRegisterClass()
//
//  目的:  注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style           = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra      = 0;wcex.cbWndExtra        = 0;wcex.hInstance     = hInstance;wcex.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI__2048));wcex.hCursor     = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT);wcex.lpszMenuName = MAKEINTRESOURCE(IDC__2048);wcex.lpszClassName = _T("2048小游戏  v1.0");wcex.hIconSm      = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(&wcex);
}//
//   函数:  InitInstance(HINSTANCE, int)
//
//   目的:  保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{HWND hWnd;hInst = hInstance; // 将实例句柄存储在全局变量中AppendMenu(hmenu1, 0, 2001, _T("New Game(&N)        Ctrl+N"));AppendMenu(hmenu3, MF_CHECKED, 2021, _T("open"));AppendMenu(hmenu3, 0, 2022, _T("close"));AppendMenu(hmenu1, MF_POPUP, (UINT)hmenu3, _T("BGM"));AppendMenu(g_hmenu, MF_POPUP | MF_BYCOMMAND, (UINT)hmenu1, _T("File(&F)"));AppendMenu(hmenu2, 0, 3001, _T("About..."));AppendMenu(g_hmenu, MF_POPUP, (UINT)hmenu2, _T("Help(&H)"));hWnd = FindWindow(_T("2048小游戏  v1.0"), nullptr);if (hWnd){MessageBox(0, 0, 0, 0);}hWnd = CreateWindow(_T("2048小游戏  v1.0"), _T("2048小游戏  v1.0"), WS_DLGFRAME | WS_SYSMENU | WS_MINIMIZEBOX,CW_USEDEFAULT, CW_USEDEFAULT, WIDTH, HIGHT, NULL, g_hmenu, hInstance, NULL);g_hwnd = hWnd;if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;
}//
//  函数:  WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    处理主窗口的消息。
//
//  WM_COMMAND  - 处理应用程序菜单
//  WM_PAINT    - 绘制主窗口
//  WM_DESTROY  - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;//TCHAR  str[120];if (mGame){mGame->MyMessage(hWnd, message, wParam, lParam);}//memset(str, 0, sizeof(char)* 120);switch (message){/*case WM_CREATE:CreateWindow(_T("button"), _T("新しいゲーム"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,200, 50, 400, 100, hWnd, NULL, hInst, NULL);break;*///case WM_ACTIVATE://forms activate//   switch (wParam)//   {// case WA_CLICKACTIVE://cursor active//   {//                         static int j = 0;//                            hdc = GetDC(hWnd);//                           wcscpy_s(str, _T("cursor active\0"));//                           TextOut(hdc, 10, j, str, lstrlen(str));//                           ReleaseDC(hWnd, hdc);//                         j += 20; //   }//     break;//    case WA_ACTIVE://not cursor active//    {//                    static int j = 0;//                    hdc = GetDC(hWnd);//                       wcscpy_s(str, _T("not cursor active"));//                     TextOut(hdc, 10, j, str, lstrlen(str));//                       ReleaseDC(hWnd, hdc);//                     j += 20;// }//     break;//    case WA_INACTIVE://cancle forms active//    {//                      static int j = 0;//                        hdc = GetDC(hWnd);//                       wcscpy_s(str, _T("cancle forms active"));//                       TextOut(hdc, 10, j, str, lstrlen(str));//                       ReleaseDC(hWnd, hdc);//                         j += 20;//   }//     break;//    }//case WM_CREATE://create timer//  SetTimer(hWnd, 1010, 240000,nullptr);//     break;//case WM_TIMER://    switch (wParam)//   {// case 1010://    {//     static int j = 0;//        hdc = GetDC(hWnd);//       wcscpy_s(str, _T("timer_4"));//       TextOut(hdc, 10, j, str, ARRAYSIZE(str));//     ReleaseDC(hWnd, hdc);//     j += 20;//    }//     break;//    }// break;case WM_COMMAND:wmId    = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择: switch (wmId){case 2021:CheckMenuItem(hmenu3, 2021, MF_CHECKED);CheckMenuItem(hmenu3, 2022, MF_UNCHECKED);break;case 2022:CheckMenuItem(hmenu3, 2022, MF_CHECKED);CheckMenuItem(hmenu3, 2021, MF_UNCHECKED);break;case 2001:MessageBox(0, L"new game", L"Tips:", 0);break;case 3001:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO:  在此添加任意绘图代码...EndPaint(hWnd, &ps);break;case WM_DESTROY:KillTimer(hWnd, 1010);PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}bool PlayMp3(TCHAR* szFileNmae)
{m_mciOpen.lpstrDeviceType = _T("mpegvideo");m_mciOpen.lpstrElementName = szFileNmae;//open file commandMCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&m_mciOpen);if (mcierror){return false;}else{m_mciPlay.dwCallback = (DWORD)NULL;m_mciPlay.dwFrom = (DWORD)NULL;mciSendCommand(m_mciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD)(LPVOID)&m_mciPlay);}return true;
}// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;
}

Manage:

#include "stdafx.h"CManage::CManage(HDC hdc)
{m_hBUFF = CreateCompatibleDC(hdc);m_hBUFFbit = CreateCompatibleBitmap(hdc, 1024, 768);SelectObject(m_hBUFF, m_hBUFFbit);srand((size_t)time(NULL));map = nullptr;Timer = 0.0f;
}bool CManage::isWin()
{for (size_t i = 0; i < ROW; i++){for (size_t j = 0; j < COL; j++){if (map->GetMapVal(i,j) == 2048)return true;}}return false;
}
bool CManage::Gamejudge()
{for (size_t i = 0; i < ROW; i++){for (size_t j = 0; j < COL; j++){if (map->_isNULL(i, j)){return false;}}}for (int j = 0; j < COL; j++)for (int i = 0; i < ROW - 1; i++){   //相等就相加if ((map->GetMapVal(i, j) == map->GetMapVal(i + 1, j)) || (map->GetMapVal(i, j) == map->GetMapVal(i-1, j)))return false;//不相等就不操作}for (int i = 0; i < ROW; i++)for (int j = 0; j < COL - 1; j++){if ((map->GetMapVal(i, j) == map->GetMapVal(i, j + 1)) || (map->GetMapVal(i, j) == map->GetMapVal(i, j-1)))return false;}return true;
}void CManage::InitGame()
{if (map == nullptr)map = new CMyMap;map->Init();Timer = timeGetTime() / 1000.0f;
}
void CManage::UpdataGame()
{int dir = 0;switch (m_Key){case 'w':dir = map->UpMove();break;case 's':dir = map->DownMove();break;case 'a':dir = map->LeftMove();break;case 'd':dir = map->RightMove();break;}if (dir != 0)map->Add(dir);setKey(' ');
}CManage::~CManage()
{DEL_OBJ(map);DeleteObject(m_hBUFFbit);DeleteObject(m_hBUFF);
}
void CManage::RenderGame(HDC hdc)
{RECT r = { 0, 0, WIDTH, HIGHT };HBRUSH hr = CreateSolidBrush(0x000000);FillRect(m_hBUFF, &r, hr);map->DrawMap(m_hBUFF);BitBlt(hdc, 0, 0, 1024, 768, m_hBUFF, 0, 0, SRCCOPY);DeleteObject(hr);}
void CManage::MyMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_KEYDOWN:switch (wParam){case 'A':case VK_LEFT:m_Key = 'a';break;case 'D':case VK_RIGHT:m_Key = 'd';break;case 'W':case VK_UP:case 'J':m_Key = 'w';break;case 'S':case VK_DOWN:m_Key = 's';break;}break;}
}

MyMap:

#include "stdafx.h"CMyMap::CMyMap()
{memset(&map, 0, sizeof(int)*ROW*COL);Score = 0;
}
CMyMap::~CMyMap()
{
}
void CMyMap::Init()
{memset(&map, 0, sizeof(int)*ROW*COL);Add(0);
}
void CMyMap::DrawMap(HDC hdc)
{int redpix, greenpix;int num = getScore();TCHAR szBuffer[10] = {};   RECT rec = { 0, 0,596,CellSize-2};HBRUSH hb1 = CreateSolidBrush(0x787878);HBRUSH hr = CreateSolidBrush(RGB(238, 130, 238));FillRect(hdc, &rec, hr);FrameRect(hdc, &rec, hb1);DeleteObject(hr);DeleteObject(hb1);TextOut(hdc, CellSize, CellSize/2, (LPCUWSTR)num, lstrlen((LPCUWSTR)num));for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){if (map[i][j]){//变量表示正确,但窗口渲染是相反的RECT rec = { j*CellSize, i*CellSize + 120, (j + 1)*CellSize, (i + 1)*CellSize + 120 };HBRUSH hb1 = CreateSolidBrush(0x787878);HFONT hfont= CreateFont(60, 15,    //高度20, 宽取0表示由系统选择最佳值0, 0,    //文本倾斜,与字体倾斜都为0FW_HEAVY,    //粗体0, 0, 0,        //非斜体,无下划线,无中划线GB2312_CHARSET,    //字符集OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,        //一系列的默认值DEFAULT_PITCH | FF_DONTCARE,(TCHAR*)"华文细黑"    //字体名称);SelectObject(hdc, hfont);SetBkColor(hdc, RGB(255, 255, 255));// 设置文字背景色SetBkMode(hdc, TRANSPARENT);// 设置文字背景透明redpix = map[i][j] * 10 % 256;greenpix = map[i][j] * 40 % 256;HBRUSH hr = CreateSolidBrush(RGB(redpix, greenpix, 0));FillRect(hdc, &rec, hr);FrameRect(hdc, &rec, hb1);//_itoa(map[i][j], szBuffer, 10);TextOut(hdc, j*CellSize + 50, (i + 1)*CellSize, szBuffer, wsprintf(szBuffer, TEXT("%d"), map[i][j]));DeleteObject(hr);DeleteObject(hb1);}else{RECT r = { j*CellSize, i*CellSize + 120, (j + 1)*CellSize, (i + 1)*CellSize + 120 };HBRUSH hb = CreateSolidBrush(RGB(245, 245, 220));HBRUSH hb1 = CreateSolidBrush(0xff00ff);FillRect(hdc, &r, hb);FrameRect(hdc, &r, hb1);DeleteObject(hb);DeleteObject(hb1);}}}
}
void CMyMap::Add(int direction)//生成一个data
{int row, col;int num;num = (rand() % 10 + 1) < 9 ? 2 : 4;row = rand() % 4;col = rand() % 4;switch (direction){case 0:{int i, j;SetMap(row, col, num);num = (rand() % 2 + 1) * 2;i = rand() % 4;while (i == row){i = rand() % 4;}j = rand() % 4;SetMap(i, j, num);}break;case UP:_produce(3, col, num);break;case DOWN:_produce(0, col, num);break;case LEFT:_1produce(row, 3, num);break;case RIGHT:_1produce(row, 0, num);break;}
}
void CMyMap::_produce(int row, int col, int num)
{if (_isNULL(row, col)){SetMap(row, col, num);}else{for (col = 0; col < COL; col++){if (_isNULL(row, col)){SetMap(row, col, num);break;}}}
}
void CMyMap::_1produce(int row, int col, int num)
{if (_isNULL(row, col)){SetMap(row, col, num);}else{for (row = 0; row < ROW; row++){if (_isNULL(row, col)){SetMap(row, col, num);break;}}}
}
int CMyMap::UpMove()
{int i, j, temp;for (j = 0; j < COL; j++){//遇空,每行上移int n = 3;while (n--){for (i = 0; i < ROW - 1; i++)//0列0行的值{if (_isNULL(i, j)){map[i][j] = map[i + 1][j];map[i + 1][j] = 0;}}}//不是空,看是否相等for (i = 0; i < ROW - 1; i++){ //相等就相加if (map[i][j] == map[i + 1][j]){map[i][j] *= 2;setScore(map[i][j]);//后面跟着上移for (temp = i + 1; temp < 3; temp++){map[temp][j] = map[temp + 1][j];map[temp + 1][j] = 0;}}//不相等就不操作}}return UP;
}
int CMyMap::DownMove()
{int i, j, temp;for (j = 0; j < COL; j++){//遇空,每行下移int n = 3;while (n--){for (i = 3; i >0; i--)//0列3行的值{if (_isNULL(i, j)){map[i][j] = map[i - 1][j];map[i - 1][j] = 0;}}}//不是空,看是否相等for (i = 3; i >0; i--){ //相等就相加if (map[i][j] == map[i - 1][j]){map[i][j] *= 2;setScore(map[i][j]);//后面跟着上移for (temp = i - 1; temp >0; temp--){map[temp][j] = map[temp - 1][j];map[temp - 1][j] = 0;}}//不相等就不操作}}return DOWN;
}
int CMyMap::LeftMove()
{int i, j, temp;for (i = 0; i < ROW; i++){//遇空,每行左移int n = 3;while (n--){for (j = 0; j < COL - 1; j++)//0行0列的值{if (_isNULL(i, j)){map[i][j] = map[i][j + 1];map[i][j + 1] = 0;}}}//不是空,看是否相等for (j = 0; j < COL - 1; j++){ //相等就相加if (map[i][j] == map[i][j + 1]){map[i][j] *= 2;setScore(map[i][j]);//后面跟着上移for (temp = j + 1; temp < 3; temp++){map[i][temp] = map[i][temp + 1];map[i][temp + 1] = 0;}}//不相等就不操作}}return LEFT;}
int CMyMap::RightMove()
{int i, j, temp;for (i = 0; i < ROW; i++)//0列0行的值{//遇空,每行上移int n = 3;while (n--){for (j = 3; j >0; j--){if (_isNULL(i, j)){map[i][j] = map[i][j - 1];map[i][j - 1] = 0;}}}//不是空,看是否相等for (j = 3; j >0; j--){ //相等就相加if (map[i][j] == map[i][j - 1]){map[i][j] *= 2;setScore(map[i][j]);//后面跟着上移for (temp = j - 1; temp >0; temp--){map[i][temp] = map[i][temp - 1];map[i][temp - 1] = 0;}}//不相等就不操作}}return RIGHT;}
bool CMyMap::_isNULL(int row, int col)
{return map[row][col] == 0;
}
void CMyMap::SetMap(int row, int col,int num)
{map[row][col] = num;
}

WIN32 2048游戏相关推荐

  1. Cocos2d-x 3.x版2048游戏开发

    Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍如何快速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程,从本篇博客你将可以学习到以下内容: 这里注明一下,本教程来自极客学 ...

  2. 是男人就下100层【第五层】——2048游戏从源代码到公布市场

    上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的全部源码公开并结合这个实例在这篇文 ...

  3. 2048游戏-AI程序算法分析

    针对目前火爆的2048游戏,有人实现了一个AI程序,可以以较大概率(高于90%)赢得游戏,并且作者在stackoverflow上简要介绍了AI的算法框架和实现思路.但是这个回答主要集中在启发函数的选取 ...

  4. 2048游戏的python实现

    2019独角兽企业重金招聘Python工程师标准>>> 一个2048小游戏的python实现 今天看了OSC网友xiaohui_hubei的2048游戏代码感觉很有意思,特意花时间玩 ...

  5. 200 行代码实现 2048 游戏

    创建游戏文件 2048.py 首先导入需要的包: import curses from random import randrange, choice from collections import ...

  6. 2048游戏C语言代码

    听说2048游戏实现起来很easy! 所以今天就试了试!确实不太难,要想编的很成功,也不是太容易!有很多细节需要考虑! 下面是我自己设计的代码,估计里面会漏洞百出!希望路过大神能指点一二! #incl ...

  7. 使用python开发网页游戏_不敢想!不敢想!我用Python自动玩转2048游戏

    近来在折腾selenium自动化, 感觉配合爬虫很有意思, 大多数以前难以模拟登录的网站都可以爬了,折腾了这么久,于是想自动玩个2048游戏!嘿嘿, 我是一个不擅长玩游戏的人, 以前玩2048就经常得 ...

  8. 花了一个深夜,才用C语言写了一个2048游戏雏形

    12年我毕业的第二个月工资,我就买了一个IPAD,然后在IPAD上下了一个2048游戏,玩起来非常爽. 然后这几天看到好几个公众号都发了自己写这个游戏的代码,然后我自己也想试试,所以就有了这篇文章,写 ...

  9. 2048游戏c语言linux简易代码,C语言实现2048游戏代码

    本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下 效果图: 使用文本界面的屏幕绘图库 ncurses. 设计思路: 在满足条件情况下消除方块 允许在游戏主界面(16 宫格) ...

最新文章

  1. 【numpy】np.genfromtxt非常的慢,并且需要读取文件的10倍内存
  2. logic.c:1:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘’ token...
  3. axure实现复选框全选_AxureRP8实战手册-案例73(全选与取消全选效果)
  4. 趣味图解+源码分析,轻松吃透Linux
  5. 男生的哪个“不要”是真的不要?
  6. 领域驱动设计之领域模型_在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……...
  7. 框架优点_铝型材框架相比其他框架的优点
  8. Java可以用到军事方面吗_恭喜遥三运载火箭发射成功,浅谈java在军事方面的运用!...
  9. C++实践笔记(四)----AVL树的简单实现
  10. (day9)357. 计算各个位数不同的数字个数
  11. 测试tf卡读写速度软件,【图】测试工具,看看你的导航使用的TF卡速度有多快?...
  12. 2014Esri全球用户大会之ArcGIS Online
  13. 【必修】人工智能原理 学习笔记(二)chapter 2 产生式系统
  14. AE快速输出GIF动图格式插件:GifGun for Mac(支持ae2022)
  15. java 给图片添加水印_java 为图片添加水印(文字水印、图片水印)
  16. uni-app 小程序项目获取openid
  17. DNS 域名解析系统:CNAME 记录的作用是?
  18. 计算机与资源管理器有何区别,在win7中双击打开计算机和右击打开资源管理器有什么区别...
  19. PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)配置自动连接WIFI无线网络
  20. PlatoFarm进展不断,接连上线正式版以及推出超级原始人NFT

热门文章

  1. 清华姚班陈丹琦获斯隆奖!博士毕业论文是近十年最热之一
  2. AMD RX 7700XT、7800XT和7600显卡参数 RX 7700XT、7800XT和7600相当于什么水平
  3. C#锐利体验 第十六讲 映射
  4. Linux 4.19.111 供电(power supply )子系统
  5. 经销、代销与联营的区别与联系详解
  6. Linux的企鹅图标
  7. 作品集十(平面设计)
  8. 缔造评测领先品牌的鲁大师,近日将有一个大举措
  9. 机器学习笔记~HDF5 library version mismatched error与ImportError: 'save_model' requires h5py问题解决
  10. SQL错误信息:已更新或删除的行值要么不能使该行成为唯一行、要么改变了多个行