Lập trình python - trò chơi với thư viện pygame

Cargame

cài đặt thư viện

pygame:

pip install pygame

hoặc

pip install pgzero

hoặc

pip install pygame-2.0.1-cp39-cp39-win_amd64.whl



Full code:

https://github.com/minhnhat2002/cargame.py/tree/main


import pygame

from pygame.locals import *

import random


# tham số hình dạng

size = width, height = (800, 800) # chiều rộng 800 chiều cao 800

road_w = int(width/1.6) #chiều rộng của đường đua

roadmark_w = int(width/80) # chiều rộng của vạch kẻ đường

# tham số vị trí

right_lane = width/2 + road_w/4

left_lane = width/2 - road_w/4

# tham số hoạt hình

speed = 1 #tốc độ di chuyển của xe địch


# initiallize the app

pygame.init()

running = True #tạo vòng lập cho game


# đặt kích thước xửa sổ

screen = pygame.display.set_mode(size)

# đặt tiêu đề cửa sổ

pygame.display.set_caption("@Minh Nhật car game")

# đặt màu nền cho cửa sổ

screen.fill((60, 220, 0))

# apply changes

pygame.display.update()


# tải xe mình

car = pygame.image.load("car.png")

#resize image

car_loc = car.get_rect()

car_loc.center = right_lane, height*0.8


# tải xe địch

car2 = pygame.image.load("otherCar.png")

car2_loc = car2.get_rect()

car2_loc.center = left_lane, height*0.2


counter = 0

# game loop

while running:

counter += 1


# tăng độ khó theo thời gian

if counter == 5000:

speed += 0.5 #tăng độ khó qua mỗi level 0.5

counter = 0

print("level up", speed)


# xe địch di chuyển

car2_loc[1] += speed

if car2_loc[1] > height:

# ngẫu nhiên đặt lại tọa độ cho xe địch khi nó đi quá màn hình

if random.randint(0,1) == 0:#Nó sẽ lấy số ngẫu nhiên từ 0 đến 1

#Nếu số ngẫu nhiên là 0, nó sẽ đặt tọa độ cho xe địch là tọa độ x của làn đường bên phải và tọa độ y là -200 (trên màn hình).

car2_loc.center = right_lane, -200

else:

#Nếu số ngẫu nhiên là 1, nó sẽ đặt tọa độ cho xe địch là tọa độ x của làn đường bên trái và tọa độ y là -200 (trên màn hình).

car2_loc.center = left_lane, -200


# end game logic

if car_loc[0] == car2_loc[0] and car2_loc[1] > car_loc[1] - 250:

print("GAME OVER! YOU LOST!")

break

# Đoạn code "car2_loc[1] > car_loc[1] - 250" có nghĩa là tọa độ y của xe địch lớn hơn tọa độ y của xe người chơi trừ đi 250.

# Nó dùng để kiểm tra xem xe địch có đang ở phía trên xe người chơi hay không.

# Nếu tọa độ y của xe địch lớn hơn tọa độ y của xe người chơi trừ đi 250, thì điều kiện sẽ đúng. Nếu không, điều kiện sẽ sai.


for event in pygame.event.get():

if event.type == QUIT:

# Nếu loại sự kiện là QUIT, nó sẽ gán running về False để kết thúc vòng lặp game.

running = False

if event.type == KEYDOWN:

#Nếu loại sự kiện là KEYDOWN, nó sẽ kiểm tra xem người chơi có bấm phím mũi tên trái hay phím A hay không.

#Nếu có, nó sẽ di chuyển xe người chơi sang trái.

if event.key in [K_a, K_LEFT]:

car_loc = car_loc.move([-int(road_w/2), 0])

#Nếu người chơi bấm phím mũi tên phải hay phím D, nó sẽ di chuyển xe người chơi sang phải

if event.key in [K_d, K_RIGHT]:

car_loc = car_loc.move([int(road_w/2), 0])

# vẽ đường

pygame.draw.rect(

screen,#screen là đối tượng surface mà nó sẽ vẽ hình chữ nhật lên.

(50, 50, 50),#màu xám

(width/2-road_w/2, 0, road_w, height))#(width/2-road_w/2, 0, road_w, height) là tọa độ và kích thước của hình chữ nhật. Nó sẽ vẽ hình chữ nhật bắt đầu từ tọa độ (width/2-road_w/2, 0), có chiều rộng là road_w và chiều cao là height.

# vẽ đường tâm

pygame.draw.rect(

screen,

(255, 240, 60),#màu vàng nhạt

(width/2 - roadmark_w/2, 0, roadmark_w, height))

# # vẽ vạch kẻ đường bên trái

pygame.draw.rect(

screen,

(255, 255, 255),#màu trắng

(width/2 - road_w/2 + roadmark_w*2, 0, roadmark_w, height))

# # vẽ vạch kẻ đường bên phải

pygame.draw.rect(

screen,

(255, 255, 255),#màu trắng

(width/2 + road_w/2 - roadmark_w*3, 0, roadmark_w, height))


# đặt hình ảnh ô tô trên màn hình

screen.blit(car, car_loc)

screen.blit(car2, car2_loc)

# áp dụng các thay đổi

pygame.display.update()


# thu gọn cửa sổ ứng dụng

pygame.quit()



xe tôi (lưu dưới dạng car.png)

xe người ta (lưu dưới dạng otherCar.png)

nhấp chuột trái vào hình và tải về hoặc bản có thể lấy hình khác nhưng phải giữ tên car.png và otherCar.png


nếu có thắc mắc khác bạn có thể liên hệ với tôi qua gmail: minhnhat2k2135@gmail.com

hoặc

facebook:

https://www.facebook.com/leminhnhat2

GOOD LUCK