Files
hakorune/examples/simple_2048.hako

272 lines
6.8 KiB
Plaintext
Raw Normal View History

// 🎮 シンプル2048ゲーム - Nyash Everything is Box実証
print("🎮 === Simple 2048 Game ===")
// デバッグ機能
DEBUG = new DebugBox()
DEBUG.startTracking()
// 🔢 シンプルタイルBox
box SimpleTile {
init { value }
SimpleTile(initialValue) {
me.value = initialValue
}
getValue() {
return me.value
}
setValue(newValue) {
me.value = newValue
}
isEmpty() {
return me.value == 0
}
toString() {
if me.value == 0 {
return "."
}
return me.value.toString()
}
}
// 🎲 シンプルゲームボードBox
box SimpleGameBoard {
init { grid, score }
SimpleGameBoard() {
me.grid = new ArrayBox()
me.score = 0
// 4x4グリッド初期化
row = 0
loop(row < 4) {
rowArray = new ArrayBox()
col = 0
loop(col < 4) {
tile = new SimpleTile(0)
rowArray.push(tile)
col = col + 1
}
me.grid.push(rowArray)
row = row + 1
}
DEBUG.trackBox(me.grid, "simple_grid")
}
// タイル取得
getTile(x, y) {
if x >= 0 && x < 4 && y >= 0 && y < 4 {
row = me.grid.get(x)
return row.get(y)
}
// エラーケース用ダミータイル
return new SimpleTile(-1)
}
// タイル設定
setTile(x, y, value) {
if x >= 0 && x < 4 && y >= 0 && y < 4 {
row = me.grid.get(x)
tile = row.get(y)
tile.setValue(value)
}
}
// 空のセルに2を追加シンプル版
addRandomTile() {
// 最初の空いてるセルに2を追加
row = 0
loop(row < 4) {
col = 0
loop(col < 4) {
tile = me.getTile(row, col)
if tile.isEmpty() {
me.setTile(row, col, 2)
print("🎲 Added 2 at (" + row + "," + col + ")")
return true
}
col = col + 1
}
row = row + 1
}
return false
}
// ボード表示
display() {
print("📊 Score: " + me.score)
print("┌────┬────┬────┬────┐")
row = 0
loop(row < 4) {
line = "│"
col = 0
loop(col < 4) {
tile = me.getTile(row, col)
value = tile.getValue()
if value == 0 {
line = line + " "
} else if value < 10 {
line = line + " " + value
} else if value < 100 {
line = line + " " + value
} else if value < 1000 {
line = line + " " + value
} else {
line = line + value.toString()
}
line = line + "│"
col = col + 1
}
print(line)
if row < 3 {
print("├────┼────┼────┼────┤")
}
row = row + 1
}
print("└────┴────┴────┴────┘")
}
// シンプル左移動
moveLeft() {
moved = false
row = 0
loop(row < 4) {
// 各行の値を配列に集める
values = new ArrayBox()
col = 0
loop(col < 4) {
tile = me.getTile(row, col)
if tile.getValue() > 0 {
values.push(tile.getValue())
}
col = col + 1
}
// マージ処理(シンプル版)
if values.length() >= 2 {
i = 0
loop(i < values.length() - 1) {
val1 = values.get(i)
val2 = values.get(i + 1)
if val1 == val2 {
newValue = val1 * 2
values.set(i, newValue)
values.removeAt(i + 1)
me.score = me.score + newValue
print("✨ Merged " + val1 + " + " + val2 + " = " + newValue)
break // 一回のみマージ
}
i = i + 1
}
}
// 行を更新
col = 0
loop(col < 4) {
oldTile = me.getTile(row, col)
oldValue = oldTile.getValue()
if col < values.length() {
newValue = values.get(col)
} else {
newValue = 0
}
if oldValue != newValue {
moved = true
me.setTile(row, col, newValue)
}
col = col + 1
}
row = row + 1
}
return moved
}
}
// 🎮 シンプルゲームBox
box SimpleGame2048 {
init { board, moves, gameStarted }
SimpleGame2048() {
me.board = new SimpleGameBoard()
me.moves = 0
me.gameStarted = false
DEBUG.trackBox(me.board, "simple_game_board")
}
start() {
print("🚀 Starting Simple 2048 game...")
// 初期タイル2個追加
me.board.addRandomTile()
me.board.addRandomTile()
me.gameStarted = true
me.board.display()
return me
}
move(direction) {
if me.gameStarted == false {
print("❌ Game not started!")
return false
}
moved = false
if direction == "left" {
moved = me.board.moveLeft()
} else {
print("⚠️ Only 'left' direction implemented")
return false
}
if moved {
me.moves = me.moves + 1
me.board.addRandomTile()
print("\n📱 Move " + me.moves + " (left):")
me.board.display()
} else {
print("⚠️ No movement possible")
}
return moved
}
}
// 🚀 ゲーム実行
print("🎯 Testing Simple 2048...")
game = new SimpleGame2048()
DEBUG.trackBox(game, "main_simple_game")
// ゲーム開始
game.start()
// 移動テスト
print("\n=== Movement Testing ===")
game.move("left")
game.move("left")
game.move("left")
// デバッグ情報
print("\n📊 === Debug Report ===")
print(DEBUG.memoryReport())
print("\n🎉 Simple 2048 completed!")
print("Nyashで2048ゲームが動いたにゃ 🎮✨")