# data[].attributes.body
Link: https://www.geeksforgeeks.org/python/pygame-tutorial/

Link2: https://www.pygame.org/wiki/tutorials

# data[].attributes.attachment_link.description
Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

# data[].attributes.attachment_link.readable_text
import pygame
import random

# Kh���i t���o Pygame
pygame.init()

# K��ch th�����c m��n h��nh
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Dodge Game")

# M��u s���c
WHITE = (255, 255, 255)
BLUE = (0, 150, 255)
RED = (255, 0, 0)

# T���c ����� khung h��nh
clock = pygame.time.Clock()
FPS = 60


# ---------------- CLASS ----------------
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 50))
        self.image.fill(BLUE)
        self.rect = self.image.get_rect(midbottom=(WIDTH // 2, HEIGHT - 10)) # ����� gi��p x��c �����nh to��� ����� v�� x��� l�� va ch���m
        self.speed = 5

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT] and self.rect.right < WIDTH:
            self.rect.x += self.speed


class Obstacle(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 50))
        self.image.fill(RED)
        self.rect = self.image.get_rect(midtop=(random.randint(0, WIDTH - 50), 0))
        self.speed = 5

    def update(self):
        self.rect.y += self.speed
        if self.rect.top > HEIGHT:
            self.rect.x = random.randint(0, WIDTH - 50)
            self.rect.y = 0


# ---------------- T���O NH��N V���T & V���T C���N ----------------
player = Player()
player_group = pygame.sprite.GroupSingle(player)# nh��m ch��� c�� 1 �����i t�����ng

obstacle_group = pygame.sprite.Group()
for _ in range(4):  # 4 ch�����ng ng���i v���t
    obstacle_group.add(Obstacle())

# ---------------- GAME LOOP ----------------
running = True
while running:
    clock.tick(FPS)

    # X��� l�� s��� ki���n
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # C���p nh���t �����i t�����ng
    player_group.update()
    obstacle_group.update()

    # Ki���m tra va ch���m
    if pygame.sprite.spritecollide(player, obstacle_group, True):
        print("Game Over!")
        running = False

    # V��� m��n h��nh
    screen.fill(WHITE)
    player_group.draw(screen)
    obstacle_group.draw(screen)
    pygame.display.update()

pygame.quit()

# data[].attributes.body
🧱 Lớp Obstacle – Chướng ngại vật

1. Mục đích của lớp:

Đại diện cho một chướng ngại vật rơi từ trên xuống trong game.

Giúp tạo đối tượng có thể di chuyển và xử lý va chạm.

2. Các phần chính trong hàm init (khởi tạo):

super().__init__()
→ Gọi hàm khởi tạo của lớp gốc Sprite để dùng các tính năng có sẵn.

self.image = pygame.Surface((50, 50))
→ Tạo một hình vuông kích thước 50x50 pixel.

self.image.fill(RED)
→ Tô màu đỏ cho hình vuông (chướng ngại vật).

self.rect = self.image.get_rect(midtop=(random.randint(0, WIDTH - 50), 0))
→ Đặt vị trí bắt đầu của chướng ngại vật ở ngẫu nhiên trên đầu màn hình.

self.speed = 5
→ Đặt tốc độ rơi xuống của chướng ngại vật.

3. Hàm update() – Cập nhật vị trí:

self.rect.y += self.speed
→ Mỗi lần gọi, chướng ngại vật rơi xuống thêm một đoạn.

if self.rect.top > HEIGHT:
→ Khi chướng ngại vật rơi khỏi màn hình, thì:

self.rect.x = random.randint(0, WIDTH - 50)
→ Di chuyển sang vị trí ngang mới ngẫu nhiên.

self.rect.y = 0
→ Xuất hiện lại từ trên cùng màn hình.

4. Gợi ý thực hành nâng cao cho HS:

Đổi màu chướng ngại vật bằng cách thay RED bằng màu khác.

Thử thay đổi kích thước hình vuông.

Tăng self.speed để tạo độ khó cao hơn.

Thêm nhiều chướng ngại vật để rèn kỹ năng xử lý danh sách sprite.

Gợi ý nâng cao: thêm điểm số hoặc âm thanh khi né thành công.

# data[].attributes.body
class Player(pygame.sprite.Sprite):

-> Tạo một nhân vật (người chơi) trong game bằng cách kế thừa từ Sprite (Pygame dùng để quản lý đối tượng dễ hơn).

def init(self):

super().__init__()

-> Khởi tạo đối tượng, dùng super() để gọi hàm khởi tạo của Sprite.

self.image = pygame.Surface((50, 50))

self.image.fill(BLUE)

-> Tạo hình vuông màu xanh rộng 50x50 pixel để làm nhân vật.

