怎样做小游戏挖金子(VC,源码2)

c++小游戏大集结【免费复制源码】 1.狼人杀 这是一个小游戏,感兴趣的可以看看 代码如下: #include<bits/stdc++.h> #include<cstdio> #include<cstdlib> #include<ctime> #include<windows.h> using namespace std; struct IDname { int geshu; string NAME; }; I... 阅读详情

先别急着看源码,首先要解决的问题是程序框架。

VC只是一个开发环境,支持的是C++。Windows下的程序,当然是用Windows API(Application Programming Interface)写成的。 VC提供了一个类库MFC,如同课本中介绍的一样,“点几下鼠标即可生成一个程序”。控件靠拖动即可生成。很方便,但也是最大的缺陷。隐藏了太多东西。我的电脑中VC的一个链接库有点问题,无法运行MFC程序,API是可以运行的。我用API来做。

既然是API,默认生成的结构是:主函数WinMain,注册类MyRegisterClass,初始化InitInstance,消息处理WndProc。

在InitInstance中处理变量的初始设置。

在WndProc中实现游戏的流程控制。

以前做《俄罗斯方块》,包括博客中贴的《扫雷》,都是用一个变量表示当前的状态。这是一种状态机的转换,很简单,一个状态迁移到另一个状态。不同状态下,有不同的消息处理。我用全局变量iGameState来记录。

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, 

LPARAM lParam)
{
    
switch (message) 
    {
    
case 消息ID:
        
switch(当前状态)
        {
        
case 游戏开始菜单:
            
break;
        
case 游戏进行中:
            
break;
        }
        
break;
    
case 消息ID:
        
break;
    }
}

这个游戏用了多少种状态?

#define GAME_STATE_MENU 0
#define GAME_STATE_MAIN 1

#define GAME_STATE_END 2
#define GAME_STATE_END_NEXT 3

先看游戏的第一个状态GAME_STATE_MENU:用户点击“开始”,进入游戏。

很简单,建一个按钮,处理它的单击消息,修改当前游戏状态。

创建按钮可以用CreateWindow,我没这样做。

画一个图片(我所有的图片资源都是BMP位图),包含两幅图像,一个是按钮正常情况下显示,一个是鼠标移动到上面后显示,并列排放。

怎样显示图片呢?每个图片都由一个位图句柄表示。先把图片文件加载到工程资源resources中,在加载到一个位图句柄。屏幕作为一个显示设备,需要获取他的Device Contexts的句柄。MFC中的CDC就是对设备句柄HDC的封装。Device Contexts,有时候翻译成“设备上下文”,中英文的意思还是有差别,直接叫DC。显示的时候,先画到一个临时的DC,再画到屏幕上。

这个初始化、显示的功能,放到一个类中。这样的小游戏,如果不用类来组织,也能实现功能,但是有大缺点,代码不易维护。一个基本的思想就是:尽量模块化。

void MYBITMAP::Init(HINSTANCE hInstance,int iResource,int row,int col)
{
 BITMAP bm;
 inum=row;
 jnum=col;

 hBm=LoadBitmap(hInstance,MAKEINTRESOURCE(iResource));
 GetObject(hBm,sizeof(BITMAP),&bm);

 width=bm.bmWidth/inum;
 height=bm.bmHeight/jnum;
}

简单说明一下:hInstance程序实例句柄,iResource位图资源ID,row,col,把图像分割成几行几列。函数记录了这张图像的图像句柄,有几行几列,分割后单幅图的宽高。

这是图像的信息记录完成,以下要设置“屏幕DC”,“临时DC”。

void MYBITMAP::SetDC(HDC hdest,HDC hsrc)
{
 hdcdest=hdest;
 hdcsrc=hsrc;
}

从临时DC显示到屏幕上,参数为坐标、第几幅图像:

void MYBITMAP::Show(int x,int y,int iFrame)
{
 xpos=x;
 ypos=y;
 SelectObject(hdcsrc,hBm);
 BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,iFrame*width,0,SRCCOPY); 
}

说明:显示的时候记录了它的坐标,SelectObject将句柄装入临时DC,再BitBlt到屏幕上。

图像的显示问题解决了。下面要判断鼠标坐标,当鼠标移到其上时,改变图像,下面这两个函数入参为鼠标坐标,判断是否在图片范围内,设置framenow。然后,重绘屏幕,根据framenow显示指定图像即可。

