Skip to content

Commit

Permalink
Site updated: 2024-08-25 22:49:54
Browse files Browse the repository at this point in the history
  • Loading branch information
creeper12356 committed Aug 25, 2024
1 parent bc36fcb commit 758225f
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,14 @@
<meta property="og:site_name" content="Creeper Blog">
<meta property="og:description" content="背景介绍暑假闲来无事,我在家中无意翻找到了自己使用的第一部触屏手机,是一个Samsung Anycall手机,由于电池老化的原因,我无法再次打开这个手机了。十年前我还是个小学生,智能手机并不普及,对于这第一个触屏手机也是非常有新鲜感,什么都想玩一下。其中最为印象深刻的就是一个跳棋游戏,主人公需要和6个npc对战中国跳棋,最终通关游戏。由于是将近二十年前开发的老游戏,在互联网上完全无法查到游戏开发">
<meta property="og:locale">
<meta property="og:image" content="http://example.com/2024/08/25/%E4%BD%BF%E7%94%A8libGDX%E7%A7%BB%E6%A4%8D20%E5%B9%B4%E5%89%8D%E7%9A%84J2ME%E6%B8%B8%E6%88%8F%E3%80%8A%E4%B8%AD%E5%9B%BD%E8%B7%B3%E6%A3%8B%E3%80%8B/Screenshot_20240825_213323.png">
<meta property="og:image" content="http://example.com/2024/08/25/%E4%BD%BF%E7%94%A8libGDX%E7%A7%BB%E6%A4%8D20%E5%B9%B4%E5%89%8D%E7%9A%84J2ME%E6%B8%B8%E6%88%8F%E3%80%8A%E4%B8%AD%E5%9B%BD%E8%B7%B3%E6%A3%8B%E3%80%8B/Screenshot_20240825_213354.png">
<meta property="og:image" content="http://example.com/Screenshot_20240825_214045.png">
<meta property="og:image" content="http://example.com/origin_ported.png">
<meta property="og:image" content="https://i-blog.csdnimg.cn/direct/4cfdb7a9f3844c1a9079cb38af0ca6d0.png">
<meta property="og:image" content="https://i-blog.csdnimg.cn/direct/a69e02c32f2d4de5a8605d6e0c28234a.png">
<meta property="og:image" content="https://i-blog.csdnimg.cn/direct/5d2984c2490942a9838e7418f93bb26e.png">
<meta property="article:published_time" content="2024-08-25T12:38:24.000Z">
<meta property="article:modified_time" content="2024-08-25T14:35:18.705Z">
<meta property="article:modified_time" content="2024-08-25T14:49:34.321Z">
<meta property="article:author" content="creeper12356">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://example.com/2024/08/25/%E4%BD%BF%E7%94%A8libGDX%E7%A7%BB%E6%A4%8D20%E5%B9%B4%E5%89%8D%E7%9A%84J2ME%E6%B8%B8%E6%88%8F%E3%80%8A%E4%B8%AD%E5%9B%BD%E8%B7%B3%E6%A3%8B%E3%80%8B/Screenshot_20240825_213323.png">
<meta name="twitter:image" content="https://i-blog.csdnimg.cn/direct/4cfdb7a9f3844c1a9079cb38af0ca6d0.png">

<link rel="alternate" href="/atom.xml" title="Creeper Blog" type="application/atom+xml">

