python做游戏怎么实现窗口_python和py游戏窗口类

你在draw_sprite()中有事件循环,所以它一直运行到游戏结束,window.set_background永远不会执行。在

您的代码构造不正确。在

我试着更正它,稍后再发送代码。在

编辑:

如何组织代码的简单示例。在

现在它在一个文件中。在Pygame中总是一个窗口,所以不需要使Panel+Widnow。在run()中有一个事件循环。所有代码都在窗口内(创建精灵,更改背景,绘图等)。在

我将精灵添加到(python)列表并从列表中绘制所有精灵-player is exception-所以我只能从列表中移除最后一个精灵:/If您需要更好的东西,请参见pygame.sprite.Sprite()和pygame.sprite.Group()。在

使用Arrows移动红球,Space暂停游戏,ESC退出。在

最后我附上了我的位图。在import pygame

#from pygame.locals import *

#

# class for single sprite

#

class MySprite():

def __init__(self, image, x, y):

self.image = pygame.image.load(image)

image_rect = self.image.get_rect()

# Rect class to use "Sprite collision detect" - in the future

# In rect you have sprite position and size

# You can use self.rect.x, self.rect.y, self.rect.width, self.rect.height

# and self.rect.center, self.rect.centerx, self.rect.top, self.rect.bottomright etc.

self.rect = pygame.rect.Rect(x, y, image_rect.width, image_rect.height)

def draw(self, screen):

screen.blit(self.image, self.rect)

#

# class for player

#

class MyPlayer(MySprite):

def __init__(self, image, x, y):

# parent constructor always as a first in __init__

MySprite.__init__(self, image, x, y)

self.speed_x = self.speed_y = 0

# -

def set_speed(self, x, y):

self.speed_x = x

self.speed_y = y

# -

def update(self):

self.rect.x += self.speed_x

self.rect.y += self.speed_y

if self.rect.centerx < 0 :

self.rect.centerx = 800

elif self.rect.centerx > 800 :

self.rect.centerx = 0

if self.rect.centery < 0 :

self.rect.centery = 600

elif self.rect.centery > 600 :

self.rect.centery = 0

#

class Window():

def __init__(self, width, height):

#

self.rect = pygame.Rect(0, 0, width, height)

# or

self.width, self.height = width, height

#

pygame.init()

# most users and tutorials call it "screen"

self.screen = pygame.display.set_mode(self.rect.size)

#############################################################

self.foreground = None

self.background = None

self.set_background("background.jpg")

self.set_foreground("ball3.png")

#################################################

self.player = MyPlayer("ball1.png", 100, 200)

self.sprites_list = []

self.add_sprite(MySprite("ball2.png", 100, 400))

self.add_sprite(MySprite("ball2.png", 300, 500))

self.add_sprite(MySprite("ball2.png", 300, 200))

self.remove_last_sprite()

# -

# red text "PAUSE"

font = pygame.font.SysFont("", 72)

self.text_pause = font.render("PAUSE", True, (255, 0, 0))

# center text on screen

screen_center = self.screen.get_rect().center

self.text_pause_rect = self.text_pause.get_rect(center=screen_center)

#

def add_sprite(self, sprite):

self.sprites_list.append(sprite)

#

def remove_last_sprite(self):

if self.sprites_list:

del self.sprites_list[-1]

#

def draw_sprites(self, screen):

for sprite in self.sprites_list:

sprite.draw(screen)

#

def draw_background(self, screen):

screen.fill((0,64,0)) # clear screen to green

if self.background:

screen.blit(self.background, (0,0))

#

def draw_foreground(self, screen):

if self.foreground:

screen.blit(self.foreground, (0,0))

#

def draw_world(self, image):

temp = pygame.Surface(self.rect.size, pygame.SRCALPHA, 32).convert_alpha()

image_rect = image.get_rect()

for x in range(0, self.rect.width, 60):

for y in range(0,self.rect.width, 60):

temp.blit(image,(x,y))

return temp

#

def set_foreground(self, image=None):

if image:

img = pygame.image.load(image)

self.foreground = self.draw_world(img)

#

