亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

侄兒子非要搶我手機(jī)玩吃雞!但他才六歲菜的很。我花五分鐘寫了個(gè)游戲,他玩了一天。

CrazyCodes / 2388人閱讀

摘要:條形表在頂部,我們將用這個(gè)來檢查要顯示的條子,以及球擊中后要移除的條子。最后的職能是唯一的變化是我們初始化了,和輸入的圖像。我們正在創(chuàng)建我們的欄桿,但沒有顯示它們。我還想做一件事。

導(dǎo)語

? ? ? ?前兩天不是中秋節(jié)嗎,放了幾天假,所以我就回家過節(jié)去了,也是沒時(shí)間給大家更新,回家親戚朋友多嘛,所以我侄兒子看到我在和別人玩和平精英,他也要玩,我以為他會,結(jié)果連東西都不會搜,就知道讓我找飛機(jī)給他開!看得出,應(yīng)該是看別人玩的多,自己基本沒有玩過,但是他這么菜,我不能讓他坑我的隊(duì)友啊,畢竟也是分段比較高的局了,于是我就掏出筆記本寫了款非常簡單的游戲給他玩!沒想到一玩上手了,家也不回了,玩到大晚上還念念不忘,說明天還來玩哦!

這款小游戲非常簡單,也適合5,6歲的小朋友玩!看下效果

這里提供了所有代碼:點(diǎn)這里領(lǐng)取

安裝游戲庫:

pip install pgzero

我們要做的第一件事是打開一個(gè)空窗口:

import pgzrunTITLE = "Arkanoid clone"WIDTH = 800HEIGHT = 500pgzrun.go()

我們進(jìn)口游戲零。標(biāo)題顯示在窗口上的標(biāo)題,其他兩個(gè)變量定義寬度和高度。Go()運(yùn)行程序。

您將看到一個(gè)空白窗口:

?

?

接下來,讓我們展示一些街區(qū)。

在高度和寬度下面添加以下代碼:

WIDTH = 800HEIGHT = 500paddle = Actor("paddleblue.png")paddle.x = 120paddle.y = 420ball = Actor("ballblue.png")ball.x = 30ball.y = 300

?

是PyGames 0顯示圖像的方式。圖像總是存儲在

影象

文件夾位于與游戲腳本相同的位置。

? tree.├── game.py└── images    ├── ballblue.png    └── paddleblue.png1 directory, 3 files

我們還設(shè)置了正在加載的圖像的起始x和y位置:

paddle.x = 120paddle.y = 420

這些值可以是任意的,我通過反復(fù)試驗(yàn)得到了上面的結(jié)果。

因此,我們將圖像加載到內(nèi)存中,但我們還沒有顯示它們。我們現(xiàn)在就解決這個(gè)問題。PgZero有一個(gè)內(nèi)置的抽簽()函數(shù),該函數(shù)在啟動(dòng)游戲時(shí)自動(dòng)調(diào)用。還有一個(gè)更新函數(shù),每秒調(diào)用60次,并在移動(dòng)時(shí)更新屏幕。

更新VS繪圖功能

更新和繪制函數(shù)是相似的--除非更新每秒調(diào)用60次,而只有在某些事情發(fā)生變化時(shí)才調(diào)用繪圖。

沒有硬和快速的規(guī)則,但我會使用更新的東西,很多變化,如鍵盤運(yùn)動(dòng),球運(yùn)動(dòng)等,而背景圖像可以在繪制。

畫槳和球

現(xiàn)在,我們將只在屏幕上繪圖,并將UPDATE保留為空:

def draw():    paddle.draw()    ball.draw()    def update():?

?

?

我還有一件事要做。背景很無聊--讓我們把它整理一下吧。

讓我們更新繪圖功能:

def draw():    screen.blit("background.png", (0,0))    paddle.draw()    ball.draw()

背景是一個(gè)文件Background.png在……里面影象。這個(gè)布利特()函數(shù)將我們的圖像繪制到屏幕上。(0,0)表示從x=0y=0開始。我們將在下面討論更多關(guān)于PyameZero坐標(biāo)系的內(nèi)容。