self.rect = self.image.get_rect(midbottom=(WIDTH // 2, HEIGHT - 10))

-> Đặt nhân vật ở giữa phía dưới màn hình, dùng để xác định vị trí và kiểm tra va chạm.

self.speed = 5

-> Tốc độ di chuyển của nhân vật.

def update(self):

-> Hàm cập nhật vị trí nhân vật mỗi khung hình.

keys = pygame.key.get_pressed()

-> Lấy trạng thái bàn phím xem người chơi có nhấn phím nào không.

if keys[pygame.K_LEFT] and self.rect.left > 0:

self.rect.x -= self.speed

-> Nếu nhấn phím trái, nhân vật sẽ di chuyển sang trái, không ra ngoài màn hình.

if keys[pygame.K_RIGHT] and self.rect.right < WIDTH:

self.rect.x += self.speed

-> Nếu nhấn phím phải, nhân vật sẽ di chuyển sang phải, vẫn trong màn hình.

# data[].attributes.body
1. Nhập module pygame, module random.

2. Khởi tạo tất cả các module con của Pygame cần thiết cho việc chạy game.

3. Định nghĩa hai hằng số để lưu trữ chiều rộng và chiều cao của màn hình game (600 và 400 pixel).

4. Tạo ra cửa sổ game chính với kích thước đã định.

5. Đặt tiêu đề cho cửa sổ game là "Pixel Runner".

6. Định nghĩa hằng số màu trắng dưới dạng bộ ba giá trị RGB (255, 255, 255).

7. Định nghĩa hằng số màu xanh dương dưới dạng bộ ba giá trị RGB (0, 150, 255).

8. Định nghĩa hằng số màu đỏ dưới dạng bộ ba giá trị RGB (255, 0, 0).

9. Tạo một đối tượng Clock để kiểm soát tốc độ của game.

10. Định nghĩa hằng số FPS (Frames Per Second - Khung hình mỗi giây) là 40, là mục tiêu tốc độ game sẽ chạy.

# data[].attributes.body
Link: https://github.com/linhdang/onespace_pixel_runner/tree/388f8d239c592b7b1f1250f76095755c8f2726a4

# data[].attributes.attachment_link.description
Contribute to linhdang/onespace_pixel_runner development by creating an account on GitHub.

# data[].attributes.body
Link: https://git-scm.com/downloads

# data[].attributes.attachment_link.description
Various Git logos in PNG (bitmap) and EPS (vector) formats are available for use in online and print projects.

# data[].attributes.body
Link: https://desktop.github.com/download/

# data[].attributes.body
LINK: https://youtu.be/2TVojFz21W4

# data[].attributes.body
screen.title("Turtle Race")

writer = turtle.Turtle()

writer.hideturtle()

writer.penup()

writer.goto(0, 250)

font_style = ("Arial", 48, "bold")

colors = ["red", "orange", "yellow", "green", "blue", "purple", "white"]

running = True

while running:

for color in colors:

if not running:

break

writer.clear()

writer.color(color)

writer.write("Turtle Race", align="center", font=font_style)

screen.update()

time.sleep(0.5)

# data[].attributes.headline
Cửa sổ hiển thị một hộp thoại nhập liệu (text input box) trên màn hình

# data[].attributes.subject
Cửa sổ hiển thị một hộp thoại nhập liệu (text input box) trên màn hình

# data[].attributes.body
user_inb = screen.textinput(title="Đặt cược!", prompt="Con rùa màu gì sẽ thắng? (red/orange/yellow/green/blue/purple): ")

# data[].attributes.attachment_link.readable_text
import turtle
import random

# --- 1. C��i �����t m��n h��nh tr�� ch��i ---
screen = turtle.Screen()
screen.setup(width=800, height=600) # K��ch th�����c m��n h��nh
screen.bgcolor("lightblue") # M��u n���n
screen.title("Turtle Race!")

# --- 2. V��� v���ch xu���t ph��t v�� v���ch ����ch ---

# V��� v���ch xu���t ph��t
painter = turtle.Turtle()
painter.speed(0) # T���c ����� v��� nhanh nh���t
painter.penup()
painter.goto(-350, 250) # ��i���m b���t �����u v��� v���ch xu���t ph��t
painter.pendown()
painter.color("black")
painter.pensize(3)
painter.right(90) # H�����ng xu���ng d�����i
for _ in range(15):
    painter.forward(20)
    painter.penup()
    painter.forward(20)
    painter.pendown()
painter.penup()
painter.goto(-350, -250) # Di chuy���n xu���ng d�����i ����� v��� v���ch b��n kia
painter.pendown()
painter.right(180) # H�����ng l��n tr��n
for _ in range(15):
    painter.forward(20)
    painter.penup()
    painter.forward(20)
    painter.pendown()
painter.hideturtle() # ���n con r��a v��� v���ch

# V��� v���ch ����ch
finish_line = turtle.Turtle()
finish_line.speed(0)
finish_line.penup()
finish_line.goto(300, 250) # ��i���m b���t �����u v���ch ����ch
finish_line.pendown()
finish_line.color("green")
finish_line.pensize(5)
finish_line.right(90)
finish_line.forward(500) # V��� m���t �������ng th���ng t��� tr��n xu���ng d�����i
finish_line.hideturtle()


# --- 3. T���o c��c "r��a" ��ua ---
colors = ["red", "orange", "yellow", "green", "blue", "purple"]
all_turtles = []
start_y = 150 # V��� tr�� Y ban �����u cho r��a �����u ti��n

for i in range(len(colors)):
    new_turtle = turtle.Turtle(shape="turtle")
    new_turtle.penup()
    new_turtle.color(colors[i])
    new_turtle.shapesize(1.5) # K��ch th�����c r��a l���n h��n
    new_turtle.goto(x=-380, y=start_y) # �����t r��a ��� v���ch xu���t ph��t
    new_turtle.speed(1) # T���c ����� di chuy���n ban �����u (s��� thay �����i trong cu���c ��ua)
    all_turtles.append(new_turtle)
    start_y -= 60 # D���ch chuy���n v��� tr�� Y cho r��a ti���p theo

# --- 4. Ch���c n��ng cu���c ��ua ---
is_race_on = False
user_bet = screen.textinput(title="�����t c�����c!", prompt="Con r��a m��u g�� s��� th���ng? (red/orange/yellow/green/blue/purple): ")

if user_bet:
    is_race_on = True

while is_race_on:
    for tortuga in all_turtles:
        if tortuga.xcor() > 280: # Ki���m tra xem r��a ���� v��� ����ch ch��a (v��� tr�� x = 300)
            is_race_on = False
            winning_color = tortuga.pencolor()
            if winning_color == user_bet:
                print(f"Ch��c m���ng! Con r��a {winning_color} ���� th���ng cu���c ��ua. B���n ���� th���ng c�����c!")
            else:
                print(f"R���t ti���c! Con r��a {winning_color} ���� th���ng cu���c ��ua. B���n ���� thua c�����c.")
            break # Tho��t kh���i v��ng l���p for khi c�� ng�����i th���ng

        rand_distance = random.randint(0, 10) # Kho���ng c��ch di chuy���n ng���u nhi��n
        tortuga.forward(rand_distance)

# --- K���t th��c tr�� ch��i ---
screen.exitonclick() # ����ng c���a s��� khi click chu���t

# data[].attributes.body
Basic_Race

# data[].attributes.body
# --- 1. Cài đặt màn hình trò chơi ---

screen = turtle.Screen()

# Hỏi người dùng có muốn bắt đầu cuộc đua không (đơn giản hóa việc đặt cược)

start_race = screen.textinput(title="Bạn đã sẵn sàng cho cuộc đua chưa?", prompt="Gõ 'yes' để bắt đầu: ")

if start_race and start_race.lower() == "yes":

is_race_on = True

while is_race_on:

.....

# data[].attributes.body
Link: https://www.online-stopwatch.com/duck-race/

# data[].attributes.body
Link: https://www.geeksforgeeks.org/pygame-tutorial/

# data[].attributes.attachment_link.description
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

# data[].attributes.body
Link: https://www.pygame.org/wiki/Contribute

# data[].attributes.attachment_link.readable_text
Hello,

welcome, and thanks for thinking about contributing.

New to contributing to Open Source Free Libre software? There is a draft of Let's write a unit test!" which is a step by step guide on how to write your first unit test in python for pygame, which is very similar to how you would do it for other projects.

Want or need to compile pygame from source? Head here for platform specific instructions

Developer guide: or "How to hack on pygame": Hacking

Issues labeled " good first issue" are ones that should be easy for people to start with.

Other ways to talk to us: info

How to submit changes: patchesandbugs

Our github project page, where you can take a look at what we're doing on: https://github.com/pygame/

# data[].attributes.attachment_link.description
Hello, welcome, and thanks for thinking about contributing. New to contributing to Open Source Free Libre software? There is a draft of Let's write a unit test!" which is a step by step guide on how to write your first unit test in python for pygame, which is very similar to how you would do it for other projects.

# data[].attributes.body
🔹 Bước 1: Khởi tạo Pygame và tạo cửa sổ game

Cài đặt thư viện pygame

Khởi tạo pygame.init()

Tạo cửa sổ pygame.display.set_mode(...)

Đặt tiêu đề game bằng set_caption

🔹 Bước 2: Vẽ nhân vật chính (hình vuông)

Khai báo tọa độ, kích thước và màu sắc của nhân vật

Vẽ nhân vật bằng pygame.draw.rect(...)

🔹 Bước 3: Di chuyển nhân vật bằng phím mũi tên

Sử dụng pygame.key.get_pressed()

Cho nhân vật di chuyển 4 hướng

Giới hạn nhân vật không ra khỏi màn hình

🔹 Bước 4: Vẽ chấm tròn mục tiêu xuất hiện ngẫu nhiên

Sử dụng random.randint() để tạo tọa độ chấm tròn

Vẽ chấm tròn bằng pygame.draw.circle(...)

🔹 Bước 5: Kiểm tra va chạm nhân vật và chấm tròn

Tính khoảng cách giữa hình vuông và chấm tròn

Nếu chạm → tăng điểm và tạo chấm tròn mới

🔹 Bước 6: Hiển thị điểm lên màn hình

Sử dụng pygame.font.Font và render() để tạo văn bản

Vẽ lên màn hình bằng blit()

🔹 Bước 7: Thêm hình nền mê cung

Chuẩn bị file ảnh mê cung (đường đi là màu trắng)

Dùng pygame.image.load() để tải ảnh làm nền

Sử dụng get_at() để kiểm tra màu sắc và giới hạn di chuyển nhân vật chỉ trên đường đi

🔹 Bước 8 (nâng cao): Chỉ cho chấm tròn xuất hiện trên đường đi

Khi tạo chấm tròn mới, kiểm tra xem có nằm trên đường không

Nếu không, tạo lại

# data[].attributes.body
Link: https://gamevui.vn/me-cung-sieu-to-khong-lo/game

# data[].attributes.attachment_link.title
Game Mê cung siêu to khổng lồ - Game Vui

# data[].attributes.attachment_link.description
Mê cung siêu to khổng lồ - Trò chơi giải trí với lối chơi trí tuệ vô cùng quen thuộc trên GameVui. Trong khoảng thời gian nhất định, bạn hãy tìm đường chính xác để đi đến đích trong 1 mê cung gồm rất nhiều cách di chuyển khác nhau, mỗi 1 lối rẽ có thể dẫn bạn đến đích cuối cùng hoặc cũng có thể dẫn người chơi đến đường cụt.

# data[].attributes.body
pygame.mixer.init() # Khởi tạo bộ phận âm thanh

# data[].attributes.body
Link: https://scratch.mit.edu/projects/126408753

# data[].attributes.body
Link 1: https://www.ginifab.com/feeds/pms/color_picker_from_image.vi.php

Link 2: https://imagecolorpicker.com/vi

# data[].attributes.attachment_link.title
👍 Bộ chọn màu trực tuyến | Bộ chọn màu HEX | Công cụ chọn màu HTML

# data[].attributes.attachment_link.description
Color Picker:Công cụ chọn màu: Với công cụ trực tuyến này, bạn có thể tải lên hình ảnh hoặc cung cấp URL trang web và nhận mã Màu RGB, Màu HEX và Màu HSL. 👍

# data[].attributes.body
1. Khởi tạo: Thiết lập màn hình, tạo đối tượng rùa (người chơi) và chấm tròn (mục tiêu).

2. Người chơi:

Có hình dạng con rùa màu xanh lam.

Bắt đầu ở vị trí gần đáy màn hình.

Di chuyển bằng các phím mũi tên.

player.direction lưu trữ hướng di chuyển hiện tại.

Hàm move() cập nhật vị trí dựa trên hướng.

3. Mục tiêu:

Có hình dạng tròn màu đỏ.

Bắt đầu ở một vị trí ngẫu nhiên trên màn hình.

Hàm move_target_randomly() làm cho mục tiêu di chuyển một cách ngẫu nhiên và xử lý va chạm với biên màn hình bằng cách đảo ngược hướng.

4. Điểm số:

Biến score theo dõi điểm số.

score_display là một đối tượng Turtle để hiển thị điểm số ở góc trên bên trái.

5. Điều khiển:

screen.listen() lắng nghe các sự kiện phím.

screen.onkeypress() gán các hàm di chuyển cho các phím mũi tên.

6. Vòng lặp chính (while True):

screen.update() cập nhật màn hình.

move() di chuyển người chơi.

move_target_randomly() di chuyển mục tiêu.

Kiểm tra va chạm: Nếu khoảng cách giữa người chơi và mục tiêu nhỏ hơn 20 pixel, coi như đã bắt được:

Tăng điểm số.

Xóa và hiển thị điểm số mới.

Di chuyển mục tiêu đến một vị trí ngẫu nhiên mới.

time.sleep(0.1) tạo độ trễ nhỏ để điều chỉnh tốc độ trò chơi.

7. screen.mainloop(): Giữ cửa sổ đồ họa mở cho đến khi người dùng đóng nó.

# data[].attributes.body
1. Khởi tạo và cài đặt: Khởi tạo Pygame, tạo cửa sổ trò chơi, đặt tiêu đề và màu nền.

2. Màu sắc: Định nghĩa các màu RGB sử dụng trong trò chơi.

3. Thông số các đối tượng:

paddle_*: Kích thước, vị trí và tốc độ của thanh ngang.

ball_*: Bán kính, vị trí và tốc độ di chuyển của quả bóng.

4. Điểm số: Khởi tạo biến score và font chữ để hiển thị điểm.

5. Trạng thái trò chơi: Biến game_over để theo dõi trạng thái kết thúc trò chơi.

6. Hàm vẽ:

draw_paddle(): Vẽ thanh ngang.

draw_ball(): Vẽ quả bóng.

display_score(): Hiển thị điểm số trên màn hình.

display_game_over(): Hiển thị thông báo game over và hướng dẫn chơi lại.

7. Vòng lặp trò chơi (while running):

Xử lý sự kiện: Kiểm tra các sự kiện như đóng cửa sổ hoặc nhấn phím.

Điều khiển thanh ngang: Di chuyển thanh ngang sang trái hoặc phải khi nhấn phím mũi tên.

Di chuyển quả bóng: Cập nhật vị trí của quả bóng dựa trên tốc độ.

Xử lý va chạm:

Với cạnh trên và cạnh bên: Đảo ngược tốc độ theo trục tương ứng.

Với thanh ngang: Đảo ngược tốc độ theo trục y và tăng điểm số.

Kiểm tra game over: Nếu quả bóng chạm đáy màn hình, đặt game_over thành True.

Vẽ màn hình: Xóa màn hình cũ, vẽ thanh ngang, quả bóng và điểm số (hoặc thông báo game over).

Cập nhật màn hình: Hiển thị những thay đổi lên màn hình.

Điều chỉnh tốc độ: Đảm bảo trò chơi chạy với tốc độ ổn định (60 khung hình/giây).

8. Kết thúc Pygame: Giải phóng các tài nguyên Pygame khi vòng lặp kết thúc.

# data[].attributes.attachment_link.readable_text
import turtle
import random
import time

scr = turtle.Screen()
scr.title("Snake Game")
scr.bgcolor("black")
scr.setup(width=600, height=600)
scr.tracer(0)

#score
score = 0
#body
segments = []

#snake
snake = turtle.Turtle()
snake.shape("square")
snake.color("green")
snake.penup()
snake.goto(0, 0)
snake.direction = "stop"

x = random.randint(-280, 280)
y = random.randint(-280, 280)


#food
food = turtle.Turtle()
food.shape("circle")
food.color("red")
food.penup()
food.goto(x, y)

#text
text = turtle.Turtle()
text.color("white")
text.penup()
text.goto(-263, 280)
text.write("score {}" .format(score), align = "center", font=("Verdana", 12, "normal"))
text.hideturtle()

#movement
def movement():
    if snake.direction == "up":
        snake.sety(snake.ycor() + 20)
    elif snake.direction == "right":
        snake.setx(snake.xcor() + 20)
    elif snake.direction == "down":
        snake.sety(snake.ycor() - 20)
    elif snake.direction == "left":
        snake.setx(snake.xcor() - 20)
    
def up():
    if snake.direction != "down":
        snake.direction = "up"
            
def right():
    if snake.direction != "left":
        snake.direction = "right"
            
def down():
    if snake.direction != "up":
        snake.direction = "down"

def left():
    if snake.direction != "right":
        snake.direction = "left"
            
#keybinds
scr.listen()
scr.onkeypress(up, "Up")
scr.onkeypress(right, "Right")
scr.onkeypress(down, "Down")
scr.onkeypress(left, "Left")

def game_over():
    text.clear()
    text.write("GAME OVER", align = "center", font=("Verdana", 12, "normal"))
    text.goto(0, 0)

while True:
    scr.update()
    for index in range(len(segments) -1, 0, -1):
        x = segments[index - 1].xcor()
        y = segments[index - 1].ycor()
        segments[index].goto(x, y)
    
    if len(segments) > 0:
        x = snake.xcor()
        y = snake.ycor()
        segments[0].goto(x, y)
    movement()
    #segments movement
    #collision
    if snake.distance(food) < 20:
        x = random.randint(-280, 280)
        y = random.randint(-280, 280)
        score += 1
        text.clear()
        text.write("score {}" .format(score), align = "center", font=("Verdana", 12, "normal"))
        food.goto(x, y)
        snake_x = snake.xcor()
        snake_y = snake.ycor()
        new_segment = turtle.Turtle()
        if snake.direction == "down":
            new_segment.goto(snake_x, snake_y + 20)
        elif snake.direction == "up":
            new_segment.goto(snake_x, snake_y - 20)
        elif snake.direction == "right":
            new_segment.goto(snake_x + 20, snake_y)
        elif snake.direction == "left":
            new_segment.goto(snake_x - 20, snake_y)
        new_segment.shape("square")
        new_segment.color("green")
        new_segment.penup()
        segments.append(new_segment)
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        game_over()
    time.sleep(0.07)
    

# data[].attributes.body
8. Vòng Lặp Chính:

60. Bắt đầu vòng lặp vô hạn để trò chơi tiếp tục chạy.

61. Cập nhật màn hình đồ họa.

62. Lặp qua các đoạn thân rắn từ cuối đến đầu.

63. Lấy tọa độ x của đoạn thân phía trước.

64. Lấy tọa độ y của đoạn thân phía trước.

65. Di chuyển đoạn thân hiện tại đến vị trí của đoạn thân phía trước.

66. Nếu có đoạn thân rắn.

67. Lấy tọa độ x của đầu rắn.

68. Lấy tọa độ y của đầu rắn.

69. Di chuyển đoạn thân đầu tiên đến vị trí của đầu rắn.

70. Gọi hàm di chuyển rắn.

71. Nếu khoảng cách giữa rắn và thức ăn nhỏ hơn 20 pixel (va chạm).

72. Tạo vị trí x ngẫu nhiên cho thức ăn.

73. Tạo vị trí y ngẫu nhiên cho thức ăn.

74. Tăng điểm số lên 1.

75. Xóa nội dung hiển thị điểm số.

76. In điểm số mới lên màn hình.

77. Di chuyển thức ăn đến vị trí mới.

78. Lấy tọa độ x của đầu rắn.

79. Lấy tọa độ y của đầu rắn.

80. Tạo đoạn thân rắn mới.

81. Kiểm tra hướng di chuyển (up/down/left/right).

82. Thêm đoạn thân mới vào đuôi rắn, tùy thuộc vào hướng di chuyển (up/down/left/right).

83. Kiểm tra hướng di chuyển (up/down/left/right).

84. Thêm đoạn thân mới vào đuôi rắn, tùy thuộc vào hướng di chuyển (up/down/left/right).

85. Kiểm tra hướng di chuyển (up/down/left/right).

86. Thêm đoạn thân mới vào đuôi rắn, tùy thuộc vào hướng di chuyển (up/down/left/right).

87. Kiểm tra hướng di chuyển (up/down/left/right).

88. Thêm đoạn thân mới vào đuôi rắn, tùy thuộc vào hướng di chuyển (up/down/left/right).

89. Đặt hình dạng đoạn thân mới là hình vuông.

90. Đặt màu đoạn thân mới là xanh lá cây.

91. Nhấc bút vẽ của đoạn thân mới lên.

92. Thêm đoạn thân mới vào danh sách segments.

93. Kiểm tra va chạm với tường.

94. Gọi hàm kết thúc trò chơi.

95. Tạo độ trễ 0.07 giây để điều chỉnh tốc độ trò chơi.

# data[].attributes.body
7. Định Nghĩa Hàm Game Over:

56. Định nghĩa hàm game_over() để hiển thị thông báo kết thúc trò chơi.

57. Xóa nội dung hiển thị điểm số.

58. In thông báo "GAME OVER" lên màn hình.

59. Đặt vị trí hiển thị thông báo ở trung tâm màn hình.

# data[].attributes.body
6. Gán Phím Điều Khiển:

51. Bắt đầu lắng nghe sự kiện bàn phím.

52. Gán hàm up() cho phím mũi tên lên.

53. Gán hàm right() cho phím mũi tên phải.

54. Gán hàm down() cho phím mũi tên xuống.

55. Gán hàm left() cho phím mũi tên trái.

# data[].attributes.headline
Yêu cầu 5: Thiết lập di chuyển của nhân vật

# data[].attributes.subject
Yêu cầu 5: Thiết lập di chuyển của nhân vật

# data[].attributes.body
5. Định nghĩa Hàm Di Chuyển:

30. Định nghĩa hàm movement() để di chuyển rắn.

31. Nếu hướng di chuyển của rắn là "lên".

32. Tăng tọa độ y của rắn lên 20.

33. Nếu hướng di chuyển của rắn là "phải".

34. Tăng tọa độ x của rắn lên 20.

35. Nếu hướng di chuyển của rắn là "xuống".

36. Giảm tọa độ y của rắn xuống 20.

37. Nếu hướng di chuyển của rắn là "trái".

38. Giảm tọa độ x của rắn xuống 20.

39. Định nghĩa hàm up() để thay đổi hướng rắn thành "lên".

40. Nếu hướng rắn không phải là "xuống".

41. Đặt hướng rắn thành "lên".

42. Định nghĩa hàm right() để thay đổi hướng rắn thành "phải".

43. Nếu hướng rắn không phải là "trái".

44. Đặt hướng rắn thành "phải".

45. Định nghĩa hàm down() để thay đổi hướng rắn thành "xuống".

46. Nếu hướng rắn không phải là "lên".

47. Đặt hướng rắn thành "xuống".

48. Định nghĩa hàm left() để thay đổi hướng rắn thành "trái".

49. Nếu hướng rắn không phải là "phải".

50. Đặt hướng rắn thành "trái".

# data[].attributes.body
4. Khởi tạo Hiển Thị Điểm:

24. Tạo đối tượng "văn bản" từ lớp turtle.Turtle() và gán cho biến text.

25. Đặt màu chữ là trắng.

26. Nhấc bút vẽ của văn bản lên.

27. Đặt vị trí hiển thị điểm số ở góc trên bên trái màn hình.

28. In điểm số ban đầu lên màn hình.

29. Ẩn đối tượng văn bản.

# data[].attributes.body
3. Khởi tạo Thức Ăn:

19. Tạo đối tượng "thức ăn" từ lớp turtle.Turtle() và gán cho biến food.

20. Đặt hình dạng thức ăn là hình tròn.

21. Đặt màu thức ăn là đỏ.

22. Nhấc bút vẽ của thức ăn lên.

23. Đặt vị trí ban đầu của thức ăn tại tọa độ (x, y) ngẫu nhiên.

# data[].attributes.headline
Yêu cầu 2. Khởi tạo Biến điểm (score) và Rắn

# data[].attributes.subject
Yêu cầu 2. Khởi tạo Biến điểm (score) và Rắn

# data[].attributes.body
2. Khởi tạo Biến và Rắn:

9. Khởi tạo biến score để lưu điểm số, ban đầu là 0.

10. Khởi tạo danh sách segments để lưu trữ các đoạn thân rắn, ban đầu rỗng.

11. Tạo đối tượng "rắn" từ lớp turtle.Turtle() và gán cho biến snake.

12. Đặt hình dạng rắn là hình vuông.

13. Đặt màu rắn là xanh lá cây.

14. Nhấc bút vẽ của rắn lên để không vẽ khi di chuyển.

15. Đặt vị trí ban đầu của rắn ở trung tâm màn hình (0, 0).

16. Đặt hướng di chuyển ban đầu của rắn là "dừng".

17. Tạo số nguyên ngẫu nhiên trong khoảng -280 đến 280 và gán cho x.

18. Tạo số nguyên ngẫu nhiên trong khoảng -280 đến 280 và gán cho y.

# data[].attributes.body
1. Khởi tạo và Cài đặt Màn Hình:

1. Nhập thư viện turtle để vẽ đồ họa.

2. Nhập thư viện random để tạo số ngẫu nhiên.

3. Nhập thư viện time để tạo độ trễ.

4. Tạo màn hình đồ họa và gán cho biến scr.

5. Đặt tiêu đề cho cửa sổ trò chơi là "Snake Game".

6. Đặt màu nền màn hình là đen.

7. Đặt kích thước cửa sổ trò chơi là 600x600 pixel.

8. scr.tracer(0): Tắt tính năng tự động cập nhật màn hình để vẽ nhanh hơn.

# data[].attributes.body
Bài tập: "Game Đoán Số Bí Mật"

Yêu cầu:

Viết một chương trình Python tạo ra một trò chơi đoán số đơn giản.

Chi tiết:

1. Tạo số bí mật:

Chương trình sẽ tự động tạo ra một số nguyên bí mật ngẫu nhiên trong khoảng từ 1 đến 100.

2. Người chơi đoán số:

Sử dụng lệnh input() để người chơi nhập vào số đoán của mình.

3. Kiểm tra và phản hồi:

Sử dụng cấu trúc if để kiểm tra số đoán của người chơi:

Nếu số đoán đúng, in ra thông báo "Chúc mừng! Bạn đã đoán đúng!".

Nếu số đoán nhỏ hơn số bí mật, in ra "Số bạn đoán nhỏ quá!".

Nếu số đoán lớn hơn số bí mật, in ra "Số bạn đoán lớn quá!".

4. Chơi lại:

Cho phép người chơi chơi lại nhiều lần cho đến khi đoán đúng.

# data[].attributes.body
Bài tập: Máy tính dự đoán cung hoàng đạo

Yêu cầu:

1. Viết một hàm du_doan_cung_hoang_dao(hoten,ngay, thang) để dự đoán cung hoàng đạo dựa trên ngày và tháng sinh.

2. Hàm nhận vào 3 tham số: hoten (họ và tên), ngay (ngày sinh) và thang (tháng sinh).

3. Sử dụng cấu trúc điều kiện if/elif/else để xác định cung hoàng đạo theo quy tắc sau:

Bạch Dương (21/3 - 19/4)

Kim Ngưu (20/4 - 20/5)

Song Tử (21/5 - 20/6)

Cự Giải (21/6 - 22/7)

Sư Tử (23/7 - 22/8)

Xử Nữ (23/8 - 22/9)

Thiên Bình (23/9 - 22/10)

Bọ Cạp (23/10 - 21/11)

Nhân Mã (22/11 - 21/12)

Ma Kết (22/12 - 19/1)

Bảo Bình (20/1 - 18/2)

Song Ngư (19/2 - 20/3)

# data[].attributes.body
Link: https://drive.google.com/drive/folders/1_TGZ_gb2crMSzc6gs163apgS3ffKfouh?usp=sharing

# data[].attributes.body
class Enemy(pygame.sprite.Sprite):

def init(self):

super(Enemy, self).__init__()

self.surf = pygame.image.load("missile.png").convert()

self.surf.set_colorkey((255, 255, 255), RLEACCEL)

self.rect = self.surf.get_rect(

center=(

random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),

random.randint(0, SCREEN_HEIGHT),

)

)

self.speed = random.randint(5, 20)

# data[].attributes.body
class Player(pygame.sprite.Sprite):

def init(self):

super(Player, self).__init__()

self.surf = pygame.image.load("jet.png").convert()

self.surf.set_colorkey((255, 255, 255), RLEACCEL)

self.rect = self.surf.get_rect()

# data[].attributes.body
# Import the pygame module

import pygame

import random

# Import pygame.locals for easier access to key coordinates

# Updated to conform to flake8 and black standards

from pygame.locals import (

K_UP,

K_DOWN,

K_LEFT,

K_RIGHT,

K_ESCAPE,

KEYDOWN,

QUIT,

)

# Define constants for the screen width and height

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

# Define a player object by extending pygame.sprite.Sprite

# The surface drawn on the screen is now an attribute of 'player'

class Player(pygame.sprite.Sprite):

def init(self):

super(Player, self).__init__()

self.surf = pygame.Surface((75, 25))

self.surf.fill(("red"))

self.rect = self.surf.get_rect()

# Move the sprite based on keypresses

def update(self, pressed_keys):

if pressed_keys[K_UP]:

self.rect.move_ip(0, -5)

if pressed_keys[K_DOWN]:

self.rect.move_ip(0, 5)

if pressed_keys[K_LEFT]:

self.rect.move_ip(-5, 0)

if pressed_keys[K_RIGHT]:

self.rect.move_ip(5, 0)

# Keep player on the screen

if self.rect.left < 0:

self.rect.left = 0

elif self.rect.right > SCREEN_WIDTH:

self.rect.right = SCREEN_WIDTH

if self.rect.top <= 0:

self.rect.top = 0

elif self.rect.bottom >= SCREEN_HEIGHT:

self.rect.bottom = SCREEN_HEIGHT

# Define the enemy object by extending pygame.sprite.Sprite

# The surface you draw on the screen is now an attribute of 'enemy'

#Định nghĩa lớp Enemy kế thừa từ lớp pygame.sprite.Sprite

class Enemy(pygame.sprite.Sprite):

def init(self):

super(Enemy, self).__init__()

self.surf = pygame.Surface((20, 10))

self.surf.fill(("yellow"))

self.rect = self.surf.get_rect(

center=(

#Thiết lập vị trí ban đầu của Enemy ở ngoài màn hình theo trục ngang

random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),

random.randint(0, SCREEN_HEIGHT),

)

)