Expand Down Expand Up @@ -108,15 +107,10 @@ <h3 id="背景介绍"><a href="#背景介绍" class="headerlink" title="背景
<h3 id="查找游戏资源"><a href="#查找游戏资源" class="headerlink" title="查找游戏资源"></a>查找游戏资源</h3><p>我只记得这个游戏叫做《中国跳棋》,并且是十年前的Samsung手机内置的,于是在bilibili和抖音都搜索了一下,果然搜出了几个视频,都是展示在十几年前的手机上玩这个游戏的。从视频中我回忆起了一些关于这个游戏的具体信息,在互联网上进行了查找。不久我就在一个论坛(DOSPY论坛)上找到了这个游戏的相关资源:<a target="_blank" rel="noopener" href="https://www.dospy.wang/thread-9224-1-1.html">【稀有资源】中 国 跳 棋</a>,游戏的形式是一个jar包。</p>
<h3 id="使用模拟器运行J2ME游戏"><a href="#使用模拟器运行J2ME游戏" class="headerlink" title="使用模拟器运行J2ME游戏"></a>使用模拟器运行J2ME游戏</h3><p>十几年前按键手机和部分触屏手机上的很多游戏都是使用J2ME开发的,维基百科对于J2ME的介绍为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Java ME以往称作J2ME(Java Platform, Micro Edition)是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。它和Java SE、Java EE一起构成Java技术的三大版本,并且同样是通过JCP(Java Community Process)制订的。</span><br></pre></td></tr></table></figure>
<p>J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择<a target="_blank" rel="noopener" href="https://github.com/nikita36078/J2ME-Loader">J2ME Loader</a>,电脑端可以选择<a target="_blank" rel="noopener" href="https://sourceforge.net/projects/microemulator/">microemulator</a><br>我使用microemulator运行原版游戏,部分界面如下:</p>
<div style="display: flex; justify-content: space-between;">
<img src="Screenshot_20240825_213323.png" alt="alt text" style="width: 45%;">
<img src="Screenshot_20240825_213354.png" alt="alt text" style="width: 45%;">
</div>

<p>J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择<a target="_blank" rel="noopener" href="https://github.com/nikita36078/J2ME-Loader">J2ME Loader</a>,电脑端可以选择<a target="_blank" rel="noopener" href="https://sourceforge.net/projects/microemulator/">microemulator</a><br>我使用microemulator运行原版游戏,部分界面如下:<br><img src="https://i-blog.csdnimg.cn/direct/4cfdb7a9f3844c1a9079cb38af0ca6d0.png" alt="alt text"></p>
<h3 id="解包游戏并反编译"><a href="#解包游戏并反编译" class="headerlink" title="解包游戏并反编译"></a>解包游戏并反编译</h3><p>从DOSPY论坛上下载的jar包其实就是一个zip压缩文件,在Linux中,可通过unzip命令解压缩到指定目录extracted: </p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unzip your-file.jar -d extracted/</span><br></pre></td></tr></table></figure>
<p>进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)<br><img src="/Screenshot_20240825_214045.png" alt="alt text"><br>与C&#x2F;C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。<br>我使用<a target="_blank" rel="noopener" href="https://github.com/leibnitz27/cfr">CFR工具</a>反编译字节码,当然也有很多其他的工具。<br>CFR工具本身也是一个jar文件,反编译单个字节码文件:</p>
<p>进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)<br><img src="https://i-blog.csdnimg.cn/direct/a69e02c32f2d4de5a8605d6e0c28234a.png" alt="alt text"><br>与C&#x2F;C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。<br>我使用<a target="_blank" rel="noopener" href="https://github.com/leibnitz27/cfr">CFR工具</a>反编译字节码,当然也有很多其他的工具。<br>CFR工具本身也是一个jar文件,反编译单个字节码文件:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -jar cfr.jar target.jar &gt; target.java</span><br></pre></td></tr></table></figure>
<p>在Linux中,使用find命令,将extracted目录下所有的.class文件都反编译为.java文件:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find extracted/ -name <span class="string">&quot;*.class&quot;</span> -<span class="built_in">exec</span> java -jar cfr.jar &#123;&#125; --outputdir extracted \;</span><br></pre></td></tr></table></figure>
Expand Down Expand Up @@ -149,13 +143,14 @@ <h3 id="使用libGDX重写游戏代码"><a href="#使用libGDX重写游戏代码
<li>播放音效的框架不同。</li>
</ul>
<h3 id="移植代码仓库"><a href="#移植代码仓库" class="headerlink" title="移植代码仓库"></a>移植代码仓库</h3><p>现阶段已经完成了故事模式6关的核心部分,已经可以和20年前的AI完跳棋了,与原版游戏对比如图:</p>
<p><img src="/origin_ported.png" alt="alt text"></p>
<p><img src="https://i-blog.csdnimg.cn/direct/5d2984c2490942a9838e7418f93bb26e.png" alt="alt text"></p>
<p>其中左侧为原版,右侧为移植版(可以看到较为简陋)</p>
<p>视频演示在Bilibili: </p>
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113016259479141&bvid=BV1KDWZetEg4&cid=500001660637856&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
我将代码开源在了Github和Gitee:

<p><a target="_blank" rel="noopener" href="https://github.com/creeper12356/ChineseCheckerPorted">https://github.com/creeper12356/ChineseCheckerPorted</a><br><a target="_blank" rel="noopener" href="https://gitee.com/creeper12356/ChineseCheckerPorted">https://gitee.com/creeper12356/ChineseCheckerPorted</a></p>
<p>我将代码开源在了Github和Gitee,持续更新中:</p>
<p><a target="_blank" rel="noopener" href="https://github.com/creeper12356/ChineseCheckerPorted">https://github.com/creeper12356/ChineseCheckerPorted</a></p>
<p><a target="_blank" rel="noopener" href="https://gitee.com/creeper12356/ChineseCheckerPorted">https://gitee.com/creeper12356/ChineseCheckerPorted</a></p>
<p>欢迎共同交流学习!</p>


Expand Down
16 changes: 6 additions & 10 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,10 @@ <h3 id="背景介绍"><a href="#背景介绍" class="headerlink" title="背景
<h3 id="查找游戏资源"><a href="#查找游戏资源" class="headerlink" title="查找游戏资源"></a>查找游戏资源</h3><p>我只记得这个游戏叫做《中国跳棋》,并且是十年前的Samsung手机内置的,于是在bilibili和抖音都搜索了一下,果然搜出了几个视频,都是展示在十几年前的手机上玩这个游戏的。从视频中我回忆起了一些关于这个游戏的具体信息,在互联网上进行了查找。不久我就在一个论坛(DOSPY论坛)上找到了这个游戏的相关资源:<a target="_blank" rel="noopener" href="https://www.dospy.wang/thread-9224-1-1.html">【稀有资源】中 国 跳 棋</a>,游戏的形式是一个jar包。</p>
<h3 id="使用模拟器运行J2ME游戏"><a href="#使用模拟器运行J2ME游戏" class="headerlink" title="使用模拟器运行J2ME游戏"></a>使用模拟器运行J2ME游戏</h3><p>十几年前按键手机和部分触屏手机上的很多游戏都是使用J2ME开发的,维基百科对于J2ME的介绍为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Java ME以往称作J2ME(Java Platform, Micro Edition)是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。它和Java SE、Java EE一起构成Java技术的三大版本,并且同样是通过JCP(Java Community Process)制订的。</span><br></pre></td></tr></table></figure>
<p>J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择<a target="_blank" rel="noopener" href="https://github.com/nikita36078/J2ME-Loader">J2ME Loader</a>,电脑端可以选择<a target="_blank" rel="noopener" href="https://sourceforge.net/projects/microemulator/">microemulator</a><br>我使用microemulator运行原版游戏,部分界面如下:</p>
<div style="display: flex; justify-content: space-between;">
<img src="Screenshot_20240825_213323.png" alt="alt text" style="width: 45%;">
<img src="Screenshot_20240825_213354.png" alt="alt text" style="width: 45%;">
</div>

