最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的pygame實(shí)現(xiàn)接球小游戲

 更新時(shí)間:2022年04月22日 08:27:39   作者:??牧子川????  
這篇文章主要介紹了python中的pygame實(shí)現(xiàn)接球小游戲,文章基于python的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、介紹模塊

最小開(kāi)發(fā)框架:

基于python 的Pygame最小開(kāi)發(fā)框架

1、Pygame和sys模塊

import pygame #制作游戲時(shí)要使用的模塊
import sys #python的標(biāo)準(zhǔn)庫(kù),對(duì)內(nèi)部各功能模塊進(jìn)行初始化創(chuàng)建,系統(tǒng)模塊

2、random模塊

需要在屏幕上隨機(jī)生成小球

from random import randint

詳情請(qǐng)看此文章:python中的隨機(jī)數(shù) Random介紹

二、相關(guān)功能

1、窗口尺寸改變

可以調(diào)節(jié)游戲屏幕的大小

# 改變窗口尺寸
        elif event.type == pygame.VIDEORESIZE:
            size = w,h = event.w,event.h
            screen = pygame.display.set_mode(size,pygame.RESIZABLE)

pygame.VIDEORESIZE 這是窗口大小改變事件,事件發(fā)生后,返回event.size元組,包含新窗口的寬度和高度。 .size[0] 高度,也可以用event.w表示 .size[1] 寬度,也可以用event.h表示 返回參數(shù)僅在事件發(fā)生時(shí)有用

2、鍵盤(pán)控制擋板

# 鍵盤(pán)控制擋板
        elif event.type == pygame.KEYDOWN: #鍵盤(pán)按下事件檢測(cè)
            if event.key == pygame.K_LEFT:  # 判斷擋板是否左移
                if board_rect.left > 0 and board_rect.left <= w - 186:
                    board_rect.left -= board_x
                elif board_rect.left <= 0:  # 判斷擋板左邊的坐標(biāo)是否小于0
                    board_rect.left = 0
                    board_rect.top -= board_y
            elif event.key == pygame.K_RIGHT:  # 判斷擋板是否右移
                if board_rect.right >= 186 and board_rect.right < w:
                    board_rect.right += board_x
                elif board_rect.right >= w:  # 判斷擋板右邊的坐標(biāo)是否大于屏幕的寬度                        board_rect.right = w
                    board_rect.bottom += board_y

3、鼠標(biāo)控制

#鼠標(biāo)控制擋板
        elif event.type == pygame.MOUSEMOTION:
            # 鼠標(biāo)左鍵按下并跟隨鼠標(biāo)移動(dòng)
            if event.buttons[0] == 1:
                if event.pos[0] >= 0 and event.pos[0] < w - 186:#判斷鼠標(biāo)的位置
                    board_rect.left = event.pos[0] #將鼠標(biāo)的x坐標(biāo)給Rect對(duì)象的左邊
                elif event.pos[0] >= w - 186 and event.pos[0] <= w:
                    board_rect.left = w - 186
                # board_rect.top = h - 17 #檔板位置在底部
        elif event.type == pygame.MOUSEBUTTONDOWN:  #鼠標(biāo)按鍵按下
            # 將鼠標(biāo)當(dāng)前位置給擋板
            if event.button == 1:
                if event.pos[0] >= 0 and event.pos[0] < w - 186:#判斷鼠標(biāo)的位置
                    board_rect.left = event.pos[0] #將鼠標(biāo)的x坐標(biāo)給Rect對(duì)象的左邊
                if event.pos[0] >= w - 186 and event.pos[0] <= w:
                    board_rect.left = w - 186
                # board_rect.top = h - 17

4、擋板接住小球并得分

# 下方擋板接到小球
    if ball_y >= h - 37 and (ball_x >= board_rect.left - 20 and ball_x <= board_rect.left + 206):
        move_y = - move_y  # y方向速度反向
        score += points  #得分
        count += 1   #次數(shù)增加1次
        if count == 5:  # 每滿五次,難度和單次接球得分增加
            count = 0  # 接球得分的次數(shù)清零
            points += points
            # x方向速度增加
            if move_x > 0:
                move_x += 1
            else:
                move_x -= 1
            move_y -= 1

5、小球未接住小球

# 下方擋板未接到小球
    if ball_y > h - 27 and (ball_x < board_rect.left - 20 or ball_x > board_rect.left + 206):
        # 游戲結(jié)束
        ball_y = 200  #小球所在的位置
        break

6、小球移動(dòng)

# 移動(dòng)小球
    ball_x += move_x
    ball_y += move_y
    if ball_x <= 20 or ball_x >= w - 20:  # 碰到左右兩側(cè)墻壁
        move_x = - move_x  # x方向速度反向
    if ball_y <= 20:  # 碰到上方墻壁
        move_y = - move_y  # y方向速度反向