def set_background(self, image=None):

if image:

self.background = pygame.image.load(image)

#

def run(self):

clock = pygame.time.Clock()

RUNNING = True

PAUSED = False

while RUNNING:

# - events -

for event in pygame.event.get():

if event.type == pygame.QUIT:

RUNNING = False

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_ESCAPE:

RUNNING = False

elif event.key == pygame.K_SPACE:

PAUSED = not PAUSED

if event.key == pygame.K_UP:

self.player.set_speed(0,-10)

elif event.key == pygame.K_DOWN:

self.player.set_speed(0,10)

elif event.key == pygame.K_LEFT:

self.player.set_speed(-10,0)

elif event.key == pygame.K_RIGHT:

self.player.set_speed(10,0)

if event.type == pygame.KEYUP:

if event.key in (pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT):

self.player.set_speed(0,0)

# - changes

if not PAUSED:

# change elements position

self.player.update()

# - draws -

self.draw_background(self.screen)

self.draw_foreground(self.screen)

self.draw_sprites(self.screen)

self.player.draw(self.screen)

if PAUSED:

# draw pause string

self.screen.blit(self.text_pause, self.text_pause_rect.topleft)

pygame.display.update()

# - FPS -

clock.tick(25) # 25 Frames Per Seconds

# - finish -

pygame.quit()

#

Window(800,600).run()

球1.png

eS09b.png

ball2.png

drMXl.png

球3.png

VB0KR.png

在背景.jpg

TiPS6.jpg

截图

HWxly.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python十种日期格式_Python中最常用的日期时间格式

在日常开发的时候&#xff0c;我们经常会遇到时间处理的问题&#xff0c;代码示例爬虫过来的时间处理&#xff0c;代码示例对库内的数据进行时间维度的统计等。虽然是个很简单的东西&#xff0c;但每次用的时候都难免要再查一查&#xff0c;其实这就是基础不夯实的表现。趁着今…

精通QTP-自动化测试技术领航

精通QTP-自动化测试技术领航

如何使得账户密码永不过期

如何使得账户密码永不过期 原文:如何使得账户密码永不过期可以通过以下vbs脚本做的使得账户密码永不过期 dim users获取所有用户set users getobject("winmgmts:{impersonationlevelimpersonate}").instancesof("win32_useraccount")for each user in use…

python随机数比大小_1到范围内的随机数系统最大大小总是1模2^10

我试图通过使用频率测试、运行测试和卡平方检验来找到Python(2.7.10)中可用的prng的统计特性。在为了进行频率测试&#xff0c;我需要将生成的随机数转换为其二进制表示形式&#xff0c;然后计算1和{}的分布。我在python控制台上试验随机数的二进制表示&#xff0c;并观察到这种…

全国计算机等级考试题库二级C操作题100套(第11套)

第11套&#xff1a; 给定程序中&#xff0c;函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后&#xff0c;从头至尾结点数据域依次为: 10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正…

实现 IE6 支持 position fixed 的 CSS 属性

众所周知 IE6 不支持 position:fixed &#xff0c;这个 bug 与 IE6 的双倍 margin 和不支持 png 透明等 bug 一样臭名昭著。 如何让 position:fixed 在 IE6 中工作的&#xff1f; 本文所使用的技巧是用了一条 Internet Explorer 的 CSS 表达式 (expression) 。你不可以直接使用…

测试百解

1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库里面进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根据需求说明书、产品说明、设计文…

python中re.split_Python: str.split()和re.split()的区别

str.split() 单一分隔符&#xff0c;使用str.split()即可 str.split不支持正则及多个切割符号&#xff0c;不感知空格的数量 re.split() 多个分隔符&#xff0c;复杂的分隔情况&#xff0c;使用re.split 原型&#xff1a; re.split(pattern, string, maxsplit0) 通过正则表达式…

怎么下载并安装python_怎么下载官网python并安装

怎么下载官网python并安装&#xff1f;百度搜索Python官网。看到上图显示官网的没&#xff0c;点击进入。把鼠标移到downloads上&#xff0c;然后看到下拉选项&#xff0c;点击Windows。然后看到如下界面。这么多的安装包&#xff0c;该选那个呢。下图画圈的是版本号&#xff0…

