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二维码生成库qrcode安装和使用示例
Dec 16 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
Python程序中的观察者模式结构编写示例
May 27 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 Python
Python自然语言处理之切分算法详解
Apr 25 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
自己做矿石收音机
2021/03/02 无线电
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
理解Koa2中的async&await的用法
2018/02/05 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
Vue实现简易计算器
2020/02/25 Javascript
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python自动发送邮件脚本
2018/06/20 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
如何通过python检查文件是否被占用
2020/12/18 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
《老山界》教学反思
2014/04/08 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
Python中相见恨晚的技巧
2021/04/13 Python