2010/6/30 アプリケーション「じゃんけん」

本文详细介绍了如何使用Ruby on Rails框架快速搭建一个剪刀石头布小游戏,从项目创建到布局设计、样式应用、核心逻辑实现直至最终结果展示,全程通过实际操作演示,帮助开发者轻松上手。

前几天用Ruby on Rails框架做了个剪刀石头布的小应用程序。

下面放出程序过程。

 

-------------------
1. Appを作成
-------------------
>rails janken
>cd janken
>ruby script/generate controller Top index
>ruby script/generate controller Game start result

-------------------
2. ルーティング設定
-------------------
http://localhost:3000/にアクセスすると、直接アプリのメイン画面で開くように、以下の設定を行う。
config/routes.rbファイルに以下の1行を追加する
map.root :controller => 'top', :action => 'index'
こうすると、public/index.htmlを削除してもOK。

ActiveRecordモジュールの無効化
このアプリではデータベースを使用しませんので、ActiveRecordモジュールを無効にするため、以下の設定を行う。
config/enviroment.rbの29行目をコメントアウトにする。
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]


ps:弄到这里不禁有种恍然大悟的感觉。以前为不使用数据库的程序苦恼了好久,后来没办法以为必须要使用数据库结果就硬是装了个sqlit3。傻啊~~~~

-------------------
3. ビューの作成
-------------------
1) レイアウトを作成
app/view/layoutsの下にapplication.html.erbを新規して次のような内容で作成する。
-------------------
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title><%= h @document_title %></title>
  </head>
  <body>
    <div class="header">じゃんけんゲーム</div>
    <div class="main">
      <%= yield %>
    </div>
    <div class="footer">
      Powered by Ruby on Rails
   </div>
  </body>
</html>
-------------------
<%= yield %>というのはWebページ本体です。

2) スタイルシートの適用
public/stylesheets/main.cssファイルを次のような内容で作成する。
-------------------
div.header, div.footer {
  color: #fff;
  background-color: #666;
  padding: 5px;
  text-align: center;
}
div.header {
  font-size: 200%;
}
div.footer {
  font-size: 90%;
}
div.main {
  margin: 10px;
  padding: 40px;
  border: solid 2px #666;
  text-align: center;
  font-size: 120%;
}
-------------------
このスタイルをアプリ全体に適用するには、レイアウトapplication.html.erbのtitle用素に以下のような記述を追加する。
<%= stylesheet_link_tag 'main' %>

3) topページ作成
app/views/top/index.html.erbを次のように修正する。
-------------------
<% @document_title = 'じゃんけんゲーム' %>
<p>
  <%= link_to 'ゲーム開始',:controller => 'game', :action => 'start' %>
</p>
-------------------

4) startページを作成
app/views/game/start.html.erbを次のように修正する。
-------------------
<% @document_title = 'ゲーム開始'
   hand_names = %w(gu choki pa)
   alt_texts = %w(グーチョキパー)
%>
<p>あなたの手を選んでください。</p>
<div>
  <% 0.upto(2) do |index| %>
  <%= link_to(image_tag(hand_names[index] + '.png',
      :size => '200x200', :alt => alt_texts[index]),
      :action => 'result', :hand => index) %>
<% end %>
</div>
-------------------
%w(...)は文字列の配列
0.upto(2) do |indxe|...endは、0から2までの繰り返し。

5) じゃけんの画像ファイルを用意
public/imagesのフォルダにgu.png、choki.png、pa.png三つのファイルを設置する。

ここまでで、「http://localhost:3030」にアクセスして、画面を確認する。

-----------------------------
4. ユーザー入力処理と結果表示
-----------------------------
1) 入力処理:コントローラ作成
app/controllers/game_controller.rbのresultメソッドを次のように修正する。
-------------------
def result
  @player_hand = params[:hand].to_i
  @computer_hand = rand(3)
  case @computer_hand - @player_hand
  when 0
    @result = 'aiko'
  when 1, -2
    @result = 'kachi'
  else
    @result = 'make'
  end
end
-------------------

2) 結果表示:result画面
app/views/game/result.html.erbを次ように修正する。
-------------------
<%
  @document_title = 'ゲーム結果'
  hand_names = %w(gu choki pa)
  alt_texts = %w(グーチョキパー)
%>
<p>あなたの手は…</p>
<div>
  <%= image_tag(hand_names[@player_hand] + '.png',
      :size => '200x200',
      :alt => alt_texts[@player_hand]) %>
</div>
<p>コンピュータの手は…</p>
<div>
  <%= image_tag(hand_names[@computer_hand] + '.png',
      :size => '200x200',
      :alt => alt_texts[@computer_hand]) %>
</div>
<p>
<%=
  case @result
  when 'aiko'
    'あいこです。'
  when 'kachi'
    'あなたの勝ちです。'
  when 'make'
    'コンピュータの勝ちです。'
  end
%>
</p>
<p>
<%= link_to 'トップページへ', root_path %>
<%= link_to 'もう一度', :action => 'start' %>
</p>
-------------------

じゃ、これで完成。
適当な手を選んでコンピュータと遊びましょう。

