Python level 4 chiều thứ 7

huyhuy17

Buổi 1:

Tiếp cận với thư viện MineTurtle

Link bài hướng dẫn demo https://repl.it/@Quang_HuyHuy/LimpingRuddyGzip

Buổi 2:

Sử dụng list và kết hợp với việc tạo minigame

Source code https://repl.it/@Quang_HuyHuy/LimpingRuddyGzip

Bài tập về nhà:

  • Cải tiến bài học: Chương trình chơi game trốn tìm: Người chơi phải tìm thấy block kim cương được đặt trong vị trí ngẫu nhiên xung quanh người chơi.
    • Các block kim cương sẽ lần lượt xuất hiện khi người chơi tìm thấy 1 block kim cương
    • Người chơi chỉ được chơi trong vòng 5 phút. Cứ 1 phút sẽ có lời nhắc còn bao nhiêu thời gian còn lại
    • Khi hết 5 phút, Tính tổng điểm của người chơi và thông báo
    • Tính điểm được cho từng người chơi

Buổi 3: Đọc ghi file và tương tác với thế giới minecraft

Source code https://repl.it/@Quang_HuyHuy/LimpingRuddyGzip

Mê cung hoàn hảo: https://www.brick.codes/mazes/

file maze.csv

1, 2, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,
1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0,
1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0,
0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1,
1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0,
1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0,
1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1,
1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1,
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1,
1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1,
1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0,
1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0,
0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1,
1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1,
1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1,
0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1,
1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1,
1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1,
1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0,
1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1,
1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1,
1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1,
1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1,
1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1,
1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,

Bài tập về nhà:

  • Tạo một phiên bản mê cung của mình với 3 số 0,1,2
  • (1) là block tường
  • (2) là block trang trí
  • (0) là không khí
  • Tạo mê cung đó vào trong minecraft với file dữ liệu của mình

Buổi 4

Code mẫu


from mcpi import minecraft, vec3
from minecraftstuff import MinecraftTurtle
import time
import json
mc = minecraft.Minecraft.create('103.237.147.88', 4714)
import random 
def main_tao_cong_trinhj():
    data = []
    mc.postToChat("hello")
    x1,y1,z1,x2,y2,z2 = 1179,67,-652,1180,70,-650
    for y  in range( y1,y2+1):
        layer =[]
        for x in range (x1,x2+1):
            line =mc.getBlocks(x,y,z1,x,y ,z2)
            layer.append(list(line))
        data.append(list(layer))
    print("data", data)
    _x =x1 
    _z = z1 
    _y  =y1 +20
    x ,y,z = _x,_y,_z 
    #in conng trinh ra
    for layer in range(len(data)):
        for line in range(len( data[layer])):
            for block in range(len(data[layer][line])):
                mc.setBlock(x+line,y+layer,z+block , data[layer][line][block])

    #luu cong trinh vao file
    myfile = open("data.json","w")
    myfile.write(json.dumps(data))
    myfile.close()
def main_load_cong_trinhh():
    myfile = open("data.json",'r')
    data = myfile.read()
    myfile.close()
    print(data)
    data = json.loads(data)
    x,y,z = 1179,67+20,-652
    for layer in range(len(data)):
        for line in range(len( data[layer])):
            for block in range(len(data[layer][line])):
                mc.setBlock(x+line,y+layer,z+block , data[layer][line][block])


Bài tập về nhà

  1. Tạo ra 3 công trình
  2. Ứng dụng lại kiến thức đã học lưu lại 3 công trình đó
  3. Load lại 3 công trình đó tại vị trí đã chọn

Buổi 5

Link source code: https://repl.it/@Quang_HuyHuy/LimpingRuddyGzip

Thông tin server để vào game ‘103.237.147.88:25570’, để vào code


mc = minecraft.Minecraft.create('103.237.147.88', 4714)

Một số kiến thuức cần lưu ý
– Đọc ghi file json: https://stackabuse.com/reading-and-writing-json-to-a-file-in-python/
– Duyệt file trong thư mục với glob https://realpython.com/working-with-files-in-python/#filename-pattern-matching

Đầu bài: Lưu trữ và xây dựng lại các trình vào file và từ file, và có màn hình quản lý cơ bản bằng text
1. Chia nhỏ ra thành các hàm cơ bản
copy(_x1,_y1,_z1,_x2,_y2,_z2, filename)
paste(x,y,z, filename)
print_file()
– và biến menu

 menu = """
==PROGRAM==
1. Show list building 
2. Save building 
3. Load building 
4. Load building in player location
5. Exit program
    """

Ghép lại thành chương trình hoàn chỉnh và bổ sung code vào phần ghi chú

from mcpi import minecraft, vec3
from minecraftstuff import MinecraftTurtle
import time
import json
import glob

mc = minecraft.Minecraft.create('103.237.147.88', 4714)

