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可跨平台实现获取按键的方法
Mar 05 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
python调用其他文件函数或类的示例
Jul 16 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
Python logging模块写入中文出现乱码
May 21 Python
Python OpenCV实现图像模板匹配详解
Apr 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
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
Javascript 对象的解释
2008/11/24 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
Python进阶篇之字典操作总结
2016/11/16 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
3个CCIE对一个工程师的面试题
2012/05/06 面试题
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
单位委托书格式范本
2014/09/29 职场文书
离婚协议书范本
2015/01/26 职场文书
司机岗位职责
2015/02/04 职场文书
导游词之西安骊山
2019/12/20 职场文书