?

?

好多了。

布置欄桿

接下來,我們要列出我們的球?qū)糁械乃许敳康臋跅U。

在我們的目錄中有一些條形圖,我們將使用它們。首先,布局1欄:

bar = Actor("element_blue_rectangle_glossy.png")bar.x=120bar.y=100def draw():    bar.draw()?

?

?很明顯,一次只放一個(gè)欄桿是很痛苦的。讓我們使用一個(gè)for循環(huán)來放置多個(gè)。

def draw():    bar_x = 120    bar_y = 100    for i in range(8):        bar = Actor("element_blue_rectangle_glossy.png")        bar.x = bar_x        bar.y = bar_y        bar.draw()                bar_x += 70

?我們創(chuàng)建了開始的x和y變量-棒x初始化為120和棒Y初始化為100我們繞8圈。為什么是8?因?yàn)檫@就是我們能舒服地坐在屏幕上的酒吧。

對于每個(gè)循環(huán),我們創(chuàng)建一個(gè)Actor并初始化它的x和y,并將其繪制到屏幕上。然后我們會:

bar_x += 70

使下一個(gè)條形圖向左移動(dòng)70個(gè)像素。再一次,我通過反復(fù)試驗(yàn)找到了70個(gè)。嘗試更改值,然后看到條形圖重疊或相距太遠(yuǎn)。

運(yùn)行代碼:

?

?

?好的。現(xiàn)在我們也要把其他的欄桿都布置好。我計(jì)劃有三排不同顏色的。

我要做的第一件事是將上面的代碼解壓縮到一個(gè)函數(shù)中:

def draw():    screen.blit("background.png", (0,0))    paddle.draw()    ball.draw()    place_blue_bars()def place_blue_bars():    bar_x = 120    bar_y = 100    for i in range(8):        bar = Actor("element_blue_rectangle_glossy.png")        bar.x = bar_x        bar.y = bar_y        bar.draw()        bar_x += 70

