Skip to content

Commit

Permalink
Merge pull request #1 from raku2wei/feature/add-enemy-and-battle
Browse files Browse the repository at this point in the history
敵と戦闘シーンを追加
  • Loading branch information
raku2wei committed Jul 21, 2023
2 parents e34a7cf + 7f56d1d commit 8a83b8f
Show file tree
Hide file tree
Showing 11 changed files with 444 additions and 38 deletions.
112 changes: 112 additions & 0 deletions assets/battle/keibi.txt
@@ -0,0 +1,112 @@
一刀両断
ittouryoudann
右往左往
uousaou
疑心暗鬼
gisinnannki
危機一髪
kikiippatu
弱肉強食
jyakunikukyousyoku
正々堂々
seiseidoudou
自問自答
jimonnjitou
変幻自在
henngennjizai
油断大敵
yudanntaiteki
勇猛果敢
yuumoukakann
猪突猛進
tyototumousinn
上杉謙信
uesugikennsinn
真田幸村
sanadayukimura
伊達正宗
datemasamune
豊臣秀吉
toyotomihideyosi
武田信玄
takedasinngenn
織田信長
odanobunaga
葛飾北斎
katusikahokusai
夏目漱石
natumesouseki
福沢諭吉
fukuzawayukiti
宮本武蔵
miyamotomusasi
岡本太郎
okamototarou
石の上にも三年
isinouenimosannnenn
石橋を叩いて渡る
isibasiwotataitewataru
馬の耳に念仏
umanomimininennbutu
縁の下の力持ち
ennnositanotikaramoti
鬼の目にも涙
oninomenimonamida
花より団子
hanayoridanngo
焼け石に水
yakeisinimizu
目の上のたんこぶ
menouenotannkobu
隣の花は赤い
tonarinohanahaakai
猫に小判
nekonikobann
猿も木から落ちる
sarumokikaraotiru
以心伝心
isinndennsinn
石橋を叩く
isibasiwotataku
急がば回れ
isogabamaware
馬の耳に念仏
umanomimininennbutu
噂をすれば影
uwasawosurebakage
猿も木から落ちる
sarumokikaraotiru
策士策に溺れる
sakusisakunioboreru
青天の霹靂
seitennnohekireki
短気は損気
tannkihasonnki
敵に塩を送る
tekinisiowookuru
破竹の勢い
hatikunoikioi
類は友を呼ぶ
ruihatomowoyobu
ジャイアントパンダ
jyaianntopannda
タスマニアデビル
tasumaniadebiru
ガラパゴスゾウガメ
garapagosuzougame
コモドオオトカゲ
komodoootokage
ホッキョクグマ
hokkyokuguma
ヤンバルクイナ
yannbarukuina
アメリカバイソン
amerikabaisonn
マウンテンゴリラ
maunntenngorira
マッコウクジラ
makkoukujira
皇帝ペンギン
kouteipennginn
エリマキトカゲ
erimakitokage
8 changes: 8 additions & 0 deletions assets/enemy/keibi
@@ -0,0 +1,8 @@

 ∧ ∧
 ( ・ω・)
⊂ ⊃
| |
∪ ̄∪


29 changes: 17 additions & 12 deletions cmd/jailbreak/main.go
Expand Up @@ -32,18 +32,23 @@ func main() {
d := dungeon.Create(*p)

// ゲームループ:勝利条件を満たすまで続く
for {
d.Display() // 部屋の様子を表示
if d.CheckEvent() {
// ゲームクリア
event.GameClear()
break
GameLoop:
for {
d.Display() // 部屋の様子を表示

switch d.CheckEvent() {
case event.GameClearEvent:
event.GameClear()
break GameLoop
case event.GameOverEvent:
event.GameOver()
break GameLoop
}

d.WaitAction() // ユーザーから行動を入力してもらい、移動または方向転換を行う
fmt.Printf("\n")

time.Sleep(400 * time.Millisecond) // 0.4秒停止
}

d.WaitAction() // ユーザーから行動を入力してもらい、移動または方向転換を行う
fmt.Printf("\n")

time.Sleep(400 * time.Millisecond) // 0.4秒停止
}
}
}
23 changes: 19 additions & 4 deletions internal/dungeon/dungeon.go
Expand Up @@ -2,6 +2,8 @@ package dungeon

