国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python小游戲——推箱子代碼開源

這篇具有很好參考價值的文章主要介紹了python小游戲——推箱子代碼開源。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??作者:小劉在這里

??每天分享云計算網絡運維課堂筆記,努力不一定有回報,但一定會有收獲加油!一起努力,共赴美好人生!

??夕陽下,是最美的,綻放,愿所有的美好,再疫情結束后如約而至。

目錄

一.效果呈現

?二.主代碼

三.cfg

四.README


一.效果呈現

python因為游戲界面面積>游戲窗口界面, 所以需要根據人物位置滾動,,PYTHON小游戲,python,python,pygame,開發(fā)語言

?二.主代碼

'''
Function:
    推箱子小游戲
 
'''
import os
import sys
import cfg
import pygame
from modules import *
from itertools import chain


'''游戲地圖'''
class gameMap():
    def __init__(self, num_cols, num_rows):
        self.walls = []
        self.boxes = []
        self.targets = []
        self.num_cols = num_cols
        self.num_rows = num_rows
    '''增加游戲元素'''
    def addElement(self, elem_type, col, row):
        if elem_type == 'wall':
            self.walls.append(elementSprite('wall.png', col, row, cfg))
        elif elem_type == 'box':
            self.boxes.append(elementSprite('box.png', col, row, cfg))
        elif elem_type == 'target':
            self.targets.append(elementSprite('target.png', col, row, cfg))
    '''畫游戲地圖'''
    def draw(self, screen):
        for elem in self.elemsIter():
            elem.draw(screen)
    '''游戲元素迭代器'''
    def elemsIter(self):
        for elem in chain(self.targets, self.walls, self.boxes):
            yield elem
    '''該關卡中所有的箱子是否都在指定位置, 在的話就是通關了'''
    def levelCompleted(self):
        for box in self.boxes:
            is_match = False
            for target in self.targets:
                if box.col == target.col and box.row == target.row:
                    is_match = True
                    break
            if not is_match:
                return False
        return True
    '''某位置是否可到達'''
    def isValidPos(self, col, row):
        if col >= 0 and row >= 0 and col < self.num_cols and row < self.num_rows:
            block_size = cfg.BLOCKSIZE
            temp1 = self.walls + self.boxes
            temp2 = pygame.Rect(col * block_size, row * block_size, block_size, block_size)
            return temp2.collidelist(temp1) == -1
        else:
            return False
    '''獲得某位置的box'''
    def getBox(self, col, row):
        for box in self.boxes:
            if box.col == col and box.row == row:
                return box
        return None