我所做的就是將代碼解壓縮成一個(gè)函數(shù)放置藍(lán)條()現(xiàn)在,我可以創(chuàng)建更多的函Create_red_bar(等但我相信我們可以做得更聰明。所以我將有一個(gè)一般的函數(shù)Place_bar():

def place_bars(x,y,image):

我們還將創(chuàng)建另一個(gè)全局變量。條形表=[]在頂部,我們將用這個(gè)來檢查要顯示的條子,以及球擊中后要移除的條子。

我們將傳遞第一個(gè)條形的起始x和y,加上我們想要使用的圖像。最后的職能是:

def place_bars(x,y,image):    bar_x = x    bar_y = y    for i in range(8):        bar = Actor(image)        bar.x = bar_x        bar.y = bar_y        bar_x += 70        bars_list.append(bar)

唯一的變化是我們初始化了x,y和輸入的圖像。

我們將在游戲主代碼開始之前調(diào)用這個(gè)函數(shù)。

Pgzero.run()

coloured_box_list = ["element_blue_rectangle_glossy.png", "element_green_rectangle_glossy.png","element_red_rectangle_glossy.png"]    x = 120    y = 100

我們有一個(gè)包含3幅圖像的列表,我們初始化了x和y值。然后我們循環(huán)遍歷我們的列表:

for coloured_box in coloured_box_list:        place_bars(x, y, coloured_box)        y += 50

我們需要做一個(gè)

Y+=50

在每個(gè)循環(huán)中,否則,條子將放置在彼此的頂部。

最后代碼:

coloured_box_list =  ["element_blue_rectangle_glossy.png", "element_green_rectangle_glossy.png", "element_red_rectangle_glossy.png"] x = 120 y = 100 for coloured_box in coloured_box_list:     place_bars(x, y, coloured_box)     y += 50

還有一件事要做。我們正在創(chuàng)建我們的欄桿,但沒有顯示它們。更新繪圖功能:

def draw()    for bar in bars_list:        bar.draw()?

?

?我們有漂亮的布局。我們現(xiàn)在可以開始研究邏輯了。

添加球物理和處理用戶輸入

移動(dòng)槳

讓我們從移動(dòng)我們的槳開始。這是相當(dāng)容易的,在游戲零-你可以直接檢查鍵盤事件。讓我們更新我們的更新()技巧:

def update():    if keyboard.left:        paddle.x = paddle.x - 5    if keyboard.right:        paddle.x = paddle.x + 5

如果鍵盤左

檢查左鍵是否按下,如果是,則將槳的x位置更改為-5(即向左移動(dòng)5個(gè)像素)。正確的鑰匙也是一樣。

為什么我要選擇5個(gè)像素?在移動(dòng)太快/太慢之間找到平衡。嘗試將值更改為1和10,看看會發(fā)生什么。

按左右鍵-你現(xiàn)在可以移動(dòng)槳了。

?

?

?

移動(dòng)球

記住,內(nèi)置的UPDATE()方法每秒調(diào)用60次。因此,任何游戲邏輯,如移動(dòng)球,檢查碰撞等都會出現(xiàn)在這里。我們將創(chuàng)建一個(gè)名為更新球()我們會從更新().

def update():    update_ball()def update_ball():    ball.x -= 1    ball.y -= 1

我們要改變球的x和y位置。

關(guān)于PYGERO零坐標(biāo)系的一點(diǎn)看法

?

?

屏幕左上角為0,0;即x=0,y=0。

當(dāng)你往右走,x就會增加。

當(dāng)你下去的時(shí)候,y會增加。

所以向左移動(dòng),減小x。向右移動(dòng),增加x。

下去,增加你。向上,減少你。

考慮到這一點(diǎn):

Ball.x-=1

向左移動(dòng)球(as-1=左,+1=右)

Ball.y-=1

將球向上移動(dòng)(as-1=向上,+1=向下)

所以在開始的時(shí)候,球會向上和左邊移動(dòng)。這只是一個(gè)隨機(jī)的決定-你可以很容易地選擇下來和正確的。但我會堅(jiān)持下去,現(xiàn)在,我可以給你們看一個(gè)問題:

?

?

?

?球飛離了屏幕!哈!

我們需要增加檢查,這樣如果它撞到墻上,它就會反彈回來。這是物理部分。

現(xiàn)在再加上那張支票。

首先,讓我們?yōu)閤和y的速度添加一個(gè)全局變量。將這些全局VAR添加到文件的頂部:

ball_x_speed = 1ball_y_speed = 1

左/右和上/下的速度是1像素。您可以嘗試增加這個(gè)數(shù)字,以使球跑得更快(從而增加難度),但我們將堅(jiān)持1,因?yàn)樗箿y試變得容易。

讓我們在函數(shù)中使用這個(gè)變量:

def update_ball():    global ball_x_speed, ball_y_speed    ball.x -= ball_x_speed    ball.y -= ball_y_speed

代碼和以前一樣,只是用變量替換了‘1’。我們現(xiàn)在把加起來。

if (ball.x >= WIDTH) or (ball.x <=0):        ball_x_speed *= -1

如果x超過我們?yōu)橛螒蚨x的最大寬度(即超出屏幕的右側(cè)),或低于0(即超出屏幕的左邊),那么:

ball_x_speed *= -1

這是什么意思?記住,每次更新的時(shí)候我們都是按球的速度前進(jìn)的。首先,我們向上移動(dòng),然后離開。

在這里,我們把速度乘以-1。所以,如果球向左移動(dòng),它就會開始向右移動(dòng),反之亦然。

結(jié)果是,球一碰到邊界,就會改變方向。

對于y軸,我們也可以這樣做:

if (ball.y >= HEIGHT) or (ball.y <=0):        ball_y_speed *= -1

再一次,我們檢查球是在屏幕上方還是下面。最后的職能是:

def update_ball():    global ball_x_speed, ball_y_speed    ball.x -= ball_x_speed    ball.y -= ball_y_speed    if (ball.x >= WIDTH) or (ball.x <=0):        ball_x_speed *= -1    if (ball.y >= HEIGHT) or (ball.y <=0):        ball_y_speed *= -1

