前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【闲来无事,py写game】用pygame写一个冒泡排序的实体图

【闲来无事,py写game】用pygame写一个冒泡排序的实体图

作者头像
用户1687088
发布2018-05-07 17:06:17
9090
发布2018-05-07 17:06:17
举报

正文之前

不好意思忘了配图了!!时间太紧迫了,图书馆就要关门了!!

正文

代码语言:javascript
复制
import pygame,sys
import time
from pygame.locals import *
white=255,255,255
blue = 1,1,200
pygame.init()
screen = pygame.display.set_mode((600,600))
width=0
pygame.display.set_caption("冒泡排序")
a=[550,500,450,400,350,300,250,200,100,50]
def swap(t1, t2):
    return t2, t1
for x in range(0,10):
    width+=3
    for s in range(0,9-x):
        if a[s]>a[s+1]:
            a[s],a[s+1]=swap(a[s],a[s+1])
        time.sleep(0.5)
        for i in range(1,10):
            pygame.draw.line(screen,white,(50*(i+1),10),(50*(i+1),a[i]/2),width)
        for event in pygame.event.get():
            if event.type in (QUIT,KEYDOWN):
                sys.exit()
        pygame.display.flip()

求教大神啊!!我有个问题。那就是上一次draw的图像没法刷新掉,所以以前的图像总是会覆盖掉现在的图像。所以最后就显得很乱!!而且到了最后所有的屏幕充满了我的柱状图!!!

我一直以为是算法错了!还想着传值错误??!!或者是因为我太久没玩python忘了啥特性??结果都不是!!狗日的pygame坑死我!! display这个函数我知道为了节约性能会保留原来渲染出来的!!但是你也别这么坑我 啊!!八点写好,现在都快被赶出图书馆了!!

正文之后

求大神指导!!! 度娘没找到!!暂时还没想到法子!!update换成flip都没用!!

感谢老通帮忙!!!终于整出来了。利用局部作用域不停刷新画面。。虽然开销大的吓人。但是好歹实现了A! !!!

代码语言:javascript
复制
import pygame,sys
import time
from pygame.locals import *
white=255,255,255
blue = 1,1,200
pygame.init()
width = 25
pygame.display.set_caption("bubble sorting")
a = [550,500,450,400,350,300,250,200,100,50]
def swap(t1, t2):
    return t2, t1
for x in range(0,10):
    for s in range(0,9-x):
        if a[s]>a[s+1]:
            a[s],a[s+1]=swap(a[s],a[s+1])
        time.sleep(0.3)
        # pygame.display.get_init()
        screen = pygame.display.set_mode((600,600))
        for i in range(0,10):
                pygame.draw.line(screen,white,(50*(i+1),10),(50*(i+1),a[i]),width)
                pygame.display.flip()

最新版本的代码。目前在无法利用pygame刷新屏幕的前提下,无法继续改进了。希望大神可以给我提供给点方向!!!怎么才能才能直接刷新画面而不需要一直刷新屏幕呢?

代码语言:javascript
复制
import pygame,sys
import time
from pygame.locals import *
white=255,255,255
blue = 1,1,200
pygame.init()

width = 25
pygame.display.set_caption("bubble sorting")
a = [550,500,450,400,350,300,250,200,100,50]
def swap(t1, t2):
    return t2, t1
for x in range(0,10):
    for s in range(0,9-x):
        if a[s]>a[s+1]:
            a[s],a[s+1]=swap(a[s],a[s+1])
        time.sleep(0.3)
        # pygame.display.get_init()
        screen = pygame.display.set_mode((600,600))
        for i in range(0,10):
                pygame.draw.line(screen,white,(50*(i+1),10),(50*(i+1),a[i]),width)
                pygame.display.flip()

最后再在最外层补上一段代码就可以了。这样最后就会停留在排序好厚的画面中!!

代码语言:javascript
复制
while(True):
    for event in pygame.event.get():
        if event.type in (QUIT,KEYDOWN):
            sys.exit()
    screen = pygame.display.set_mode((600,600))
    for i in range(0,10):
        pygame.draw.line(screen,white,(50*(i+1),10),(50*(i+1),a[i]),width)  
    pygame.display.update()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 工科狗和生物喵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文之前
  • 正文
  • 正文之后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档