Flutter自定义键盘插件togboard的使用

Flutter 自定义键盘插件 togboard 的使用

togboard.dart

一个由 Yernar Shambayev 使用 Dart 编写的包 “Togyz Kumalak”。

Togyz Kumalak(或 Toguz Kumalak 或 Toguz Korgool)是一种非常有趣的哈萨克-吉尔吉斯棋盘游戏。规则可以在这里找到:Togyz Kumalak 规则

如果你想与相当强的人工智能对战,可以检查这个 Android 应用程序:Togyz Kumalak Master

import 'package:togboard/togboard.dart';

void main() {
  ToguzBoard toguzBoard = ToguzBoard();
  toguzBoard.playRandomGame();

  print("Game over: ${toguzBoard.getScore()}");
  toguzBoard.printNotation(true, false);
}

示例代码

example/main.dart
import 'dart:io';
import 'package:togboard/togboard.dart';

void main() {
  // 输出欢迎信息
  stdout.write("欢迎来到 Togyz Kumalak 世界!");
  stdout.write(
      "请输入模式: (h - 人类游戏, m - 随机机器, r - 对抗随机 AI) ");
  
  // 读取用户输入的模式
  String mode = stdin.readLineSync().toString();

  if (mode == 'h') {
    // 人类游戏模式
    bool cancelled = false;
    ToguzBoard tBoard = ToguzBoard();
    print(tBoard.printPos()); // 打印初始棋盘位置

    while ((!cancelled) && (!tBoard.isGameFinished())) { // 游戏未结束且未取消
      stdout.write("请输入您的移动 (1-9, 0 - 退出): ");
      String move = stdin.readLineSync().toString();
      int num = int.tryParse(move) ?? 0;

      if (num == 0) {
        cancelled = true; // 用户选择退出
      } else if ((num > 0) && (num < 10)) {
        tBoard.makeMove(num); // 移动棋子
        tBoard.printNotation(true, false); // 打印棋局记录
        print(tBoard.printPos()); // 打印当前棋盘位置
      }
    }

    stdout.write("游戏结束");
    print(tBoard.getScore()); // 打印最终得分
  } else if (mode == 'm') {
    // 随机机器模式
    stdout.write("请输入迭代次数: ");
    int numIterations = int.tryParse(stdin.readLineSync().toString()) ?? 5;
    final stopwatch = Stopwatch()..start(); // 启动计时器

    int win = 0;
    int draw = 0;
    int lose = 0;

    for (var i = 0; i < numIterations; i++) {
      ToguzBoard tBoard = ToguzBoard();
      int gRes = tBoard.playRandomGame(); // 进行随机游戏

      if (gRes == 1)
        win++; // 赢
      else if (gRes == 0)
        draw++; // 平局
      else if (gRes == -1) lose++; // 输
    }

    stopwatch.stop(); // 停止计时器
    print("胜利: $win, 平局: $draw, 失败: $lose");
    print("时间 ${stopwatch.elapsedMilliseconds / 1000} 秒"); // 打印耗时
  } else if (mode == 'r') {
    // 对抗随机 AI 模式
    stdout.write("AI 颜色 (0 - 白色, 1 - 黑色): ");
    int compColor = int.tryParse(stdin.readLineSync().toString()) ?? 1;

    bool cancelled = false;
    int currentColor;

    ToguzBoard tBoard = ToguzBoard();
    print(tBoard.printPos()); // 打印初始棋盘位置

    while ((!cancelled) && (!tBoard.isGameFinished())) { // 游戏未结束且未取消
      currentColor = tBoard.getCurrentColor(); // 获取当前颜色
      if (((currentColor == 0) && (compColor == 1)) ||
          ((currentColor == 1) && (compColor == 0))) {
        stdout.write("请输入您的移动 (1-9, 0 - 退出): ");
        int num = int.tryParse(stdin.readLineSync().toString()) ?? 0;

        if (num == 0) {
          cancelled = true; // 用户选择退出
        } else if ((num > 0) && (num < 10)) {
          tBoard.makeMove(num); // 移动棋子
          tBoard.printNotation(true, false); // 打印棋局记录
          print(tBoard.printPos()); // 打印当前棋盘位置
        }
      } else {
        tBoard.makeRandomMove(); // AI 随机移动
        tBoard.printNotation(true, false); // 打印棋局记录
        print(tBoard.printPos()); // 打印当前棋盘位置
      }
    }

    stdout.write("游戏结束: ${tBoard.getScore()}"); // 打印最终得分
  }
}

更多关于Flutter自定义键盘插件togboard的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义键盘插件togboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Togboard 是一个用于 Flutter 的自定义键盘插件,允许开发者在应用中实现自定义键盘布局。以下是使用 togboard 插件的基本步骤和示例代码。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 togboard 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  togboard: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在需要使用 togboard 的 Dart 文件中导入插件:

import 'package:togboard/togboard.dart';

3. 使用 Togboard

Togboard 是一个 StatefulWidget,你可以通过设置 keyboardType 属性来指定键盘类型。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:togboard/togboard.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Togboard Example'),
        ),
        body: Center(
          child: TogboardExample(),
        ),
      ),
    );
  }
}

class TogboardExample extends StatefulWidget {
  @override
  _TogboardExampleState createState() => _TogboardExampleState();
}

class _TogboardExampleState extends State<TogboardExample> {
  TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        TextField(
          controller: _controller,
          decoration: InputDecoration(
            labelText: 'Enter text',
          ),
        ),
        Expanded(
          child: Togboard(
            keyboardType: TogboardType.alpha, // 设置键盘类型
            onTextInput: (text) {
              setState(() {
                _controller.text += text;
              });
            },
            onBackspace: () {
              setState(() {
                if (_controller.text.isNotEmpty) {
                  _controller.text = _controller.text.substring(0, _controller.text.length - 1);
                }
              });
            },
          ),
        ),
      ],
    );
  }
}

4. 自定义键盘布局

Togboard 允许你自定义键盘布局。你可以通过 keyboardType 属性选择不同的键盘类型,或者创建自定义的键盘布局。

例如,你可以使用 TogboardType.custom 来创建自定义键盘布局:

Togboard(
  keyboardType: TogboardType.custom,
  customKeys: [
    ['1', '2', '3'],
    ['4', '5', '6'],
    ['7', '8', '9'],
    ['0', '←'],
  ],
  onTextInput: (text) {
    setState(() {
      _controller.text += text;
    });
  },
  onBackspace: () {
    setState(() {
      if (_controller.text.isNotEmpty) {
        _controller.text = _controller.text.substring(0, _controller.text.length - 1);
      }
    });
  },
)
回到顶部