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中的装饰器的用法
Apr 24 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
python实现旋转和水平翻转的方法
Oct 25 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
一行Python代码过滤标点符号等特殊字符
Aug 12 Python
在django模板中实现超链接配置
Aug 21 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
python如何对链表操作
2020/10/10 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
自荐信如何制作?
2014/02/21 职场文书
军训拉歌口号
2014/06/13 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
学校教学工作总结2015
2015/05/19 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python