python實(shí)現(xiàn)超級(jí)馬里奧
本文實(shí)例為大家分享了Python寫(xiě)超級(jí)馬里奧的具體代碼,供大家參考,具體內(nèi)容如下
完整代碼和素材戳我
主代碼
import pygame as pg from source.main import main if __name__=='__main__': main() pg.quit()
main
__author__ = 'marble_xu'
import pygame as pg
from . import setup, tools
from . import constants as c
from .states import main_menu, load_screen, level
def main():
game = tools.Control()
state_dict = {c.MAIN_MENU: main_menu.Menu(),
c.LOAD_SCREEN: load_screen.LoadScreen(),
c.LEVEL: level.Level(),
c.GAME_OVER: load_screen.GameOver(),
c.TIME_OUT: load_screen.TimeOut()}
game.setup_states(state_dict, c.MAIN_MENU)
game.main()
setup
__author__ = 'marble_xu'
import os
import pygame as pg
from . import constants as c
from . import tools
pg.init()
pg.event.set_allowed([pg.KEYDOWN, pg.KEYUP, pg.QUIT])
pg.display.set_caption(c.ORIGINAL_CAPTION)
SCREEN = pg.display.set_mode(c.SCREEN_SIZE)
SCREEN_RECT = SCREEN.get_rect()
GFX = tools.load_all_gfx(os.path.join("resources","graphics"))
tools
__author__ = 'marble_xu'
import os
import pygame as pg
from abc import ABC, abstractmethod
keybinding = {
'action':pg.K_s,
'jump':pg.K_a,
'left':pg.K_LEFT,
'right':pg.K_RIGHT,
'down':pg.K_DOWN
}
class State():
def __init__(self):
self.start_time = 0.0
self.current_time = 0.0
self.done = False
self.next = None
self.persist = {}
@abstractmethod
def startup(self, current_time, persist):
'''abstract method'''
def cleanup(self):
self.done = False
return self.persist
@abstractmethod
def update(sefl, surface, keys, current_time):
'''abstract method'''
class Control():
def __init__(self):
self.screen = pg.display.get_surface()
self.done = False
self.clock = pg.time.Clock()
self.fps = 60
self.current_time = 0.0
self.keys = pg.key.get_pressed()
self.state_dict = {}
self.state_name = None
self.state = None
def setup_states(self, state_dict, start_state):
self.state_dict = state_dict
self.state_name = start_state
self.state = self.state_dict[self.state_name]
def update(self):
self.current_time = pg.time.get_ticks()
if self.state.done:
self.flip_state()
self.state.update(self.screen, self.keys, self.current_time)
def flip_state(self):
previous, self.state_name = self.state_name, self.state.next
persist = self.state.cleanup()
self.state = self.state_dict[self.state_name]
self.state.startup(self.current_time, persist)
def event_loop(self):
for event in pg.event.get():
if event.type == pg.QUIT:
self.done = True
elif event.type == pg.KEYDOWN:
self.keys = pg.key.get_pressed()
elif event.type == pg.KEYUP:
self.keys = pg.key.get_pressed()
def main(self):
while not self.done:
self.event_loop()
self.update()
pg.display.update()
self.clock.tick(self.fps)
def get_image(sheet, x, y, width, height, colorkey, scale):
image = pg.Surface([width, height])
rect = image.get_rect()
image.blit(sheet, (0, 0), (x, y, width, height))
image.set_colorkey(colorkey)
image = pg.transform.scale(image,
(int(rect.width*scale),
int(rect.height*scale)))
return image
def load_all_gfx(directory, colorkey=(255,0,255), accept=('.png', '.jpg', '.bmp', '.gif')):
graphics = {}
for pic in os.listdir(directory):
name, ext = os.path.splitext(pic)
if ext.lower() in accept:
img = pg.image.load(os.path.join(directory, pic))
if img.get_alpha():
img = img.convert_alpha()
else:
img = img.convert()
img.set_colorkey(colorkey)
graphics[name] = img
return graphics
運(yùn)行成果



好了,被忘了在GitHub里面點(diǎn)star喔。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
一文掌握Python爬蟲(chóng)XPath語(yǔ)法
這篇文章主要介紹了一文掌握Python爬蟲(chóng)XPath語(yǔ)法,xpath是一門在XML和HTML文檔中查找信息的語(yǔ)言,可用來(lái)在XML和HTML文檔中對(duì)元素和屬性進(jìn)行遍歷,XPath 通過(guò)使用路徑表達(dá)式來(lái)選取 XML 文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集。下面會(huì)更學(xué)習(xí)的介紹,需要的朋友可以參考一下2021-11-11
python中用logging實(shí)現(xiàn)日志滾動(dòng)和過(guò)期日志刪除功能
這篇文章主要介紹了python中用logging實(shí)現(xiàn)日志滾動(dòng)和過(guò)期日志刪除功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
Python中如何優(yōu)雅的合并兩個(gè)字典(dict)方法示例
字典是Python語(yǔ)言中唯一的映射類型,在我們?nèi)粘9ぷ髦薪?jīng)常會(huì)遇到,下面這篇文章主要給大家介紹了關(guān)于Python中如何優(yōu)雅的合并兩個(gè)字典(dict)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08
Python Pytorch gpu 分析環(huán)境配置
Pytorch是目前最火的深度學(xué)習(xí)框架之一,目前也支持了pytorch的GPU加速,所以我就想著,在這兩個(gè)電腦上裝個(gè)Pytorch,這篇文章主要介紹了Python Pytorch(gpu)分析環(huán)境配置,需要的朋友可以參考下2023-04-04
Python數(shù)據(jù)分析numpy的Nan和Inf使用注意點(diǎn)詳解
這篇文章主要為大家介紹了Python數(shù)據(jù)分析numpy的Nan和Inf使用注意點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Python中的?Numpy?數(shù)組形狀改變及索引切片
這篇文章主要介紹了Python中的?Numpy?數(shù)組形狀改變及索引切片,Numpy提供了一個(gè)reshape()方法,它可以改變數(shù)組的形狀,返回一個(gè)新的數(shù)組,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章2022-05-05

