Rate this post

Run code

  • Tải xuống Dart SDK từ đây và cài đặt.
  • Viết code trong các file mở rộng .dart
  • Chạy code trên terminal
PowerShell 6.2.4
Copyright (c) Microsoft Corporation. All rights reserved.

PS C:\Users\Desktop dart code-file.dart

hoặc

Bạn có thể chạy mã trên DartPad hoặc Repl.it (chọn Dart từ các tùy chọn).

Tuy nhiên, hãy nhớ rằng DartPad không cho phép thao tác I/O, trong khi Repl.it thì có

Các bài viết liên quan:

Bài tập về kiểu dữ liệu

  1. Tạo biến với các kiểu dữ liệu khác nhau và gán giá trị cho chúng.
  2. Tạo một mảng và gán giá trị cho mảng đó.
  3. Tìm kiếm một giá trị trong mảng.
  4. Sắp xếp một mảng tăng dần hoặc giảm dần.
  5. Tạo một Map và gán giá trị cho Map đó.
  6. Tìm kiếm một giá trị trong Map.
  7. Thêm một phần tử mới vào Map.
  8. Xóa một phần tử trong Map.
  9. Sử dụng dynamic để chuyển đổi giữa các kiểu dữ liệu.
  10. Sử dụng var để tạo một biến với kiểu dữ liệu tự động.
  11. Tạo biến kiểu chuỗi và in giá trị của biến này.
  12. Tạo biến kiểu boolean và in giá trị của biến này.
  13. Tạo biến kiểu List và in giá trị của biến này.
  14. Tạo biến kiểu Map và in giá trị của biến này.
  15. Tạo biến kiểu Set và in giá trị của biến này.
  16. Sử dụng phép gán nhiều biến và in giá trị của các biến này.
  17. Sử dụng hằng số (constants) và in giá trị của hằng số này.
  18. Sử dụng toán tử và gán giá trị cho biến sử dụng toán tử và in giá trị của biến này.

Xem thêm 100+ bài tập python

Bài tập sử dụng Các toán tử và các biểu thức trong Dart

Dưới đây là một số bài tập về việc sử dụng các toán tử và các biểu thức trong Dart:

  1. Tính tổng của hai số nguyên a và b và in ra kết quả.
  2. Tìm giá trị nhỏ nhất của ba số nguyên a, b, và c.
  3. Tìm giá trị lớn nhất của ba số nguyên a, b, và c.
  4. Tìm giá trị trung bình của ba số nguyên a, b, và c.
  5. Viết chương trình kiểm tra xem một số nguyên có phải là số chẵn hay không.
  6. Viết chương trình kiểm tra xem một số nguyên có phải là số nguyên tố hay không.
  7. Viết chương trình tính bậc hai của một số nguyên.
  8. Viết chương trình tính giai thừa của một số nguyên.
  9. Viết chương trình kiểm tra xem một năm có phải là năm nhuận hay không.
  10. Viết chương trình kiểm tra xem một chuỗi có phải là chuỗi palindrome hay không.

10 + Bài tập Dart về conditionals

  1. Viết một chương trình Dart để kiểm tra xem một số có phải là số chẵn hay là số lẻ.
  2. Viết một chương trình Dart để kiểm tra xem một số có phải là số âm hay là số dương.
  3. Viết một chương trình Dart để kiểm tra xem một số có lớn hơn hoặc bằng 0 hay không.
  4. Viết một chương trình Dart để tính tổng của hai số và kiểm tra xem tổng của hai số có lớn hơn hoặc bằng 0 hay không.
  5. Viết một chương trình Dart để tìm ra số lớn nhất trong ba số.
  6. Viết một chương trình Dart để tính diện tích hình tròn dựa trên bán kính và kiểm tra xem diện tích của hình tròn có lớn hơn 0 hay không.
  7. Viết một chương trình Dart để tính tiền thuế dựa trên tổng thu nhập và mức thuế.
  8. Viết một chương trình Dart để tìm ra số nhỏ nhất trong một mảng các số.
  9. Viết một chương trình Dart để kiểm tra xem một chuỗi có phải là chuỗi rỗng hay không.
  10. Viết một chương trình Dart để kiểm tra xem

10 bài tập Dart về data structures

  1. Tạo một danh sách số nguyên và in ra màn hình các phần tử trong danh sách.
  2. Tạo một map của các đôi tượng với các trường tên và giá trị, in ra màn hình các đối tượng trong map.
  3. Tạo một set của các chuỗi và in ra màn hình tất cả các phần tử trong set.
  4. Tạo một queue và thực hiện các hoạt động thêm phần tử vào queue, xóa phần tử khỏi queue, và in ra màn hình các phần tử trong queue.
  5. Tạo một stack và thực hiện các hoạt động thêm phần tử vào stack, xóa phần tử khỏi stack, và in ra màn hình các phần tử trong stack.
  6. Tạo một linked list và thực hiện các hoạt động thêm phần tử vào linked list, xóa phần tử khỏi linked list, và in ra màn hình các phần tử trong linked list.
  7. Tạo một binary tree và thực hiện các hoạt động thêm phần tử vào binary tree, xóa phần tử khỏi binary tree, và in ra màn hình các phần tử trong binary tree.
  8. Tạo một graph và thực hiện các hoạt động thêm cạnh vào graph, xóa cạnh khỏi graph, và in ra màn hình các đỉnh và cạnh trong graph.

10+ bài tập về loop trong Dart

  1. Tìm tổng của các số từ 1 đến n.
  2. Tìm tổng của các số chẵn từ 1 đến n.
  3. Tìm tổng của các số lẻ từ 1 đến n.
  4. In ra các số từ 1 đến n theo thứ tự ngược.
  5. In ra một tam giác Pascal.
  6. In ra một bảng cửu chương.
  7. In ra một bảng cửu chương theo thứ tự ngược.
  8. Tìm số lớn nhất trong một danh sách.
  9. Tìm số nhỏ nhất trong một danh sách.
  10. Tìm số xuất hiện nhiều nhất trong một danh sách.
  11. Tìm các số hoàn thiện trong một khoảng từ n đến m.
  12. Tìm số nguyên tố trong một khoảng từ n đến m.