7、顯示分?jǐn)?shù)

my_score = font.render(str(score), False, (255, 255, 0))  # 創(chuàng)建文字對(duì)象(文字,是否平滑,文字顏色)
    screen.blit(my_score, (w - 100, 30))  # 將文字添加到窗口上

三、完整代碼

import sys
from random import randint
import pygame

pygame.init() # 初始化

size = w, h = (600,500) # 屏幕顯示的區(qū)域,高度和寬度
screen = pygame.display.set_mode(size,pygame.RESIZABLE)
pygame.display.set_caption("接球游戲") # 屏幕的標(biāo)題
fpsClock = pygame.time.Clock() # 幀速率 窗口刷新速度 越大運(yùn)行越快

board = pygame.image.load(r"D:\pycharm\WorkTime(大二上)\擋板.jpg")
board_rect = board.get_rect() #對(duì)圖片進(jìn)行加框 利用surface生成rect

color = pygame.Color(255,255,255) # 屏幕(窗口)的顏色:白色
Green = pygame.Color('green') # 小球的顏色:綠色

# 隨機(jī)生成小球的x、y坐標(biāo)(整數(shù),包括兩端)
ball_x = randint(20,580)
ball_y = randint(20,200)

# 小球x、y坐標(biāo)變化量
move_x = 1
move_y = 1

# 擋板x、y坐標(biāo)變化量
board_x = 46
board_y = 0

score=0	#得分
font=pygame.font.Font(r'D:\字庫(kù)\書(shū)法和新增字庫(kù)\微軟雅黑.ttf',60) #設(shè)置字體(前者是字體路徑)和字體大小
points=1 #一次接球的加分
count=0	#接球得分的次數(shù)

# size1 = board.get_size() #獲取圖片大小
# print(size1)
while True:
    board_rect.top = h - 17
    for event in pygame.event.get(): # pygame.event.get() 從事件隊(duì)列中取出事件,并從隊(duì)列中刪除該事件
        if event.type == pygame.QUIT:
            sys.exit()

        # 改變窗口尺寸
        elif event.type == pygame.VIDEORESIZE:
            size = w,h = event.w,event.h
            screen = pygame.display.set_mode(size,pygame.RESIZABLE)


        # 鍵盤(pán)控制擋板
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:  # 擋板左移
                if board_rect.left > 0 and board_rect.left <= w - 186:
                    board_rect.left -= board_x
                elif board_rect.left <= 0:  # 判斷擋板左邊的坐標(biāo)是否小于0
                    board_rect.left = 0
                    board_rect.top -= board_y
            elif event.key == pygame.K_RIGHT:  # 擋板右移
                if board_rect.right >= 186 and board_rect.right < w:
                    board_rect.right += board_x
                elif board_rect.right >= w:  # 判斷擋板右邊的坐標(biāo)是否大于屏幕的寬度                        board_rect.right = w
                    board_rect.bottom += board_y

        #鼠標(biāo)控制擋板
        elif event.type == pygame.MOUSEMOTION:
            # 鼠標(biāo)左鍵按下并跟隨鼠標(biāo)移動(dòng)
            if event.buttons[0] == 1:
                if event.pos[0] >= 0 and event.pos[0] < w - 186:#判斷鼠標(biāo)的位置
                    board_rect.left = event.pos[0] #將鼠標(biāo)的x坐標(biāo)給Rect對(duì)象的左邊
                elif event.pos[0] >= w - 186 and event.pos[0] <= w:
                    board_rect.left = w - 186
                # board_rect.top = h - 17 #檔板位置在底部
        elif event.type == pygame.MOUSEBUTTONDOWN:  #鼠標(biāo)按鍵按下
            # 將鼠標(biāo)當(dāng)前位置給擋板
            if event.button == 1:
                if event.pos[0] >= 0 and event.pos[0] < w - 186:#判斷鼠標(biāo)的位置
                    board_rect.left = event.pos[0] #將鼠標(biāo)的x坐標(biāo)給Rect對(duì)象的左邊
                if event.pos[0] >= w - 186 and event.pos[0] <= w:
                    board_rect.left = w - 186
                # board_rect.top = h - 17

    # 下方擋板接到小球
    if ball_y >= h - 37 and (ball_x >= board_rect.left - 20 and ball_x <= board_rect.left + 206):
        move_y = - move_y  # y方向速度反向
        score += points
        count += 1
        if count == 5:  # 每滿五次,難度和單次接球得分增加
            count = 0  # 接球得分的次數(shù)清零
            points += points
            # x方向速度增加
            if move_x > 0:
                move_x += 1
            else:
                move_x -= 1
            move_y -= 1

    # 下方擋板未接到小球
    if ball_y > h - 27 and (ball_x < board_rect.left - 20 or ball_x > board_rect.left + 206):
        # 游戲結(jié)束
        ball_y = 200
        break

    # 移動(dòng)小球
    ball_x += move_x
    ball_y += move_y
    if ball_x <= 20 or ball_x >= w - 20:  # 碰到左右兩側(cè)墻壁
        move_x = - move_x  # x方向速度反向
    if ball_y <= 20:  # 碰到上方墻壁
        move_y = - move_y  # y方向速度反向

    fpsClock.tick(200)
    screen.fill(color)
    # 顯示分?jǐn)?shù)
    my_score = font.render(str(score), False, (255, 255, 0))  # 創(chuàng)建文字對(duì)象(文字,是否平滑,文字顏色)
    screen.blit(my_score, (w - 100, 30))  # 將文字添加到窗口上
    screen.blit(board,board_rect)  #將一個(gè)圖像繪制在另一個(gè)圖像上 把surface對(duì)象覆蓋到移動(dòng)后的rect對(duì)象
    pygame.draw.circle(screen, Green, (ball_x, ball_y), 20)  # 繪制小球
    pygame.display.update() # 對(duì)顯示窗口進(jìn)行更新,默認(rèn)窗口全部重繪