self.speed = random.randint(5, 20) #Thiết lập tốc độ di chuyển ngẫu nhiên từ 5 -> 20

# Move the sprite based on speed

# Remove the sprite when it passes the left edge of the screen

def update(self):

self.rect.move_ip(-self.speed, 0) #Di chuyển enemy sang trái với tốc độ self.speed

#Kiểm tra vị trí của enemy, nếu ra khỏi màn hình thì xóa chúng

if self.rect.right < 0:

self.kill()

# Initialize pygame (khởi tạo tất cả các modeule của pygame)

pygame.init()

# Create the screen object

# The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Create a custom event for adding a new enemy

#Tạo 1 sự kiện tùy chỉnh để add enemy vào game

ADDENEMY = pygame.USEREVENT + 1

#Thiết lập bộ hẹn giờ để add sự kiện ADDENEMY xảy ra sau mỗi 250 mili giây (0.25 giây)

pygame.time.set_timer(ADDENEMY, 250)

# Create a new pygame clock object

clock = pygame.time.Clock()

# Instantiate player. Right now, this is just a rectangle.

player = Player()

# Create groups to hold enemy sprites and all sprites

# - enemies is used for collision detection and position updates

# - all_sprites is used for rendering

enemies = pygame.sprite.Group()

#Tạo 1 nhóm để quản lý các đối tượng enemy