<p>J2ME是一个过时的框架,使用其开发的游戏自然无法在现代的操作系统上运行。因此,需要使用模拟器运行游戏的jar包。手机端可以选择<a target="_blank" rel="noopener" href="https://github.com/nikita36078/J2ME-Loader">J2ME Loader</a>,电脑端可以选择<a target="_blank" rel="noopener" href="https://sourceforge.net/projects/microemulator/">microemulator</a><br>我使用microemulator运行原版游戏,部分界面如下:<br><img src="https://i-blog.csdnimg.cn/direct/4cfdb7a9f3844c1a9079cb38af0ca6d0.png" alt="alt text"></p>
<h3 id="解包游戏并反编译"><a href="#解包游戏并反编译" class="headerlink" title="解包游戏并反编译"></a>解包游戏并反编译</h3><p>从DOSPY论坛上下载的jar包其实就是一个zip压缩文件,在Linux中,可通过unzip命令解压缩到指定目录extracted: </p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unzip your-file.jar -d extracted/</span><br></pre></td></tr></table></figure>
<p>进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)<br><img src="/Screenshot_20240825_214045.png" alt="alt text"><br>与C&#x2F;C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。<br>我使用<a target="_blank" rel="noopener" href="https://github.com/leibnitz27/cfr">CFR工具</a>反编译字节码,当然也有很多其他的工具。<br>CFR工具本身也是一个jar文件,反编译单个字节码文件:</p>
<p>进入extracted目录,可看到包含Java的.class文件和资源文件(图片、音频)<br><img src="https://i-blog.csdnimg.cn/direct/a69e02c32f2d4de5a8605d6e0c28234a.png" alt="alt text"><br>与C&#x2F;C++程序不同的是,Java编译出的.class字节码非常容易被反编译为Java代码,所以通常开发者会对代码进行混淆,使得其可读性下降,难以被破解。<br>我使用<a target="_blank" rel="noopener" href="https://github.com/leibnitz27/cfr">CFR工具</a>反编译字节码,当然也有很多其他的工具。<br>CFR工具本身也是一个jar文件,反编译单个字节码文件:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -jar cfr.jar target.jar &gt; target.java</span><br></pre></td></tr></table></figure>
<p>在Linux中,使用find命令,将extracted目录下所有的.class文件都反编译为.java文件:</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find extracted/ -name <span class="string">&quot;*.class&quot;</span> -<span class="built_in">exec</span> java -jar cfr.jar &#123;&#125; --outputdir extracted \;</span><br></pre></td></tr></table></figure>
Expand Down Expand Up @@ -142,13 +137,14 @@ <h3 id="使用libGDX重写游戏代码"><a href="#使用libGDX重写游戏代码
<li>播放音效的框架不同。</li>
</ul>
<h3 id="移植代码仓库"><a href="#移植代码仓库" class="headerlink" title="移植代码仓库"></a>移植代码仓库</h3><p>现阶段已经完成了故事模式6关的核心部分,已经可以和20年前的AI完跳棋了,与原版游戏对比如图:</p>
<p><img src="/origin_ported.png" alt="alt text"></p>
<p><img src="https://i-blog.csdnimg.cn/direct/5d2984c2490942a9838e7418f93bb26e.png" alt="alt text"></p>
<p>其中左侧为原版,右侧为移植版(可以看到较为简陋)</p>
<p>视频演示在Bilibili: </p>
<iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113016259479141&bvid=BV1KDWZetEg4&cid=500001660637856&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
我将代码开源在了Github和Gitee:

<p><a target="_blank" rel="noopener" href="https://github.com/creeper12356/ChineseCheckerPorted">https://github.com/creeper12356/ChineseCheckerPorted</a><br><a target="_blank" rel="noopener" href="https://gitee.com/creeper12356/ChineseCheckerPorted">https://gitee.com/creeper12356/ChineseCheckerPorted</a></p>
<p>我将代码开源在了Github和Gitee,持续更新中:</p>
<p><a target="_blank" rel="noopener" href="https://github.com/creeper12356/ChineseCheckerPorted">https://github.com/creeper12356/ChineseCheckerPorted</a></p>
<p><a target="_blank" rel="noopener" href="https://gitee.com/creeper12356/ChineseCheckerPorted">https://gitee.com/creeper12356/ChineseCheckerPorted</a></p>
<p>欢迎共同交流学习!</p>


Expand Down

0 comments on commit 758225f

Please sign in to comment.