python做马里奥_python实现超级马里奥
本文实例为大家分享了Python写超级马里奥的具体代码,供大家参考,具体内容如下
完整代码和素材戳我
主代码
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
运行成果
好了,被忘了在GitHub里面点star喔。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。
python做马里奥_python实现超级马里奥相关推荐
- 用python做加法_Python不用加减乘除做加法
将两个数的加法看作两步,第一步是两个数相加但是不进位,第二步是记录之前的两数相加应该进位的地方加上前一个相加但是不进位的数.对于具体的两个不小于0的数m和n,第一步可以看做m和n的异或运算m^n,第二 ...
- python做壁纸_Python爬取壁纸
不想一张张看壁纸怎么办,不想一张张下载怎么办,来让我们用python解决一切,爬取一网站所有壁纸. 1.准备前期运行环境 ·python运行环境,安装request模块 (这个问题需要自己去解决) 2 ...
- python做并行计算_python做并行计算可以吗
python可以做并行计算,下面是相关介绍: 一.概览 Parallel Python是一个python模块,提供在SMP(具有多个处理器或多核的系统)和集群(通过网络连接的计算机)上并行执行pyth ...
- python做词典_Python实现创建字典
Python编写一个名为 make_album() 的函数,它创建一个描述音乐专辑的字典. 1.这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典.使用这个函数创建三个表示不同专辑的字典 ...
- python做算法分析_Python实现迪杰斯特拉算法过程解析
一. 迪杰斯特拉算法思想 dijkstra算法主要针对的是有向图的单元最短路径问题,且不能出现权值为负的情况!dijkstra算法类似于贪心算法,其应用根本在于最短路径的最优子结构性质. 最短路径的最 ...
- 如何用python做界面_Python+AutoIt实现界面工具开发
原标题:Python+AutoIt实现界面工具开发 前言 不同于Linux服务器上的命令行操作,在windows系统上用户的使用习惯还是倾向于使用有界面的工具.如果工具是命令行交互操作的方式,可能是有 ...
- 用python做课表_python模拟登陆urp教务处选课抓取课表
!!!选课功能已添加!!! 本文地址 csdn 前段时间小编写了一篇利用爬虫做词云分析的帖子,有粉丝反馈说想进一步学习爬虫,所以小编今天就用爬虫模拟登陆学校的教务处为例和大家共同学习.坊间有传言说好多 ...
- python做菜单_python实现三级菜单
#要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 #!/usr/bin/python #_*_coding:utf-8_*_ map_menu = { '河北省':{ '石家庄市':[' ...
- 用python做模型_Python实现Kuramoto模型的思想前提
不小小看它,以下的思想告诉我们,所有的微分方程组都可画出(这里只展示一个函数思想) 遍历思想: import numpy as np import matplotlib.pylab as plt #将 ...
最新文章
- php 一秒操作一次_php守护进程 加linux命令nohup实现任务每秒执行一次
- itchat微信调用图灵机器人API
- 【C++】 C++标准模板库(九) Bitsets
- git使用--提交代码
- 【SQL Server 2017】18456错误/管道的另一端无任何进程错误 解决方法
- 用户体验设计案例分析
- SAP Fiori Elements 本地项目的 annotations.xml 文件
- oc 实例变量可见度、方法
- csv python 只写一次_在Python CSV Writer循环中写入一次头
- 怎么建立计算机共享文件夹,如何在局域网内建立共享文件夹
- python父亲节符号_菲菲用python编程绘制的父亲节礼物
- 复练-软考网规-IDS和IPS概念、分类、评价标准
- io vivado 怎么查看ps_vivado学习之PS与PL通信
- Android ProgressBar示例
- 支付1000元咨询费,如何让PB编写的程序不能被反编译?
- ADSL接入路由,电脑共享上网
- SPEI干旱指数和ETo潜在蒸散量计算在python上的实现
- 自动化测试的7个步骤
- Python之“诗词大会”游戏
- 编译udf小软件(附视频教程)
热门文章
- SVN客户端不显示绿色标识
- grails 环境找不到java_home
- MapReduce: Simplified Data Processing on Large ...
- Asp.NET 获取网站根目录
- Android 数字签名学习笔记
- 节约能源,做个合格的环保主义者,不要做网络灾民
- MATLAB和Python读取wave文件的波形对比
- (How to) Call somatic mutations using GATK4 Mutect2
- VS2010运行类向导提示“未实现该方法或操作”
- 突然想写一篇有关欧拉函数的博客