全国计算机等级考试题库二级C操作题100套(第12套)

第12套&#xff1a; 给定程序中&#xff0c;函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10&#xff0c;逆置后&#xff0c;从头至尾结点数据域依次为&#xff1a;10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划…

匿名函数python_基于python内置函数与匿名函数详解

内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() pow() super()…

ASP.NET AJAX(服务器回调)

如果只用纯粹的 js &#xff0c;你必须弥补 ASP.NET 服务器端抽象和有限的 HTML DOM 之间的鸿沟&#xff0c;这不简单&#xff0c;没有 VS 的智能提示和调试工具&#xff0c;编写无错的代码和诊断错误都非常困难。由于各种突发事件及实现的差异&#xff0c;编写能够在所有现代浏…

一行代码开启 Winform 中的 ListView 和 DataGridView 双缓冲功能

ListView 中的 DoubleBuffered 属性是 protected 的&#xff0c;外部不能直接修改&#xff0c;但实际使用中&#xff0c;我们一般都需要开启双缓冲来避免控件闪烁。 网上很多人都是通过自定义 ListView 来实现的&#xff0c;虽然也不复杂&#xff0c;但其实用反射是更简单的办法…

全国计算机等级考试题库二级C操作题100套(第13套)

第13套&#xff1a; 给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为&#xff1a;10、4、2、8、6&#xff0c;排序 后链表结点数据域从头至尾的数据为&#xff1a;2、4、6、8、10。 请在程序的下划线处填…

git版本回退命令_Git学习版本回退和管理文件的修改及删除操作

版本回退前面我们成功的提交了一次mygit.txt&#xff0c;下面咱对它进行修改&#xff0c;内容如下&#xff1a;Hello GitGit is so easy.然后用git status来跟踪该文件的状态&#xff1a;可以看到hellogit.txt已经被修改过了&#xff0c;到底这次修改的内容与上次的内容有什么不…

如此理解面向对象编程

从Rob Pike 的 Google上的一个推看到了一篇叫《Understanding Object Oriented Programming》的文章&#xff0c;我先把这篇文章简述一下&#xff0c;然后再说说老牌黑客Rob Pike的评论。 先看这篇教程是怎么来讲述OOP的。它先给了下面这个问题&#xff0c;这个问题需要输出一段…

node 版本升级_Node-RED: 自动化事件触发工具的安装与介绍

Node-RED 介绍Node-RED 是一种基于流程的编程工具由 IBM 的新兴技术服务团队原创开发Node-RED 是一种事件触发工具&#xff0c;和 StackStorm 类似, 可以归类为上层的自动化工具&#xff0c;可以用来触发与之相对应的下层自动化工具&#xff0c;比如 ansible&#xff0c;来更加…

用Python写网络爬虫pdf

下载地址&#xff1a;网盘下载 作为一种便捷地收集网上信息并从中抽取出可用信息的方式&#xff0c;网络爬虫技术变得越来越有用。使用Python这样的简单编程语言&#xff0c;你可以使用少量编程技能就可以爬取复杂的网站。 《用Python写网络爬虫》作为使用Python来爬取网络数据…

python处理mysql数据结构_python环境下使用mysql数据及数据结构和二叉树算法(图)...

python环境下使用mysql数据及数据结构和二叉树算法(图)&#xff1a;1 python环境下使用mysql2使用的是 pymysql库3 开始-->创建connection-->获取cursor-->操作-->关闭cursor->关闭connection->结束45 代码框架6 import pymysql.cursors7 ###连接数据库8 con…

全国计算机等级考试题库二级C操作题100套(第14套)

第14套&#xff1a; 给定程序中, 函数fun的功能是用函数指针指向要调用的函数,并进行调用。 规定在__2__处使f指向函数f1&#xff0c;在__3__处使f指向函数f2。当调用正确时&#xff0c;程序输出: x15.000000, x23.000000, x1x1x1x240.000000 请在程序的下划线处填入正确的内容…