int MYBITMAP::MouseOut(int x,int y)
{
 if(x<xpos || x>(xpos+width) || y<ypos || y>(ypos+height))
  framenow=0;

 return 1;
}
int MYBITMAP::MouseOver(int x,int y)
{
 if(x<xpos || x>(xpos+width) || y<ypos || y>(ypos+height))
  return 0;

 framenow=1;
 return 1;
}

看一下这个状态下的消息处理:重绘消息,单击消息,鼠标移动消息

重绘消息:画一个背景,画一个“开始”按钮。

        case WM_PAINT:
            hdcwindow 
= BeginPaint(hWnd, &ps);
            
switch(iGameState)
            {
            
case GAME_STATE_MENU:
                SelectObject(hdcscreen,hback);
                bBack.ShowCenter(
0);
                bBegin.ShowCenter(
200);
                
break;

单击消息:如果鼠标单击了开始按钮,迁移状态。

        case WM_LBUTTONUP:
            
switch(iGameState)
            {
            
case GAME_STATE_MENU:
                
if(bBegin.DetectMouseUp(LOWORD(lParam),HIWORD(lParam)))
                {
                    iGameState
=GAME_STATE_MAIN;
                    
//加载地图
                    gmap.LoadFirstMap();
                    gamecatch.Init();
                    myclock.Begin(hWnd,
100,TIME_MATCH);
                    
//清除当前金钱数量
                    gmap.ClearMoney();
                }
                
break;

鼠标移动消息:检测鼠标坐标,改变图片当前帧(第几幅):

        case WM_MOUSEMOVE:
            
switch(iGameState)
            {
            
case GAME_STATE_MENU:
                bBegin.DetectMouseMove(LOWORD(lParam),HIWORD(lParam));
                
break;

这样,游戏的第一个状态就完成了。且听下回分解。

附:游戏主文件源码

 

// gamegold.cpp : Defines the entry point for the application.
//

#include 
"stdafx.h"
#include 
"resource.h"

#include 
"bitmaptool.h"
#include 
"filereport.h"
#include 
"gamemap.h"
#include 
"catch.h"
#include 
"myclock.h"
#include 
"mybutton.h"
#include 
"myequip.h"

#define MAX_LOADSTRING 100


#define GAME_STATE_MAIN    1
#define GAME_STATE_MENU    0
#define GAME_STATE_END    2
#define GAME_STATE_END_NEXT    3

//FILEREPORT f1("main.txt");

// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                                // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];                                // The title bar text

MYBITMAP bBegin(GAMEWIDTH,GAMEHEIGHT);
MYBITMAP bMap(GAMEWIDTH,GAMEHEIGHT);
MYBITMAP bEarth(GAMEWIDTH,GAMEHEIGHT);
MYBITMAP bObject(GAMEWIDTH,GAMEHEIGHT);
MYBITMAP bBack(GAMEWIDTH,GAMEHEIGHT);
MYBITMAP bFire(GAMEWIDTH,GAMEHEIGHT);
MYBITMAP bBombAni(GAMEWIDTH,GAMEHEIGHT);

MYEQUIP bEquip;

struct EQUIP
{
    
int iPrice;
    
char info[100];
};
struct EQUIP equip[]={
    {
100,"炮:能炸掉抓到的物品 100元"},
    {
200,"体力:加快拉动物品的速度 200元"}};

MYBUTTON btNext;

HDC hdcwindow,hdcscreen,hdcmem;
HBITMAP hback;

HFONT hf[
5];

//游戏状态
int iGameState=GAME_STATE_MENU;


GAMEMAP gmap;
GAMECATCH gamecatch;
MYCLOCK myclock;

//
void InitFont()
{
    
char temp[10]={0};
    
int i;

    
for(i=0;i<=sizeof(hf)/sizeof(HFONT);i++)
    {
        sprintf(temp,
"black%d",i);
        hf[i]
=CreateFont(10*(i+2),0,0,0,FW_HEAVY,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
                CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH
|FF_DONTCARE,temp);
    }
}

// Foward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, 
int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     
int       nCmdShow)
{
     
// TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    
// Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_GAMEGOLD, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    
// Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        
return FALSE;
    }

    hAccelTable 
= LoadAccelerators(hInstance, (LPCTSTR)IDC_GAMEGOLD);

    
// Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(
&msg);
            DispatchMessage(
&msg);
        }
    }

    
return msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    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            
= LoadIcon(hInstance, (LPCTSTR)IDI_GAMEGOLD);
    wcex.hCursor        
= LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    
= (HBRUSH)(COLOR_WINDOW+1);
//    wcex.lpszMenuName    = (LPCSTR)IDC_GAMEGOLD;
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    
= szWindowClass;
    wcex.hIconSm        
= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    
return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;
    
int x,y;
    
    hInst 
= hInstance; // Store instance handle in our global variable
    
    hWnd 
= CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 
0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
    
    
if (!hWnd)
    {
        
return FALSE;
    }
    
    
//窗口居中
    x=GetSystemMetrics(SM_CXSCREEN);
    y
=GetSystemMetrics(SM_CYSCREEN);
    MoveWindow(hWnd,(x
-GAMEWIDTH)/2,(y-GAMEHEIGHT)/2,GAMEWIDTH,GAMEHEIGHT,false);
    
    hdcwindow
=GetDC(hWnd);
    hdcmem
=CreateCompatibleDC(hdcwindow);
    hdcscreen
=CreateCompatibleDC(hdcwindow);
    
    gmap.hdc
=hdcscreen;
    
    myclock.SetDC(hdcscreen);
    
    ReleaseDC(hWnd,hdcwindow);
    
    
//设置字体
    InitFont();
    gmap.SetFont(hf,
sizeof(hf));

    
//加载图像
    hback=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP_NULL));

    bBack.Init(hInst,IDB_BITMAP_NULL,
1,1);
    bBack.SetDC(hdcscreen,hdcmem);
    bBegin.Init(hInst,IDB_BITMAP_BEGIN,
2,1);
    bBegin.SetDC(hdcscreen,hdcmem);
    bMap.Init(hInst,IDB_BITMAP_GROUND,
1,1);
    bMap.SetDC(hdcscreen,hdcmem);
    bEarth.Init(hInst,IDB_BITMAP_EARTH,
3,1);
    bEarth.SetDC(hdcscreen,hdcmem);
    bObject.Init(hInst,IDB_BITMAP_OBJECT,
5,1);
    bObject.SetDC(hdcscreen,hdcmem);
    bEquip.Init(hInst,IDB_BITMAP_EQUIP,
3,1);
    bEquip.SetDC(hdcscreen,hdcmem);
    bFire.Init(hInst,IDB_BITMAP_FIRE,
1,1);
    bFire.SetDC(hdcscreen,hdcmem);
    bBombAni.Init(hInst,IDB_BITMAP_BOMB,
4,1);
    bBombAni.SetDC(hdcscreen,hdcmem);
    
    
//按钮
    btNext.Init("下一关",RGB(0,0,255),RGB(0,128,255),
        RGB(
255,255,0),RGB(255,255,128),hf[3]);
    btNext.SetDC(hdcscreen,hdcmem);
    
    
//得到总关数
    gmap.GetMatchNum();
    
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
        
    
return TRUE;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND    - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY    - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    
int wmId, wmEvent;
    
int i;

    PAINTSTRUCT ps;

    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

    