all_sprites = pygame.sprite.Group()

#Tạo 1 nhóm để quản lý các đối tượng enemy và player

all_sprites.add(player)

#Thêm đối tuwojgn player vào nhóm all_sprites

# Variable to keep the main loop running

running = True

# Main loop

while running:

# for loop through the event queue

for event in pygame.event.get():

# Check for KEYDOWN event

if event.type == KEYDOWN:

# If the Esc key is pressed, then exit the main loop

if event.key == K_ESCAPE:

running = False

# Check for QUIT event. If QUIT, then set running to false.

elif event.type == QUIT:

running = False

# Add a new enemy?

elif event.type == ADDENEMY:

# Create the new enemy and add it to sprite groups

new_enemy = Enemy()

enemies.add(new_enemy)

all_sprites.add(new_enemy)

# Get all the keys currently pressed

pressed_keys = pygame.key.get_pressed()

# Update the player sprite based on user keypresses

player.update(pressed_keys)

# Update enemy position

enemies.update()

# Fill the screen with black

screen.fill((0, 0, 0))

# Draw all sprites

for entity in all_sprites:

screen.blit(entity.surf, entity.rect)

# Update the display

pygame.display.flip() #Cập nhật màn hình để hiển thị các thay đổi

clock.tick(60) #Giới hạn tốc độ khung hình = 60 frames/s

