Skip to content

Instantly share code, notes, and snippets.

@aya-eiya
Created August 31, 2012 11:23
Show Gist options
  • Save aya-eiya/3551657 to your computer and use it in GitHub Desktop.
Save aya-eiya/3551657 to your computer and use it in GitHub Desktop.
@singletonなマリオを機能付きEnumで実装してみた
abstract class Abs敵キャラ{
String _name = "名無しさん"
@Override
public String toString(){
return _name
}
}
interface Iマリオ行動 {
public Iマリオ行動 アイテムとる(Eアイテム アイテム)
public Iマリオ行動 敵に触れる(Abs敵キャラ 敵キャラ)
}
enum Eマリオ状態 implements Iマリオ行動 {
チビ , デカ , 無敵 , 死体
private Abs敵キャラ マリオに触れた敵
public Iマリオ行動 アイテムとる(Eアイテム アイテム){
HashMap<Eアイテム,Eマリオ状態> アイテム効果テーブル = new HashMap<Eアイテム,Eマリオ状態>()
アイテム効果テーブル.put(Eアイテム.キノコ,デカ)
アイテム効果テーブル.put(Eアイテム.スター,無敵)
マリオに触れた敵 = null
return アイテム効果テーブル.get(アイテム)
}
public Iマリオ行動 敵に触れる(Abs敵キャラ 敵キャラ){
HashMap<Eマリオ状態,Eマリオ状態> 接触効果テーブル = new HashMap<Eマリオ状態,Eマリオ状態>()
接触効果テーブル.put(チビ,死体)
接触効果テーブル.put(デカ,チビ)
接触効果テーブル.put(無敵,無敵)
接触効果テーブル.put(死体,死体)
マリオに触れた敵 = 敵キャラ
return 接触効果テーブル.get(this)
}
public String どう(){
switch(this){
case チビ:
return "ちっちゃくなっちゃった!"
case デカ:
return "でっかくなっちゃった!"
case 無敵:
return (マリオに触れた敵!=null)?"${マリオに触れた敵}を倒した":"無敵になっちゃった!"
case 死体:
return "殺された……"
default :
return this.toString()
}
}
}
enum Eアイテム{ キノコ,スター }
@Singleton
class マリオ implements Iマリオ行動 {
private Eマリオ状態 状態 = Eマリオ状態.チビ
public boolean is状態 (Eマリオ状態 _状態){
return _状態 == 状態
}
@Override
public String toString(){
return "${状態}マリオ"
}
public Iマリオ行動 アイテムとる(Eアイテム アイテム){
println "${アイテム}とって"
状態 = 状態.アイテムとる(アイテム)
println 状態.どう()
return this
}
public Iマリオ行動 敵に触れる(Abs敵キャラ 敵キャラ){
println "${敵キャラ}に触ったら"
状態 = 状態.敵に触れる(敵キャラ)
println 状態.どう()
return this
}
}
def myマリオ = マリオ.instance
def Abs敵キャラ myノコノコ = new Abs敵キャラ(){ {_name = "ノコノコ"} }
for( Eアイテム アイテム : [null,Eアイテム.キノコ,Eアイテム.スター] ){
if(アイテム != null ) myマリオ.アイテムとる(アイテム)
println "(${myマリオ}が敵に触れ続けてみる)"
def i=0
while(!myマリオ.is状態(Eマリオ状態.死体) && i<3 ){
myマリオ.敵に触れる(myノコノコ)
i++
}
println """⇒次
"""
}
@aya-eiya
Copy link
Author

Javaっぽく書いているのはわざとです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment