Kivy 2048 项目

main.py

import random

import keyboard as keyboard
from kivy.app import App
from kivy.graphics import BorderImage, Color
from kivy.properties import NumericProperty, ListProperty
from kivy.uix.widget import Widget
from kivy.core.window import Window, Keyboard
from kivy.vector import Vector
from kivy.utils import get_color_from_hex


spacing = 15

colors = ('eee4da', 'ede0c8', 'f2b179', 'f59563', 'f67c5f', 'f65e3b', 'edcf72', 'edcc61', 'ebc850', 'edc53f', 'edc22e')

tile_colors = {2 ** i: color for i, color in enumerate(colors, start=1)}

key_vectors = {
    Keyboard.keycodes['up']: (0, 1),
    Keyboard.keycodes['right']: (1, 0),
    Keyboard.keycodes['down']: (0, -1),
    Keyboard.keycodes['left']: (-1, 0),
}

class Tile(Widget):
    font_size = NumericProperty(24)
    number = NumericProperty(2)
    color = ListProperty(get_color_from_hex(tile_colors[2]))
    number_color = ListProperty(get_color_from_hex('776e65'))

    def __init__(self, number=2, **kwargs):
        super(Tile, self).__init__(**kwargs)
        self.font_size = 0.5 * self.width
        self.number = number
        self.update_colors()

    def update_colors(self):
        self.color = get_color_from_hex(tile_colors[self.number])
        if self.number > 4:
            self.number_color = get_color_from_hex('f9f6f2')

    def resize(self, pos, size):
        self.pos = pos
        self.size = size
        self.font_size = 0.5 * self.width



def all_cells(flip_x=False, flip_y=False):
    for x in (reversed(range(4)) if flip_x else range(4)):
        for y in (reversed(range(4)) if flip_y else range(4)):
            yield (x, y)

class Board(Widget):
    b = None
    def __init__(self, **kwargs):
        super(Board, self).__init__(**kwargs)
        self.resize()

    def reset(self):
        self.b = [[None for i in range(4)] for j in range(4)]
        self.new_tile()
        self.new_tile()

    def new_tile(self, *args):
        empty_cells = [(x,y) for x, y in all_cells()
                       if self.b[x][y] is None]
        if not empty_cells:
            print('Game over (tentative: no cells)')
            return

        x, y = random.choice(empty_cells)
        tile = Tile(pos=self.cell_pos(x,y),
                    size=self.cell_size)
        self.b[x][y] = tile
        self.add_widget(tile)

    def move(self, dir_x, dir_y):
        dir_x = int(dir_x)
        dir_y = int(dir_y)

        for board_x, board_y in all_cells(dir_x > 0, dir_y > 0):
            tile = self.b[board_x][board_y]
            if not tile:
                continue

                x, y = board_x, board_y
                while self.can_move(x + dir_x, y + dir_y):
                    self.b[x][y] = None
                    x += dir_x
                    y += dir_y
                    self.b[x][y] = tile

                if x == board_x and y == board_y:
                    continue
                anim = Animation(pos=self.cell_pos(x, y), duration=0.25, transition='linear')
                anim.start(tile)


    def cell_pos(self, board_x, board_y):
        return (self.x + board_x * (self.cell_size[0] + spacing) + spacing,
                self.y + board_y * (self.cell_size[1] + spacing) + spacing)
    def valid_cell(self, board_x, board_y):
        return (board_x >= 0 and board_y >=0 and board_x <=3 and board_y <=3)

    def can_move(self, board_x, board_y):
        return (self.valid_cell(board_x, board_y) and self.b[board_x][board_y] is None)

    def resize(self, *args):
        # 设置尺寸
        self.cell_size = (0.25 * (self.width -5 * spacing), ) * 2

        # redraw background
        self.canvas.before.clear()
        with self.canvas.before:
            # 设置背景
            BorderImage(pos=self.pos, size=self.size, source='board.png')
            Color(*get_color_from_hex('ccc0b4'))
            for board_x, board_y in all_cells():
                BorderImage(pos=self.cell_pos(board_x, board_y),
                            size=self.cell_size, source='cell.png')
            if not self.b:
                return
            for board_x, board_y in all_cells():
                tile = self.b[board_x][board_y]
                if tile:
                    tile.resize(pos=self.cell_pos(board_x, board_y), size=self.cell_size)

    on_pos = resize
    on_size = resize

class GameApp(App):
    def build(self):
        # 通过ID获取到FloatLayoit布局中的Board部件
        board = self.root.ids.board
        board.reset()


if __name__ == '__main__':
    Window.clearcolor = get_color_from_hex('faf8ef')
    GameApp().run()

game.kv

#:set padding 20

FloatLayout:
    Board:
        id: board
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        size_hint: (None, None)
        center: root.center
        size: [min(root.width, root.height) -2 * padding] * 2

<Tile>:
    canvas:
        Color:
            rgb: self.color

        BorderImage:
            pos: self.pos
            size: self.size
            source: 'cell.png'

    Label:
        pos: root.pos
        size: root.size
        bold: True
        color: root.number_color
        font_size: root.font_size
        text: str(root.number)

x, y    board_x   board_y

 (board_x, board_y)坐标 如(0,0), (0, 1), (1, 1),(2, 2) 等
 

board_x和board_y则是用来表示游戏界面中方块的索引位置。它们是以0为起始索引的整数值,用于表示方块在游戏棋盘中的位置。

区别在于,x和y是以像素为单位的坐标,用于确定方块在屏幕上的具体位置;而board_x和board_y是以索引为单位的坐标,用于确定方块在游戏棋盘中的位置。

在Kivy 2048项目中,x和y是来表示游戏界面中棋盘的位置坐标。它们分别代表了棋盘在水平和垂直方向上的位置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
是的,你可以使用 Android Studio 来调试 Kivy 项目Kivy 是一个开源的 Python 框架,用于创建跨平台的移动应用程序,其中包括 Android 平台。下面是一些步骤来设置和调试 Kivy 项目: 1. 安装 Android Studio:首先,确保你已经安装了最新版本的 Android Studio。你可以从官方网站(https://developer.android.com/studio)下载并按照安装说明进行安装。 2. 设置环境变量:在 Android Studio 安装完成后,你需要设置一些环境变量,以便能够在命令行中访问 Android SDK 工具和平台工具。具体的设置方式可以参考官方文档(https://developer.android.com/studio/command-line/variables)。 3. 配置 Kivy 项目:在你的 Kivy 项目中,确保已经进行了相应的配置,以便在 Android 平台上构建和运行应用程序。你可以参考 Kivy 官方文档(https://kivy.org/doc/stable/guide/packaging-android.html)了解如何配置项目。 4. 连接设备或启动模拟器:将你的 Android 设备连接到计算机上,或者启动 Android Studio 中的模拟器。 5. 在 Android Studio 中导入项目:打开 Android Studio,导入你的 Kivy 项目。选择 "Import Project" 或 "Open an Existing Project",然后选择你的 Kivy 项目所在的文件夹。 6. 构建和运行应用程序:在 Android Studio 中,使用 Gradle 构建你的项目。点击 "Build" 菜单,选择 "Build Bundle(s) / APK(s)"。构建完成后,你可以选择将应用程序直接安装到连接的设备上或模拟器上进行调试。 7. 进行调试:在 Android Studio 中,你可以使用调试工具来检查应用程序的运行状态、变量值、堆栈跟踪等。选择 "Run" 菜单中的 "Debug 'app'" 选项,将应用程序启动到调试模式。 以上是一般的步骤,你可以按照这些步骤来设置和调试你的 Kivy 项目。但请注意,由于 Kivy 是使用 Python 编写的,与传统的 Android 开发有所不同,一些高级功能和特性可能需要额外的配置或处理。因此,你可能需要参考 Kivy 和 Android Studio 的官方文档,以获取更多关于特定配置和调试方面的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinzheng新政

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值