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 修改文件指定行的方法
May 15 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
Pycharm远程调试openstack的方法
Nov 21 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
Python中安装easy_install的方法
Nov 18 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
python pygame实现球球大作战
Nov 25 Python
python函数不定长参数使用方法解析
Dec 14 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
python实现程序重启和系统重启方式
Apr 16 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
PHP微信支付实例解析
2016/07/22 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
JavaScript实现禁止后退的方法
2006/12/27 Javascript
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
python paramiko实现ssh远程访问的方法
2013/12/03 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
python中数字是否为可变类型
2020/07/08 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
大学英语专业求职信
2014/06/21 职场文书
品牌转让协议书
2014/08/20 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
网聊搭讪开场白
2015/05/28 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers