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制作爬虫并将抓取结果保存到excel中
Apr 06 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
Python使用struct处理二进制的实例详解
Sep 11 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
python使用插值法画出平滑曲线
Dec 15 Python
python爬取指定微信公众号文章
Dec 20 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
Mar 09 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 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
PHP高级编程实例:编写守护进程
2014/09/02 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
Javascript浅谈之this
2013/12/17 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
js实现随机8位验证码
2020/07/24 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python模块之time模块(实例讲解)
2017/09/13 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
StringBuilder和String的区别
2015/05/18 面试题
如何进行有效的自我评价
2013/09/27 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
大型会议策划方案
2014/05/17 职场文书
机械机修工岗位职责
2014/08/03 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
python 实现定时任务的四种方式
2021/04/01 Python