pygame.quit()

# data[].attributes.body
1. Thay đổi màu sắc:

Yêu cầu: Thay đổi màu nền của trò chơi từ đen ((0, 0, 0)) thành một màu khác tùy chọn (ví dụ: xanh lam, đỏ, vàng).

Gợi ý: Tìm dòng code screen.fill((0, 0, 0)) và thay đổi giá trị màu bên trong dấu ngoặc. Các em có thể tìm kiếm mã màu RGB trên mạng hoặc thử nghiệm với các giá trị khác nhau để tạo ra màu sắc yêu thích.

2. Thay đổi kích thước nhân vật:

Yêu cầu: Thay đổi kích thước của nhân vật (Player) bằng cách điều chỉnh các giá trị trong pygame.Surface((75, 25)).

Gợi ý: Tìm dòng code self.surf = pygame.Surface((75, 25)) trong lớp Player và thay đổi giá trị 75 (chiều rộng) và 25 (chiều cao) thành các số khác nhau. Quan sát sự thay đổi của nhân vật trên màn hình.

3. Thay đổi tốc độ của kẻ địch:

Yêu cầu: Thay đổi tốc độ di chuyển của kẻ địch bằng cách điều chỉnh giá trị self.speed = random.randint(5, 20).

Gợi ý: Tìm dòng code self.speed = random.randint(5, 20) trong lớp Enemy và thay đổi phạm vi giá trị (5, 20) thành một phạm vi khác. Ví dụ: random.randint(10, 30) sẽ làm cho kẻ địch di chuyển nhanh hơn.

