嵌入式编译工具链熟悉与游戏移植

在自己的虚拟机Ubuntu系统下,逐步编译 mininim源码(波斯王子重制开源版)

指令流程

bash 复制代码
sudo apt-get remove liballegro5-dev liballegro-image5-dev \
  liballegro-audio5-dev liballegro-acodec5-dev liballegro-dialog5-dev
sudo apt-get install automake autoconf gcc make gnulib cmake lua50 \
  liblua50-dev liblualib50-dev libreadline-dev
sudo apt-get build-dep allegro5
git clone https://github.com/oitofelix/allegro5.git
cd allegro5
cmake
make
sudo make install
cd ..
git clone https://github.com/oitofelix/mininim.git
cd mininim
./bootstrap
./configure LUA_LIB="-llua50 -llualib50"
make
./mininim

进入allegro5文件夹里有对应的cmake文件,但此时还不能直接cmake

在 CMakeLists.txt 文件中的 find_package(OpenGL) 之前添加set(OpenGL_GL_PREFERENCE GLVND) 。

这样配置后,CMake 会使用 GLVND(现代 OpenGL)而不是传统的 LEGACY 库。

bash 复制代码
#若运行cmake报如下错误
X11 support requires Xcursor library.
#则去安装Xcursor 库
sudo apt-get install libgl1-mesa-dev libx11-dev libglx-dev
#安装完后删掉之前cmake的程序,再去cmake就可以了
rm -rf CMakeCache.txt CMakeFiles

走完最后的流程就可以运行该游戏了

将编译好的mininim的二进制执行程序、游戏资源库data,已经执行程序所依赖的各种动态链接库,打包,复制到另外一台Ubuntu系统,直接运行

将上面mininim目录里的mininim可执行文件复制到另外一台Ubuntu系统的home目录,mininim文件里的data文件和lib文件也一起打包移植

在该移植目录下运行可执行mininim就可以play了

在树莓派上完成编译 mininim源码,并成功运行

树莓派也是linux系统,将移植包放入树莓派中解压,运行可执行的mininim,可以使用XTerminal或者VNC,两者都是带有可视化图像界面的。

在Android手机上 编译mininim游戏,并运行

Android手机也是同样的操作,需要在手机上安装NSC软件去开启ssh连接,访问手机ip和用户名,设置ssh端口,使用XTerminal去连接手机。

在树莓派3B上用python编程完成流水灯实验

python 复制代码
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import atexit
import signal

# 配置参数
PWM_PIN = 18        # BCM编号18引脚
FREQUENCY = 1000    # PWM频率1kHz
DUTY_CYCLE = 50     # 初始占空比50%

class SafePWMController:
    def __init__(self):
        self.pwm = None
        self._setup()
        self._register_handlers()
        
    def _setup(self):
        """初始化GPIO和PWM"""
        try:
            GPIO.setwarnings(False)
            GPIO.setmode(GPIO.BCM)  # 使用BCM编号
            GPIO.setup(PWM_PIN, GPIO.OUT)
            self.pwm = GPIO.PWM(PWM_PIN, FREQUENCY)
            self.pwm.start(DUTY_CYCLE)
            print(f"PWM已启动,引脚BCM {PWM_PIN},频率{FREQUENCY}Hz")
        except Exception as e:
            self._cleanup()
            raise RuntimeError(f"初始化失败: {str(e)}")

    def _register_handlers(self):
        """注册退出处理函数"""
        atexit.register(self._cleanup)  # 正常退出
        signal.signal(signal.SIGTERM, self._signal_handler)  # kill命令
        signal.signal(signal.SIGINT, self._signal_handler)   # Ctrl+C

    def _signal_handler(self, signum, frame):
        """信号处理函数"""
        print(f"\n接收到终止信号 {signum},正在清理资源...")
        self._cleanup()
        exit(0)

    def _cleanup(self):
        """安全清理资源"""
        if self.pwm is not None:
            try:
                self.pwm.stop()
                print("PWM已停止")
            except Exception as e:
                print(f"停止PWM时出错: {str(e)}")
            finally:
                self.pwm = None
        
        try:
            GPIO.cleanup()
            print("GPIO资源已释放")
        except Exception as e:
            print(f"清理GPIO时出错: {str(e)}")

    def run(self):
        """主运行循环"""
        try:
            while True:
                # 在这里添加您的PWM控制逻辑
                # 示例:呼吸灯效果
                for dc in range(0, 101, 5):
                    self.pwm.ChangeDutyCycle(dc)
                    time.sleep(0.1)
                for dc in range(100, -1, -5):
                    self.pwm.ChangeDutyCycle(dc)
                    time.sleep(0.1)
        except Exception as e:
            print(f"运行时错误: {str(e)}")
            raise
        finally:
            self._cleanup()

if __name__ == "__main__":
    try:
        controller = SafePWMController()
        controller.run()
    except KeyboardInterrupt:
        print("程序被用户中断")
    except Exception as e:
        print(f"程序异常: {str(e)}")
    finally:
        print("程序退出")

效果展示:

相关推荐
yj爆裂鼓手10 分钟前
spine绑定骨骼运动工具&spine纹理压缩自动设置工具
游戏·unity
电脑玩家柒柒4 小时前
FreeToken:在游戏 PC 上跑 290B+ 前沿 MoE——带宽自适应执行的本地推理新范式
游戏
朋友圈自动点赞工具11 小时前
NAS游戏库自动下载新方案,Questarr部署教程
服务器·数据库·游戏·科技资讯
小尘要自信12 小时前
2026手机远控电脑横测:CMD、游戏按键、144帧...ToDesk/向日葵/RustDesk跨设备处理任务
游戏·智能手机·电脑
yangmu320312 小时前
《天国拯救2》MOD整合包安装教程与深度解析
游戏
政安晨15 小时前
政安晨【人工智能随笔】— 从像素到星际:游戏如何塑造了现代AI的二十年演进史 (读DeepMind的EVE宇宙AI研究有感)
人工智能·游戏·ai·智能体·deepmind·人工智能与游戏·智能体与游戏
发量惊人的中年网工15 小时前
游戏开服就被DDoS攻击怎么办?开服7分钟服务器被打穿的复盘与防护清单
运维·服务器·网络·安全·游戏
玖玥拾1 天前
Unity3D RPG 入门项目(十一)主角完整战斗、怪物自动刷新、四大类型技能系统
游戏·3d·unity·游戏引擎
学习星球1 天前
OpenHarness 全面配置教学——从游戏开发工作流引入
c++·游戏·ai·ai编程
狂云歌1 天前
2025年读书回顾,AI+游戏+历史
人工智能·学习·游戏