讓我們測試代碼:

?

?

?太酷了,所以球會從墻上跳下來。但它仍然穿過街區(qū)。我們來解決這個(gè)問題。

在PyameZero中實(shí)現(xiàn)碰撞檢測

在UPDATE函數(shù)中,我們添加此代碼以檢測沖突:

def update():    update_ball()    for bar in bars_list:        if ball.colliderect(bar):            bars_list.remove(bar)

讓我們逐行檢查代碼。

我們繞著欄桿:

for bar in bars_list:

對于每個(gè)酒吧,我們檢查球是否與之碰撞:

if ball.colliderect(bar):

對撞機(jī)()是一個(gè)內(nèi)置的函數(shù),它檢查兩個(gè)對象是否發(fā)生碰撞;在本例中,是球體和棒子。

如果它們發(fā)生碰撞,我們從列表中刪除該條:

if ball.colliderect(bar):            bars_list.remove(bar)

記住,這些條是在

抽簽()

功能?

for bar in bars_list:        bar.draw()

如果我們從列表中刪除該條,它將不再被繪制,從而從屏幕上消失。

運(yùn)行代碼以檢查它是否有效:

好的,那很好,但是球像刀子一樣穿過塊。這不是我們想要的。我們想讓球在擊中蓋子時(shí)反彈。

幸運(yùn)的是,有一個(gè)簡單的解決方案:

for bar in bars_list:        if ball.colliderect(bar):            bars_list.remove(bar)            ball_y_speed *= -1 # ==> this is the new code

最后一行是新代碼--我們改變了球的y方向--所以如果它上升了,它就會開始下降。

我還想做一件事。在真正的阿肯色州,當(dāng)球擊中塊或槳,它可以左或右,模擬現(xiàn)實(shí)世界彈球樣的“物理”。是的,這并不完美,但它給比賽增添了一些樂趣,因?yàn)槟悴恢狼驎ツ睦铩?/p>

我將為此添加代碼:

# randomly move ball left or right on hit            rand = random.randint(0,1)            if rand:                ball_move_x *= -1

當(dāng)球擊中一個(gè)街區(qū),我們將隨機(jī),大約50%的時(shí)間,改變方向。所以如果球向右,它可能會開始向左移動(dòng)。

我們還有最后一件事要做。

把球從我們的槳上彈下來

我將分享代碼--你現(xiàn)在應(yīng)該能夠理解它了:

if paddle.colliderect(ball):        ball_y_speed *= -1        # randomly move ball left or right on hit        rand = random.randint(0,1)        if rand:            ball_x_speed *= -1

再次,我們檢查球是否與槳碰撞,如果是,改變它的y方向。隨機(jī)改變x方向。

你現(xiàn)在應(yīng)該可以玩這個(gè)游戲了:

1)代碼中有一個(gè)很大的錯(cuò)誤--如果它落在槳下,游戲就會繼續(xù)進(jìn)行。實(shí)際上,你永遠(yuǎn)不會輸!

你需要改變邏輯,這樣如果球落在槳下,游戲就結(jié)束了。在下一個(gè)例子中,我們將看到如何在屏幕上創(chuàng)建一個(gè)游戲,現(xiàn)在只需將其打印到控制臺即可。

2)試著增加分?jǐn)?shù)--所以每次你碰到一個(gè)街區(qū),你就能得到1分。同樣,只需將得分打印到控制臺即可。

對于加分,對于不同顏色的塊有不同的分?jǐn)?shù)。提示:您需要將塊存儲在不同的列表中,這樣您就可以根據(jù)您點(diǎn)擊的顏色來檢查分?jǐn)?shù)。

那么你學(xué)會了嗎?需要代碼記得看前文哈!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/121154.html