10 + bài tập OOP, interface, Object trong Dart

  1. Tạo một lớp Sinh viên có các thuộc tính như tên, tuổi, điểm trung bình, chuyên ngành và phương thức tính điểm trung bình.
  2. Tạo một lớp Khoa có các thuộc tính như tên khoa, danh sách các môn học và phương thức in ra danh sách môn học.
  3. Tạo một lớp Giáo viên có các thuộc tính như tên giáo viên, danh sách các môn dạy và phương thức in ra danh sách môn dạy.
  4. Tạo một interface Shape với phương thức tính diện tích và chu vi.
  5. Tạo lớp hình tròn, hình chữ nhật và hình tam giác kế thừa từ interface Shape.
  6. Tạo một lớp Animal có các thuộc tính như tên động vật, số chân và phương thức giống nhau.
  7. Tạo lớp Dog, Cat kế thừa từ lớp Animal và có các phương thức riêng.
  8. Tạo một lớp Vehicle có các thuộc tính như tên phương tiện, số bánh và phương thức chạy.
  9. Tạo lớp ô tô, xe máy kế thừa từ lớp Vehicle và có các phương thức riêng.

10 bài tập Dart về exception handling

Dưới đây là 10 bài tập về exception handling trong Dart:

  1. Tạo một exception class mới và ném nó khi xảy ra lỗi nhất định.
  2. Viết một hàm xử lý ngoại lệ để gọi hàm có thể gây ra ngoại lệ.
  3. Tìm cách kiểm tra một số nguyên có phải là số chẵn hay lẻ bằng cách sử dụng exception handling.
  4. Viết một hàm tìm kiếm từ điển bằng cách sử dụng exception handling để xử lý trường hợp tìm kiếm không thành công.
  5. Viết một hàm để kiểm tra xem một chuỗi có phải là số hay không bằng cách sử dụng exception handling.
  6. Tìm cách sử dụng exception handling để xử lý lỗi trong quá trình ghi file.
  7. Viết một hàm để tính toán giá trị trung bình cộng của một mảng số bằng cách sử dụng exception handling để xử lý trường hợp mảng trống.
  8. Sử dụng exception handling để xử lý trường hợp nhập sai dữ liệu từ người dùng.
  9. Sử dụng exception handling để xử lý trường hợp kết nối mạng không thành công.

Bài tập Dart về File và API

  1. Đọc một tập tin văn bản và in nội dung của nó ra màn hình.
  2. Ghi một chuỗi vào một tập tin văn bản mới.
  3. Sử dụng thư viện http để truy cập một API RESTful và in ra màn hình dữ liệu đầu ra.
  4. Tạo một form đăng ký cho người dùng với các trường tên, email, mật khẩu và gửi dữ liệu đến một API.
  5. Sử dụng thư viện http để truy cập API và lấy về dữ liệu về thời tiết và hiển thị nó trên màn hình.

Bài tập tổng hợp

  1. Tạo một chương trình yêu cầu người dùng nhập tên và tuổi của họ. In ra một thông báo cho biết họ phải sống 100 tuổi trong bao nhiêu năm nữa.
import 'dart:io';// khai báo thư viện

void main() {   
  	// xuất ra màn hình
    stdout.write("tên của bạn là gì? ");
  	// nhập vào dòng đưa vào string name
    String name = stdin.readLineSync();
	// xuất ra màn hình , yêu cầu nhập tuổi
    print("Xin chào, $name! bạn bao nhiêu tuổi?");
  	// convert String nhập từ màn hình chuyển sang interger và nhập vào age
    int age = int.parse(stdin.readLineSync());
	// tính toán trừ 
    int yearsToHunderd = 100 - age;
  // xuất ra màn hình
    print("$name, bạn có $yearsToHunderd đến 100");
}
  1. Yêu cầu người dùng cho một số. Tùy theo số chẵn hay lẻ mà in ra thông báo thích hợp cho người dùng.
import 'dart:io';

void main() {    
    stdout.write("xin hãy chọn một số: ");
    int number = int.parse(stdin.readLineSync());
    
    if (number % 2 == 0) {
        print("số này là số chẵn");
    }
    else {
        print("số này là số lẻ");
    }
}
  1. Lấy một danh sách, ví dụ như danh sách này:

 a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

và viết chương trình in ra tất cả các phần tử của danh sách nhỏ hơn 5.

void main() {
  //danh sách integer
  List<int> a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89];
	//vòng for chạy từng phần tử
  for (var i in a) {
    if (i < 5) {
      print(i);
    }
  }
  
  // viết ngắn gọn 1 dòng
  print([for (var i in a) if (i < 5) i]);
}
  1. Tạo một chương trình yêu cầu người dùng nhập một số và sau đó in ra danh sách tất cả các ước của số đó.

Nếu bạn không biết số chia là gì, thì đó là một số chia hết cho một số khác. Ví dụ: 13 là ước của 26 vì 26/13 không có số dư.

import 'dart:io';

void main() {
  // xuât ra màn hình
  stdout.write("chọn một số bất kỳ: ");
  // chuyển string nhập từ màn hình --> number
  int number = int.parse(stdin.readLineSync());
  // chạy vòng for từ 1 đến số bất kỳ
  for (var i = 1; i <= number; i++) {
    //xuất ra số có ước chung
    if (number % i == 0) {
      print(i);
    }
  }
}
  1. Lấy hai danh sách, ví dụ:

   a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

   b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

và viết chương trình trả về một danh sách chỉ chứa các phần tử chung giữa chúng (không trùng lặp). Đảm bảo rằng chương trình của bạn hoạt động trên hai danh sách có kích cỡ khác nhau.

void main() {
	//danh sách thứ nhất
  List<int> a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89];
  //danh sách thứ 2
  List<int> b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 89];
  // khai báo danh sách chứa các phần tử chung
  Set<int> c = {};

	// chạy 2 vòng for duyệt các phần từ list 1 và 2
  for (var i in a) {
    for (var j in b) {
    // nếu phần tử thuộc list 1 trùng với list 2 thì thêm vào danh sách C
      if (i == j) {
        c.add(i);
      }
    }
  }
  // xuất danh sách c
  print(c.toList());

  // toán tử sử dụng 1 hàng
  print(Set.from(a).intersection(Set.from(b)).toList());
}
  1. Yêu cầu người dùng cung cấp một chuỗi và in ra xem chuỗi này có phải là một chuỗi Palindrome hay không.

