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