switch (message) 
    {
        
case WM_COMMAND:
            wmId    
= LOWORD(wParam); 
            wmEvent 
= HIWORD(wParam); 
            
// Parse the menu selections:
            switch (wmId)
            {
                
case IDM_ABOUT:
                   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
                   
break;
                
case IDM_EXIT:
                   DestroyWindow(hWnd);
                   
break;
                
default:
                   
return DefWindowProc(hWnd, message, wParam, lParam);
            }
            
break;
        
case WM_PAINT:
            hdcwindow 
= BeginPaint(hWnd, &ps);
            
switch(iGameState)
            {
            
case GAME_STATE_MENU:
                SelectObject(hdcscreen,hback);
                bBack.ShowCenter(
0);
                bBegin.ShowCenter(
200);
                
break;
            
case GAME_STATE_MAIN:
                bMap.ShowCenter(
0);
                bEarth.ShowLoop(
0,80,GAMEWIDTH,GAMEHEIGHT,gmap.GetMatchNow());
                
                
for(i=0;i<gmap.iObjectNum;i++)
                {
                    
if(gmap.objectarray[i].id<=0)
                    {
                        
continue;
                    }
                    bObject.ShowNoBack(gmap.objectarray[i].x,
                                gmap.objectarray[i].y,
                                gmap.objectarray[i].id
-1);
                
                }
                gamecatch.DrawAngle(hdcscreen);
                gmap.ShowMoneyNow();
                bFire.ShowNoBackLoop(
389,46,0,gmap.iFireNum);
                bBombAni.ShowAni();
                myclock.Show();
                
break;
            
case GAME_STATE_END:
                gmap.GameEnd();
                
break;
            
case GAME_STATE_END_NEXT:
                gmap.GameNext();
                bEquip.ShowFramesNoBack(
80,150,2);    
                bEquip.ShowFrameLast();
                
if(bEquip.gridnow>=0 && bEquip.gridnow<=2)
                {
                    TextOut(hdcscreen,
80,220,equip[bEquip.gridnow].info,
                                strlen(equip[bEquip.gridnow].info));
                }
                btNext.Show(
350,50);
                
break;
            }
               BitBlt(hdcwindow,
0,0,GAMEWIDTH,GAMEHEIGHT,hdcscreen,0,0,SRCCOPY);
            EndPaint(hWnd, 
&ps);
            
break;
        
case WM_MOUSEMOVE:
            
switch(iGameState)
            {
            
case GAME_STATE_MENU:
                bBegin.DetectMouseMove(LOWORD(lParam),HIWORD(lParam));
                
break;
             
case GAME_STATE_END_NEXT:
                btNext.DetectMouseMove(LOWORD(lParam),HIWORD(lParam));
                bEquip.DetectMouseOverGrid(LOWORD(lParam),HIWORD(lParam));
                
break;
            }
            InvalidateRect(hWnd,NULL,
false);
            
break;
        
case WM_LBUTTONUP:
            
switch(iGameState)
            {
            
case GAME_STATE_MENU:
                
if(bBegin.DetectMouseUp(LOWORD(lParam),HIWORD(lParam)))
                {
                    iGameState
=GAME_STATE_MAIN;
                    
//加载地图
                    gmap.LoadFirstMap();
                    gamecatch.Init();
                    myclock.Begin(hWnd,
100,TIME_MATCH);
                    
//清除当前金钱数量
                    gmap.ClearMoney();
                }
                
break;
             
case GAME_STATE_END_NEXT:
                
if(btNext.DetectMouseUp(LOWORD(lParam),HIWORD(lParam)))
                {
                    iGameState
=GAME_STATE_MAIN;
                    gmap.LoadMap();
                    gamecatch.Init();
                    myclock.Begin(hWnd,
100,TIME_MATCH);                    
                }
                
if(bEquip.DetectMouseOverGrid(LOWORD(lParam),HIWORD(lParam)))
                {
                    bEquip.UseEquip();
                    
//使用了道具
                    gmap.UseEquip(equip[bEquip.gridnow].iPrice,bEquip.gridnow,gamecatch);
                }
                
break;
            }                    
            InvalidateRect(hWnd,NULL,
false);
            
break;
        
case WM_KEYDOWN:
            
switch(iGameState)
            {
            
case GAME_STATE_MAIN:
                gamecatch.KeyProc(wParam);
                gmap.KeyProc(wParam);
                InvalidateRect(hWnd,NULL,
false);
                
break;            
            }
            
break;
        
case WM_TIMER:
            
switch(iGameState)
            {
            
case GAME_STATE_MAIN:
                
if(myclock.Dec())
                {
                    
//时间到
                    iGameState=GAME_STATE_END;
                    myclock.Begin(hWnd,
100,3);
                    InvalidateRect(hWnd,NULL,
false);
                    
break;
                }
                gamecatch.TurnAngle();
                
if(1==gamecatch.iState)
                {
                    
//在叉子伸出的过程中检测是否抓到物品
                    if(gmap.DetectCatch(gamecatch.xpos,gamecatch.ypos,gamecatch.iAngle))
                    {
                        
//如果抓到物品
                        gamecatch.SetState(2);//开始收回
                        gmap.SetSpeedBack(gamecatch);                    
                    }
                }
                
//移动物品
                gmap.MoveObject(gamecatch.xpos,gamecatch.ypos,gamecatch.iAngle);
                InvalidateRect(hWnd,NULL,
false);
                
break;
            
case GAME_STATE_END:
                
if(myclock.Dec())
                {
                    
//动画结束
                    gmap.GameEndAniOver();
                    
//点击进入下一关
                    if(gmap.CanNextMatch())
                    {
                        bEquip.ClearUseFlag();
                        iGameState
=GAME_STATE_END_NEXT;
                    }
                    
else
                    {
                        iGameState
=GAME_STATE_MENU;
                    }
                }
                InvalidateRect(hWnd,NULL,
false);
                
break;
            }
            
break;
        
case WM_DESTROY:
            DeleteDC(hdcmem);
            DeleteDC(hdcscreen);
            PostQuitMessage(
0);
            
break;
        
default:
            
return DefWindowProc(hWnd, message, wParam, lParam);
   }
   