4. Thay đổi tần suất xuất hiện của kẻ địch:

Yêu cầu: Thay đổi tần suất xuất hiện của kẻ địch bằng cách điều chỉnh giá trị 250 trong pygame.time.set_timer(ADDENEMY, 250).

Gợi ý: Tìm dòng code pygame.time.set_timer(ADDENEMY, 250) và thay đổi giá trị 250 (đơn vị là mili giây). Giá trị càng nhỏ, kẻ địch xuất hiện càng thường xuyên.

# data[].attributes.attachment_link.readable_text
# Import the pygame module
import pygame
import random 


# Import pygame.locals for easier access to key coordinates
# Updated to conform to flake8 and black standards
from pygame.locals import (
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    K_ESCAPE,
    KEYDOWN,
    QUIT,
)

# Define constants for the screen width and height
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Define a player object by extending pygame.sprite.Sprite
# The surface drawn on the screen is now an attribute of 'player'
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill(("red"))
        self.rect = self.surf.get_rect()
        
        # Move the sprite based on keypresses
    def update(self, pressed_keys):
        if pressed_keys[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_keys[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_keys[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_keys[K_RIGHT]:
            self.rect.move_ip(5, 0)
        
        # Keep player on the screen
        if self.rect.left < 0:
            self.rect.left = 0
        elif self.rect.right > SCREEN_WIDTH:
            self.rect.right = SCREEN_WIDTH
        if self.rect.top <= 0:
            self.rect.top = 0
        elif self.rect.bottom >= SCREEN_HEIGHT:
            self.rect.bottom = SCREEN_HEIGHT


# Define the enemy object by extending pygame.sprite.Sprite
# The surface you draw on the screen is now an attribute of 'enemy'
#�����nh ngh��a l���p Enemy k��� th���a t��� l���p pygame.sprite.Sprite
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super(Enemy, self).__init__()
        self.surf = pygame.Surface((20, 10))
        self.surf.fill(("yellow"))
        self.rect = self.surf.get_rect(
            center=(
                #Thi���t l���p v��� tr�� ban �����u c���a Enemy ��� ngo��i m��n h��nh theo tr���c ngang
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT),
            )
        )
        self.speed = random.randint(5, 20) #Thi���t l���p t���c ����� di chuy���n ng���u nhi��n t��� 5 -> 20

    # Move the sprite based on speed
    # Remove the sprite when it passes the left edge of the screen
    def update(self):
        self.rect.move_ip(-self.speed, 0) #Di chuy���n enemy sang tr��i v���i t���c ����� self.speed
        #Ki���m tra v��� tr�� c���a enemy, n���u ra kh���i m��n h��nh th�� x��a ch��ng
        if self.rect.right < 0:
            self.kill()

# Initialize pygame (kh���i t���o t���t c��� c��c modeule c���a pygame)
pygame.init() 

# Create the screen object
# The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Create a custom event for adding a new enemy
#T���o 1 s��� ki���n t��y ch���nh ����� add enemy v��o game
ADDENEMY = pygame.USEREVENT + 1
#Thi���t l���p b��� h���n gi��� ����� add s��� ki���n ADDENEMY x���y ra sau m���i 250 mili gi��y (0.25 gi��y) 
pygame.time.set_timer(ADDENEMY, 250) 

# Create a new pygame clock object
clock = pygame.time.Clock()

# Instantiate player. Right now, this is just a rectangle.
player = Player()

# Create groups to hold enemy sprites and all sprites
# - enemies is used for collision detection and position updates
# - all_sprites is used for rendering
enemies = pygame.sprite.Group()
#T���o 1 nh��m ����� qu���n l�� c��c �����i t�����ng enemy
all_sprites = pygame.sprite.Group()
#T���o 1 nh��m ����� qu���n l�� c��c �����i t�����ng enemy v�� player
all_sprites.add(player)
#Th��m �����i tuwojgn player v��o nh��m all_sprites

# Variable to keep the main loop running
running = True

# Main loop
while running:
    # for loop through the event queue
    for event in pygame.event.get():
        # Check for KEYDOWN event
        if event.type == KEYDOWN:
            # If the Esc key is pressed, then exit the main loop
            if event.key == K_ESCAPE:
                running = False
        # Check for QUIT event. If QUIT, then set running to false.
        elif event.type == QUIT:
            running = False
    
        # Add a new enemy?
        elif event.type == ADDENEMY:
            # Create the new enemy and add it to sprite groups
            new_enemy = Enemy()
            enemies.add(new_enemy)
            all_sprites.add(new_enemy)

    # Get all the keys currently pressed
    pressed_keys = pygame.key.get_pressed()

    # Update the player sprite based on user keypresses
    player.update(pressed_keys)

    # Update enemy position
    enemies.update()

    # Fill the screen with black
    screen.fill((0, 0, 0))

    # Draw all sprites
    for entity in all_sprites:
        screen.blit(entity.surf, entity.rect)

    # Update the display
    pygame.display.flip() #C���p nh���t m��n h��nh ����� hi���n th��� c��c thay �����i
    clock.tick(60) #Gi���i h���n t���c ����� khung h��nh = 60 frames/s
    
pygame.quit()

# data[].attributes.attachment_link.readable_text
# Import the pygame module
import pygame
import random 


# Import pygame.locals for easier access to key coordinates
# Updated to conform to flake8 and black standards
from pygame.locals import (
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    K_ESCAPE,
    KEYDOWN,
    QUIT,
)

# Define constants for the screen width and height
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Define a player object by extending pygame.sprite.Sprite
# The surface drawn on the screen is now an attribute of 'player'
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill((255, 255, 255))
        self.rect = self.surf.get_rect()
        
        # Move the sprite based on keypresses
    def update(self, pressed_keys):
        if pressed_keys[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_keys[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_keys[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_keys[K_RIGHT]:
            self.rect.move_ip(5, 0)
        
        # Keep player on the screen
        if self.rect.left < 0:
            self.rect.left = 0
        elif self.rect.right > SCREEN_WIDTH:
            self.rect.right = SCREEN_WIDTH
        if self.rect.top <= 0:
            self.rect.top = 0
        elif self.rect.bottom >= SCREEN_HEIGHT:
            self.rect.bottom = SCREEN_HEIGHT


# Define the enemy object by extending pygame.sprite.Sprite
# The surface you draw on the screen is now an attribute of 'enemy'
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super(Enemy, self).__init__()
        self.surf = pygame.Surface((20, 10))
        self.surf.fill((255, 255, 255))
        self.rect = self.surf.get_rect(
            center=(
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT),
            )
        )
        self.speed = random.randint(5, 20)

    # Move the sprite based on speed
    # Remove the sprite when it passes the left edge of the screen
    def update(self):
        self.rect.move_ip(-self.speed, 0)
        if self.rect.right < 0:
            self.kill()

# Initialize pygame
pygame.init()

# Create the screen object
# The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Create a custom event for adding a new enemy
ADDENEMY = pygame.USEREVENT + 1
pygame.time.set_timer(ADDENEMY, 250)

# Create a new pygame clock object
clock = pygame.time.Clock()

# Instantiate player. Right now, this is just a rectangle.
player = Player()

# Create groups to hold enemy sprites and all sprites
# - enemies is used for collision detection and position updates
# - all_sprites is used for rendering
enemies = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)

# Variable to keep the main loop running
running = True

# Main loop
while running:
    # for loop through the event queue
    for event in pygame.event.get():
        # Check for KEYDOWN event
        if event.type == KEYDOWN:
            # If the Esc key is pressed, then exit the main loop
            if event.key == K_ESCAPE:
                running = False
        # Check for QUIT event. If QUIT, then set running to false.
        elif event.type == QUIT:
            running = False
    
        # Add a new enemy?
        elif event.type == ADDENEMY:
            # Create the new enemy and add it to sprite groups
            new_enemy = Enemy()
            enemies.add(new_enemy)
            all_sprites.add(new_enemy)

    # Get all the keys currently pressed
    pressed_keys = pygame.key.get_pressed()

    # Update the player sprite based on user keypresses
    player.update(pressed_keys)

    # Update enemy position
    enemies.update()

    # Fill the screen with black
    screen.fill((0, 0, 0))

    # Draw all sprites
    for entity in all_sprites:
        screen.blit(entity.surf, entity.rect)

    # Update the display
    pygame.display.flip()
    clock.tick(60)
    
pygame.quit()

# data[].attributes.body
Link:

https://zoom.us/rec/share/nJom59q3eS0DfdrXcV1bLR0G1MV34L3CQGCMbMtqo_b9A_Os7tnApMJHkfQMvrwQ.LVQVf_J0YqsBq17P

# data[].attributes.attachment_link.title
Video Conferencing, Web Conferencing, Webinars, Screen Sharing

# data[].attributes.attachment_link.description
Zoom is the leader in modern enterprise video communications, with an easy, reliable cloud platform for video and audio conferencing, chat, and webinars across mobile, desktop, and room systems. Zoom Rooms is the original software-based conference room solution used around the world in board, conference, huddle, and training rooms, as well as executive offices and classrooms. Founded in 2011, Zoom helps businesses and organizations bring their teams together in a frictionless environment to get more done. Zoom is a publicly traded company headquartered in San Jose, CA.

# data[].attributes.body
# Import the pygame module

import pygame

# Import pygame.locals for easier access to key coordinates

# Updated to conform to flake8 and black standards

from pygame.locals import (

K_UP,

K_DOWN,

K_LEFT,

K_RIGHT,

K_ESCAPE,

KEYDOWN,

QUIT,

)

# Define constants for the screen width and height

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

# Define a player object by extending pygame.sprite.Sprite

# The surface drawn on the screen is now an attribute of 'player'

class Player(pygame.sprite.Sprite):

def init(self):

super(Player, self).__init__()

self.surf = pygame.Surface((75, 25))

self.surf.fill((255, 255, 255))

self.rect = self.surf.get_rect()

# Move the sprite based on keypresses

def update(self, pressed_keys):

if pressed_keys[K_UP]:

self.rect.move_ip(0, -5)

if pressed_keys[K_DOWN]:

self.rect.move_ip(0, 5)

if pressed_keys[K_LEFT]:

self.rect.move_ip(-5, 0)

if pressed_keys[K_RIGHT]:

self.rect.move_ip(5, 0)

# Keep player on the screen

if self.rect.left < 0:

self.rect.left = 0

elif self.rect.right > SCREEN_WIDTH:

self.rect.right = SCREEN_WIDTH

if self.rect.top <= 0:

self.rect.top = 0

elif self.rect.bottom >= SCREEN_HEIGHT:

self.rect.bottom = SCREEN_HEIGHT

# Initialize pygame

pygame.init()

# Create the screen object

# The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Instantiate player. Right now, this is just a rectangle.

player = Player()

# Variable to keep the main loop running

running = True

# Main loop

while running:

# for loop through the event queue

for event in pygame.event.get():

# Check for KEYDOWN event

if event.type == KEYDOWN:

# If the Esc key is pressed, then exit the main loop

if event.key == K_ESCAPE:

running = False

# Check for QUIT event. If QUIT, then set running to false.

elif event.type == QUIT:

running = False

# Get all the keys currently pressed

pressed_keys = pygame.key.get_pressed()

# Update the player sprite based on user keypresses

player.update(pressed_keys)

# Fill the screen with black

screen.fill((0, 0, 0))

# Draw the player on the screen

screen.blit(player.surf, player.rect)

# Update the display

pygame.display.flip()

pygame.quit()

# data[].attributes.body
# Import the pygame module

import pygame

# Import pygame.locals for easier access to key coordinates

# Updated to conform to flake8 and black standards

from pygame.locals import (

K_UP,

K_DOWN,

K_LEFT,

K_RIGHT,

K_ESCAPE,

KEYDOWN,

QUIT,

)

# Define constants for the screen width and height

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

# Define a player object by extending pygame.sprite.Sprite

# The surface drawn on the screen is now an attribute of 'player'

class Player(pygame.sprite.Sprite):

def init(self):

super(Player, self).__init__()

self.surf = pygame.Surface((75, 25))

self.surf.fill((255, 255, 255))

self.rect = self.surf.get_rect()

# Initialize pygame

pygame.init()

# Create the screen object

# The size is determined by the constant SCREEN_WIDTH and SCREEN_HEIGHT

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Instantiate player. Right now, this is just a rectangle.

player = Player()

# Variable to keep the main loop running

running = True

# Main loop

while running:

# for loop through the event queue

for event in pygame.event.get():

# Check for KEYDOWN event

if event.type == KEYDOWN:

# If the Esc key is pressed, then exit the main loop

if event.key == K_ESCAPE:

running = False

# Check for QUIT event. If QUIT, then set running to false.

elif event.type == QUIT:

running = False

# Fill the screen with black

screen.fill((0, 0, 0))

# Draw the player on the screen

screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))

# Update the display

pygame.display.flip()

pygame.quit()

# data[].attributes.body
import turtle

# Tạo một đối tượng rùa

t = turtle.Turtle()

# Biến để theo dõi góc

angle = 0

... các câu lệnh vẽ hình

print("Góc hiện tại:", angle)

# data[].attributes.body
import turtle

# Tạo một đối tượng rùa

t = turtle.Turtle()

# Lấy vị trí hiện tại của rùa và in ra màn hình

position = t.pos()

print("Vị trí hiện tại của rùa:", position)

# data[].attributes.body
pen.circle(bán kính) --> vẽ 1 hình cầu

pen.circle(100, 180)

circle(100, 180): Hàm này vẽ một đường tròn có bán kính 100 đơn vị. Tham số thứ hai (180) chỉ ra góc quét, tức là chỉ vẽ nửa hình tròn.

# data[].attributes.body
from turtle import*

color("red")

shape("turtle")

speed(number) #tốc độ nét vẽ

pensize(number) #kích thước nét vẽ

left(góc quay) #quay trái

right(góc quay) #quay phải

forward(steps) #di chuyển theo hướng hiện tại

penup() #

pendown() #hạ bút

goto(x, y) #DI CHUYỂN ĐẾN TOẠ ĐỘ trong đó x,y là toạ độ di chuyển tới

KÍCH THƯỚC MÀN HÌNH: 400X400, GỐC TOẠ ĐỘ NẰM Ở TÂM, GIỮA MÀN HÌNH(0,0)

# Lấy tọa độ hiện tại của bút

x = xcor()

y = ycor()

#xcor(), ycor() là một hàm được sử dụng để trả về tọa độ x,y hiện tại của con rùa (turtle)

position = pos()

print("Tọa độ x:", x)

print("Tọa độ y:", y)

print("Tọa độ (x, y):", position)

# data[].attributes.body
Vẽ ít nhất 1 hình ảnh Tết như: bánh chưng, hoa đào, hoa mai, bao lì xì, pháo hoa,... với turtle, kèm tên viết tắt của học sinh trên sản phẩm vẽ.

# data[].attributes.body
Thay đổi phông chữ:

Sử dụng tham số font trong hàm write() để chỉ định phông chữ bạn muốn sử dụng.

Cú pháp: turtle.write(text, font=("font_name", font_size, font_type))

text: Văn bản cần viết.

font_name: Tên phông chữ (ví dụ: "Arial", "Times New Roman", ...).

font_size: Kích thước phông chữ.

font_type: Kiểu chữ (ví dụ: "normal", "bold", "italic").

# Ví dụ

pen.write("Xin chào, Python Turtle!", font=("Arial", 24, "normal"))

# data[].attributes.body
# Hàm tạo màu ngẫu nhiên

def random_color():

r = random.randint(0, 255)

g = random.randint(0, 255)

b = random.randint(0, 255)

return r, g, b

# Tô màu ngẫu nhiên turtle.fillcolor(random_color())

# data[].attributes.body
# Tạo màn hình và thiết lập

wn = turtle.Screen()

wn.title("HAPPY NEW YEAR 2025")

wn.bgcolor("black")

# data[].attributes.body
Bài tập 4: Tạo lớp "Phương tiện giao thông" và các lớp con (mức độ: vận dụng thấp)

Yêu cầu:

Tạo lớp PhuongTienGiaoThong với các thuộc tính chung như hang_san_xuat, nam_san_xuat.

Tạo các lớp con Oto, XeMay, XeDap kế thừa từ PhuongTienGiaoThong.

Mỗi lớp con có thêm các thuộc tính và phương thức đặc trưng.

# data[].attributes.body
Bài tập 1: Tạo lớp "Người" (mức độ: thông hiểu)

Yêu cầu:

Tạo một lớp Nguoi với các thuộc tính: tên, tuổi, giới tính.

Viết phương thức gioi_thieu() để in ra thông tin của người đó.

Bài tập 2: Tạo lớp "Sinh viên" kế thừa từ lớp "Người" (mức độ: vận dụng thấp)

Yêu cầu:

Tạo lớp SinhVien kế thừa từ lớp Nguoi.

Thêm thuộc tính lop và nganh_hoc cho lớp SinhVien.

Viết phương thức in_thong_tin_sinh_vien() để in ra thông tin chi tiết của sinh viên.

# data[].attributes.body
Bài tập 1: Tạo lớp "Con vật"

Giải thích: Chúng ta sẽ tạo một lớp đại diện cho một con vật nói chung. Mỗi con vật sẽ có các đặc điểm như tên, tuổi và một hành động đặc trưng (ví dụ: sủa, kêu meow).

Bài tập 2: Tạo lớp "Quả"

Giải thích: Tương tự bài tập 1, chúng ta sẽ tạo một lớp đại diện cho một quả. Mỗi quả sẽ có các đặc điểm như tên, màu sắc và một hành động (ví dụ: ăn được, không ăn được).

# data[].attributes.body
while True:

t1.forward(random.randint(1,100))

t2.forward(random.randint(1,100))

t3.forward(random.randint(1,100))

t4.forward(random.randint(1,100))

# data[].attributes.attachment_link.readable_text
import turtle
import os

wn = turtle.Screen()
wn.title("Pong")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

# Score
score_a = 0
score_b = 0

# Paddle A
paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("white")
paddle_a.shapesize(stretch_wid=5,stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350, 0)

# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("white")
paddle_b.shapesize(stretch_wid=5,stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)

# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 0.1
ball.dy = 0.1

# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Player A: 0  Player B: 0", align="center", font=("Courier", 24, "normal"))

# Functions
def paddle_a_up():
    y = paddle_a.ycor()
    y += 20
    paddle_a.sety(y)

def paddle_a_down():
    y = paddle_a.ycor()
    y -= 20
    paddle_a.sety(y)

def paddle_b_up():
    y = paddle_b.ycor()
    y += 20
    paddle_b.sety(y)

def paddle_b_down():
    y = paddle_b.ycor()
    y -= 20
    paddle_b.sety(y)

# Keyboard bindings
wn.listen()
wn.onkeypress(paddle_a_up, "w")
wn.onkeypress(paddle_a_down, "s")
wn.onkeypress(paddle_b_up, "Up")
wn.onkeypress(paddle_b_down, "Down")

# Main game loop
while True:
    wn.update()
    
    # Move the ball
    ball.setx(ball.xcor() + ball.dx)
    ball.sety(ball.ycor() + ball.dy)
    
    # Border checking

    # Top and bottom
    if ball.ycor() > 290:
        ball.sety(290)
        ball.dy *= -1
    
    elif ball.ycor() < -290:
        ball.sety(-290)
        ball.dy *= -1
        
    # Left and right
    if ball.xcor() > 350:
        score_a += 1
        pen.clear()
        pen.write("Player A: {}  Player B: {}".format(score_a, score_b), align="center", font=("Courier", 24, "normal"))
        ball.goto(0, 0)
        ball.dx *= -1

    elif ball.xcor() < -350:
        score_b += 1
        pen.clear()
        pen.write("Player A: {}  Player B: {}".format(score_a, score_b), align="center", font=("Courier", 24, "normal"))
        ball.goto(0, 0)
        ball.dx *= -1
        
    # Paddle and ball collisions
    if ball.xcor() < -340 and ball.ycor() < paddle_a.ycor() + 50 and ball.ycor() > paddle_a.ycor() - 50:
        ball.dx *= -1 
    
    elif ball.xcor() > 340 and ball.ycor() < paddle_b.ycor() + 50 and ball.ycor() > paddle_b.ycor() - 50:
        ball.dx *= -1
    
    
    
    
    
    
    
    
    

# data[].attributes.attachment_link.readable_text
import turtle
import os

wn = turtle.Screen()
wn.title("Pong")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

# Score
score_a = 0
score_b = 0

# Paddle A
paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("white")
paddle_a.shapesize(stretch_wid=5,stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350, 0)

# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("white")
paddle_b.shapesize(stretch_wid=5,stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)

# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 0.1
ball.dy = 0.1

# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Player A: 0  Player B: 0", align="center", font=("Courier", 24, "normal"))

# Functions
def paddle_a_up():
    y = paddle_a.ycor()
    y += 20
    paddle_a.sety(y)

def paddle_a_down():
    y = paddle_a.ycor()
    y -= 20
    paddle_a.sety(y)

def paddle_b_up():
    y = paddle_b.ycor()
    y += 20
    paddle_b.sety(y)

def paddle_b_down():
    y = paddle_b.ycor()
    y -= 20
    paddle_b.sety(y)

# Keyboard bindings
wn.listen()
wn.onkeypress(paddle_a_up, "w")
wn.onkeypress(paddle_a_down, "s")
wn.onkeypress(paddle_b_up, "Up")
wn.onkeypress(paddle_b_down, "Down")

# Main game loop
while True:
    wn.update()
    
    # Move the ball
    ball.setx(ball.xcor() + ball.dx)
    ball.sety(ball.ycor() + ball.dy)
    
    # Border checking

    # Top and bottom
    if ball.ycor() > 290:
        ball.sety(290)
        ball.dy *= -1
    
    elif ball.ycor() < -290:
        ball.sety(-290)
        ball.dy *= -1
        
    # Left and right
    if ball.xcor() > 350:
        ball.dx *= -1

    elif ball.xcor() < -350:
        ball.dx *= -1
    
    
    
    
    
    
    
    
    

# data[].attributes.attachment_link.readable_text
import turtle
import os

wn = turtle.Screen()
wn.title("Pong")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

# Score
score_a = 0
score_b = 0

# Paddle A
paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("white")
paddle_a.shapesize(stretch_wid=5,stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350, 0)

# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("white")
paddle_b.shapesize(stretch_wid=5,stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)

# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 0.1
ball.dy = 0.1

# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Player A: 0  Player B: 0", align="center", font=("Courier", 24, "normal"))

# Functions
def paddle_a_up():
    y = paddle_a.ycor()
    y += 20
    paddle_a.sety(y)

def paddle_a_down():
    y = paddle_a.ycor()
    y -= 20
    paddle_a.sety(y)

def paddle_b_up():
    y = paddle_b.ycor()
    y += 20
    paddle_b.sety(y)

def paddle_b_down():
    y = paddle_b.ycor()
    y -= 20
    paddle_b.sety(y)

# Keyboard bindings
wn.listen()
wn.onkeypress(paddle_a_up, "w")
wn.onkeypress(paddle_a_down, "s")
wn.onkeypress(paddle_b_up, "Up")
wn.onkeypress(paddle_b_down, "Down")

# Main game loop
while True:
    wn.update()
    
    # Move the ball
    ball.setx(ball.xcor() + ball.dx)
    ball.sety(ball.ycor() + ball.dy)
    
    # Border checking

    # Top and bottom
    if ball.ycor() > 290:
        ball.sety(290)
        ball.dy *= -1
    
    elif ball.ycor() < -290:
        ball.sety(-290)
        ball.dy *= -1
        
    # Left and right
    if ball.xcor() > 350:
        ball.dx *= -1

    elif ball.xcor() < -350:
        ball.dx *= -1
    
    
    
    
    
    
    
    
    

# data[].attributes.attachment_link.description
Source code: Lib/turtle.py Introduction: Turtle graphics is an implementation of the popular geometric drawing tools introduced in Logo, developed by Wally Feurzeig, Seymour Papert and Cynthia Solo…