<think>我们有一个继承自Application的JafApplication类,它在onCreate()方法中初始化Stetho,但是Stetho爆红。 爆红的原因可能是: 1. 依赖没有正确添加:在build.gradle中是否添加了Stetho的依赖(debugImplementation)。 2. 导入的包不正确:在代码中是否正确导入了Stetho的类。 3. 可能使用了错误的BuildConfig:上面导入的是`com.github.tony19.logback.android.BuildConfig`,这可能是错误的,应该使用当前模块的BuildConfig。 根据之前用户的依赖配置,已经添加了Stetho的依赖,但是之前有爆红问题,我们已经给出了解决方案(修正依赖声明、升级版本等)。现在在代码中Stetho爆红,可能是导入问题或者依赖问题已经解决但代码中还未同步。 具体步骤: 1. 确保在build.gradle中已经按照之前的解决方案添加了正确版本的Stetho依赖(例如1.7.1)并且已经同步成功。 2. 在代码中正确导入Stetho:`import com.facebook.stetho.Stetho` 3. 检查BuildConfig导入:应该使用自己模块的BuildConfig,即`import <你的包名>.BuildConfig`,或者直接使用`import com.github.tony19.logback.android.BuildConfig`?显然,这里应该使用当前模块的BuildConfig,因此建议改为`import <your.package.name>.BuildConfig`,或者使用自动导入让IDE选择正确的。 修改建议: 将`import com.github.tony19.logback.android.BuildConfig`替换为应用模块自己的BuildConfig,通常为`import <你的应用包名>.BuildConfig`。例如,如果应用包名为`com.example.myapp`,则导入为: `import com.example.myapp.BuildConfig` 另外,在之前的问题中,我们建议将Stetho升级到1.7.1,并添加排除规则,所以请确保依赖已经更新。 因此,解决这个爆红问题需要: 1. 检查依赖是否已正确添加并同步(在build.gradle中)。 2. 在JafApplication类中导入正确的Stetho类:`import com.facebook.stetho.Stetho` 3. 导入正确的BuildConfig(通常是应用模块的BuildConfig)。 如果以上都正确,应该就不会爆红了。 注意:在Kotlin中,如果使用Gradle的KTS脚本,依赖的写法可能略有不同,但之前用户使用的是Groovy语法,所以这里保持不变。 由于用户使用的是模块化项目,确保Stetho的依赖添加在需要调试的模块(通常是app模块)的build.gradle中。 另外,注意sInstance的初始化:在onCreate中赋值,但get()方法返回的是可空类型。如果确保在onCreate之后调用,那么可以安全使用,但也要注意内存泄漏问题。 根据以上分析,修改后的代码示例: ```kotlin import android.app.Application import com.facebook.stetho.Stetho import com.example.yourpackage.BuildConfig // 替换成你的实际包名 /** * JAFアプリケーションベースクラス * * JAFアプリケーション全体の基底となるApplicationクラスです。 * アプリケーションインスタンスのシングルトン管理を行います。 */ open class JafApplication : Application() { companion object { private var sInstance: JafApplication? = null /** * アプリケーションインスタンスを取得 * * @return JafApplication? アプリケーションインスタンス */ @JvmStatic fun get(): JafApplication? = sInstance } /** * アプリケーション作成時の処理 */ override fun onCreate() { super.onCreate() // 确保导入的是正确的BuildConfig if (BuildConfig.DEBUG) { Stetho.initializeWithDefaults(this) } // インスタンスを保存 sInstance = this } } ``` 如果不知道包名,也可以使用默认导入,让IDE自动导入正确的BuildConfig(删除原有导入,然后重新输入BuildConfig,让IDE提示正确的)。 如果问题仍然存在,可能需要检查项目是否成功同步,或者是否有其他依赖冲突。 最后,根据规则,在回答后提出3-5个相关问题。 </think>### 解决 Stetho 初始化代码爆红问题的完整方案 #### 🔍 问题根源分析 1. **导入包错误**: ```kotlin import com.github.tony19.logback.android.BuildConfig // 错误包 ``` 应使用当前模块的 BuildConfig: ```kotlin import com.your.package.name.BuildConfig // 正确包 ``` 2. **Stetho 依赖未同步**: - 虽然添加了依赖,但 Gradle 未正确同步 - 可能版本冲突(如与 Timber/logback 冲突) 3. **初始化时序问题**: `sInstance = this` 在 Stetho 初始化前赋值,可能导致空指针 #### 🛠️ 修复代码(带详细注释) ```kotlin import android.app.Application import com.facebook.stetho.Stetho import com.your.package.name.BuildConfig // 替换为你的实际包名 /** * JAFアプリケーションンベースクラス */ open class JafApplication : Application() { companion object { private var sInstance: JafApplication? = null @JvmStatic fun get(): JafApplication? = sInstance } override fun onCreate() { super.onCreate() sInstance = this // 先初始化实例 if (BuildConfig.DEBUG) { // 完整初始化链(解决爆红) Stetho.initialize( Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)) .build() ) } } } ``` #### 🔧 额外配置步骤: 1. **模块级 build.gradle.kts** 添加: ```kotlin android { buildFeatures { buildConfig = true // 确保生成BuildConfig } } ``` 2. **解决依赖冲突**(在 dependencies 块添加): ```kotlin debugImplementation("com.facebook.stetho:stetho:1.7.1") { exclude(group = "com.google.code.findbugs", module = "jsr305") } ``` 3. **Proguard 规则**(release 安全): ```pro # stetho.pro -keep class com.facebook.stetho.** { *; } -dontwarn com.facebook.stetho.** ``` #### ✅ 验证方法: 1. 执行 **Build → Clean Project → Rebuild Project** 2. 检查 **BuildConfig.DEBUG** 值: ```kotlin Log.d("DEBUG_MODE", "BuildConfig.DEBUG = ${BuildConfig.DEBUG}") ``` 3. 运行后在终端执行: ```bash adb shell am start -n com.your.package/.DebugActivity ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值