python实现超级马里奥


Posted in Python onMarch 18, 2020

本文实例为大家分享了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

运行成果

python实现超级马里奥

python实现超级马里奥

python实现超级马里奥

好了,被忘了在GitHub里面点star喔。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用于检查英文字母大写的isupper()方法
May 19 Python
在Python中用get()方法获取字典键值的教程
May 21 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
pycharm设置注释颜色的方法
May 23 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
python 中如何获取列表的索引
Jul 02 Python
Python箱型图处理离群点的例子
Dec 09 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 #Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 #Python
Python Selenium安装及环境配置的实现
Mar 17 #Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 #Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 #Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 #Python
利用python在excel中画图的实现方法
Mar 17 #Python
You might like
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
Python内置数据类型详解
2014/08/18 Python
常用python编程模板汇总
2016/02/12 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Python 如何在字符串中插入变量
2020/08/01 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
幼儿园见习报告范文
2014/10/30 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL