import 'dart:math';
import 'package:dart_random_choice/dart_random_choice.dart';
import 'package:flutter/material.dart';
Здесь я получаю случайные числа для вопросов сложения, вычитания, умножения
int num1 = Random().nextInt(100);
int num2 = Random().nextInt(100);
List<String> typeOfQuestions = [
'Addition',
'Subtraction',
'Multiplication',
'Division'
];
Widget question;
Здесь я создаю различные типы виджетов в соответствии с математической операцией
Map questions = {
"Addition": AdditionWidget(
num1: num1,
num2: num2,
),
"Subtraction": SubtractionWidget(
num1: num1,
num2: num2,
),
"Multiplication": MultiplicationWidget(
num1: num1,
num2: num2,
)
};
gameWinсообщает, прошел ли игрок математику и может ли он перейти на следующий уровень
bool gameWin = false;
TextEditingController answerController;
инициализировать игру - это функция при каждом запуске новой игры и выбрать случайное математическое уравнение
initializeGame() {
String typeOfQuestion = randomChoice(typeOfQuestions);
switch (typeOfQuestion) {
case 'Addition':
{
question = questions['Addition'];
}
break;
case 'Subtraction':
{
question = questions['Subtraction'];
}
break;
case 'Multiplication':
{
question = questions['Addition'];
}
break;
default:
{
question = questions['Subtraction'];
}
break;
}
}
class Game extends StatefulWidget {
_GameState createState() => _GameState();
}
class _GameState extends State<Game> {
Яне уверен, нужен ли мне initstate здесь, я просто поставил его на тот случай, если
@override
void initState() {
super.initState();
}
Widget build(BuildContext context) {
initializeGame();
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Math Rush'),
),
body: Center(
child: Row(
children: <Widget>[
question,
Flexible(
child: TextField(
controller: answerController,
onChanged: (text) {
switch (question) {
case 'Addition':
{
if (num1 + num2 == int.parse(text)) {
gameWin = true;
checkAnswerIsCorrect();
}
}
break;
case 'Subtraction':
{
if (num1 - num2 == int.parse(text)) {
gameWin = true;
checkansweriscorrect фактически означает, что ответ правильный, так как игрок выигрывает этот матч, он может перейти на следующий уровень
checkAnswerIsCorrect();
}
}
break;
case 'Multiplication':
{
if (num1 * num2 == int.parse(text)) {
gameWin = true;
checkAnswerIsCorrect();
}
}
}
},
),
),
],
),
),
),
);
}
checkAnswerIsCorrect() {
setState(
() {
if (gameWin == true) {
num1 = Random().nextInt(100);
num2 = Random().nextInt(100);
initializeGame();
}
},
);
}
}