def copy(_x1,_y1,_z1,_x2,_y2,_z2, filename):
    x1 = min(_x1,_x2)
    y1 = min(_y1,_y2)
    z1 = min(_z1,_z2)
    x2 = max(_x1,_x2)
    y2 = max(_y1,_y2)
    z2 = max(_z1,_z2)
    data =[]
    for y  in range( y1,y2+1):
        layer =[]
        for x in range (x1,x2+1):
            line =mc.getBlocks(x,y,z1,x,y ,z2)
            layer.append(list(line))
            
        data.append(list(layer))
    myfile = open("{}.json".format(filename),"w")
    myfile.write(json.dumps(data))
    myfile.close()
    mc.postToChat("Copy xong cong trinh")
    print("Copy xong")

def paste(x,y,z, filename):
    myfile = open("{}.json".format(filename),'r')
    data = myfile.read()
    myfile.close()
    data = json.loads(data)
    for layer in range(len(data)):
        for line in range(len( data[layer])):
            for block in range(len(data[layer][line])):
                mc.setBlock(x+line,y+layer,z+block , data[layer][line][block])
    mc.postToChat("Xay xong cong trinh")

def print_file():
    listFile = glob.glob("*.json")
    for filename in listFile:
        print(filename)



def main():
    menu = """
==PROGRAM==
1. Show list building 
2. Save building 
3. Load building 
4. Load building in player location
5. Exit program
    """
    while True : 
        print(menu)
        yc = input("Plese input your choice: ")
        if yc =='1':
            #Viết code để in ra danh sách các công trình đã lưu
            pass
        if yc =='2':
            #Viết code cho người dùng nhập vào các tham chiếu của hàm copy, để copy công trình
            pass
        if yc =='3':
            #Viết code cho người dùng nhập vào các tham chiếu của hàm paste
            pass
        if yc =='4':
            #Viết code cho người dùng nhập vào tên của người chơi , qua đó lấy vị trí của người
            #chơi đó và paste công trình vao đấy
            pass

        if yc =='5':
            print("Byebye")
            break

main()


Buổi 7

Vẽ các hình trong minecraft với minecraftDrawing

from mcpi import minecraft, vec3
from minecraftstuff import MinecraftTurtle
from minecraftstuff import MinecraftDrawing
import time
import json
import glob

mc = minecraft.Minecraft.create('103.237.147.88', 4714)

draw =MinecraftDrawing(mc)

#Ham ve duong tron
draw.drawCircle(468,67,-475,10,5)

#Ham ve mat phang voi diem 
point1 = vec3.Vec3(425,90,-463)
point2 = vec3.Vec3(460,67,-463)
point3 = vec3.Vec3(427,67,-440)
draw.drawFace([point1,point2,point3],True ,5)
# ve duong thang drawLine(x1,y1,z1,x2,y2,z2,blockid,blockdata)
draw.drawLine(394,85,-511,372,74,-560,35,7)
#ve hinh cau drawSphere(x,y,z,r,blockdata,blockid)
draw.drawSphere(402,95,-551,6,35,2)
#ve hinh cau rong drawHollowSphere(x,y,z,r,blockdata,blockid)
draw.drawHollowSphere(402,120,-551,6,35,2)

draw.drawHorizontalCircle(402,95,-551,8,35,2)


#xay kim tu thap
mc.setBlock(313,70,-463,35,2)
draw.drawHorizontalCircle(313,70,-463,10,35,2)

p1= vec3.Vec3(323,70,-463)
p2= vec3.Vec3(313,70,-453)
p3= vec3.Vec3(303,70,-463)
p4= vec3.Vec3(313,70,-473)
p5= vec3.Vec3(313,78,-463)
draw.drawFace([p1,p2,p5],True ,5)
draw.drawFace([p2,p3,p5],True ,5)
draw.drawFace([p3,p4,p5],True ,5)
draw.drawFace([p4,p1,p5],True ,5)

Code mẫu https://repl.it/@Quang_HuyHuy/LimpingRuddyGzip

Bài tập về nhà

  1. Vẽ các hành tinh, mô phỏng hệ mặt trời
  2. Vẽ lại kim tự tháp với chiều cao là 20 và kích thước nằm trong hình tròn bán kính 20
  3. Nâng cao: Vẽ phi thuyển

Buổi 8:

Code mẫu tính toán khoảng cách giữa 2 điểm trong không gian và ứng dụng làm block tâm trí


from mcpi import minecraft, vec3
from minecraftstuff import MinecraftTurtle
import time
import json
import math
mc = minecraft.Minecraft.create('103.237.147.88', 4714)

# 1. Xác định vị trí đầu của BL 
x,y,z = 380,67,-483 
mc.setBlock(x,y,z , 35,6)
# 2. Lấy vị trí của người chơi
def getMyPos ():
    playername = "huyhuy17"
    plid = mc.getPlayerEntityId(playername)
    return mc.entity.getTilePos(plid)