import (
"fmt"
"jailbreak/internal/enemy"
"jailbreak/internal/event"
"jailbreak/internal/player"
"jailbreak/internal/room"
"jailbreak/pkg/system"
Expand All @@ -17,6 +19,7 @@ type Dungeon struct {
rooms [7][5]room.Room
player player.Player // ダンジョン内にいるプレイヤー
moveRoom bool // プレイヤーが部屋を移動したかどうか(イベントチェック用)
encounterRate float32
}

// ダンジョン生成(初期化)
Expand Down Expand Up @@ -109,6 +112,9 @@ func Create(p player.Player) *Dungeon {
//罠(強制ワープ)部屋を設置
d.rooms[6][2].IsWana = true

// エンカウント率初期化
d.encounterRate = DefaultEncounterRate

return d
}

Expand All @@ -119,8 +125,7 @@ func (d *Dungeon) Display() {
d.currentRoom().Display(dir)
}

// ゴールしたらtrueを返す
func (d *Dungeon) CheckEvent() bool {
func (d *Dungeon) CheckEvent() event.Event {

fmt.Printf("\n")

Expand All @@ -133,11 +138,21 @@ func (d *Dungeon) CheckEvent() bool {
// 罠を起動
d.wanaActivate()
} else if d.currentRoom().IsGoal { // ゴールだったら
return true
return event.GameClearEvent
} else if d.checkEncounter() {
e := enemy.NewEnemy("警備員", "assets/enemy/keibi")
if !e.Battle() {
return event.GameOverEvent
}
// エンカウント率初期化
d.encounterRate = DefaultEncounterRate
} else {
// エンカウント率増加
d.encounterRate *= EncounterIncreaseRate
}
d.moveRoom = false
}
return false
return event.NoEvent
}

func (d *Dungeon) WaitAction() {
Expand Down
18 changes: 18 additions & 0 deletions internal/dungeon/encounter.go
@@ -0,0 +1,18 @@
package dungeon

import (
"math/rand"
)

const (
// エンカウント率のデフォルト値:10%
DefaultEncounterRate float32 = 10.0
// エンカウント率の増加率:移動するごとに1.4倍
EncounterIncreaseRate float32 = 1.4
)

// 敵とのエンカウント処理
func (d *Dungeon) checkEncounter() bool {
randomNumber := rand.Intn(100) + 1
return float32(randomNumber) <= d.encounterRate
}
32 changes: 32 additions & 0 deletions internal/enemy/enemy.go
@@ -0,0 +1,32 @@
package enemy

import (
"fmt"
"jailbreak/pkg/system"
"math/rand"
)

const typingTextFilePath = "assets/battle/keibi.txt"

type Enemy struct {
Name string
FilePath string
TextJapanese string
TextRomaji string
}

func NewEnemy(name string, path string) *Enemy {
line := 2 * (rand.Intn(56)) + 1 // ランダムで奇数行を選択
textJapanese := system.LoadLineText(typingTextFilePath, line)
textRomaji := system.LoadLineText(typingTextFilePath, line + 1)
return &Enemy{Name: name, FilePath: path, TextJapanese: textJapanese, TextRomaji: textRomaji}
}

func (n *Enemy) Display() {
system.PrintFile(n.FilePath)
}

func (n *Enemy) PrintTypingText() {
fmt.Println(n.TextJapanese)
fmt.Println(n.TextRomaji)
}

0 comments on commit 8a83b8f

Please sign in to comment.