鱼C论坛

 找回密码
 立即注册
查看: 3790|回复: 25

[作品展示] 笑不活了!编了半个小时的东西,能多拉

[复制链接]
发表于 2022-8-28 20:55:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 C丁洞杀O 于 2022-8-28 21:02 编辑

直接上代码,无介绍,emmm~
#include <windows.h>
#define stone 10001
#define sisscor 10002
#define paper 10003

typedef enum{
        Estone = 1,
        Esisscor = 2,
        Epaper = 3,
}ssp;
HINSTANCE appInstance;
short player, pc;

void SSP() {
        pc = rand() % 4 + 1;
        switch (pc)
        {
        case 1:
                ::MessageBox(NULL, TEXT("电脑出了石头"), TEXT("石头剪刀布"), MB_OK);
                break;
        case 2:
                ::MessageBox(NULL, TEXT("电脑出了剪刀"), TEXT("石头剪刀布"), MB_OK);
                break;
        case 3:
                ::MessageBox(NULL, TEXT("电脑出了布"), TEXT("石头剪刀布"), MB_OK);
                break;
        default:
                break;
        }
        short mc;
        mc = player - pc;
        switch (mc)
        {
        case 0:
                ::MessageBox(NULL, TEXT("游戏平局"), TEXT("石头剪刀布"), MB_OK);
                break;
        case -1: case 2:
                ::MessageBox(NULL, TEXT("你获得了胜利"), TEXT("石头剪刀布"), MB_OK);
                break;
        case -2: case 1:
                ::MessageBox(NULL, TEXT("你输了"), TEXT("石头剪刀布"), MB_OK);
        default:
                break;
        }
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        HWND hBtnStone;
        HWND hBtnSisscor;
        HWND hBtnPaper;
        switch (message)
        {
        case WM_CREATE://初始化
        {
                hBtnStone = (HWND)CreateWindow(TEXT("Button"),
                        TEXT("石头"),
                        WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                        150, 45, 160, 65,
                        hWnd,
                        (HMENU)stone,
                        appInstance,
                        NULL
                        );

                hBtnSisscor = (HWND)CreateWindow(TEXT("Button"),
                        TEXT("剪刀"),
                        WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                        350, 45, 160, 65,
                        hWnd,
                        (HMENU)sisscor,
                        appInstance,
                        NULL
                );
                hBtnPaper = (HWND)CreateWindow(TEXT("Button"),
                        TEXT("布"),
                        WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                        550, 45, 160, 65,
                        hWnd,
                        (HMENU)paper,
                        appInstance,
                        NULL
                );
                break;
        }
        case WM_COMMAND:
        {
                if (LOWORD(wParam) == stone && HIWORD(wParam) == BN_CLICKED)
                {
                        player = Estone;
                        //MessageBox(hWnd, L"石头", L"石头剪刀布", MB_OK);
                }
                if (LOWORD(wParam) == sisscor && HIWORD(wParam) == BN_CLICKED)
                {
                        player = Esisscor;
                        //MessageBox(hWnd, L"剪刀", L"石头剪刀布", MB_OK);
                }
                if (LOWORD(wParam) == paper && HIWORD(wParam) == BN_CLICKED)
                {
                        player = Epaper;
                        //MessageBox(hWnd, L"布", L"石头剪刀布", MB_OK);
                }
                SSP();
                break;
        }
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }
       
        return DefWindowProc(hWnd, message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, INT nCmdShow) {

        appInstance = hInstance;
//        LPCWSTR szAppName = TEXT("Window");
        WNDCLASS wndClass;

        MSG msg;

        wndClass.style = CS_HREDRAW | CS_VREDRAW;
        wndClass.lpfnWndProc = WndProc;
        wndClass.cbClsExtra = 0;
        wndClass.cbWndExtra = 0;
        wndClass.hInstance = hInstance;
        wndClass.hIcon = NULL;
        wndClass.hCursor = NULL;
        wndClass.hbrBackground = CreateSolidBrush(RGB(236, 233, 216));
        wndClass.lpszMenuName = NULL;
        wndClass.lpszClassName = TEXT("window");

        if (!RegisterClass(&wndClass))
        {
                MessageBox(NULL, TEXT("打开失败"),
                        TEXT("error"), MB_OK | MB_ICONERROR);
                return 0;
        }

        HWND hWnd = CreateWindow(TEXT("window"),
                TEXT("石头剪刀布"), WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT,
                800, 200,
                NULL, NULL, hInstance, NULL);

        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);

        while (GetMessage(&msg, NULL, 0, 0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }

        return msg.wParam;
}

评分

参与人数 1荣誉 +2 收起 理由
zhangjinxuan + 2 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-28 21:18:18 | 显示全部楼层
唉,已经缩减过了,原来的只支持C++20的标准,本来想用easyX2D的,但是考虑到可能有人没有~
C是真的冷清啊,但我还是觉得,Python其实也是C编的不是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 18:20:24 | 显示全部楼层
C丁洞杀O 发表于 2022-8-28 21:18
唉,已经缩减过了,原来的只支持C++20的标准,本来想用easyX2D的,但是考虑到可能有人没有~
C是真的冷清啊 ...

这是恶搞吗?

评分

参与人数 1荣誉 -5 鱼币 -5 收起 理由
心驰神往 -5 -5 有病就去治

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 20:21:45 | 显示全部楼层

NO,这是一个石头剪刀布的小游戏,是有点拉,但是可以学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 20:22:16 | 显示全部楼层
学习学习,我们一起努力学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-4 14:12:54 | 显示全部楼层
为啥没注释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-30 15:31:25 | 显示全部楼层
本人为C++GUI小白,楼主可以添加一点注释吗,学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-5 16:35:42 | 显示全部楼层
zhangjinxuan 发表于 2022-11-30 15:31
本人为C++GUI小白,楼主可以添加一点注释吗,学习学习

emmm,这个比较低级(GUI为图形算法,应该用框架来实现的,但如果没学到框架,那就这样吧)
#include <windows.h>
#include <iostream>
// 按键的ID 需要用来 分配数据id
#define stone 10001
#define sisscor 10002
#define paper 10003

#define BackgroundColour CreateSolidBrush(RGB(236, 233, 216))
// #define Background RGB(236, 233, 216)

typedef enum {
        Estone = 1,
        Esisscor = 2,
        Epaper = 3,
} ssp; // 这个只是用来测试的 (enum 用来模拟宏定义)
// 程序必要的句柄(一般由 WinMain 分配 (这里用来全局定义 方便使用))
HINSTANCE appInstance;
short player, pc;// 玩家 和 人机 出的
int score=0;

void SSP(HWND hWnd) {
        // 模拟人机出拳(rand()函数可以获取随机数(rand()% n + a) 表示 最大n+a 最小a)
        pc = rand() % 4 + 1;
        // 旧方法 
        switch (pc) {
                case 1:
                        // 一个弹窗
                        ::MessageBox(hWnd, TEXT("电脑出了石头"), TEXT("石头剪刀布"), MB_OK/* | MB_ICONWARNING*/); // 一个图标
                        break;
                case 2:
                        ::MessageBox(hWnd, TEXT("电脑出了剪刀"), TEXT("石头剪刀布"), MB_OK);
                        break;
                case 3:
                        ::MessageBox(hWnd, TEXT("电脑出了布"), TEXT("石头剪刀布"), MB_OK);
                        break;
                default:
                        break;
        }
        // 新方法 简单 但 绝大多数系统不支持 (放入缓存区,只有接受到paint消息才会绘制) 
//        PAINTSTRUCT ps;
//        HDC hdc = BeginPaint(hWnd, &ps);        // 开始绘画
//        PAINTSTRUCT ps;
//        HDC hdc = BeginPaint(hWnd, &ps);
//        switch (pc) {
//                case 1:
//                        TextOut(hdc, 455, 245, TEXT("人机1:石头"),  52);
//                        break;
//                case 2:
//                        TextOut(hdc, 455, 245, TEXT("人机1:剪刀"),  strlen("人机1:石头"));
//                        break;
//                case 3:
//                        TextOut(hdc, 455, 245, TEXT("人机1:布  "),  strlen("人机1:石头"));
//                        break;
//                default:
//                        //TODO
//                        break;
//        } 
//        EndPaint(hWnd, &ps);
        // 比较 用这样的方法可以快速比较
        short mc = player - pc;
        switch (mc) {
                case 0:
                        ::MessageBox(hWnd, TEXT("游戏平局"), TEXT("石头剪刀布"), MB_OK);
                        break;
                case -1:
                case 2:
                        score += 2;
                        ::MessageBox(hWnd, TEXT("你获得了胜利"), TEXT("石头剪刀布"), MB_OK);
                        break;
                case -2:
                case 1:
                        score -= 1;
                        ::MessageBox(hWnd, TEXT("你输了"), TEXT("石头剪刀布"), MB_OK);
                default:
                        break;
        }
        std::cout << "score = "<<score<<"\n";
        

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
        // 方便使用
        HWND hBtnStone;
        HWND hBtnSisscor;
        HWND hBtnPaper;

        switch (message) {
                case WM_PAINT: 
                        {
                                  PAINTSTRUCT ps;
                                  HDC hdc = BeginPaint(hWnd, &ps);        // 开始绘画
                                  int drawX = 390;
                                  int drawY = 260;
                                  TextOut(hdc, drawX, drawY, TEXT("作者: C丁洞杀O from fishC"),  strlen("作者: C丁洞杀O from fishC"));
                                  EndPaint(hWnd, &ps);
                          }
                break;
                case WM_CREATE: { //初始化
                        // 三个按键
                        hBtnStone = (HWND)CreateWindow(TEXT("Button"),
                                                       TEXT("石头"),
                                                       WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                                       150/*x*/, 45/*y*/, 160/*长*/, 65/*高*/,
                                                       hWnd,
                                                       (HMENU)stone,
                                                       appInstance,
                                                       NULL
                                                      );

                        hBtnSisscor = (HWND)CreateWindow(TEXT("Button"),
                                                         TEXT("剪刀"),
                                                         WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                                         350, 45, 160, 65,
                                                         hWnd,
                                                         (HMENU)sisscor,
                                                         appInstance,
                                                         NULL
                                                        );
                        hBtnPaper = (HWND)CreateWindow(TEXT("Button"),
                                                       TEXT("布"),
                                                       WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                                       550, 45, 160, 65,
                                                       hWnd,
                                                       (HMENU)paper,
                                                       appInstance,
                                                       NULL
                                                      );
                        break;
                }
                case WM_COMMAND: {
                        // 接受到 按下按钮时触发 (判断是哪个)
                        if (LOWORD(wParam) == stone && HIWORD(wParam) == BN_CLICKED) {
                                player = Estone;
                                //MessageBox(hWnd, L"石头", L"石头剪刀布", MB_OK);
                        } else if (LOWORD(wParam) == sisscor && HIWORD(wParam) == BN_CLICKED) {
                                player = Esisscor;
                                //MessageBox(hWnd, L"剪刀", L"石头剪刀布", MB_OK);
                        } else if (LOWORD(wParam) == paper && HIWORD(wParam) == BN_CLICKED) {
                                player = Epaper;
                                //MessageBox(hWnd, L"布", L"石头剪刀布", MB_OK);
                        }
                        // 判断
                        SSP(hWnd);
                        break;
                }
                case WM_DESTROY:
                        PostQuitMessage(0);                        // 不进入消息队列, 直接执行
                        return 0;
                case WM_CLOSE:
                        if (MessageBox(hWnd, TEXT("现在就离开吗?\n不再玩会儿?"), TEXT("游戏助手:"), MB_YESNO | MB_ICONWARNING) == IDYES) {
                                DestroyWindow(hWnd);  // 销毁窗口的消息 (不是销毁窗口 )
                        }
                        break;
                case WM_LBUTTONDOWN:
                        {
                                int xPos;
                                int yPos;
                                xPos = LOWORD(lParam);
                                yPos = HIWORD(lParam);
                                char buf[1024];
                                sprintf_s(buf, 1024, "Curor( x = %d; y = %d )", xPos, yPos);
                                std::cout<<buf<<std::endl;
                        }
                        break;
        }
        // 剩余的事件 交给 Windows 自己处理
        return DefWindowProc(hWnd, message, wParam, lParam);
}
// WinMain入口函数 还可以写成这样
/*
int main() {
 HINSTANCE* hInstance = new HINSTANCE;
 HINSTANCE* hPrevInstance = new HINSTANCE;
 LPSTR* lpCmdLine = new LPSTR;
 INT* nCmdShow = new INT;
}
*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, INT nCmdShow) { // WINAPI 回调方法 __stdcall
        score = 0;
        appInstance = hInstance;
        LPCSTR szAppName = TEXT("Window"); // 这里 类名
        WNDCLASS wndClass;

        MSG msg;
        // Windows 类的风格写法
        wndClass.style = CS_HREDRAW | CS_VREDRAW;
        wndClass.lpfnWndProc = WndProc;
        wndClass.cbClsExtra = 0;
        wndClass.cbWndExtra = 0;
        wndClass.hInstance = hInstance;
        wndClass.hIcon = NULL;
        wndClass.hCursor = NULL;
        wndClass.hbrBackground = (BackgroundColour); // 颜色 (这个个人比较喜欢可以调整, 上面调)
        wndClass.lpszMenuName = NULL;
        wndClass.lpszClassName = szAppName;        // 名字
        /**/

        if (!RegisterClass(&wndClass)) {
                MessageBox(NULL, TEXT("打开失败"),
                           TEXT("error"), MB_OK | MB_ICONERROR);
                return 0;
        }

        HWND hWnd = CreateWindow(szAppName,        // 类名 来找到已经定义好的WNCLASS 窗口风格
                                 TEXT("石头剪刀布") /*标题*/, WS_OVERLAPPEDWINDOW,
                                 CW_USEDEFAULT, CW_USEDEFAULT,
                                 885, 300,
                                 NULL, NULL, hInstance, NULL);
        // 设置窗口不可改动大小 
        DWORD   dwStyle   =   GetWindowLong(hWnd, GWL_STYLE);
        dwStyle   &=   ~(WS_SIZEBOX);
        SetWindowLong(hWnd, GWL_STYLE, dwStyle);

        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
        // 消息函数 (C++ 11 & +)可以这么写 (C++ 11 以下)需要使用阻塞的写法
        while (GetMessage(&msg, NULL, 0, 0)) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        // 返回程序正常退出(-1 为 异常退出)
        return msg.wParam;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-5 21:18:48 | 显示全部楼层
C丁洞杀O 发表于 2023-1-5 16:35
emmm,这个比较低级(GUI为图形算法,应该用框架来实现的,但如果没学到框架,那就这样吧)

谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-7 14:02:42 | 显示全部楼层

emmm,算了,你还是去学算法吧,GUI这个也只能用在Windows,学算法,好用的(<_<)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-1-7 17:31:40 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2023-1-7 21:01 编辑
C丁洞杀O 发表于 2023-1-7 14:02
emmm,算了,你还是去学算法吧,GUI这个也只能用在Windows,学算法,好用的(


为了退役后找工作……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-7 20:57:54 | 显示全部楼层
zhangjinxuan 发表于 2023-1-7 17:31
为了退役后张工作……

咳咳咳,军人啊,敬礼∠(°ゝ°)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 21:01:09 | 显示全部楼层
C丁洞杀O 发表于 2023-1-7 20:57
咳咳咳,军人啊,敬礼∠(°ゝ°)

“退役"只不干算法这一行了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-7 21:03:10 | 显示全部楼层
zhangjinxuan 发表于 2023-1-7 21:01
“退役"只不干算法这一行了……

。。。算法好啊,实际上图形和算法没区别的,再大的屏幕也是由一个又一个的像素组成的,只要得到屏幕的基地址,偏移地址,就可以将每个像素变成颜色
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 21:05:43 From FishC Mobile | 显示全部楼层
C丁洞杀O 发表于 2023-1-7 21:03
。。。算法好啊,实际上图形和算法没区别的,再大的屏幕也是由一个又一个的像素组成的,只要得到屏幕的基 ...

不是这个意思,学算法意味着打竞赛,打竞赛有多艰难?如果一次竞赛打输了,那么竞赛的职业生涯就没了.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 21:06:22 From FishC Mobile | 显示全部楼层
C丁洞杀O 发表于 2023-1-7 21:03
。。。算法好啊,实际上图形和算法没区别的,再大的屏幕也是由一个又一个的像素组成的,只要得到屏幕的基 ...

我是小学生,军人...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-7 21:09:02 | 显示全部楼层
zhangjinxuan 发表于 2023-1-7 21:06
我是小学生,军人...

擦!小学生,就这么厉害了,我这个初中生怎么活啊!呜呜呜,城市套路深,我要会农村!CSP又是个啥比赛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 21:11:48 | 显示全部楼层
C丁洞杀O 发表于 2023-1-7 21:09
擦!小学生,就这么厉害了,我这个初中生怎么活啊!呜呜呜,城市套路深,我要会农村!CSP又是个啥比赛?

这里的学生更卷!市内的小学生都能做中考的试卷了,还能做150
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-7 21:14:28 | 显示全部楼层
zhangjinxuan 发表于 2023-1-7 21:11
这里的学生更卷!市内的小学生都能做中考的试卷了,还能做150!

语文吗?数学,英语那肯定行的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-7 21:15:46 | 显示全部楼层
C丁洞杀O 发表于 2023-1-7 21:09
擦!小学生,就这么厉害了,我这个初中生怎么活啊!呜呜呜,城市套路深,我要会农村!CSP又是个啥比赛?

CSP这个比赛网上一搜就知道了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 04:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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