网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月15日漏签0天
c语言吧 关注:801,826贴子:4,375,391
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 首页 上一页 1 2 3 4 下一页 尾页
  • 84回复贴,共4页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

回复:直播:一步一步用设计模式编写贪吃蛇

  • 只看楼主
  • 收藏

  • 回复
  • 梦提三尺剑
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主已死,有事烧纸


  • 有主飞机
  • 便当
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1095053393@qq.com,坐等源码


2026-01-15 07:23:52
广告
不感兴趣
开通SVIP免广告
  • 老年人洛云
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
y961298378@163.com
坐等


  • 奋斗啊小骚年
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
489310316@qq.com


  • 奋斗啊小骚年
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主做完给我来一份


  • make1024_com
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这里要多说一句哈,这边所说的设计模式,并不是常见书上的“设计模式”。因为我不会使用书上的定义,就是想到什么说什么,靠我对设计模式的了解给大家写出来。
码客提醒:根据本人这么多年的经验,学习设计模式并不能简单按照书上的N种设计模式把它背下来。而是要多思考我们为什么要使用设计模式,怎么应用到实际的编程中。


  • wosch2
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这么多邮箱 还以为楼主 开车了


  • wzh忧伤歌声
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2289170676谢谢楼主


2026-01-15 07:17:52
广告
不感兴趣
开通SVIP免广告
  • make1024_com
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上面的Window对象,全部是虚函数组成,为什么要这样子呢?
码客:在设计模式的书上经常提到,只能对抽象编程,而不能对实体编程。Window只是抽象出窗口这个东西的最基本的东西,具体实现交给具体的实体去实现即可(稍后的MSWindow将会实现它)


  • 970
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
up


  • make1024_com
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
WIndow接口已经给出来了,但是怎么实现和使用呢?
先看使用:
#include "Api.h"
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
kindow::Window *window = kindow::CreateWindowX(hInstance, "Knake", 10,10,660,550);
window->Start();
return 0;
}
外面调用了2行代码就实现了创建一个窗口,kindow::CreateWindowX的代码如下:
namespace kindow {
class Window;
// 不可移植
Window *CreateWindowX(HINSTANCE instance, const std::string &name, int x, int y, int width, int height) {
return new MSWindow(instance, name, x, y, width, height);
}
}
这里的CreateWindowX是正对具体编程了,小伙伴有什么看法????


  • make1024_com
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上面是使用,下面是Window的实现了,我们先简单实现在微软的Windows的:
class MSWindow : public Window {
public:
MSWindow(HINSTANCE instance, const std::string &name, int x, int y, int width, int height);
virtual ~MSWindow();
private:
void RegisterClass();
BOOL CreateMSWindow();
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
private:
virtual void Start();
virtual void Close();
virtual Timer *CreateTimer();
virtual void Draw(Drawable *drawable, int x, int y);
virtual void AddEventListener(EventListener *listener);
virtual void RemoveEventListener(EventListener *listenr);
private:
std::string name_;
int x_;
int y_;
int width_;
int height_;
HINSTANCE hInstance_;
HWND hWnd_;
};
}


  • make1024_com
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
.cpp的:
#include "MSWindow.h"
#include <assert.h>
namespace kindow {
MSWindow::MSWindow(HINSTANCE instance,const std::string &name, int x, int y, int width, int height) {
hInstance_ = instance;
name_ = name;
x_ = x;
y_ = y;
width_ = width;
height_ = height;
hWnd_ = NULL;
}
MSWindow::~MSWindow() {
}
void MSWindow::RegisterClass() {
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance_;
wcex.hIcon = NULL;
wcex.hCursor = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = name_.data();
wcex.hIconSm = NULL;
RegisterClassEx(&wcex);
}
BOOL MSWindow::CreateMSWindow() {
hWnd_ = CreateWindow(name_.data(), name_.data() , WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance_, NULL);
if (!hWnd_) {
return FALSE;
}
MoveWindow(hWnd_,x_,y_,width_,height_,true);
ShowWindow(hWnd_, true);
UpdateWindow(hWnd_);
return TRUE;
}
// 多个窗口怎么处理
LRESULT CALLBACK MSWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
void MSWindow::Start() {
assert(hWnd_ == NULL);
RegisterClass();
// 如果这边创建失败,怎么通知“业务层”呢?
if (!CreateMSWindow()) {
return;
}
MSG msg;
while(true) {
if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE)) {
if (msg.message == WM_QUIT) {
break;
}
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else {
/*g_paint.m_nowOfPaint = GetTickCount();
if(g_paint.m_nowOfPaint - g_paint.m_passOfPaint >= 40)
{
g_hDC = GetDC(hWnd);
g_paint.Paint(g_snake, g_hDC);
ReleaseDC(hWnd, g_hDC);
} */
}
}
}
void MSWindow::Close() {
}
Timer *MSWindow::CreateTimer() {
return NULL;
}
void MSWindow::Draw(Drawable *drawable, int x, int y) {
}
void MSWindow::AddEventListener(EventListener *listener) {
}
void MSWindow::RemoveEventListener(EventListener *listenr) {
}
}


  • make1024_com
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
现在为止的代码放在:
http://make1024.com/?/article/2
附件:Knake_3_1.rar
需要看的朋友可以去下载看看咯


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 1 2 3 4 下一页 尾页
  • 84回复贴,共4页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示