informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
GUI adalah singkatan dari Graphical User Interface. Siapapun yang pernah menggunakan komputer pasti sudah familiar dengan antarmuka pengguna grafis, jadi tidak perlu menjelaskan secara detail di sini. Modul pengembangan GUI default Python adalah tkinter (bernama Tkinter dalam versi sebelum Python 3). Dari nama ini, Anda dapat mengetahui bahwa ini didasarkan pada Tk. Tk adalah toolkit yang awalnya dirancang untuk Tcl dan kemudian di-porting ke banyak skrip lainnya bahasa, ia menyediakan kontrol GUI lintas platform. Tentu saja, Tk bukanlah pilihan terbaru dan terbaik, dan tidak memiliki kontrol GUI yang sangat kuat. Faktanya, mengembangkan aplikasi GUI bukanlah keahlian terbaik Python. Jika Anda benar-benar perlu menggunakan Python untuk mengembangkan aplikasi GUI, wxPython, Modul PyQt, PyGTK, dll. adalah pilihan yang baik.
Pada dasarnya menggunakan tkinter untuk mengembangkan aplikasi GUI memerlukan 5 langkah berikut:
Kode berikut menunjukkan cara menggunakan tkinter untuk membuat aplikasi GUI sederhana.
import tkinter
import tkinter.messagebox
def main():
flag = True
# 修改标签上的文字
def change_label_text():
nonlocal flag
flag = not flag
color, msg = ('red', 'Hello, world!')
if flag else ('blue', 'Goodbye, world!')
label.config(text=msg, fg=color)
# 确认退出
def confirm_to_quit():
if tkinter.messagebox.askokcancel('温馨提示', '确定要退出吗?'):
top.quit()
# 创建顶层窗口
top = tkinter.Tk()
# 设置窗口大小
top.geometry('240x160')
# 设置窗口标题
top.title('小游戏')
# 创建标签对象并添加到顶层窗口
label = tkinter.Label(top, text='Hello, world!', font='Arial -32', fg='red')
label.pack(expand=1)
# 创建一个装按钮的容器
panel = tkinter.Frame(top)
# 创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数
button1 = tkinter.Button(panel, text='修改', command=change_label_text)
button1.pack(side='left')
button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit)
button2.pack(side='right')
panel.pack(side='bottom')
# 开启主事件循环
tkinter.mainloop()
if __name__ == '__main__':
main()
Perlu dicatat bahwa aplikasi GUI biasanya digerakkan oleh peristiwa. Alasan untuk memasuki loop peristiwa utama adalah untuk memantau terjadinya berbagai peristiwa seperti mouse dan keyboard dan mengeksekusi kode yang sesuai untuk memproses peristiwa tersebut, karena peristiwa akan terus terjadi. . Jadi perulangan seperti itu harus berjalan sepanjang waktu menunggu kejadian berikutnya terjadi. Di sisi lain, Tk menyediakan tiga manajer tata letak untuk penempatan kontrol yang dapat diposisikan melalui manajer tata letak ini adalah:Placer
(Pengembang menyediakan ukuran dan penempatan kontrol),Packer
(secara otomatis mengisi kontrol ke posisi yang sesuai) danGrid
(Tempatkan kontrol berdasarkan koordinat grid), yang tidak akan dijelaskan di sini.
Pygame adalah modul Python open source yang khusus digunakan untuk pengembangan aplikasi multimedia (seperti video game), yang mencakup dukungan untuk gambar, suara, video, peristiwa, tabrakan, dll. Pygame dibangun di atas SDL, yang merupakan sekumpulan perpustakaan pengembangan multimedia lintas platform yang diimplementasikan dalam bahasa C dan banyak digunakan dalam pengembangan game, simulator, pemain, dll. Pygame memungkinkan pengembang game untuk tidak lagi terikat dengan bahasa yang mendasarinya dan dapat lebih fokus pada fungsi dan logika game.
Sekarang mari kita selesaikan permainan sederhananya, Nama permainannya adalah "Bola Besar Makan Bola Kecil", Tentu saja menyelesaikan permainan ini bukanlah fokusnya, Belajar menggunakan Pygame juga bukan fokusnya memahami cara menggunakan langkah-langkah sebelumnya dalam proses. Jelaskan pemrograman berorientasi objek dan pelajari cara menggunakan ide pemrograman ini untuk memecahkan masalah kehidupan nyata.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()
Anda dapat menggambar di jendela melalui fungsi modul draw di pygame. Grafik yang dapat digambar antara lain: garis, persegi panjang, poligon, lingkaran, elips, busur, dll. Perlu diperhatikan bahwa sistem koordinat layar menetapkan sudut kiri atas layar sebagai titik asal koordinat (0, 0). sumbu Saat menyatakan posisi atau mengatur ukuran, satuan default kami adalah piksel. Yang disebut piksel adalah sebuah titik di layar. Anda dapat menggunakan perangkat lunak penjelajahan gambar untuk mencoba memperbesar gambar beberapa kali untuk melihat titik-titik tersebut. Representasi warna pada pygame menggunakan metode representasi tiga warna primer, yaitu nilai RGB dari warna ditentukan melalui tuple atau list. Setiap nilai antara 0 dan 255, karena setiap warna primer menggunakan 8-bit (bit). Untuk merepresentasikan nilai, ketiga warna tersebut setara dengan total 24 bit, yang sering disebut dengan "representasi warna 24-bit".
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 设置窗口的背景色(颜色是由红绿蓝三原色构成的元组)
screen.fill((242, 242, 242))
# 绘制一个圆(参数分别是: 屏幕, 颜色, 圆心位置, 半径, 0表示填充圆)
pygame.draw.circle(screen, (255, 0, 0,), (100, 100), 30, 0)
# 刷新当前窗口(渲染窗口将绘制的图像呈现出来)
pygame.display.flip()
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()
Jika Anda perlu memuat gambar langsung ke jendela, Anda dapat menggunakan fungsi modul gambar di pygame untuk memuat gambar, lalu merender gambar melalui metode blit dari objek jendela yang diperoleh sebelumnya. Kodenya adalah sebagai berikut.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 设置窗口的背景色(颜色是由红绿蓝三原色构成的元组)
screen.fill((255, 255, 255))
# 通过指定的文件名加载图像
ball_image = pygame.image.load('./res/ball.png')
# 在窗口上渲染图像
screen.blit(ball_image, (50, 50))
# 刷新当前窗口(渲染窗口将绘制的图像呈现出来)
pygame.display.flip()
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if __name__ == '__main__':
main()
Kalau bicara kata animasi, semua orang sudah familiar dengannya. Padahal, untuk mendapatkan efek animasi, prinsipnya sendiri sangat sederhana, yaitu memutar gambar terputus-putus secara terus menerus selama jumlah frame per detik tertentu tercapai. maka dapat dilakukan untuk menghasilkan efek animasi yang lebih halus. Jika Anda ingin bola dalam kode di atas bergerak, Anda dapat menggunakan variabel untuk mewakili posisi bola, mengubah posisi bola dalam lingkaran, lalu menyegarkan seluruh jendela.
import pygame
def main():
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
# 定义变量来表示小球在屏幕上的位置
x, y = 50, 50
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((255, 255, 255))
pygame.draw.circle(screen, (255, 0, 0,), (x, y), 30, 0)
pygame.display.flip()
# 每隔50毫秒就改变小球的位置再刷新窗口
pygame.time.delay(50)
x, y = x + 5, y + 5
if __name__ == '__main__':
main()
Biasanya dalam sebuah permainan akan terdapat banyak benda, dan “tabrakan” antar benda tersebut tidak dapat dihindari, seperti bola meriam yang mengenai pesawat, kotak yang mengenai tanah, dan lain-lain. Deteksi tabrakan adalah masalah krusial yang harus ditangani di sebagian besar game. Modul sprite (sprite animasi) dari pygame menyediakan dukungan untuk deteksi tabrakan. Kami tidak akan memperkenalkan fungsi yang disediakan oleh modul sprite di sini mendeteksi apakah dua bola kecil bertabrakan. Anda hanya perlu memeriksa apakah jarak antara pusat bola kurang dari jumlah jari-jari kedua bola. Untuk membuat lebih banyak bola kecil, kita dapat memproses event mouse untuk membuat bola kecil dengan warna, ukuran, dan kecepatan gerak acak di lokasi mouse diklik. Tentu saja, untuk melakukan ini, kita dapat menggunakan apa yang telah kita pelajari sebelumnya pengetahuan berorientasi objek.
Event mouse dapat diproses dalam event loop. Jenis event dapat ditentukan melalui atribut type dari objek event, dan posisi klik mouse dapat diperoleh melalui atribut pos. Jika Anda ingin menangani event keyboard, disini juga tempatnya. Caranya mirip dengan menangani event mouse.
def main():
# 定义用来装所有球的容器
balls = []
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption('大球吃小球')
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 处理鼠标事件的代码
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
# 获得点击鼠标的位置
x, y = event.pos
radius = randint(10, 100)
sx, sy = randint(-10, 10), randint(-10, 10)
color = Color.random_color()
# 在点击鼠标的位置创建一个球(大小、速度和颜色随机)
ball = Ball(x, y, radius, sx, sy, color)
# 将球添加到列表容器中
balls.append(ball)
screen.fill((255, 255, 255))
# 取出容器中的球 如果没被吃掉就绘制 被吃掉了就移除
for ball in balls:
if ball.alive:
ball.draw(screen)
else:
balls.remove(ball)
pygame.display.flip()
# 每隔50毫秒就改变球的位置再刷新窗口
pygame.time.delay(50)
for ball in balls:
ball.move(screen)
# 检查球有没有吃到其他的球
for other in balls:
ball.eat(other)
if __name__ == '__main__':
main()
Dengan menggabungkan kedua potongan kode di atas, kita telah menyelesaikan permainan "bola besar memakan bola kecil" (seperti terlihat pada gambar di bawah). permainan kecil. Contoh ini memberi tahu semua orang bahwa dengan pengetahuan ini Anda dapat memulai perjalanan pengembangan mini game Anda. Faktanya, ada banyak area yang perlu ditingkatkan dalam kode di atas, misalnya kode untuk menyegarkan jendela dan memindahkan bola tidak boleh ditempatkan di loop acara, setelah mempelajari pengetahuan tentang multi-threading, hal itu dapat digunakan utas latar belakang untuk menangani hal-hal ini adalah pilihan yang lebih baik. Jika kami ingin mendapatkan pengalaman pengguna yang lebih baik, kami juga dapat menambahkan musik latar ke dalam game dan memainkan efek suara saat bola bertabrakan dengan bola. Dengan menggunakan mixer dan modul musik pygame, kami dapat dengan mudah melakukan ini ini. Faktanya, jika Anda ingin tahu lebih banyak tentang pygame, tutorial terbaik adalah situs resmi pygame. Jika Anda tidak memiliki masalah dengan bahasa Inggris, Anda dapat mengunjunginya. Jika Anda ingin mengembangkan game 3D, pygame sepertinya belum cukup. Pembaca yang tertarik dengan pengembangan game 3D mungkin ingin melihat Panda3D.