'''游戲界面'''
class gameInterface():
    def __init__(self, screen):
        self.screen = screen
        self.levels_path = cfg.LEVELDIR
        self.initGame()
    '''導入關卡地圖'''
    def loadLevel(self, game_level):
        with open(os.path.join(self.levels_path, game_level), 'r') as f:
            lines = f.readlines()
        # 游戲地圖
        self.game_map = gameMap(max([len(line) for line in lines]) - 1, len(lines))
        # 游戲surface
        height = cfg.BLOCKSIZE * self.game_map.num_rows
        width = cfg.BLOCKSIZE * self.game_map.num_cols
        self.game_surface = pygame.Surface((width, height))
        self.game_surface.fill(cfg.BACKGROUNDCOLOR)
        self.game_surface_blank = self.game_surface.copy()
        for row, elems in enumerate(lines):
            for col, elem in enumerate(elems):
                if elem == 'p':
                    self.player = pusherSprite(col, row, cfg)
                elif elem == '*':
                    self.game_map.addElement('wall', col, row)
                elif elem == '#':
                    self.game_map.addElement('box', col, row)
                elif elem == 'o':
                    self.game_map.addElement('target', col, row)
    '''游戲初始化'''
    def initGame(self):
        self.scroll_x = 0
        self.scroll_y = 0
    '''將游戲界面畫出來'''
    def draw(self, *elems):
        self.scroll()
        self.game_surface.blit(self.game_surface_blank, dest=(0, 0))
        for elem in elems:
            elem.draw(self.game_surface)
        self.screen.blit(self.game_surface, dest=(self.scroll_x, self.scroll_y))
    '''因為游戲界面面積>游戲窗口界面, 所以需要根據人物位置滾動'''
    def scroll(self):
        x, y = self.player.rect.center
        width = self.game_surface.get_rect().w
        height = self.game_surface.get_rect().h
        if (x + cfg.SCREENSIZE[0] // 2) > cfg.SCREENSIZE[0]:
            if -1 * self.scroll_x + cfg.SCREENSIZE[0] < width:
                self.scroll_x -= 2
        elif (x + cfg.SCREENSIZE[0] // 2) > 0:
            if self.scroll_x < 0:
                self.scroll_x += 2
        if (y + cfg.SCREENSIZE[1] // 2) > cfg.SCREENSIZE[1]:
            if -1 * self.scroll_y + cfg.SCREENSIZE[1] < height:
                self.scroll_y -= 2
        elif (y + 250) > 0:
            if self.scroll_y < 0:
                self.scroll_y += 2


'''某一關卡的游戲主循環(huán)'''
def runGame(screen, game_level):
    clock = pygame.time.Clock()
    game_interface = gameInterface(screen)
    game_interface.loadLevel(game_level)
    font_path = os.path.join(cfg.FONTDIR, 'simkai.ttf')
    text = '按R鍵重新開始本關'
    font = pygame.font.Font(font_path, 15)
    text_render = font.render(text, 1, (255, 255, 255))
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit(0)
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    next_pos = game_interface.player.move('left', is_test=True)
                    if game_interface.game_map.isValidPos(*next_pos):
                        game_interface.player.move('left')
                    else:
                        box = game_interface.game_map.getBox(*next_pos)
                        if box:
                            next_pos = box.move('left', is_test=True)
                            if game_interface.game_map.isValidPos(*next_pos):
                                game_interface.player.move('left')
                                box.move('left')
                    break
                if event.key == pygame.K_RIGHT:
                    next_pos = game_interface.player.move('right', is_test=True)
                    if game_interface.game_map.isValidPos(*next_pos):
                        game_interface.player.move('right')
                    else:
                        box = game_interface.game_map.getBox(*next_pos)
                        if box:
                            next_pos = box.move('right', is_test=True)
                            if game_interface.game_map.isValidPos(*next_pos):
                                game_interface.player.move('right')
                                box.move('right')
                    break
                if event.key == pygame.K_DOWN:
                    next_pos = game_interface.player.move('down', is_test=True)
                    if game_interface.game_map.isValidPos(*next_pos):
                        game_interface.player.move('down')
                    else:
                        box = game_interface.game_map.getBox(*next_pos)
                        if box:
                            next_pos = box.move('down', is_test=True)
                            if game_interface.game_map.isValidPos(*next_pos):
                                game_interface.player.move('down')
                                box.move('down')
                    break
                if event.key == pygame.K_UP:
                    next_pos = game_interface.player.move('up', is_test=True)
                    if game_interface.game_map.isValidPos(*next_pos):
                        game_interface.player.move('up')
                    else:
                        box = game_interface.game_map.getBox(*next_pos)
                        if box:
                            next_pos = box.move('up', is_test=True)
                            if game_interface.game_map.isValidPos(*next_pos):
                                game_interface.player.move('up')
                                box.move('up')
                    break
                if event.key == pygame.K_r:
                    game_interface.initGame()
                    game_interface.loadLevel(game_level)
        game_interface.draw(game_interface.player, game_interface.game_map)
        if game_interface.game_map.levelCompleted():
            return
        screen.blit(text_render, (5, 5))
        pygame.display.flip()
        clock.tick(100)


'''主函數'''
def main():
    pygame.init()
    pygame.mixer.init()
    pygame.display.set_caption('推箱子 —— 源碼基地:#959755565#')
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.mixer.init()
    audio_path = os.path.join(cfg.AUDIODIR, 'EineLiebe.mp3')
    pygame.mixer.music.load(audio_path)
    pygame.mixer.music.set_volume(0.4)
    pygame.mixer.music.play(-1)
    startInterface(screen, cfg)
    for level_name in sorted(os.listdir(cfg.LEVELDIR)):
        runGame(screen, level_name)
        switchInterface(screen, cfg)
    endInterface(screen, cfg)


'''run'''
if __name__ == '__main__':
    main()

三.cfg

'''配置文件'''
import os


'''屏幕大小'''
SCREENSIZE = (500, 500)
'''block大小'''
BLOCKSIZE = 50
'''levels所在文件夾'''
LEVELDIR = os.path.join(os.getcwd(), 'resources/levels')
'''圖片所在文件夾'''
IMAGESDIR = os.path.join(os.getcwd(), 'resources/images')
'''字體所在文件夾'''
FONTDIR = os.path.join(os.getcwd(), 'resources/font')
'''音頻所在文件夾'''
AUDIODIR = os.path.join(os.getcwd(), 'resources/audios')
'''背景顏色'''
BACKGROUNDCOLOR = (45, 45, 45)

四.README

# Introduction
https://mp.weixin.qq.com/s/y6CZd4h3uo7602LrI7aFdQ

# Environment
```
OS: Windows10
Python: Python3.5+(have installed necessary dependencies)
```

# Usage
```
Step1:
pip install -r requirements.txt
Step2:
run "python Game12.py"
```

# Game Display
![giphy](demonstration/running.gif)文章來源地址http://www.zghlxwxcb.cn/news/detail-782867.html

到了這里,關于python小游戲——推箱子代碼開源的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • c++推箱子小游戲

    上代碼: 由于寫游戲時間較長,更新較慢,請大佬們理解一下

    2024年02月09日
    瀏覽(22)
  • java版本實現推箱子小游戲

    推方塊 游戲簡介: 由 ↑,↓,←,→鍵來控制方向,點擊空格鍵表示重玩當前關卡。 核心代碼部分 :就是如何處理人的移動和人和箱子一起時的移動,這里需要對人要走的下一步和人推著箱子一起走的下一步進行判斷分析,如果沒有被阻擋就可以繼續(xù)走下一步。(有興趣

    2024年02月11日
    瀏覽(34)
  • C/C++項目實戰(zhàn)-推箱子小游戲
  • 【HTML小游戲】推箱子網頁版(附完整源碼)

    【HTML小游戲】推箱子網頁版(附完整源碼)

    最近剛剛更新完了HTML,CSS的萬字總結 ,有很多人已經學習完了文章,感覺反饋還不錯,今天,用HTML,CSS,JS的知識編寫了一個童年經典游戲 - 推箱子,供學習參考。 游戲主界面展示: 游戲界面展示: 經典的推箱子是一個非常古老游戲,甚至是80,90年代的回憶,目的是在訓

    2024年02月04日
    瀏覽(31)
  • 使用Python語言寫一個推箱子游戲

    本游戲旨在提供一個趣味性的益智游戲,玩家需要通過推動箱子到指定位置來過關。 玩家需要推動一個或多個箱子到指定位置,才能過關。 箱子只能向前推,不能拉回來。 箱子不允許被推到障礙物、墻壁或其他箱子上。 玩家可以通過 UNDO 按鈕來撤回上一步操作,最多可以撤

    2024年02月05日
    瀏覽(17)
  • 簡單的推箱子游戲實戰(zhàn)

    簡單的推箱子游戲實戰(zhàn)

    目錄 項目分析 ?地圖初始化 背景圖片 游戲場景圖片: 熱鍵控制 ?按鍵設置 確定人物位置 實現人物移動(非箱子,目的地) 推箱子控制 游戲結束 最終代碼 合法性判斷: 墻:0,地板:1,箱子目的地:2,小人:3,箱子:4,箱子命中目標:5 但是一直執(zhí)行循環(huán)塊很占用CPU ,消耗很大很嚴重資源(使用

    2024年01月22日
    瀏覽(24)
  • Unity游戲源碼分享-3d機器人推箱子游戲

    Unity游戲源碼分享-3d機器人推箱子游戲

    Unity游戲源碼分享-3d機器人推箱子游戲 一個非常意思的3D游戲 ? ?工程地址:https://download.csdn.net/download/Highning0007/88098014

    2024年02月15日
    瀏覽(26)
  • 怎樣使用Pyglet庫給推箱子游戲畫關卡地圖

    怎樣使用Pyglet庫給推箱子游戲畫關卡地圖

    目錄 pyglet庫 畫圖事件 按鍵事件 程序擴展 關卡地圖 是一個跨平臺的Python多媒體庫,提供了一個簡單易用的接口來創(chuàng)建窗口、加載圖像和視頻、播放音頻、處理用戶輸入事件以及進行2D圖形繪制。特別適合用于游戲開發(fā)、視聽應用以及其它需要高效圖形渲染和音頻播放的項目

    2024年02月22日
    瀏覽(19)
  • 畢業(yè)設計 單片機推箱子游戲(AT89C51)

    畢業(yè)設計 單片機推箱子游戲(AT89C51)

    一、電路設計 此電路由AT89C51最小系統(tǒng)、LCD12864顯示模塊、74LS08芯片和四個獨立按鍵組成。 LCD12864顯示模塊 帶中文字庫的128X64 是一種具有4 位/8 位并行、2 線或3 線串行多種接口方式,內部含有國標一級、二級簡體 中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內置

    2024年02月21日
    瀏覽(95)
  • 【c語言】推箱子

    【c語言】推箱子

    所需知識:c語言枚舉,數組,for循環(huán),while循環(huán),switch,case語句,圖形庫相關函數 將printmap()在main中調用 為了讓程序不會輸入字符后退出,加上while循環(huán) 為了保證游戲的美觀性,我們將對應的數字轉化為好看的圖案 使用兩層循環(huán)遍歷二維數組,在使用switch已經將對應的數字用

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包