Palindrome là một chuỗi đọc xuôi và ngược giống nhau.

import 'dart:io';

void main() {
  //xuất ra chữ nhập vào một từ
  stdout.write("Nhập vào một từ: ");
  //đọc từ từ màn hình và đưa vào biến input
  String input = stdin.readLineSync().toLowerCase();
  // sử dụng đảo ngược chuỗi
  String revInput = input.split('').reversed.join('');
  
  // so sánh chuỗi xuôi và ngược
  input == revInput
      ? print("Chuỗi này là palindrome")
      : print("Chuỗi này không phải là palindrome");
}
  1. Giả sử bạn được cung cấp một danh sách được lưu trong một biến:

a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100].

Viết mã Dart lấy danh sách này và tạo một danh sách mới chỉ có các phần tử chẵn của danh sách này trong đó.

void main() {
  // khởi tạo danh sách
  List<int> a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100];
// khai báo 1 biến i giá trị o
  int i = 0;
  List<int> l = [];
	// chạy vòng for từng phần tử
  for (var e in a) {
    //kiểm tra chẵn
    if (++i % 2 == 0) {
      // thêm giá trị chẵn vào danh sách l
      l.add(e);
    }
  }
  // xuất danh sách l
  print(l);
  
  // Toán tử 1 dòng
  print([for (var e in a) if (++i % 2 == 0) e]);
}
  1. Tạo trò chơi Oẳn tù tì hai người chơi với máy tính.

Yêu cầu đầu vào của người chơi, so sánh chúng, in ra một tin nhắn cho người chiến thắng.

import 'dart:io';
import 'dart:math';

void main() {
  print("Chào mừng đến game Oẳn tù tì");
  
  // tạo giá trị random
  final random = Random();

  // Tạo Map chứ  tổ hợp giá trị của máy và người chơi
  Map<String, String> rules = {
    "rock": "scissors",
    "scissors": "paper",
    "paper": "rock"
  };

  // khởi tạo điểm số
  int user = 0;
  int comp = 0;

  // Danh sách kết quả búa kéo bao
  List<String> options = ["rock", "paper", "scissors"];

  // Game chạy
  while (true) {
    // random giá trị của máy
    String compChoice = options[random.nextInt(options.length)];
    //xuất ra dòng lệnh
    stdout.write("\nNhập giá trị : rock, paper, scissor ");
    // đưa giá trị người chọn vào String
    String userChoice = stdin.readLineSync().toLowerCase();

    // nếu chọn exit -> thì thoát
    if (userChoice == "exit") {
      print("\nYou: $user Computer: $comp\nBye Bye!");
      break;
    }
	// nếu chọn không đúng các trường hợpf
    if (!options.contains(userChoice)) {
      print("nhập sai");
      continue;
    } // nếu giá trị = nhay
    else if (compChoice == userChoice) {
      print("hòa!");
    } else if (rules[compChoice] == userChoice) {
      print("Computer thắng: $compChoice vs $userChoice");
      comp += 1;
    } else if (rules[userChoice] == compChoice) {
      print("Bạn thắng: $userChoice vs $compChoice");
      user += 1;
    }
  }
}
  1. Tạo một số ngẫu nhiên trong khoảng từ 1 đến 100. Yêu cầu người dùng đoán số, sau đó cho họ biết họ đã đoán quá thấp, quá cao hay chính xác.

Theo dõi xem người dùng đã đoán được bao nhiêu lần và khi trò chơi kết thúc, hãy in thông tin này ra.

import 'dart:io';
import 'dart:math';

void main() {
  print("Nhập Exit để thoát game");
  guessingGame();
}

guessingGame() {
  // tạo một giá trị random
  final random = Random();
  // random 1 số từ 0 đến 100
  int randNumber = random.nextInt(100);
  int attempt = 0;

  while (true) {
    // tạo biến nhớ số lần chọn
    attempt += 1;
    stdout.write("hãy chọn số từ 0 đến 100: ");
    String chosenNumber = stdin.readLineSync();

    // Nếu gõ Exit thì thoát chương trình
    if (chosenNumber.toLowerCase() == "exit") {
      print("\nBye");
      break;
    } else if (int.parse(chosenNumber) > 100) {
      // nếu giá trị nhập >100 thì xuất ra
      print("bạn nhập số > 100");
      continue;
    }

    // Logic game
    if (int.parse(chosenNumber) == randNumber) {
      // nếu số đúng thì xuất ra số lần đoán
      print("chọn đúng bạn đã đoán $attempt lần\n");
      continue;
    } else if (int.parse(chosenNumber) > randNumber) {
      // nếu số lớn hơn thì xuất ra
      print("bạn chọn số lớn hơn");
      continue;
    } else {
      // nếu số nhỏ hơn thì xuất ra
      print("bạn chọn số nhỏ hơn");
      continue;
    }
  }
}
  1. Hỏi người dùng một số và xác định xem số đó có phải là số nguyên tố hay không.

Làm điều đó bằng cách sử dụng một chức năng

import 'dart:io';

void main() {
  //xuất ra console
  stdout.write("nhập vào một số: ");
  int chosenNumber = int.parse(stdin.readLineSync());

  //hàm kiểm tra số nguyên tố
  checkPrime(chosenNumber);
}

void checkPrime(int number) {
  // danh sách a là tất cả các số chia hết bởi number
  List<int> a = [
    for (var i = 1; i <= number; i++)
      if (number % i == 0) i
  ];

  // nếu danh sách số này =2 thì
  a.length == 2
      ? print("đây là số nguyên tố")
      : print("đây không phải là số nguyên tố");
}
  1. Viết chương trình lấy một danh sách các số chẳng hạn

a = [5, 10, 15, 20, 25]

và tạo một danh sách mới chỉ gồm các phần tử đầu tiên và cuối cùng của danh sách đã cho. Để thực hành, hãy viết mã này bên trong một hàm.

import 'dart:math';

void main() {
  // khởi tạo biến random
  final random = Random();
  //random 10 phần tủ của List
  List<int> randList = List.generate(10, (_) => random.nextInt(100));

  // xuất ra màn hình mảng
  print(randList);
  //gọi hàm newlist
  print(newList(randList));
}

// Ham newlist tạo mảng từ 2 phần từ đầu và cuối của mảng cũ
List<int> newList(List<int> initialList) {
  return [initialList.first, initialList.last];
}
  1. Viết một chương trình hỏi người dùng có bao nhiêu số Fibonnaci để tạo và sau đó tạo chúng.

Đảm bảo yêu cầu người dùng nhập số lượng các số trong dãy để tạo.

import 'dart:io';

void main() {
  stdout.write("Nhập vào giá trị N? ");
  int chosenNumber = int.parse(stdin.readLineSync());
	//gọi hàm fibonaci và gán giá trị trả về cho result
  List<int> result = fibonacciNumbers(chosenNumber);
  //xuat ra danh sách số fibonachi
  print(result);
}

// hàm Fibonaci
List<int> fibonacciNumbers(int chosenNumber) {
  //khởi tạo 2 giá trị ban đầu f0 và f1
  List<int> fibList = [1, 1];
  for (var i = 0; i < chosenNumber; i++) {
    //thêm vào list số tiếp theo của fibonaci
    fibList.add(fibList[i] + fibList[i + 1]);
  }
  return fibList;
}
  1. Viết một chương trình (hàm) lấy một danh sách và trả về một danh sách mới chứa tất cả các phần tử của danh sách đầu tiên trừ đi tất cả các phần trùng lặp.
import 'dart:math';

//hàm main chạy Dart
void main() {
  // tạo giá trị random
  final random = Random();
  //tạo danh sách các số random từ 1-10
  List<int> randList = List.generate(10, (_) => random.nextInt(10));
// xuất ra giá trị ban đầu
  print("Danh sách ban đầu $randList\n");
  print("Danh sách đã xóa trùng lặp ${removeDuplicates(randList)}");
}
// hàm xóa đi giá trị trùng lặp
List<int> removeDuplicates(List<int> initialList) {
  //toset là hàm chuyển sang thành tập hợp, tập hợp không có phần tử trùng
  return initialList.toSet().toList();
}
  1. Viết chương trình (dùng hàm!) hỏi người dùng một chuỗi dài chứa nhiều từ. In lại cho người dùng cùng một chuỗi, ngoại trừ các từ theo thứ tự ngược.

Ví dụ: giả sử chúng ta gõ chuỗi:

   Tên tôi là test

Sau đó, sẽ thấy chuỗi:

   Test là tên của tôi

import 'dart:io';

void main() {
  // xuất ra màn hình 
  stdout.write("Nhập một câu: ");
  String sentence = stdin.readLineSync();
	// sử dụng hàm hoán đổi từ trong câu
  reverseSentence(sentence);
}
//hàm hoán đổi từ trong câu
void reverseSentence(String sentence) {
  /* tách từ trong câu, sau đó đảo ngược */
  String a = sentence.split(" ").reversed.toList().join(" ");
  // in ra giá trị
  print(a);
}
  1. Viết trình tạo mật khẩu trong Dart trong ngôn ngữa Dart. Bao gồm mã thời gian chạy của bạn trong một phương thức chính.

Hỏi người dùng xem họ muốn mật khẩu của họ mạnh đến mức nào. Đối với mật khẩu yếu, hãy chọn một hoặc hai từ trong danh sách.

import 'dart:convert';
import 'dart:io';
import 'dart:math';

void main() {
  // xuất ra màn hình độ khó của password
  stdout.write("bạn muốn password của bạn =  Weak, Medium hoặc Strong: ");
  // lấy giá trị từ màn hình
  String choice = stdin.readLineSync().toLowerCase();
	// gọi hàm tạo password
  passwordGenerator(choice);
}

// hàm hoán đổi theo giá trị streng
void shuffleGenerator(int strength) {
  //tạo giá trị ngẫu nhiên
  final random = Random.secure();
  //tạo random với danh sách có độ lớn 5,15,25 và giá trị random từ 0-255
  List<int> intList = List.generate(strength, (_) => random.nextInt(255));
  //loại trừ ký tự đặc biệt bằng base64URL và join lại
  List charList = base64UrlEncode(intList).split('').toList();
  //hoán vị thêm lần nữa
  charList.shuffle();
  print("\npassword là: ${charList.join('')}\n");
}

//hàm tạo password
void passwordGenerator(String strength) {
  if (strength == "weak") {
    //gọi hàm hoán vị password với streng = 5
    shuffleGenerator(5);
  } else if (strength == "medium") {
    //gọi hàm hoán vị password với streng = 15
    shuffleGenerator(15);
  } else if (strength == "strong") {
    //gọi hàm hoán vị password với streng = 25
    shuffleGenerator(25);
  } else {
    print("không có giá trị này");
  }
}
  1. Tạo một chương trình sẽ chơi trò chơi “cows and bulls”. Trò chơi hoạt động như thế này:
  • Tạo ngẫu nhiên một số có 4 chữ số. Yêu cầu người dùng đoán một số có 4 chữ số. Đối với mỗi chữ số mà người dùng đoán đúng vào đúng vị trí, họ có một “cow”.
  • Đối với mỗi chữ số nếu người dùng đoán sai chỗ là “bulls”.
  • Mỗi khi người dùng đoán, hãy cho họ biết họ có bao nhiêu “cow” và “bulls”. Khi người dùng đoán đúng số, trò chơi kết thúc. Theo dõi số lần đoán của người dùng trong suốt trò chơi và cho người dùng biết khi kết thúc.
import 'dart:io';
import 'dart:math';

