植物大战僵尸购买问题

请问一下您的那个植物大战僵尸的源码是下载下来就能直接运行吗?还有它的注释详细吗?
我最近的大一C++游戏估计需要做一个这样的游戏

img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/344870
  • 除此之外, 这篇博客: C语言中调用C++的方法(函数),使用回调函数不使用C++动态库中的 源码展示 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "cppmodule.h"
    #include "c_module.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        // 注册你要在C语言中调用的C++类
        // 该类构造函数中已将方法注册进C语言中
        cppmodule cppm;
    
        // C语言直接调用C++中的方法
        c_module_process();
    
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    • cppmodule.cpp
    #include <QDebug>
    #include "cppmodule.h"
    #include "c_module.h"
    
    cppmodule::cppmodule()
    {
        data1 = 1;
        data2 = 2;
        data3 = 3;
    
        // C++类将方法和数据注册进C语言模块,供C语言模块在需要的时候调用
        c_module_init((void *)print1, (void *)print2, data1, data2, data3);
    }
    
    int cppmodule::print1()
    {
        qDebug("c++ print1");
        return 0;
    }
    
    int cppmodule::print2()
    {
        qDebug("c++ print2");
        return 0;
    }
    
    • cppmodule.h
    #ifndef CPPMODULE_H
    #define CPPMODULE_H
    
    class cppmodule
    {
    public:
        cppmodule();
        static int print1();
        static int print2();
    
    private:
        int data1;
        int data2;
        int data3;
    };
    
    #endif // CPPMODULE_H
    
    • c_module.c
    /**
     * \brief 如果不使用C++动态库,C源码中不能调用C++的内容,只能使用回调函数
     */
    
    #include <stdio.h>
    
    #define NULL ((void *)0)
    typedef int (*pfunc)(void);
    pfunc cppprint1 = NULL, cppprint2 = NULL;
    int cppdata1, cppdata2, cppdata3;
    
    extern int c_module_init(void *func1, void *func2, int data1, int data2, int data3)
    {
        if (func1)
            cppprint1 = func1;
        if (func2)
            cppprint2 = func2;
    
        cppdata1 = data1;
        cppdata2 = data2;
        cppdata3 = data3;
    
        // 测试g++编译C源码时是否支持GNU C的进阶关键字,如typeof
        printf("C++ callback to C module, data size: %d\n", sizeof(typeof(cppdata1)));
    
        return 0;
    }
    
    int c_module_process()
    {
        printf("C++ Class data1~3: %d, %d, %d\n", cppdata1, cppdata2, cppdata3);
    
        if (cppprint1)
            cppprint1();
        if (cppprint2)
            cppprint2();
    
        return 0;
    }
    
    • c_module.h
    #ifndef C_MODULE_H
    #define C_MODULE_H
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    // 供C++中调用,将回调函数注册进本C语言模块
    extern int c_module_init(void *func1, void *func2, int data1, int data2, int data3);
    // C语言模块自己择机执行C++已注册进来的方法
    extern int c_module_process();
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif // C_MODULE_H
    
    • mainwindow.h
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H
    
    • project.pro
    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    CONFIG += c++17
    
    # You can make your code fail to compile if it uses deprecated APIs.
    # In order to do so, uncomment the following line.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    SOURCES += \
        c_module.c \
        cppmodule.cpp \
        main.cpp \
        mainwindow.cpp
    
    HEADERS += \
        c_module.h \
        cppmodule.h \
        mainwindow.h
    
    FORMS += \
        mainwindow.ui
    
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    • mainwindow.ui
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget"/>
      <widget class="QMenuBar" name="menubar"/>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    参考网址:
    极简式从C调用C++类方法

  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点