到此這篇關(guān)于python中的pygame實(shí)現(xiàn)接球小游戲的文章就介紹到這了,更多相關(guān)pygame接球游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 處理Selenium3+python3定位鼠標(biāo)懸停才顯示的元素

    處理Selenium3+python3定位鼠標(biāo)懸停才顯示的元素

    這篇文章主要介紹了Selenium3+python3--如何定位鼠標(biāo)懸停才顯示的元素 ,文中通過(guò)簡(jiǎn)單代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-07-07
  • Python pathlib模塊使用方法及實(shí)例解析

    Python pathlib模塊使用方法及實(shí)例解析

    這篇文章主要介紹了Python pathlib模塊使用方法及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python3中的循環(huán)語(yǔ)句示例詳解

    Python3中的循環(huán)語(yǔ)句示例詳解

    這篇文章主要介紹了Python3?循環(huán)語(yǔ)句,本文將詳細(xì)介紹Python3中的循環(huán)語(yǔ)句,給出各種循環(huán)的使用示例,以及運(yùn)行結(jié)果的解釋,需要的朋友可以參考下
    2023-04-04
  • 淺談python中字典append 到list 后值的改變問(wèn)題

    淺談python中字典append 到list 后值的改變問(wèn)題

    今天小編就為大家分享一篇淺談python中字典append 到list 后值的改變問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python 使用input同時(shí)輸入多個(gè)數(shù)的操作

    Python 使用input同時(shí)輸入多個(gè)數(shù)的操作

    這篇文章主要介紹了Python 使用input同時(shí)輸入多個(gè)數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 淺談Python中re.match()和re.search()的使用及區(qū)別

    淺談Python中re.match()和re.search()的使用及區(qū)別

    這篇文章主要介紹了淺談Python中re.match()和re.search()的使用及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 對(duì)Django 轉(zhuǎn)發(fā)和重定向的實(shí)例詳解

    對(duì)Django 轉(zhuǎn)發(fā)和重定向的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)Django 轉(zhuǎn)發(fā)和重定向的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 在Python中實(shí)現(xiàn)替換字符串中的子串的示例

    在Python中實(shí)現(xiàn)替換字符串中的子串的示例

    今天小編就為大家分享一篇在Python中實(shí)現(xiàn)替換字符串中的子串的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python探索之Metaclass初步了解

    Python探索之Metaclass初步了解

    本文先簡(jiǎn)單介紹了Python中的類,然后是主要內(nèi)容,涉及Metaclass的相關(guān)內(nèi)容,還是不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 深入探討Python中的RegEx模式匹配

    深入探討Python中的RegEx模式匹配

    正則表達(dá)式通??s寫(xiě)為?regex,是處理文本的有效工具,這篇文章主要來(lái)和大家深入探討一下Python中的RegEx模式匹配,感興趣的可以了解一下
    2023-07-07

最新評(píng)論

稻城县| 新平| 莲花县| 阿合奇县| 西青区| 丽水市| 聂拉木县| 濮阳市| 大同县| 宁津县| 常山县| 淄博市| 牙克石市| 上高县| 疏勒县| 广平县| 道真| 盐津县| 静乐县| 涞水县| 卢龙县| 潼南县| 巧家县| 卢湾区| 洛南县| 泰来县| 贵南县| 阿拉善左旗| 鄂伦春自治旗| 靖远县| 临沂市| 松潘县| 丰都县| 定日县| 滨州市| 琼海市| 黄大仙区| 盐亭县| 石景山区| 黔江区| 中卫市|