void main() {
  /* tạo số random từ 1000 đến  9999 */
  final random = Random();
  String randomNumber = (1000 + random.nextInt(9999 - 1000)).toString();
  // xuất ra số random
  print(randomNumber);

  //xuất ra giao diện lời giới thiệu
  stdout.write("chào mừng đến với Cows and Bulls\nType 'exit' để thoát game\n");

  int attempts = 0;

  // Logic của game Cows and Bulls
  while (true) {
    //khởi tại giá trị Cows và Bulls
    int cows = 0;
    int bulls = 0;
    attempts += 1;

    //nhập vào giá trị 4 số
    stdout.write("\nnhập vào số có 4 chữ cái ");
    String chosenNumber = stdin.readLineSync();

    // Kiểm tra điều kiện trò chơi
    if (chosenNumber == randomNumber) {
      //nếu đoán đúng
      print("Chiến thắng $attempts lần chọn");
      break;
    } else if (chosenNumber == "exit") {
      print("Xin chào!");
      break;
    } else if (chosenNumber.length != randomNumber.length) {
      print("Bạn phải nhập số 4 chữ số");
      continue;
    }

    /* xuất ra số Cows và Bull trong lần đoán*/
    for (var i = 0; i < randomNumber.length; i++) {
      if (chosenNumber[i] == randomNumber[i]) {
        cows += 1;
      } else if (randomNumber.contains(chosenNumber[i])) {
        bulls += 1;
      }
    }
    //xuất ra kết quả Cows và Bulls
    print("\nlần chọn này có: $attempts \nCows: $cows, Bulls: $bulls");
  }
}
  1. Thời gian cho một số đồ họa giả! Giả sử chúng ta muốn vẽ các bảng trò chơi trông như thế này:

Hỏi người dùng xem họ muốn vẽ bảng trò chơi có kích thước như thế nào và vẽ bảng trò chơi đó cho họ trên màn hình bằng cách sử dụng câu lệnh in của Dart.

import 'dart:io';

void main() {
  //xuất ra màn hình giới thiệu
  stdout.write("Bạn muốn độ lớn của số ô bằng bao nhiêu: ");
  // nhập vào giá trị trên màn hình
  int userChoice = int.parse(stdin.readLineSync());
  // xuất ra giá trị nhật
  print("số ô và cột $userChoice x $userChoice \n");
  //gọi hàm vẽ bàn cờ
  drawBoard(userChoice);
}

//hàm vẽ bàn cờ
void drawBoard(int squareSize) {
  // Tạo giá trị cơ bản của cột và hàng
  String rowLines = " ---";
  String colLines = "|   ";

  // Vẽ bàn cờ dựa theo số hàng và cột
  for (var i = 0; i < squareSize; i++) {
    print(rowLines * squareSize);
    print(colLines * (squareSize + 1));
  }

  // Vẽ hàng cuối cùng
  print("${rowLines * squareSize}\n");
}
  1. Xây dựng luật chơi game Tic-tic-toe. Viết hàm kiểm tra xem ai đã THẮNG trò chơi hay chưa, không cần lo lắng về cách các nước đi được thực hiện.

Nếu một trò chơi Tic Tac Toe được biểu diễn dưới dạng một danh sách các danh sách, như sau:

trong đó số 0 có nghĩa là ô trống, số 1 có nghĩa là người chơi 1 đặt mã thông báo của họ vào ô đó và số 2 có nghĩa là người chơi 2 đặt mã thông báo của họ vào ô đó.

Nhiệm vụ của bạn: đưa ra một danh sách xếp theo thứ tự 3 x 3 đại diện cho một bảng trò chơi Tic Tac Toe, cho biết có ai đã thắng hay không và cho biết người chơi nào đã thắng, nếu có.

Chiến thắng Tic Tac Toe là 3 lần liên tiếp – theo hàng, theo cột hoặc theo đường chéo. Không có trường hợp HAI người đã thắng – giả sử rằng trong mỗi bàn cờ sẽ chỉ có một người chiến thắng.

void main() {
  //khởi tạo mảng 2 chiều
  List<List<int>> finalBoard = [
    [1, 0, 0],
    [0, 1, 0],
    [2, 1, 0]
  ];
//gọi hàm kiểm tra game
  theGame(finalBoard);
}

void theGame(List<List<int>> board) {
  //kiểm tra có thắng về hàng
  if (rowCheck(board)) {
    print("Row wins");
  } else if (rowCheck(transpose(board))) {
    //kiểm tra thắng về cột
    print("Column wins");
  } else if (rowCheck(diagonals(board))) {
    //kiểm tra đường chéo
    print("Diagonal wins");
  } else {
    print("Draw!");
  }
}

bool rowCheck(List<List<int>> board) {
 //hàm kiểm tra hàng có thắng không
  for (List<int> row in board) {
    if (row.toSet().length == 1) {
      return true;
    }
  }
  return false;
}
//hàng kiểm tra cột có thắng không
List<List<int>> transpose(List<List<int>> board) {
 //hoán vị cột thành hàng và kiểm tra
  return [
    for (var i = 0; i < board.length; i++) [for (List<int> r in board) r[i]]
  ];
}
//hàm kiểm tra đường chéo
List<List<int>> diagonals(List<List<int>> board) {
  //trả ra đường chéo trên hàng
  return [
    [for (var i = 0; i < board.length; i++) board[i][i]],
    [for (var i = 0; i < board.length; i++) board[i].reversed.toList()[i]]
  ];
}
  1. Trong bài tập trước, chúng ta đã khám phá ý tưởng sử dụng list làm “cấu trúc dữ liệu” để lưu trữ thông tin về trò chơi tic tac toe. Trong trò chơi tic tac toe, “máy chủ trò chơi” cần biết vị trí của X và Os trên bàn cờ, để biết người chơi 1 hay người chơi 2 (hoặc bất kỳ ai là X và O) thắng.

Khi một người chơi (giả sử người chơi 1, là X) muốn đánh dấu X trên màn hình, họ không thể chỉ cần gõ vào terminal. Vì vậy, bạn sẽ tính gần đúng lần nhấp này chỉ bằng cách yêu cầu người dùng cung cấp tọa độ nơi họ muốn đánh của mình.

import 'dart:io';

