網(wǎng)上有很多關(guān)于pos機(jī)錯(cuò)誤61代碼,「Python小游戲」Bomb Catching的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)錯(cuò)誤61代碼的問(wèn)題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!
本文目錄一覽:
pos機(jī)錯(cuò)誤61代碼
在人工智能熱興起后,Python這門(mén)不算很新的語(yǔ)言,幾乎一夜之間就“彎道超車(chē)”,占據(jù)了熱門(mén)編程語(yǔ)言的Top10,成為眾多人追捧的對(duì)象。在此,我想告訴大家的是,Python之所以被追捧,被大多數(shù)人所接受,那是因?yàn)樗兄浅XS富的第三方的庫(kù)可供調(diào)用,語(yǔ)法結(jié)構(gòu)又相對(duì)簡(jiǎn)單,在這個(gè)追求效率的時(shí)代,是非常接地氣的。不過(guò),作為資深的軟件工程師,對(duì)于初學(xué)者,我的忠告是:Python一時(shí)爽,但千萬(wàn)不要對(duì)庫(kù)產(chǎn)生依賴,計(jì)算機(jī)的經(jīng)典算法和底層結(jié)構(gòu)還是需要不斷地研究和探索的。
本篇的主要內(nèi)容是,通過(guò)Python+Pygame來(lái)制作一個(gè)簡(jiǎn)單的小游戲--Bomb Catching Game,作為一些想以Python作為踏入軟件編程行業(yè)的小白的敲門(mén)磚。用到的工具主要有:Python-3.7.2;pygame 1.9.6;
VSCodeUserSetup-x64-1.30.2。
游戲規(guī)則:在游戲窗口單擊鼠標(biāo)左鍵開(kāi)始游戲。通過(guò)在窗口內(nèi)移動(dòng)鼠標(biāo)來(lái)移動(dòng)窗口下方的長(zhǎng)方形木塊,此時(shí),會(huì)從屏幕頂部掉落1個(gè)黃色的小球,用戶必須移動(dòng)木塊去接住小球。如果不能準(zhǔn)確接住,屏幕左上方的生命值會(huì)被扣除1,接住的,右上方分?jǐn)?shù)+10,黃色小球從屏幕上方的隨機(jī)位置重新開(kāi)始下落。當(dāng)生命值為0時(shí),游戲結(jié)束。
設(shè)計(jì)要點(diǎn):該游戲?yàn)镻ython中最簡(jiǎn)單的演示型游戲之一,主要應(yīng)用到的知識(shí)點(diǎn)為:鼠標(biāo)事件的監(jiān)測(cè)(按下、移動(dòng))、圖形繪制(圓形、矩形)、圖形的碰撞檢測(cè)(矩形和圓形)、分?jǐn)?shù)變量的加減運(yùn)算和圖形窗口的創(chuàng)建與刷新。運(yùn)行后的具體效果如下所示:
參考代碼如下:
1.import pygame, sys, random, time #引用pygame(游戲相關(guān))、sys(系統(tǒng)相關(guān))、random(隨機(jī)數(shù)相關(guān))、time(延時(shí)相關(guān))庫(kù)
2.from pygame.locals import *
3.def print_text(font, x, y, text, color=(255,255,255)): #聲明1個(gè)在窗口上進(jìn)行文字顯示的自定義函數(shù)
4. imgtext = font.render(text, True, color) #定義1個(gè)文本變量,內(nèi)容為參數(shù)text傳遞的字符串,顏色為color(255,255,255),即白色字
5. screen.blit(imgtext, (x,y)) #在窗口以左上角為(0,0)點(diǎn)的坐標(biāo)系中,參數(shù)X、Y對(duì)應(yīng)的位置顯示該本文
6.pygame.init() #初始化pygame庫(kù)
7.screen = pygame.display.set_mode((600, 500)) #設(shè)置游戲窗口的顯示大小為寬600,高500
8.pygame.display.set_caption("Bomb catching game") #設(shè)置游戲窗口的標(biāo)題為“Bomb catching game”
9.font1 = pygame.font.Font(None, 24) #設(shè)置字體樣式及大小
10.pygame.mouse.set_visible(False) #設(shè)置游戲中鼠標(biāo)指針為不可見(jiàn)
11.white = 255,255,255 # 定義1個(gè)名為white的變量并賦值為3原色的白色表示數(shù)值
12.red = 220, 50, 50 # 定義1個(gè)名為red的變量并賦值為3原色的紅色表示數(shù)值
13.yellow = 230,230,50 # 定義1個(gè)名為yellow的變量并賦值為3原色的黃色表示數(shù)值
14.black = 0,0,0 # 定義1個(gè)名為black的變量并賦值為3原色的黑色表示數(shù)值
15.lives = 3 # 定義1個(gè)名為lives的變量并初始化賦值為3,用來(lái)存儲(chǔ)游戲過(guò)程中的剩余生命的條數(shù)
16.score = 0 #定義1個(gè)名為score的變量并初始化賦值為0,用來(lái)存儲(chǔ)游戲過(guò)程中的得分?jǐn)?shù)
17.game_over = True #定義1個(gè)名為game_over的變量并賦值為T(mén)rue,布爾型變量,游戲是否結(jié)束標(biāo)志位
18.mouse_x = mouse_y = 0 #定義2個(gè)變量并初始化賦值為0,用來(lái)存儲(chǔ)游戲過(guò)程中捕獲到的鼠標(biāo)的X、Y坐標(biāo)值
19.pos_x = 300 #定義1個(gè)名為POS_X的變量并初始化賦值為300,用來(lái)存儲(chǔ)矩形木塊的當(dāng)前位置的X坐標(biāo)值
20.pos_y = 460 #定義1個(gè)名為POS_Y的變量并初始化賦值為460,用來(lái)存儲(chǔ)矩形木塊的當(dāng)前位置的Y坐標(biāo)值
21.bomb_x = random.randint(0,500) #定義1個(gè)名為bomb_X的變量并初始化賦值為0~500之間的一個(gè)隨機(jī)數(shù),用來(lái)存儲(chǔ)圓球的當(dāng)前位置的X坐標(biāo)值
22.bomb_y = -50 #定義1個(gè)名為bomb_Y的變量并初始化賦值為-50,用來(lái)存儲(chǔ)圓球的當(dāng)前位置的Y坐標(biāo)值
23.vel_y = 0.7 #定義1個(gè)名為vel_y的常量并賦值為0.7,其為圓球下落的步長(zhǎng)值
24.while True: #程序主循環(huán),一般為死循環(huán)
25. for event in pygame.event.get(): #系統(tǒng)事件消息監(jiān)測(cè),計(jì)算機(jī)系統(tǒng)產(chǎn)生的所有操作消息,在for循環(huán)中進(jìn)行遍歷,對(duì)需要進(jìn)行響應(yīng)的消息進(jìn)行判斷并做出響應(yīng)
26. if event.type == QUIT: #系統(tǒng)要求退出當(dāng)前的游戲窗口,即結(jié)束游戲
27. sys.exit() #退出,執(zhí)行后游戲窗口被關(guān)閉
28. elif event.type == MOUSEMOTION: #鼠標(biāo)移動(dòng)了
29. mouse_x,mouse_y = event.pos #獲取當(dāng)前的鼠標(biāo)所在位置坐標(biāo),并對(duì)變量值進(jìn)行刷新
30. move_x,move_y = event.rel #定義2個(gè)變量move_x、move_y
,同時(shí)獲取當(dāng)前操作鼠標(biāo)在X和Y方向上移動(dòng)的相對(duì)值,并對(duì)變量進(jìn)行刷新
31. elif event.type == MOUSEBUTTONUP: #鼠標(biāo)按下后抬起事件,游戲開(kāi)始時(shí)提示“按下鼠標(biāo)開(kāi)始游戲”后會(huì)執(zhí)行以下代碼
32. if game_over: #如果游戲結(jié)束標(biāo)志位為T(mén)rue,則執(zhí)行后續(xù)操作
33. game_over = False #將游戲結(jié)束標(biāo)志位置為False,開(kāi)始游戲
34. lives = 3 #游戲剩余生命數(shù)恢復(fù)初始化數(shù)值
35. score = 0 #游戲得分初始化清零
36. keys = pygame.key.get_pressed() #定義列表keys,同時(shí)監(jiān)聽(tīng)鍵盤(pán)按鍵事件的消息并將所有消息存入到keys列表中
37. if keys[K_ESCAPE]: #判斷是否有ESC鍵按下
38. sys.exit() #退出游戲
39. screen.fill((0,0,100)) #以RGB(0,0,100)的顏色,即藍(lán)色,繪制游戲窗口
40. if game_over: #如果游戲結(jié)束標(biāo)志位為T(mén)rue,則執(zhí)行后續(xù)代碼
41. print_text(font1, 100, 200, "<click to play>") #屏幕(100,200)位置以font1樣式顯示文字“<click to play>”
42. else: #游戲尚未結(jié)束,則執(zhí)行后續(xù)代碼
43. bomb_y += vel_y #改變圓球的Y坐標(biāo),使其增加0.7,即圓球在屏幕中的位置會(huì)下落0.7
44. pygame.time.wait(10) #程序等待10毫秒后再執(zhí)行后續(xù)代碼
45. if bomb_y > 500: #位置判斷,如果圓球的Y坐標(biāo)超過(guò)500,即圓球從游戲窗口的下邊框移出窗口
46. bomb_x = random.randint(0, 500)#重新隨機(jī)調(diào)整圓球的X坐標(biāo),即在游戲窗口中的左右位置
47. bomb_y = -50 #讓圓球重新回到游戲窗口上邊框以外,即圓球下落超出窗口后會(huì)重新回到上邊重新開(kāi)始新1輪的下落
48. lives -= 1 #圓球超出下邊框后,即木塊沒(méi)有接住圓球,生命值減1
49. if lives == 0: #如果生命值為0后,執(zhí)行后續(xù)代碼
50. game_over = True #將游戲結(jié)束標(biāo)志位置為T(mén)rue,在while True的下1次循環(huán)時(shí)會(huì)觸發(fā)上述的“ if game_over:”代碼,使游戲結(jié)束。
51. elif bomb_y > pos_y: #如果圓球的Y坐標(biāo)大于木塊的Y坐標(biāo),即圓球和木塊在同1高度時(shí),執(zhí)行后續(xù)代碼
52. if bomb_x > pos_x and bomb_x < pos_x + 120:#進(jìn)一步判斷圓球和木塊的X坐標(biāo),如果圓球的X坐標(biāo)在木塊的左側(cè)和右側(cè)坐標(biāo)值之間,即此時(shí)圓球和木塊重疊,執(zhí)行后續(xù)代碼
53. score += 10 #木塊接住了圓球,游戲得分加10
54. bomb_x = random.randint(0, 500)#圓球重新隨機(jī)調(diào)整X坐標(biāo)值
55. bomb_y = -50#圓球被接住,重新回到窗口上邊框以外,進(jìn)行新1輪的下落
56. pygame.draw.circle(screen, black, (bomb_x-4,int(bomb_y)-4), 30, 0) #在bomb_x左偏4,bomb_y上偏4的位置為圓心繪制1個(gè)半徑為30的黑色圓
57. pygame.draw.circle(screen, yellow, (bomb_x,int(bomb_y)), 30, 0)#在bomb_x,bomb_y的位置為圓心繪制1個(gè)半徑為30的黃色圓
58. pos_x = mouse_x #將當(dāng)前鼠標(biāo)所在位置的X值賦值給木塊的X位置,即移動(dòng)木塊左右位置到當(dāng)前鼠標(biāo)所在的位置,但木塊的上下位置不變
59. if pos_x <0: #如果木塊的最左側(cè)移出了窗口最左側(cè),則執(zhí)行后續(xù)代碼
60. pos_x = 0#強(qiáng)制讓木塊停留在游戲窗口的最左邊框處
61. elif pos_x > 500:#如果木塊的最右側(cè)移出了窗口最右側(cè),則執(zhí)行后續(xù)代碼
62. pos_x = 500#強(qiáng)制讓木塊停留在游戲窗口的最右邊框處
63. pygame.draw.rect(screen, black, (pos_x-4,pos_y-4,120,40), 0)# 在pos_x左偏4,pos_y上偏4的位置為起點(diǎn)繪制1個(gè)長(zhǎng)為120,寬為40的黑色矩形
64. pygame.draw.rect(screen, red, (pos_x,pos_y,120,40), 0)# 在pos_x,pos_y的位置為起點(diǎn)繪制1個(gè)長(zhǎng)為120,寬為40的紅色矩形
65. print_text(font1, 0, 0, "Lives:" + str(lives))#在游戲窗口(0,0)位置,以font1樣式顯示文字“Lives:”和當(dāng)前的剩余生命值
66. print_text(font1, 500, 0, "Score:" + str(score))#在游戲窗口(500,0)位置,以font1樣式顯示文字“Score:”和當(dāng)前的游戲得分值
67. pygame.display.update() #刷新游戲窗口的顯示
注意事項(xiàng):
1.對(duì)于游戲而言,窗口顯示的圖形的變化,其實(shí)就是其利用while True死循環(huán)在不斷地刷新顯示的內(nèi)容,通過(guò)修改顯示的內(nèi)容的位置或文本信息來(lái)得到圖形運(yùn)動(dòng)或分?jǐn)?shù)更新的效果。
2.代碼第56行和第63行為什么要各自多畫(huà)一個(gè)黑色的圓和矩形呢?其實(shí)運(yùn)行整個(gè)游戲后就會(huì)發(fā)現(xiàn),圓和矩形其實(shí)各有2個(gè),黑色圖形大部分被后畫(huà)的遮擋住了,多出來(lái)的那4個(gè)偏移,正好形成圓和矩形的陰影,使得畫(huà)面看上去更加的逼真,顯示效果更好。
3.后畫(huà)的圖案會(huì)疊加到先畫(huà)的圖案上面。
4.VSCode保存后的Python文件擴(kuò)展名為.py,在windows系統(tǒng)上不能直接雙擊運(yùn)行,我們可以在該.py文件的同目錄下創(chuàng)建1個(gè).bat文件進(jìn)行啟動(dòng)和執(zhí)行,.bat文件的文件名沒(méi)有特殊要求,內(nèi)容為:
python bombcatching.py
本篇例程的源代碼可從百度云進(jìn)行下載:
鏈接:https://pan.baidu.com/s/1EZRK5D1b7pVcSvc6tOI1yA
提取碼:hyrw
以上就是關(guān)于pos機(jī)錯(cuò)誤61代碼,「Python小游戲」Bomb Catching的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)錯(cuò)誤61代碼的知識(shí),希望能夠幫助到大家!
![](/style/images/zhouzong.jpg)