相關(guān)文章

  • 吃雞”嗎?《和平精英》來了,感覺不一般

    摘要:本博客貓叔的博客,轉(zhuǎn)載請申明出閱讀本文約分鐘適讀人群互聯(lián)網(wǎng)工作者游戲愛好者吃雞嗎本文部分素材摘抄自最前線騰訊吃雞游戲或借殼變現(xiàn),絕地求生成為和平精英。我比較少玩吃雞幾乎沒有,不過對于游戲的好奇感一直高于其他行業(yè)。 本博客 貓叔的博客,轉(zhuǎn)載請申明出閱讀本文約3分鐘適讀人群:IT/互聯(lián)網(wǎng)工作者、游戲愛好者 吃雞嗎? showImg(https://segmentfault.com/img...

    DirtyMind 評論0 收藏0
  • 代碼吃雞:Python-Robocode

    摘要:最近看到一個(gè)很有未來感的新聞一輛特斯拉在拉斯維加斯出了車禍,撞死了一個(gè)機(jī)器人。不知道是意外還是炒作,又或者是這位機(jī)器人故意碰瓷,反正人們也無法從受害者口中了解被特斯拉撞是怎樣一種體驗(yàn)了。像星際爭霸之類的經(jīng)典游戲都有過類似的比賽。 最近看到一個(gè)很有未來感的新聞: 一輛 特斯拉 在拉斯維加斯出了車禍,撞死了一個(gè)……emmmm……機(jī)器人。不知道是意外還是炒作,又或者是這位機(jī)器人故意碰瓷,反...

    yvonne 評論0 收藏0
  • 程序員畫像,十年沉浮

    摘要:十年,轉(zhuǎn)瞬即逝,人生進(jìn)入下半場。沒想到,公司在短短年時(shí)間里就上市了,作為頭部員工,他獲得了不菲的回報(bào)。他其實(shí)挺喜歡寫代碼的,但程序員工資還是低了點(diǎn)。就像養(yǎng)狗一樣,要有規(guī)矩。去年為了還貸款,還變賣了一套。 風(fēng)險(xiǎn)預(yù)警。本文屬于毒雞湯系列,經(jīng)過文學(xué)渲染,讀后或產(chǎn)生焦慮,有相關(guān)抵制者慎入。 十年,轉(zhuǎn)瞬即逝,人生進(jìn)入下半場。眾生皆苦,萬相本無。且看風(fēng)云變幻,慢品苦辣酸甜。小姐姐味道微信公眾號首發(fā)。 ...

    stdying 評論0 收藏0
  • 苦逼程序員的10年

    摘要:沒想到,公司在短短年時(shí)間里就上市了,作為頭部員工,他獲得了不菲的回報(bào)。他其實(shí)挺喜歡寫代碼的,但程序員工資還是低了點(diǎn)。小馮對自己的定位直言不諱。在這過程中,他選了幾個(gè)比較好的城市,都購置了房產(chǎn)。去年為了還貸款,還變賣了一套。 風(fēng)險(xiǎn)預(yù)警。本文屬于毒雞湯系列,經(jīng)過文學(xué)渲染,讀后或產(chǎn)生焦慮,有相關(guān)抵制者慎入。 十年,轉(zhuǎn)瞬即逝,人生進(jìn)入下半場。眾生皆苦,萬相本無。且看風(fēng)云變幻,慢品苦辣酸甜。小姐...

    cartoon 評論0 收藏0
  • 苦逼程序員的10年

    摘要:沒想到,公司在短短年時(shí)間里就上市了,作為頭部員工,他獲得了不菲的回報(bào)。他其實(shí)挺喜歡寫代碼的,但程序員工資還是低了點(diǎn)。小馮對自己的定位直言不諱。在這過程中,他選了幾個(gè)比較好的城市,都購置了房產(chǎn)。去年為了還貸款,還變賣了一套。 風(fēng)險(xiǎn)預(yù)警。本文屬于毒雞湯系列,經(jīng)過文學(xué)渲染,讀后或產(chǎn)生焦慮,有相關(guān)抵制者慎入。 十年,轉(zhuǎn)瞬即逝,人生進(jìn)入下半場。眾生皆苦,萬相本無。且看風(fēng)云變幻,慢品苦辣酸甜。小姐...

    imccl 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<