void main() {
  // bàn cờ tic tic toe rỗng với giá trị ""
  List<List<String>> initialBoard =
      List.generate(3, (_) => List.generate(3, (_) => ' '));
  //gọi hàm vẽ bàn cờ
  drawBoard(initialBoard, 2);
}
// hàm vẽ bàn cờ
void drawBoard(List<List<String>> board, int currentUser) {
  
  var move;
  
  // nếu current user =1 thì đánh x, ngược lại 0
  currentUser == 1 ? move = 'X' : move = 'O';

  stdout.write("chọn tọa độ đánh x,y: ");
  // lấy toa độ đánh x,y thông qua hàm split
  List choice = stdin.readLineSync().split(" ");
  
  //điền giá trị X, và O trên bản đồ
  board[int.parse(choice[0])][int.parse(choice[1])] = move;
  //in ra giá trị bàn cờ
  print(board);
}
  1. Trong 3 bài tập trước, chúng ta đã xây dựng một số thành phần cần thiết để xây dựng trò chơi Tic Tac Toe trong Dart:
  • Vẽ bảng trò chơi Tic Tac Toe
  • Kiểm tra xem một bảng trò chơi có người chiến thắng không
  • Xử lý di chuyển của người chơi từ đầu vào của người dùng
  • Bước tiếp theo là kết hợp tất cả ba thành phần này lại với nhau để tạo thành trò chơi Tic Tac Toe hai người chơi!

Thách thức của bạn trong bài tập này là sử dụng tất cả các chức năng từ các bài tập trước trong cùng một chương trình để tạo một trò chơi hai người chơi mà bạn có thể chơi với một người bạn. Có rất nhiều lựa chọn bạn sẽ phải thực hiện khi hoàn thành bài tập này, vì vậy bạn có thể tiến xa hay ít tùy ý với nó.

Dưới đây là một số điều cần ghi nhớ:

  • Bạn nên theo dõi xem ai đã thắng – nếu có người chiến thắng, hãy hiển thị thông báo chúc mừng trên màn hình.
  • Nếu không còn nước đi nào nữa, đừng hỏi nước đi của người chơi tiếp theo!
import 'dart:io';

void main() {
  // tạo bàn cờ rỗng
  List<List<String>> theBoard =
      List.generate(3, (_) => List.generate(3, (_) => ' '));

  // xuất ra màn hình luật và hướng dẫn
  startGame(theBoard);

  // tạo 2 biến lưu giá trị user
  int a = 1, user = 2, tmp;

  while (true) {
    // xác định giá trị user
    tmp = a;
    a = user;
    user = tmp;
    //gọi hàm bàn cờ hiện hành
    currentBoard(theBoard);

    // Nhập vào tọa độ đánh tương ứng với user
    stdout.write("User $user, chọn tọa độ: ");
    //lấy giá trị X,Y
    List userChoice = stdin.readLineSync().split(" ");
    if (userChoice.join(" ") == "exit") {
      print("\nThoát Game: ");
      break;
    }

    // Đánh X, O trong tọa độ
    theBoard = makeMove(theBoard, user, userChoice);

    // Kiểm tra luật lệ xem ai thắng
    if (rowCheck(theBoard)) {
      print("\nUser $user: chiến thắng hàng!");
      break;
    } else if (rowCheck(transpose(theBoard))) {
      print("\nUser $user: chiến thắng cột!");
      break;
    } else if (rowCheck(diagonals(theBoard))) {
      print("\nUser $user: chiến thắng đường chéo!");
      break;
    } else if (drawGame(theBoard) == 1) {
      print("\nTrận đấu hòa!");
      break;
    }
  }

  // gọi hàm bàn cờ hiện hành
  currentBoard(theBoard);
}

void startGame(List<List<String>> board) {
  print("""\n
  Chào mừng đến game Tic Tic Toe!
  Game có 2 User: User 1 (X) và  User 2 (O).
  Tọa độ 0 0 là góc trái trên cùng, 1 1 là ô ở giữa
  2 2 là góc phải dưới cùng.
  Thoát game thì gõ exit.
  """);
}

//hàm vẽ bàn cờ hiện hành
void currentBoard(List<List<String>> board) {
  //vẽ ra bàn cờ Row 1,2,3
  String row1 = "| ${board[0][0]} | ${board[0][1]} | ${board[0][2]} |";
  String row2 = "| ${board[1][0]} | ${board[1][1]} | ${board[1][2]} |";
  String row3 = "| ${board[2][0]} | ${board[2][1]} | ${board[2][2]} |";
  String border = "\n --- --- ---\n";
	// xuất ra màn hình
  print(border + row1 + border + row2 + border + row3 + border);
}

//hàm đánh user với tọa độ
List<List<String>> makeMove(
    List<List<String>> board, int currentUser, List choice) {

  var move;
  
 //nếu user 1 đánh x, user 2 đánh o
  currentUser == 1 ? move = 'X' : move = 'O';
	//điền giá trị và tọa độ
  board[int.parse(choice[0])][int.parse(choice[1])] = move;
  return board;
}
//kiểm tra hàng thắng hay thua
bool rowCheck(List<List<String>> board) {
   for (List<String> row in board) {
    if (row.toSet().length == 1 && row.any((e) => e != ' ')) {
      return true;
    }
  }
  return false;
}
//hàm chuyển hàng thành cột
List<List<String>> transpose(List<List<String>> board) {
  return [
    for (var i = 0; i < board.length; i++) [for (List<String> r in board) r[i]]
  ];
}
//hàm chuyển đường chéo thành hàng
List<List<String>> diagonals(List<List<String>> board) {
  return [
    [for (var i = 0; i < board.length; i++) board[i][i]],
    [for (var i = 0; i < board.length; i++) board[i].reversed.toList()[i]]
  ];
}
// hàm đếm số ô chưa được đánh
int drawGame(List<List<String>> board) {
  int count = 0;
  for (var row in board) {
    for (var e in row) {
      if (e == " ") {
        count += 1;
      }
    }
  }
  return count;
}

  1. Triển khai một hàm lấy ba biến đầu vào và trả về giá trị lớn nhất trong ba biến. Thực hiện việc này mà không cần sử dụng hàm Dart max()!
void main() {
  //khai báo giá trị max
  var max;
  //khai báo 3 số a,b,c
  int a = 32;
  int b = 12;
  int c = 64;

  //nếu a> b thì ta gán max =a
  if (a > b) {
    max = a;
  } else {
    //gán max bằng b
    max = b;
  }

  //so sánh c với max
  if (c > max) {
    max = c;
  }
  print(max);

  //hàm khác sử dụng sort của Dart
  List l = [a, b, c, 4, 5, 2, 1];
  l.sort();
  print(l.last);
}
  1. Trong bài tập này, nhiệm vụ là viết một hàm chọn một từ ngẫu nhiên từ danh sách các từ trong từ điển SOWPODS.

