开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4441|回复: 11
收起左侧

[易语言纯源码] 断断续续学了好几月win32C++了

[复制链接]

结帖率:100% (9/9)
发表于 2018-4-21 18:42:20 | 显示全部楼层 |阅读模式   重庆市重庆市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
断断续续学了好几月win32C++了,琢磨着写个小游戏,没写完(已经能玩)。
卡壳了,想着根据窗口大小调节字体的大小,可是对createfont的参数,都没弄明白,仍需继续努力!决定继续学习一段时间再回头写这些。
2048.jpg
然后,学win32感觉收获还是蛮大的,大家如果易语言玩的差不多了,可以考虑转C++来学win32,能知道好多易语言可能从来不需要关心的问题,比如,有可能很多朋友还不知道消息机制是什么
如果就在论坛做擦边的东西,易语言再合适不过了。
如果是出于爱好啊什么的,完全可以学下C++ win32。
C++和win32是两个不同的东西,不要弄混了。
C++上手的话真的不难,无非就是那几个关键字,不需要精通,这个过程可以在开发中慢慢深入。
需要记的也就是win32那些api,机制,原理了(这些都可以在过程中慢慢中深入,首先了解消息机制,了解一下createwindow函数的参数,就可以弄出个界面来了)
代码贴上来,大家如果知道int,return,for,while,就差不多能看懂,就这么简单……(粘贴到vs就可以跑)
  1. #include <windows.h>
  2. #include <vector>
  3. #include <time.h>
  4. #include <math.h>
  5. #include <CommCtrl.h>
  6. #if defined _M_IX86
  7. #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144c*Ff' language='*'"")
  8. #elif defined _M_X64
  9. #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144c*Ff' language='*'"")
  10. #else
  11. #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144c*Ff' language='*'"")
  12. #endif
  13. #define ID_MI_NEW 1
  14. #define        ID_MI_L1 2
  15. #define ID_MI_L2 3
  16. #define ID_MI_L3 4
  17. #define ID_MI_LX 5
  18. #define ID_MI_OPEN 6
  19. #define ID_MI_SAVE 7
  20. #define        ID_MI_INFO 8
  21. #define ID_MI_EXIT 9
  22. #define ID_MI_MODE 10
  23. #define ID_MI_UNDO 11
  24. #define ID_MI_ABOUTE 12

  25. #define MARGIN 10//可显示区域和边缘的距离
  26. #define MARGINCELL 16//格子之间的距离
  27. #define ROUND 10//可显示区域圆角
  28. #define ROUNDCELL 5//格子圆角

  29. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

  30. class My2048 {//未做方法调用容错处理
  31. public:
  32.         int *mdata;
  33.         int mx, my;//mx表示横向格子数量,my表示纵向格子数量
  34.         bool mmode;//true宽限模式,false严格模式
  35.         int mstate;//0未开始游戏,1游戏中,2游戏结束
  36.         int mscore;//分数
  37.         int mstep;//步数
  38.         HBRUSH hBrush[15];
  39.         void newGame(int x,int y,bool mode) {
  40.                 clear();
  41.                 mx = x, my = y, mmode = mode, mstate = 1, mscore = 0, mstep = 0;
  42.                 mdata = new int[mx*my];
  43.                 memset(mdata, 0, sizeof(int)*mx*my);
  44.                 makeOne(),makeOne();
  45.         }
  46.         void setValue(int x,int y,int value) {
  47.                 mdata[mx*y + x] = value;
  48.         }
  49.         int getValue(int x,int y) {
  50.                 return mdata[mx*y + x];
  51.         }
  52.         bool change(bool direction,bool position) {//合并和移动,direction 横向 纵向,position 正向 反向
  53.                 int offSet = position ? 1 : -1;
  54.                 int start = position ? 0 : (direction ? mx : my) - 1;
  55.                 int end = position ? (direction ? mx : my) - 1 : 0;
  56.                 bool worked{false};
  57.                 if (direction) {//横向
  58.                         for (int y = 0; y < my; ++y) {//遍历每一行
  59.                                 int block = position ? mx : -1;//定义一个阻止位置,防止多次合并
  60.                                 for (int x = end; x!=start-offSet; x -= offSet) {//按方向(相反)遍历每个列格子
  61.                                         if (mdata[mx*y + x]) {
  62.                                                 for (int i = x + offSet; i != block; i += offSet) {//如果格子不是0,尝试按方向移动或合并
  63.                                                         if (mdata[mx*y + i]) {//如果检查目标格子不是0
  64.                                                                 if (mdata[mx*y + i - offSet] == mdata[mx*y + i]) {//如果检查目标格子和准备移动/合并格子值相等
  65.                                                                         mdata[mx*y + i] *= 2;
  66.                                                                         mdata[mx*y + i - offSet] = 0;//成功合并
  67.                                                                         mscore += mdata[mx*y + i];//累加分数
  68.                                                                         block = i;//当前块是合并出来的,不再允许检查
  69.                                                                         worked = true;
  70.                                                                 }
  71.                                                                 break;//如果不是0,不管是否合并,都没有继续检查的必要了,break
  72.                                                         } else {//往空格子移动
  73.                                                                 mdata[mx*y + i] = mdata[mx*y + i - offSet];
  74.                                                                 mdata[mx*y + i - offSet] = 0;//成功移动
  75.                                                                 worked = true;
  76.                                                         }
  77.                                                 }
  78.                                         }
  79.                                 }
  80.                         }
  81.                 } else {
  82.                         for (int x = 0; x < mx; ++x) {//遍历每一列
  83.                                 int block = position ? my : -1;//定义一个阻止位置,防止多次合并
  84.                                 for (int y = end; y!=start-offSet; y -= offSet) {//按方向(相反)遍历每个行格子
  85.                                         if(mdata[mx*y + x])
  86.                                                 for (int i = y + offSet; i!=block; i += offSet) {//如果格子不是0,尝试按方向移动或合并
  87.                                                         if (mdata[mx*i + x]) {//如果检查目标格子不是0
  88.                                                                 if (mdata[mx*(i - offSet) + x] == mdata[mx*i + x]) {//如果检查目标格子和准备移动/合并格子值相等
  89.                                                                         mdata[mx*i + x] *= 2;
  90.                                                                         mdata[mx*(i - offSet) + x] = 0;//成功合并
  91.                                                                         mscore += mdata[mx*i + x];//累加分数
  92.                                                                         block = i;//当前块是合并出来的,不再允许检查
  93.                                                                         worked = true;
  94.                                                                 }
  95.                                                                 break;//如果不是0,不管是否合并,都没有继续检查的必要了,break
  96.                                                         } else {
  97.                                                                 mdata[mx*i + x] = mdata[mx*(i - offSet) + x];
  98.                                                                 mdata[mx*(i - offSet) + x] = 0;//成功移动
  99.                                                                 worked = true;
  100.                                                         }
  101.                                                 }
  102.                                 }
  103.                         }
  104.                 }
  105.                 if (mmode || worked) {
  106.                         ++mstep;
  107.                         makeOne();
  108.                         return true;
  109.                 } else return false;
  110.         }
  111.         bool isNotOver() {//判断游戏是否未结束
  112.                 for (int y = 0; y < my; ++y) {
  113.                         for (int x = 0; x < mx; ++x) {
  114.                                 if (mdata[mx*y + x] == 0) {//存在空白格子
  115.                                         return true;
  116.                                 } else {
  117.                                         if (x < mx - 1 && mdata[mx*y + x + 1] == mdata[mx*y + x]) {//存在横向相同相邻格子
  118.                                                 return true;
  119.                                         }
  120.                                         if (y < my - 1 && mdata[mx*(y + 1) + x] == mdata[mx*y + x]) {//存在纵向相同相邻格子
  121.                                                 return true;
  122.                                         }
  123.                                 }
  124.                         }
  125.                 }
  126.                 return false;
  127.         }
  128.         HBRUSH getBrush(int value) {
  129.                 //int value2 = (log(value)) / log(2);
  130.                 //return hBrush[value2];
  131.                 ///*
  132.                 switch (value) {
  133.                 case 0:return hBrush[0];
  134.                 case 2:return hBrush[1];
  135.                 case 4:return hBrush[2];
  136.                 case 8:return hBrush[3];
  137.                 case 16:return hBrush[4];
  138.                 case 32:return hBrush[5];
  139.                 case 64:return hBrush[6];
  140.                 case 128:return hBrush[7];
  141.                 case 256:return hBrush[8];
  142.                 case 512:return hBrush[9];
  143.                 case 1024:return hBrush[10];
  144.                 case 2048:return hBrush[11];
  145.                 case 4096:return hBrush[12];
  146.                 case 8192:return hBrush[13];
  147.                 default:return hBrush[14];
  148.                 }
  149.                 //*/
  150.         }
  151.         My2048() {
  152.                 int color[]{0xB4C1CD,0xDAE4EE ,0xC8E0ED ,0x79B1F2,
  153.                 0x6395F5,0x5F7*F0x3B5EF6,0x72*F,
  154.                         0x61CCED,0x50C8ED,0x3FC5ED,0x2EC2ED,0xFF0000,0xFF0000,0xA0ADBB

  155.                 };
  156.                 for (int i = 0; i < sizeof(hBrush) / sizeof(HBRUSH); ++i) {
  157.                         hBrush[i] = CreateSolidBrush(color[i]);
  158.                 }
  159.                 mx = 4, my = 4, mstate = 0;//用于打印未开始游戏界面
  160.                 mdata = new int[mx*my];
  161.                 memset(mdata, 0, sizeof(int)*mx*my);
  162.                 mdata[mx*1 + 1] = 2;
  163.                 mdata[mx*2 + 1] = 4;
  164.                 mdata[mx*2 + 2] = 8;
  165.         }
  166.         ~My2048() {
  167.                 clear();
  168.                 for (int i = 0; i < sizeof(hBrush) / sizeof(HBRUSH); ++i) {
  169.                         DeleteObject(hBrush[i]);
  170.                 }
  171.         }
  172. private:
  173.         bool makeOne() {
  174.                 std::vector<int> cells;
  175.                 for (int i = 0; i < mx*my; ++i) {
  176.                         if (!mdata[i]) cells.push_back(i);
  177.                 }
  178.                 if (cells.size()) {
  179.                         srand((unsigned int)time(NULL));
  180.                         int &cell = mdata[cells[rand() % (cells.size())]];
  181.                         srand((unsigned int)time(NULL));
  182.                         cell = rand() % (3 + 1) == 0 ? 4 : 2;
  183.                         return true;
  184.                 } else return false;
  185.         }
  186.         void clear() {
  187.                 delete[] mdata;
  188.         }
  189. };

  190. My2048 my2048;
  191. int lastLevel;//0常规 1扩展 2高级 3自定义
  192. bool mode;//true宽限模式,false严格模式
  193. int rwocolumn;
  194. int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) {
  195.         WNDCLASS wndClass;
  196.         wndClass.cbClsExtra = 0;
  197.         wndClass.cbWndExtra = 0;
  198.         wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  199.         wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  200.         wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  201.         wndClass.hInstance = hInstance;
  202.         wndClass.lpfnWndProc = &WndProc;
  203.         wndClass.lpszClassName = TEXT("sfwindow");
  204.         wndClass.lpszMenuName = NULL;
  205.         wndClass.style = CS_VREDRAW | CS_HREDRAW;
  206.         if (RegisterClass(&wndClass)) {
  207.                 HMENU hMenu = CreateMenu();
  208.                 HMENU hMenuPopup;
  209.                 hMenuPopup = CreatePopupMenu();
  210.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_NEW, TEXT("新游戏(&N)\tF2"));
  211.                 HMENU hMenuChild = CreatePopupMenu();
  212.                 AppendMenu(hMenuChild, MF_STRING, ID_MI_L1, TEXT("常规(4*4)"));
  213.                 AppendMenu(hMenuChild, MF_STRING, ID_MI_L2, TEXT("扩展(5*5)"));
  214.                 AppendMenu(hMenuChild, MF_STRING | MF_MENUBREAK, ID_MI_L3, TEXT("高级(6*6)"));
  215.                 AppendMenu(hMenuChild, MF_STRING, ID_MI_LX, TEXT("自定义(?*?)"));
  216.                 AppendMenu(hMenuPopup, MF_POPUP, (UINT_PTR)hMenuChild, TEXT("级别(&L)"));
  217.                 AppendMenu(hMenuPopup, MF_SEPARATOR, NULL, NULL);
  218.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_OPEN, TEXT("打开(&O)\tCtrl+O"));
  219.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_SAVE, TEXT("保存(&S)\tCtrl+S"));
  220.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_INFO, TEXT("统计信息(&I)\tF4"));
  221.                 AppendMenu(hMenuPopup, MF_SEPARATOR, NULL, NULL);
  222.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_EXIT, TEXT("退出(&X)"));
  223.                 AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hMenuPopup, TEXT("游戏(&G)"));
  224.                 hMenuPopup = CreatePopupMenu();
  225.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_MODE, TEXT("模式选择(&O)"));
  226.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_UNDO, TEXT("撤销(&U)\tCtrl+Z"));
  227.                 AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hMenuPopup, TEXT("选项(&O)"));
  228.                 hMenuPopup = CreatePopupMenu();
  229.                 AppendMenu(hMenuPopup, MF_STRING, ID_MI_ABOUTE, TEXT("关于(&A)"));
  230.                 AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hMenuPopup, TEXT("帮助(&H)"));
  231.                 HWND hwndMain = CreateWindow(TEXT("sfwindow"), TEXT("2048++"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 600, 400, NULL, hMenu, hInstance, NULL);
  232.                 if (hwndMain) {
  233.                         ShowWindow(hwndMain, nCmdShow);
  234.                         UpdateWindow(hwndMain);
  235.                         MSG msg;
  236.                         while (GetMessage(&msg, NULL, 0, 0)) {
  237.                                 TranslateMessage(&msg);
  238.                                 DispatchMessage(&msg);
  239.                         }
  240.                         return msg.wParam;
  241.                 }
  242.         }
  243.         return -1;
  244. }
  245. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
  246.         switch (message) {
  247.         case WM_CREATE: {
  248.                 //CreateWindow(STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT) lParam)->hInstance, NULL);
  249.                 TCHAR szPath[MAX_PATH];
  250.                 GetModuleFileName(NULL, szPath, sizeof(szPath));
  251.                 wsprintf(szPath, TEXT("%s.ini"), szPath);
  252.                 TCHAR szValue[16];
  253.                 GetPrivateProfileString(TEXT("常规"), TEXT("级别"), TEXT("0"), szValue, sizeof(szValue), szPath);
  254.                 lastLevel = _wtoi(szValue);
  255.                 GetPrivateProfileString(TEXT("常规"), TEXT("宽限模式"), TEXT("false"), szValue, sizeof(szValue), szPath);
  256.                 mode = szValue == TEXT("true");
  257.                 GetPrivateProfileString(TEXT("常规"), TEXT("矩阵大小"), TEXT("458759"), szValue, sizeof(szValue), szPath);
  258.                 rwocolumn = _wtoi(szValue);
  259.                 return 0;
  260.                 break;
  261.         }
  262.         case WM_PAINT: {
  263.                 PAINTSTRUCT ps;
  264.                 HDC hdc = BeginPaint(hWnd, &ps);
  265.                 RECT rc;
  266.                 GetClientRect(hWnd, &rc);
  267.                 int width = rc.right - MARGIN * 2;//可显示区域宽度
  268.                 int height = rc.bottom - MARGIN * 2;//可显示区域高度
  269.                 if (width >= 0 && height >= 0) {
  270.                         SelectObject(hdc, GetStockObject(NULL_PEN));
  271.                         SelectObject(hdc, my2048.getBrush(-1));
  272.                         RoundRect(hdc, MARGIN, MARGIN, rc.right - MARGIN, rc.bottom - MARGIN, ROUND, ROUND);
  273.                         int widthCell = (width - MARGINCELL * (my2048.mx + 1)) / my2048.mx;
  274.                         int heightCell = (height - MARGINCELL * (my2048.my + 1)) / my2048.my;
  275.                         if (widthCell >= 0 && heightCell >= 0) {
  276.                                 SetBkMode(hdc, TRANSPARENT);
  277.                                 HFONT hFont=CreateFont(-75, -50, 0, 0, FW_BOLD, false, false, false, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, TEXT("黑体"));
  278.                                 SelectObject(hdc, hFont);
  279.                                 for (int y = 0; y < my2048.my; ++y) {
  280.                                         for (int x = 0; x < my2048.mx; ++x) {
  281.                                                 RECT rcCell{ MARGIN + widthCell*x + MARGINCELL * (x + 1) ,MARGIN + heightCell*y + MARGINCELL * (y + 1),MARGIN + widthCell*(x + 1) + MARGINCELL * (x + 1),MARGIN + heightCell*(y + 1) + MARGINCELL * (y + 1) };
  282.                                                 SelectObject(hdc, my2048.getBrush(my2048.getValue(x, y)));
  283.                                                 RoundRect(hdc, rcCell.left, rcCell.top, rcCell.right, rcCell.bottom, ROUNDCELL, ROUNDCELL);
  284.                                                 if (my2048.getValue(x, y)||(my2048.mstate==0&&y==1&&x==2)) {
  285.                                                         TCHAR szBuff[5];
  286.                                                         wsprintf(szBuff, TEXT("%d"), my2048.getValue(x, y));
  287.                                                         DrawText(hdc, szBuff, -1, &rcCell, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  288.                                                 }
  289.                                         }
  290.                                 }
  291.                                 DeleteObject(SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)));
  292.                         }
  293.                        
  294.                 }
  295.                 EndPaint(hWnd, &ps);
  296.                 break;
  297.         }
  298.         case WM_COMMAND:
  299.                 switch (LOWORD(wParam)) {
  300.                 case ID_MI_NEW:
  301.                         if (my2048.mstate != 1 || MessageBox(hWnd, TEXT("正在游戏中,需要重新开始吗?"), TEXT("提示"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK) {
  302.                                 my2048.newGame(4, 4, mode);
  303.                                 //code
  304.                         }
  305.                         break;
  306.                 case ID_MI_L1:
  307.                         if (my2048.mstate != 1 || MessageBox(hWnd, TEXT("正在游戏中,需要重新开始吗?"), TEXT("提示"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK) {
  308.                                 lastLevel = 0;
  309.                                 my2048.newGame(4, 4, mode);
  310.                         }
  311.                         break;
  312.                 case ID_MI_L2:
  313.                         if (my2048.mstate != 1 || MessageBox(hWnd, TEXT("正在游戏中,需要重新开始吗?"), TEXT("提示"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK) {
  314.                                 lastLevel = 1;
  315.                                 my2048.newGame(5, 5, mode);
  316.                         }
  317.                         break;
  318.                 case ID_MI_L3:
  319.                         if (my2048.mstate != 1 || MessageBox(hWnd, TEXT("正在游戏中,需要重新开始吗?"), TEXT("提示"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK) {
  320.                                 lastLevel = 2;
  321.                                 my2048.newGame(6, 6, mode);
  322.                         }
  323.                         break;
  324.                 case ID_MI_LX:
  325.                         //lastLevel = 3;
  326.                         break;
  327.                 }
  328.         case WM_KEYDOWN:
  329.                 switch (wParam) {
  330.                 case VK_RIGHT:case 'D':
  331.                         if (my2048.mstate == 1) {
  332.                                 my2048.change(true, true);
  333.                         }
  334.                         break;
  335.                 case VK_LEFT:case 'A':
  336.                         if (my2048.mstate == 1) {
  337.                                 my2048.change(true, false);
  338.                         }
  339.                         break;
  340.                 case VK_DOWN:case 'S':
  341.                         if (my2048.mstate == 1) {
  342.                                 my2048.change(false, true);
  343.                         }
  344.                         break;
  345.                 case VK_UP:case 'W':
  346.                         if (my2048.mstate == 1) {
  347.                                 my2048.change(false, false);
  348.                         }
  349.                         break;
  350.                 }
  351.                 InvalidateRect(hWnd, NULL, true);
  352.                 return 0;
  353.                 break;
  354.         case WM_DESTROY:
  355.                 PostQuitMessage(0);
  356.                 return 0;
  357.                 break;
  358.         }
  359.         return DefWindowProc(hWnd, message, wParam, lParam);
  360. }
复制代码
然后发下编译好的exe: 2048 .rar (17.96 KB, 下载次数: 18)

结帖率:100% (9/9)

签到天数: 24 天

 楼主| 发表于 2018-4-21 18:48:27 | 显示全部楼层   重庆市重庆市
include相当于易语言包含某个模块
define 约等于易语言常量(define AAA BBB,这个是编译之前处理,也就是把代码中所有出现AAA的地方替换为BBB)
pragma comment我也不知道什么玩意,百度的!加那一串相当于易语言的 通用控件6.0风格
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2018-7-20 10:38:05 | 显示全部楼层   河南省濮阳市
不错,我喜欢,下载看看
回复 支持 反对

使用道具 举报

结帖率:38% (3/8)
发表于 2018-4-24 19:25:18 | 显示全部楼层   广东省东莞市
太长,我才刚开始,很多看不懂,就仅仅了解你说的int,return,for,while而已
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 9 天

发表于 2018-4-23 09:52:45 | 显示全部楼层   北京市北京市
走在高手之路上
回复 支持 反对

使用道具 举报

结帖率:0% (0/3)
发表于 2018-4-22 19:40:17 | 显示全部楼层   山东省菏泽市
谢谢,以后尝试学习学习
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2018-4-22 18:58:36 | 显示全部楼层   广西壮族自治区南宁市
谢谢,以后尝试学习学习
回复 支持 反对

使用道具 举报

签到天数: 13 天

发表于 2018-4-22 11:29:54 | 显示全部楼层   广东省东莞市
谢谢未来看看
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 24 天

 楼主| 发表于 2018-4-22 10:36:16 | 显示全部楼层   重庆市重庆市
老衲不吃素 发表于 2018-4-21 23:01
用好一个语言就OK了  学什么C还不如玩玩java

我走win32方向
回复 支持 反对

使用道具 举报

结帖率:46% (17/37)
发表于 2018-4-21 23:01:15 | 显示全部楼层   内蒙古自治区赤峰市
用好一个语言就OK了  学什么C还不如玩玩java
回复 支持 反对

使用道具 举报

发表于 2018-4-21 22:43:45 | 显示全部楼层   陕西省西安市
本来想学的,这么多英语,看着头都打了,还是算了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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