# 3. Viết hàm tính khoảng cách giữa 2 điểm 
def getDistance(x1,y1,z1,x2,y2,z2):
    #Tính khoảng cách bằng hàm sqrt, căn bậc 2 của tổng các bình phương của hiệu các giá trị toạ độ tương ứng
    return math.sqrt(
        (x2-x1)**2 + (y2-y1)**2 + (z2-z1)**2 
    )

# 4. Viết vòng lặp :
while True:
    time.sleep(2)
    xp,yp,zp = getMyPos()
    distance = getDistance(x,y,z, xp,yp,zp)

#    Nếu khoảng giữa người người chơi và BL nếu lớn 20 .
#       BL chat "Please dont let me alone"
#    Nếu khoảng cách nhỏ hoặc bằng 20  
#       BL chat hello my friend, thank you to be with me 



Demo code sử dụng MinecraftShape


from mcpi import minecraft, vec3
from minecraftstuff import MinecraftTurtle, MinecraftShape
import time
import json
import math
mc = minecraft.Minecraft.create('103.237.147.88', 4714)

x,y,z = 380,68,-483
#code khoi
spaceShip = MinecraftShape(mc, vec3.Vec3(x,y,z))

spaceShip.setBlocks(-2,-2,-2,2,2,2,20)
spaceShip.setBlocks(-1,-1,-1,1,1,1,0,0)
spaceShip.setBlock(2,2,0,20)


playername = "Chronicss_123"
plid = mc.getPlayerEntityId(playername)
while True:
    time.sleep(3)
    spaceShip.moveBy(1,1,0)
    mc.entity.setTilePos(plid,spaceShip.position,spaceShip.position.y,spaceShip.position.z)


Bài tập về nhà:

  1. Tạo mô hình xe oto với minecraftShape
  2. Khi người chơi chat “Taxi” người chơi sẽ được teleport vào trong xe vừa tạo
  3. Khi người chơi ở trong xe và chat “start” chiếc xe di chuyển và người chơi ở trong xe cũng được di chuyển theo

Buổi 9 : Tham khảo, lên ý tưởng và dựng nội dung slide.

Khung dàn bài slide

1 slide giới thiệuTên sản phẩm, tên team, các thành viên trong team
1 -2 slide giới thiệu về team-Trình bày vai trò, và công việc chính của từng thành viên– Làm slide
– Lên ý tưởng
– Viết code: code phần nào
– Test, kiểm tra chương trình
– Viết text script nội dung thuyết trình
4+ slide giới thiệu về sản phẩm– Khái quát ý tưởng cũng như lợi ích, diểm hay của chương trình
– Các tính năng và kiến thức đã học áp dụng vào để thực hiện tính năng
2+ slide– Tổng kết sản phẩm
– Điểm mạnh
– Điểm yếu cân khắc phục
1+ Q&a

Tình hình nhóm

  1. Nhóm Trung Đức + Thu Trang : Làm Game adventure
    1. Link code hướng dẫn https://repl.it/@Quang_HuyHuy/Huong-dan-minigame-adventure . Lưu ý đọc file readme.md
  2. Nhóm Mạnh Linh + Minh Đăng + Tuệ Anh : Nhà thông minh
    1. Link code hướng dẫn https://repl.it/@Quang_HuyHuy/Huong-dan-lam-nha-thong-minh . Lưu ý đọc file readme.md

10 Replies to “Python level 4 chiều thứ 7”

  1. Congratulations , your website is my next hacking target

    1. Con đùa thôi

  2. Congratulations , you will be the next president of the United States

  3. – ứng dụng kiến thức về mcpi, minecraftshape tạo một màn chơi
    – dựng lên qua câu lệnh setBlocks() để xây con đường chính, minecraftturtle và minecraftdraw để tạo
    các cạm bẫy
    – minecraftshape giúp tạo ra các chướng ngại vật có thể di chuyển
    – đặt các hộp quà/ kho báu bằng tay
    – tham khảo các màn chơi trên mạng để dựng nên kiến trúc của màn chơi
    ———
    – khi chương trình bắt đầu, người chơi sẽ được di chuyển đến vị trí bắt đầu, bộ đếm thời gian được khởi động thông qua thư viện time & vòng lặp while
    – khi thời gian kết thúc, sẽ có thông báo thua/thắng cuộc qua câu lệnh mc.postToChat()
    – trong quá trình chơi sẽ luôn kiểm tra tọa độ người chơi để xác định tiến độ qua câu lệnh mc.entity.getPos()
    – nếu người chơi bị rơi ra ngoài sẽ đưa về vị trí bắt đầu
    – nếu người chơi về đích sẽ hỏi có muốn chơi lại không
    – người chơi có thể điều khiển độ khó thông qua chat

Trả lời trang Hủy