Tải xuống file này và lưu nó vào cùng thư mục với code Dart. Mỗi dòng trong file chứa một từ duy nhất.

Sử dụng thư viện ngẫu nhiên Dart để chọn một từ ngẫu nhiên.

import 'dart:io';
import 'dart:math';

void main() {
  //gọi hàm randomword
  String word = randomWord("sowpods.txt");
  //in ra từ random
  print(word);
}
//hàm randomword
String randomWord(String txt) {
  //khởi tạo giá trị random
  final random = Random();
  //dọc file gán vào viến file
  var file = File(txt);
  //đọc file theo hàng
  List<String> wordList = file.readAsLinesSync();
  //lấy giá trị random bất kỳ
  String word = wordList[random.nextInt(wordList.length)];
  //trả lại biến lấy trong file
  return word;
}
  1. Trong trò chơi Hangman, một từ gợi ý được đưa ra bởi chương trình mà người chơi phải đoán, từng chữ một. Người chơi đoán từng chữ cái một cho đến khi đoán được toàn bộ từ. (Trong trò chơi thực tế, người chơi chỉ có thể đoán sai 6 chữ cái trước khi thua cuộc).

Giả sử từ mà người chơi phải đoán là EVAPORATE.

  • Viết logic yêu cầu người chơi đoán một chữ cái và hiển thị các chữ cái trong từ gợi ý đã được đoán đúng. Hiện tại, hãy để người chơi đoán vô số lần cho đến khi họ nhận được toàn bộ từ.
  • Như một phần thưởng, hãy theo dõi các chữ cái mà người chơi đã đoán và hiển thị một thông báo khác nếu người chơi cố gắng đoán lại chữ cái đó.
  • Hãy nhớ dừng trò chơi khi tất cả các chữ cái đã được đoán đúng! Đừng lo lắng về sự lựa chọn ngẫu nhiên một từ hoặc theo dõi số lần đoán còn lại của người chơi
import 'dart:io';

void main() {
  // chọn random từ
  String randomWord = "EVAPORATE";
  // gọi function hangman
  hangman(randomWord);
}

//hàm thực thi hangman
void hangman(String word) {
   List clue = ("___ " * word.length).split(" ");

  // khởi tạo giá trị count
  print(clue.join(" "));
  int count = 0;

  // logic của Game
  while (true) {
    // yêu cầu nhập giá trị của người dùng
    count += 1;
    stdout.write("\nnhập vào ký tự: ");
    String choice = stdin.readLineSync().toUpperCase();

    /* 
    hàm logic kiểm tra kết quả */
    if (choice == word) {
      //nếu đúng từ thì trả ra số lần đếm
      print("\đúng với số lần: $count");
      break;
    } else if (choice == "EXIT") {
      //thoát nếu chọn Exit
      print("\nkết thúc game!\n");
      break;
    } else if (choice.length > 1) {
      //nếu nhập < 1 ký tự thì không cho
      print("\nnhập ít nhất 2 ký tự!");
      continue;
    }

    //kiểm tra từ user chọn
    for (var i = 0; i < word.length; i++) {
      if (clue[i] == choice) {
        continue;
      } else if (word[i] == choice) {
        clue[i] = choice;
      }
    }

    //hiển thị màn hình 
    print(clue.join(" "));

    // kết thúc game
    if (clue.join("") == word) {
      print("\nThành công! số lần:$count\n");
      break;
    }
  }
}
  1. Trong bài tập này, chúng ta sẽ hoàn thành việc xây dựng Hangman. Trong trò chơi Hangman, người chơi chỉ đoán sai 6 lần trước khi thua cuộc.
  • Trong bài tập 22, chúng ta đã tải một danh sách từ ngẫu nhiên và chọn một từ trong đó.
  • Trong bài tập 23, chúng tôi đã viết một logic để đoán chữ cái và hiển thị thông tin đó cho người dùng.

Trong bài tập này, chúng ta phải kết hợp tất cả lại với nhau và thêm logic để xử lý các dự đoán.

  • Sao chép mã của bạn từ Phần 1 và 2 vào một tệp mới làm điểm bắt đầu. Bây giờ thêm các tính năng sau:
  • Chỉ để người dùng đoán 6 lần và cho người dùng biết họ còn bao nhiêu lần đoán.
  • Theo dõi các chữ cái người dùng đoán. Nếu người dùng đoán một chữ cái mà họ đã đoán, đừng phạt họ – hãy để họ đoán lại.

Bổ sung tùy chọn:

  • Khi người chơi thắng hoặc thua, hãy để họ bắt đầu một trò chơi mới.
  • Hiển thị với người dùng “Bạn còn 4 lần đoán sai”.
import 'dart:io';
import 'dart:math';

void main() {
  // Phọn một từ random từ file
  String theWord = randomWord("sowpods.txt");
  //hàm in ra lời giới thiệu
  intro();
  //hàm game
  hangman(theWord);
}

//Hàm game hangman
void hangman(String word) {
  /*
  Lấy từ
   Yêu cầu người dùng đoán một chữ cái
   Kiểm tra xem chữ cái có trong từ không
   Nếu có, hãy đặt chữ cái trong cùng một chỉ mục của đầu mối
  */

  List clue = ("___ " * word.length).split(" ");

  // khởi tạo từ
  print(clue.join(" "));
  int count = 0;
  int attempts = word.length + 1;
  List history = [];

  // logic chạy game
  while (true) {
    //số lần đoán
    count += 1;
    attempts -= 1;

    // lấy giá trị nhập vào của người dùng
    stdout.write("\nnhập một ký tự: ");
    String choice = stdin.readLineSync().toUpperCase();
    if (history.contains(choice)) {
      //nếu ký tự được nhập đã được nhập
      print("\nbạn đã chọn ký tự này!");
      attempts += 1;
    } else {
      //thêm ký tự và ghi nhớ
      history.add(choice);
    }

    /* 
    Cho phép người dùng nhập toàn bộ từ hoặc thoát khỏi trò chơi
     Bất kỳ trường hợp sai nào khác, yêu cầu một chữ cái */
    if (choice == word) {
      print("\nThành công! số lần: $count");
      break;
    } else if (choice == "EXIT") {
      print("\nThoat game!\n");
      break;
    } else if (choice.length > 1) {
      attempts += 1;
      print("\nSai! số lần còn lại: $attempts");
      continue;
    } else if (attempts < 1) {
      print("\nThua: $attempts. \nGame over!");
      print("\nkết quả là: $word");
      break;
    }

    // kiểm tra từ trong lựa chọn
    for (var i = 0; i < word.length; i++) {
      if (word[i] == choice) {
        clue[i] = choice;
      }
    }
    print("\nsố lần còn: $attempts");

    // trạng thái hiện hành
    print(clue.join(" "));

    // kết thúc game
    if (clue.join("") == word) {
      print("\nThắng! số lần:$count\n");
      break;
    }
  }
}

