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与js)两种实现
Feb 21 Python
最基础的Python的socket编程入门教程
Apr 23 Python
python机器学习库常用汇总
Nov 15 Python
python使用pycharm环境调用opencv库
Feb 11 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
python实现静态web服务器
Sep 03 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 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
dedecms模版制作使用方法
2007/04/03 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
探讨如何把session存入数据库
2013/06/07 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
python学习教程之使用py2exe打包
2017/09/24 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Python库安装速度过慢解决方案
2020/07/14 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
食品委托检验协议书范本
2014/09/12 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
给下属加薪申请报告
2015/05/15 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
Apache POI的基本使用详解
2021/11/07 Servers
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技