Files
hakorune/examples/simple_2048.hako

272 lines
6.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 🎮 シンプル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ゲームが動いたにゃ 🎮✨")