return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    
switch (message)
    {
        
case WM_INITDIALOG:
                
return TRUE;

        
case WM_COMMAND:
            
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
            {
                EndDialog(hDlg, LOWORD(wParam));
                
return TRUE;
            }
            
break;
    }
    
return FALSE;
}
C++ 小游戏3个 [免费复制源码] 今天为大家准备了3个C++小游戏,第一次写博文,希望大家多多支持! 阅读详情

相关推荐

c++小游戏(附源码)

一些不错的c++游戏

扫雷

#include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<queue> #include<ctype.h> #define A 17 //地图的高 #define B 17...

panjoel的博客 1718

CC++ 开发的 游戏源码(精品)

CC++开发的坦克游戏源码(精品) 扫雷 计算器 俄罗斯方块 贪吃蛇 五子棋

c/c++ 实现俄罗斯方块小游戏(附全部源码)

使用easyX库,基于c/c++,实现俄罗斯方块小游戏。(附全部源码)

q841447739的博客 2万+

c++小游戏 c++小游戏-源代码

c++小游戏 c++小游戏-源代码 c++小游戏 c++小游戏c++小游戏 c++小游戏

第二十三章 Nest集成日志框架Winston

Winston是一个非常流行的Node.js日志框架,而Nest.js是一个基于Node.js的后端框架。修改 winston.module.ts 内容如下 添加 forRoot 方法,接收 winston 的 createLogger 方法的参数,返回动态模块的 providers、exports。这里用到了 printf 的 format 函数,它可以自定义打印的日志格式 且使用了chalk 加上了颜色,并且打印了 dayjs 格式化的时间。可以看到控制台打印了自定义的 logger 的自定义。

枫ゞ的博客 1069

c++小游戏(附源码)(可转载)

c++小游戏(附源码)(可转载)

orix00000的博客 1万+

标准恢复二极管整流器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

报告页数: 150 图表数: 100 报告价格:¥16800 本文研究全球与中国市场标准恢复二极管整流器的发展现状及未来发展趋势,分别从生产和消费的角度分析标准恢复二极管整流器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。 主要生产商包括: Yangzhou Yangjie Vishay Intertechnology Power Semiconductors Inc Nexperia B

Fj69258的博客 5848