String randomWord(String txt) {
  /*
  Đọc file  đã cho dưới dạng danh sách
   Sau đó chọn một từ ngẫu nhiên từ nó
  */
  final random = Random();
  var file = File(txt);
  List<String> wordList = file.readAsLinesSync();
  String word = wordList[random.nextInt(wordList.length)];
  return word;
}

void intro() {
  print("""\n
  Chào mừng đến với hangman!
   Bạn có 6 lần để đoán đúng
   Bạn có thể nhập toàn bộ từ bất kỳ lúc nào trước khi kết thúc lần thử
   Để thoát khỏi trò chơi gõ "exit"
  """);
}
  1. Đối với bài tập này, chúng ta sẽ theo dõi ngày sinh của bạn và có thể tìm thấy thông tin đó dựa trên tên của họ.

Tạo một từ điển (trong File của bạn) tên và ngày sinh. Khi bạn chạy chương trình của mình, nó sẽ yêu cầu người dùng nhập tên và trả lại ngày sinh của người đó cho họ.

import 'dart:io';

void main() {
  // tạo map chứa tên và ngày sinh
  Map<String, Object> birthdays = {
    "Lebanon": "14/03/1879",
    "Benjamin Bossman": "17/01/1706",
    "Ada avida": "10/12/1815",
  };

  print("\nXin chào bạn có biết ngày sinh: \n");
// xuất ra danh sách các tên và ngày sinh
  birthdays.forEach((key, value) {
    print(key);
  });

  stdout.write("\nNhập vào tên người muốn biết ngày sinh? ");
  String choice = stdin.readLineSync();

  print("\n$choice sinh nhật là ngày ${birthdays[choice]}\n");
}
  1. Trong bài tập trước, chúng ta đã tạo một từ điển về ngày sinh của những người nổi tiếng.

Trong bài tập này, hãy sửa đổi chương trình của bạn từ bài 25 để tải từ điển sinh nhật từ tệp JSON trên đĩa, thay vì định nghĩa từ điển trong chương trình.

Yêu cầu người dùng cung cấp tên và ngày sinh của nhà khoa học khác để thêm vào từ điển và cập nhật file JSON trên máy. Nếu bạn chạy chương trình nhiều lần và tiếp tục thêm tên mới, thì tệp JSON của bạn sẽ ngày càng lớn hơn.

import 'dart:io';
import 'dart:convert';

void main() {
  //gọi hàm birthdays
  birthdays("birthdays.json");
}

//hàm birthdays
void birthdays(String txt) {
  // đọc file và encode Json
  var file = File(txt);

  Map<String, Object> data = json.decode(file.readAsStringSync());

  // hiển thi danh sách người dùng
  print("\nđây là danh sách người trong Json: \n");
  data.forEach((key, value) {
    // in dữ liệu data
    print(key);
  });

  // xuất ra màn hình
  stdout.write("\nai là người bạn muốn biết ngày sinh? ");
  String choice = stdin.readLineSync();
  
  //xuất ra màn hình
  print("\n$choice ngày sinh là ${data[choice]}\n");

  stdout.write("\nbạn có muốn thêm ai không? ");
  String answer = stdin.readLineSync().toLowerCase();

  // Cập nhật File Json
  if (answer == "yes") {
    stdout.write("Nhập tên người dùng: ");
    String name = stdin.readLineSync();
    // xuất ra màn hình
    stdout.write("Ngày tháng năm sinh của người dùng (dd/mm/yyyy): ");
    String birthday = stdin.readLineSync();

    // viết người dùng thêm vào Json
    data[name] = birthday;
    file.writeAsStringSync(json.encode(data));

    data.forEach(
      (key, value) {
        print("$key: $value");
      },
    );
  } else {
    print("\nExit !bye Bye\n");
  }
}
  1. Trong bài tập trước, chúng ta đã lưu thông tin về tên và ngày sinh của các người nổi tiếng vào File.

Trong bài tập này, hãy tải tệp JSON đó từ file, trích xuất các tháng có sinh nhật và đếm xem có bao nhiêu nhà khoa học có sinh nhật trong mỗi tháng.

import 'dart:io';
import 'dart:convert';
import 'package:intl/intl.dart';

void main() {
  // Dọc file json
  File file = File("birthdays.json");
  Map<String, Object> data = json.decode(file.readAsStringSync());

  // Trích xuất các tháng vào một danh sách
  DateFormat extractor = DateFormat("MMMM");
  List<String> months = [
    for (var d in data.values) extractor.format(formatter(d))
  ];

  // Đếm số lần xuất hiện mỗi tháng
  counter(months);
}

//hàm format
DateTime formatter(String birthday) {
  /*
  Lấy một chuỗi và trả về một Object Datetime
  */
  return DateFormat("dd/MM/yyyy").parse(birthday);
}

void counter(List m) {
  /*
  Lấy tháng và đếm số lần xuất hiện Lưu chúng vào Map và in kết quả
  */
  Map<String, int> occurances = {};

  m.forEach((e) {
    //kiểm tra tháng có xuất hiện
    if (!occurances.containsKey(e)) {
      occurances[e] = 1;
    } else {
      occurances[e] += 1;
    }
  });

  print("\nSố lượng :\n");
  occurances.forEach((key, value) {
    print("$key: $value");
  });
}

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now