怎样做小游戏挖金子(VC,源码4)

 有人下载我的工程文件,“我很欣慰”,名字是“挖金子VC版源码”,大家多讨论。上回讲哪了?地图加载了,物品能显示了。该显示画面上方摆动的叉子了。计算机图形学的“图形旋转”,当然,有一个WINDOWS API函数PlgBlt,可我没有用。网上有很多介绍图形旋转的文章,我还是讲解一下我这个函数:void GAMECATCH::TcDrawAngleOff(HDC hdc,int *pv,f

programking的快乐生活 2812

如何利用ADS中的耦合线设计带通滤波器并转换为HFSS模型

耦合线带通滤波器是一种常用的微带滤波器形式,由多个长度为四分之一波长的耦合线节组成,在所需频点形成谐振,构成滤波器的频率响应特性。首先我们先来了解一下耦合线带通滤波器的电路结构,见下图:包括两对耦合线,中间为公共连接点,其中两对耦合线的偶奇模阻抗为(Z1e,Z1o)和(Z2e,Z2o,端口输入阻抗为Z0)。2.指定一个初始奇偶模值,ADS优化出一个合适的结果,通过奇偶模值利用linecalc工具计算出微带耦合线尺寸。假设中心频率为2GHz,则对应频点的电长度为。5.运行结果,两个软件仿真结果基本一致。

auqihc的博客 2227

【技术解析】华为智算中心:昇腾AI算力与无损网络如何驱动大模型训练

本文深入解析了华为智算中心如何通过昇腾AI算力与超融合以太无损网络的协同,驱动千亿参数大模型的高效训练。昇腾NPU提供专用计算引擎,而基于RoCE的无损网络则通过PFC、ECN等技术确保万卡集群间的高带宽、零丢包通信,实现算力利用率最大化,解决大规模AI训练的核心瓶颈。

weixin_29311017的博客 192

怎样做小游戏挖金子(VC,源码5)

今天的程序讲课,开始。 前面几讲,涉及程序框架、地图文件、叉子的摆动、旋转拉伸,这几方面都可以归纳为基本数据处理,今天讲“交互”,很简单,判断叉子抓到物品,当拉回后,增加金钱数量。核心是碰撞检测。网上的这个游戏是FLASH作的,FLASH的碰撞检测就一个函数,即可实现各式各样的图形检测。VC中,就用自己动手。最初的想法,是把叉子看成一个圆形,各种矿石也看成圆形,做两个圆形的检测,只要检测圆

programking的快乐生活 3435

【软考】数据库系统工程师备考指南(一)

目录一、数据库系统工程师简介二、考试要求三、考试目标四、考试范围(一)信息系统知识(二)数据库系统设计与管理 一、数据库系统工程师简介 数据库系统工程师考试属于全国计算机技术与软件专业技术资格(水平)考试(简称计算机软件水平资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。笔试安排在一天之内。 2022 年数据库系统工程

邓邓子的博客 3859

c++小游戏代码(5个) 免费

DEV-C++的编程内容十分受限,想编游戏更是天方夜谭,但总有大神,我为大家准备了5个dev-c++就能编的程序

studyhard520的博客 21万+

第十六章:载板制造工艺大全

本文详细介绍了IC载板制造的完整工艺流程,主要包括开料、钻孔、孔金属化、图形形成、层压、表面处理、成型和电测8大工序。每个工序都列出了关键参数和质量控制要点,如开料尺寸精度±0.1mm、激光钻孔孔径50-150μm、孔金属化铜厚20-30μm、图形形成线宽15μm±2μm等。文中还特别说明了MSAP工艺和沉金等特殊工艺的详细流程,以及成型精度和电测标准等关键指标。全文通过流程图和参数表格直观展示了IC载板制造的核心工艺和质量要求。

Open 184

企业级托管钱包架构设计与MPC密钥管理:基于Go语言的生产级实践

本文探讨了2026年Web3生态中企业级托管钱包的技术架构与实现方案。文章指出,传统私钥管理模式已无法满足机构级资产管理需求,而基于多方安全计算(MPC)和门限签名(TSS)的技术方案成为主流选择。研究分析了托管钱包的四层架构设计,详细解读了MPC的核心技术原理,包括分布式密钥生成(DKG)和签名协议演进。通过Go语言实现案例,展示了密钥分片管理、DKG流程和交易签名等核心模块的代码实现。文章还提出了生产部署的安全原则、容灾设计和监控体系,并讨论了密钥撤销等现存挑战及TEE融合等未来趋势。研究为构建安全、高

分享AI、区块链技术及应用,未来已来 81

C++小游戏——卡牌加减乘

#include <iostream> #include <algorithm> #include <cstdlib> #include <ctime> using namespace std; // 运算牌 struct Card { // 运算符 op 0:- 1:+ 2:* // 数字 num int op, num; void print() { if (op == 0) { ...

YOU54188的博客 3426

springboot整合sharding-jdbc实现分库分表详解

springboot整合sharding-jdbc实现分库分表详解

congge 9090

c++小游戏7个代码

贪吃蛇游戏的代码较为复杂,通常需要使用图形库(如SFML或SDL)来实现。俄罗斯方块游戏的代码也较为复杂,通常需要使用图形库来实现。打砖块游戏的代码也较为复杂,通常需要使用图形库来实现。扫雷游戏的代码也较为复杂,通常需要使用图形库来实现。迷宫游戏的代码也较为复杂,通常需要使用图形库来实现。

gyvfhv的博客 9561

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

c/c++趣味小游戏集

可以在Dev-C++中编译c/c++小游戏

cnds123的专栏 4万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

c++经典小游戏,源码奉上(免费复制)

这是一个地道战争的游戏 这里有一个平面图,可以选择挖掘、建设。可以给自己建一个国家,加强护栏,记得小心炸弹💣 不说了,直接摆上源码 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<queue> #include<ctype.h> #define A 17 //地...

1 12万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c++小游戏——拯救公主

#include<stdio.h> #include<ctime> #include<time.h> //suiji #include<windows.h> //SLEEP函数 struct Player //玩家结构体,并初始化player { char name[21]; int atta...

ShineEternal的笔记小屋 2443

C语言实现推箱子游戏

很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~ 一、介绍 开发语言:C语言 开发工具:Dev-C++ 5.11 日期:2019年9月28日 作者:ZackSock 也不说太多多余的话了,先看一下效果图: 游戏中的人物、箱子、墙壁、球都是字符构成的。通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。 二、代...

ZackSock的博客 12万+
上一篇: 怎样做小游戏挖金子(VC,源码1)
下一篇: 怎样做小游戏挖金子(VC,源码3)
programking
博客等级 码龄23年 450粉丝 140原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值