我写了一个小程序,请问该如何优化?

软件和网站开发以及相关技术探讨
回复
haddy
帖子: 40
注册时间: 2009-06-06 18:51

我写了一个小程序,请问该如何优化?

#1

帖子 haddy » 2009-06-06 20:12

谢谢大家

另外能否说得明白一点,初学者不太明白……

现在的问题:
(解决,忘写global deli了) 1 出错 global deli 没有定义 (59行)
其他的什么显示问题还是搞不明白啊……
有谁能告知pygame的用法啊- - :em01

这样改对么?

代码: 全选

from time import sleep
from random import randint
import sys
import os
from _thread import *
from msvcrt import getwch
#import pygame
#from pygame.locals import *

def ooo(): #初始化用函数
    global gameover
    global dosp
    global score
    global reli
#    global bkg
    while 1: #dosp大于0时,转换为整型,然后继续
        dosp = input('Inupt the speed, which above 0:')
        dosp = int(dosp)
        if dosp > 0:
            break
    gameover = 0
#    bkg = [200,201,202,203,204,205,206,207,208,209] #背景方块,默认的是不可见的,用于判定是否到达底端
    score = 0
    reli = {'ctt':'' , 'ipp': 0 , 'bkg':[200,201,202,203,204,205,206,207,208,209] , 'clr' : [] , 'ckt' : 0}

def ccttc(rst = randint(0,6)): #将所获得的随机数转换为方块类型并记录
    global reli
    ccttcl = {'0':'s1','1':'z1','2':'l1','3':'j1','4':'i1','5':'o','6':'t1'}
    reli['ctt'] = ccttcl[str(rst)]

def ippc(): #初始化控制中方块重心(即基准点)
    global reli
    reli['ipp'] = 34

def cttp(): #由控制中方块重心的记录描绘出方块形状
    global reli
    reli['clr'] = []
    if reli['ctt'] == 's1':
        reli['clr'].append(ipp)
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] - 9)
        reli['ckt'] = 2

    elif reli['ctt'] == 's2':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] - 11)
        reli['ckt'] = 2

    elif reli['ctt'] == 'z1':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] - 11)
        reli['ckt'] = 2

    elif reli['ctt'] == 'z2':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 9)
        reli['ckt'] = 2

    elif reli['ctt'] == 'l1':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] - 11)
        reli['ckt'] = 4

    elif reli['ctt'] == 'l2':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] - 9)
        reli['ckt'] = 4

    elif reli['ctt'] == 'l3':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] + 11)
        reli['ckt'] = 4

    elif reli['ctt'] == 'l4':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] + 9)
        reli['ckt'] = 4

    elif reli['ctt'] == 'j1':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] - 9)
        reli['ckt'] = 4

    elif reli['ctt'] == 'j2':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] + 11)
        reli['ckt'] = 4

    elif reli['ctt'] == 'j3':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] + 9)
        reli['ckt'] = 4

    elif reli['ctt'] == 'j4':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] - 11)
        reli['ckt'] = 4

    elif reli['ctt'] == 'i1':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] + 2)
        reli['ckt'] = 2

    elif reli['ctt'] == 'i2':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] + 20)
        reli['ckt'] = 2

    elif reli['ctt'] == 'o':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] - 9)
        reli['clr'].append(reli['ipp'] - 10)
        reli['ckt'] = 1

    elif reli['ctt'] == 't1':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] - 10)
        reli['ckt'] = 4

    elif reli['ctt'] == 't2':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] + 1)
        reli['ckt'] = 4

    elif reli['ctt'] == 't3':
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 1)
        reli['clr'].append(reli['ipp'] + 1)
        reli['clr'].append(reli['ipp'] + 10)
        reli['ckt'] = 4

    else:
        reli['clr'].append(reli['ipp'])
        reli['clr'].append(reli['ipp'] - 10)
        reli['clr'].append(reli['ipp'] + 10)
        reli['clr'].append(reli['ipp'] - 1)
        reli['ckt'] = 4

#旧显示部分
#    os.system('cls')
#    ptlist = deli['clr'] + deli['bkg']
#    print ('━━━━━━━━━━━━')
#    for ptn in range(0,200):
#        if ptn % 10 == 0:
#            print ('┃',end = '')
#        if ptn in ptlist:
#            if ptn % 10 == 9:
#                print ('■┃')
#            else:
#                print ('■',end = '')
#        else:
#            if ptn % 10 == 9:
#                print ('  ┃')
#            else:
#                print ('  ',end = '')
#    print ('━━━━━━━━━━━━')
#旧显示部分完
#计划用新模块代替

mylock = allocate_lock() #线程锁 避免显示出错

def pd(): #判定有没有输,有没有到达底端,到达低端的话就消除
    global gameover
    global score
    global dosp
    for pnum in range(40,200,10):
        pnco = 0

        for pnum2 in range(pnum,pnum + 10):
            if pnum2 in reli['bkg']:
                pnco += 1

        if pnco == 10:
            reli['bkg'].remove(pnum)
            reli['bkg'].remove(pnum + 1)
            reli['bkg'].remove(pnum + 2)
            reli['bkg'].remove(pnum + 3)
            reli['bkg'].remove(pnum + 4)
            reli['bkg'].remove(pnum + 5)
            reli['bkg'].remove(pnum + 6)
            reli['bkg'].remove(pnum + 7)
            reli['bkg'].remove(pnum + 8)
            reli['bkg'].remove(pnum + 9)
            score += (dosp * 50)
            a = 0
            while a != len(reli['bkg']): #把reli['bkg']列表中小于PNUM的数加上10
                if reli['bkg'][(a)] < pnum:
                    reli['bkg'][(a)] += 10
                a += 1

    for anum in range(0,40):
        if anum in reli['bkg']:
            gameover = 1

def downmove(): #下落
    global reli
    dmmco = 0
    for eachNum in reli['clr']:
        if (eachNum + 10) in reli['bkg']:
            if not dmmco == 1:
                sleep(1 / (dosp))
                reli['bkg'].append(reli['clr'][0])
                reli['bkg'].append(reli['clr'][1])
                reli['bkg'].append(reli['clr'][2])
                reli['bkg'].append(reli['clr'][3])
                pd()
                ccttc()
                ippc()
                dmmco = 1
    if dmmco == 0:
        reli['ipp'] = reli['ipp'] + 10
    cttp()

def gmi(): #定时下落(定时使用downmove函数)
    global dosp
    global gameover
    while gameover == 0:
        sleep(1 / (dosp))
        mylock.acquire()
        downmove()
        mylock.release()

#keyin = pygame.key.get_pressed()

def inp(): #键盘输入判定
    global reli
    global gameover
    while gameover == 0:
        if keyin[K_UP]: #输入了上键的话
            mylock.acquire()
            if not deli['ctt'] == 'o': #除方块O外转换方向
                deli['ctt'][-1] = str((int(deli['ctt'][-1]) + 1) % deli[ckt])
            cttp()
            mylock.release()
        elif keyin[K_DOWN]: #下键
            mylock.acquire()
            downmove()
            mylock.release()
        elif keyin[K_LEFT]: #左键
            acou = 0
            mylock.acquire()
            for aanum in range(0,200,10): #最左部无效
                if not aanum in reli['clr']:
                    acou += 1
            if acou == 20:
                kkkkkk = 0
                for eachNum in reli['clr']: #防止撞车
                     if (eachNum - 1) in reli['bkg']:
                         kkkkkk = 1
                if kkkkkk == 0:
                    reli['ipp'] = reli['ipp'] - 1
                    cttp()
            mylock.release()
        else:
            if keyin[K_RIGHT]: #右键
                dcou = 0
                mylock.acquire()
                for ddnum in range(9,209,10): #最右部无效
                    if not ddnum in reli['clr']:
                        dcou += 1
                if dcou == 20:
                    dddddd = 0
                    for eachNum in reli['clr']: #防止撞车
                        if (eachNum + 1) in reli['bkg']:
                            dddddd = 1
                    if dddddd == 0:
                        reli['ipp'] = reli['ipp'] + 1
                        cttp()
                mylock.release()

def main():
    ooo()
    ippc()
    ccttc()
    cttp()
    start_new_thread(gmi,()) #开始新线程
    start_new_thread(inp,()) #开始新线程
    while gameover == 0:
        pass
    sleep(3)
    print('Game Over')
    print('Score:')
    print(score)
    input('Press Enter Key to Quit the Game')
    sys.exit()

if __name__ == '__main__':
    main()

#需改进的地方:显示,输入判定,消除判定
上次由 haddy 在 2009-06-20 10:43,总共编辑 4 次。
izee
帖子: 661
注册时间: 2007-01-26 13:38

Re: 我写了一个小程序,请问该如何优化?

#2

帖子 izee » 2009-06-13 22:15

是用来做什么?
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: 我写了一个小程序,请问该如何优化?

#3

帖子 anticlockwise » 2009-06-17 23:56

但看程序,光把那些if else换成{}, []类似的数据结构的话,就可以优化掉很多行代码,再加上如果能用上高阶函数,又可以优化一些~~而且LZ的每个函数都没有参数,有些没有意义,应该把一些global改成函数的参数,让函数直接进行参数和返回值的传递~~

不过不知道这个程序的具体作用,所以不知道该如何进行优化~~
soiamso
帖子: 418
注册时间: 2008-09-06 2:00

Re: 我写了一个小程序,请问该如何优化?

#4

帖子 soiamso » 2009-06-18 1:00

pygame 弄个俄罗斯方块,还是可以的
haddy
帖子: 40
注册时间: 2009-06-06 18:51

Re: 我写了一个小程序,请问该如何优化?

#5

帖子 haddy » 2009-06-19 23:47

有新问题了 谢谢……
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: 我写了一个小程序,请问该如何优化?

#6

帖子 anticlockwise » 2009-06-24 22:09

光是看看你的函数定义和实现,你觉得把cttp()改成如下是不是更好一点?

代码: 全选

#!/usr/bin/python
# -*- coding: utf-8 -*-

reli_map = {'s1' : (-10, -1, -9, 2),
        's2' : (10, -1, -11, 2),
        'z1' : (-10, 1, -11, 2),
        'z2' : (-10, -1, 9, 2),
        'l1' : (-1, 1, -11, 4),
        'l2' : (-10, 10, -9, 4),
        'l3' : (-1, 1, 11, 4),
        'l4' : (-10, 10, 9, 4),
        'j1' : (-1, 1, -9, 4),
        'j2' : (-10, 10, 11, 4),
        'j3' : (-1, 1, 9, 4),
        'j4' : (-10, 10, -11, 4),
        'i1' : (-1, 1, 2, 2),
        'i2' : (-10, 10, 20, 2),
        'o' : (1, -9, -10, 1),
        't1' : (-1, 1, -10, 4),
        't2' : (-10, 10, 1, 4),
        't3' : (-1, 1, 10, 4),
        't4' : (-10, 10, -1, 4)}

def change_reli(reli, clr1, clr2, clr3, ckt):
    reli['clr'].append(reli['ipp'])
    reli['clr'].append(reli['ipp'] - clr1)
    reli['clr'].append(reli['ipp'] - clr2)
    reli['clr'].append(reli['ipp'] - clr3)
    reli['ckt'] = ckt

def cttp(reli):
    reli['clr'] = []
    clr1, clr2, clr3, ckt = reli_map[reli['ctt']]
    change_reli(reli, clr1, clr2, clr3, ckt)
izee
帖子: 661
注册时间: 2007-01-26 13:38

Re: 我写了一个小程序,请问该如何优化?

#7

帖子 izee » 2009-06-25 17:50

高手出马就是不一样 :em05
haddy
帖子: 40
注册时间: 2009-06-06 18:51

Re: 我写了一个小程序,请问该如何优化?

#8

帖子 haddy » 2009-06-27 8:21

:em01 好厉害……

不过我仍有几个问题

如果把change_reli和cttp函数结合在一起会不会更好?

是从什么开始cttp的……如果那里没有reli的话不就不行了么

新手新手 说错了别介意 :em11


追加:

满眼的reli 好眼花……

如果把用到reli的函数都放进一个类里面,_init_就是ooo,用个函数返回main()所需要的东西

这样能否解决第二个问题?
haddy
帖子: 40
注册时间: 2009-06-06 18:51

Re: 我写了一个小程序,请问该如何优化?

#9

帖子 haddy » 2009-06-27 12:19

感谢……

不知这样改对不?

另外

现在弄得好乱……

所以就不更新顶楼了……

打算重新开始……

虽说如此……


但能否给些建议? :em06

还有个问题 如何弹出对话框 :em01

tet_or.png http://picasaweb.google.com/haddy6235/T ... nUg4XkiQE#

环境:win32(其实现在不用了,因为没用msvcrt,不过没加#!),python 3.0(现在换了,为了用pgreloaded),pygame-2.2.0.0 for python 3.0

还有 其实我弄的是俄罗斯方块

代码: 全选

from time import sleep
from random import randint
import sys
import os
from _thread import *
from msvcrt import getwch
from copy import deepcopy
from math import floor

import pygame2
import pygame2.physics as physics
try:
    import pygame2.sdl.constants as sdlconst
    import pygame2.sdl.event as event
    import pygame2.sdl.video as video
    import pygame2.sdl.time as time
    import pygame2.sdl.wm as wm
    import pygame2.sdlext.draw as draw
except ImportError:
    print ("No pygame2.sdl support")
    sys.exit ()

try:
    import pygame2.sdlimage as image
except ImportError:
    print ("No pygame2.sdlimage support")
    sys.exit()

mylock = allocate_lock()

class gosh_reli():
    #
    retu_count = 0
    reli_map = {'s1' : (-10, -1, -9, 2),
        's2' : (10, -1, -11, 2),
        'z1' : (-10, 1, -11, 2),
        'z2' : (-10, -1, 9, 2),
        'l1' : (-1, 1, -11, 4),
        'l2' : (-10, 10, -9, 4),
        'l3' : (-1, 1, 11, 4),
        'l4' : (-10, 10, 9, 4),
        'j1' : (-1, 1, -9, 4),
        'j2' : (-10, 10, 11, 4),
        'j3' : (-1, 1, 9, 4),
        'j4' : (-10, 10, -11, 4),
        'i1' : (-1, 1, 2, 2),
        'i2' : (-10, 10, 20, 2),
        'o' : (1, -9, -10, 1),
        't1' : (-1, 1, -10, 4),
        't2' : (-10, 10, 1, 4),
        't3' : (-1, 1, 10, 4),
        't4' : (-10, 10, -1, 4)}
        #
    reli = {}
    gameover = 0
    score = 0
    dosp = 0
    evlist = []
    def ooo():
        while 1:
            dosp_o = int(input('Inupt the speed, which above 0:'))
            if dosp_o > 0:
                break
        gameover_o = 0
        score_o = 0
        reli_o = {'ctt':'' , 'ipp': 0 ,
         'bkg':[200,201,202,203,204,205,206,207,208,209] ,
          'clr' : [] , 'ckt' : 0}
        gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp = \
        reli_o,gameover_o,score_o,dosp_o
        return (reli_o,gameover_o,score_o,dosp_o)

#    def ccttc(reli,gameover,score,dosp,rst = randint(0,6)):
    def ccttc(reli,gameover,score,dosp):
        rst = randint(0,6)
        ccttcl = ['s1','z1','l1','j1','i1','o','t1']
        gosh_reli.reli['ctt'] = ccttcl[(rst)]
        gosh_reli.reli['ipp'] = 34
        gosh_reli.retu(reli,gameover,score,dosp)#
        print (rst,gosh_reli.reli['ctt'])
        sleep(0)
        pyvideo(1)


    def change_reli(reli, clr1, clr2, clr3, ckt,gameover,score,dosp):
        gosh_reli.reli['clr'].append(gosh_reli.reli['ipp'])
        gosh_reli.reli['clr'].append(gosh_reli.reli['ipp'] + clr1)
        gosh_reli.reli['clr'].append(gosh_reli.reli['ipp'] + clr2)
        gosh_reli.reli['clr'].append(gosh_reli.reli['ipp'] + clr3)
        gosh_reli.reli['ckt'] = ckt
        gosh_reli.retu(reli,gameover,score,dosp)#
        pyvideo(1)

    def cttp(reli,gameover,score,dosp):
        gosh_reli.reli['clr'] = []
        clr1, clr2, clr3, ckt = gosh_reli.reli_map[gosh_reli.reli['ctt']]
        gosh_reli.change_reli(reli, clr1, clr2, clr3, ckt,gameover,score,dosp)

    #    reli['clr'].append(reli['ipp'])
    #    reli['clr'].append(reli['ipp'] + clr1)
    #    reli['clr'].append(reli['ipp'] + clr2)
    #    reli['clr'].append(reli['ipp'] + clr3)
    #    reli['ckt'] = ckt

    #thanks to anticlockwise.

#    mylock = allocate_lock()

    def pd(reli,gameover,score,dosp):
        for pnum in range(40,200,10):
            pnco = 0

            for pnum2 in range(pnum,pnum + 10):
                if pnum2 in gosh_reli.reli['bkg']:
                    pnco += 1

            if pnco == 10:
                gosh_reli.reli['bkg'].remove(pnum)
                gosh_reli.reli['bkg'].remove(pnum + 1)
                gosh_reli.reli['bkg'].remove(pnum + 2)
                gosh_reli.reli['bkg'].remove(pnum + 3)
                gosh_reli.reli['bkg'].remove(pnum + 4)
                gosh_reli.reli['bkg'].remove(pnum + 5)
                gosh_reli.reli['bkg'].remove(pnum + 6)
                gosh_reli.reli['bkg'].remove(pnum + 7)
                gosh_reli.reli['bkg'].remove(pnum + 8)
                gosh_reli.reli['bkg'].remove(pnum + 9)
                score += (dosp * 50)
                a = 0
                while a != len(gosh_reli.reli['bkg']):
                    if gosh_reli.reli['bkg'][(a)] < pnum:
                        gosh_reli.reli['bkg'][(a)] += 10
                    a += 1

        for anum in range(0,40):
            if anum in gosh_reli.reli['bkg']:
                gameover = 1
        gosh_reli.retu(reli,gameover,score,dosp)#
        pyvideo(1)

    def downmove(reli,gameover,score,dosp):
        dmmco = 0
        for eachNum in gosh_reli.reli['clr']:
            if (eachNum + 10) in gosh_reli.reli['bkg']:
                sleep(1 / (dosp))
                gosh_reli.reli['bkg'] = gosh_reli.reli['bkg'] + gosh_reli.reli['clr']
                gosh_reli.pd(reli,gameover,score,dosp)
                gosh_reli.ccttc(reli,gameover,score,dosp)
                dmmco = 1
                break
        if dmmco == 0:
            gosh_reli.reli['ipp'] = gosh_reli.reli['ipp'] + 10
        gosh_reli.cttp(reli,gameover,score,dosp)

    def gmi():
        reli,gameover,score,dosp = \
        gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp
        while gameover == 0:
            sleep(1 / (dosp))
            mylock.acquire()
            gosh_reli.downmove(reli,gameover,score,dosp)
            mylock.release()


##    def anto():
##        sleep(0)
##        nnnle = getwch().lower()
##        return nnnle
##
##    def keyin():
##        nnnlp = getwch().lower()
##        if nnnlp == start_new_thread(gosh_reli.anto,()): #I do not know what I did write!
##            nnnlc = getwch().lower()
##            if nnnlc == 's' and nnnlp == nnnlc:
##                return 'K_DOWN'
##        else:
##            _alll = gosh_reli.anto()
##            if _alll == 'w':
##                return 'K_UP'
##            if _alll == 'a':
##                return 'K_LEFT'
##            if _alll == 'd':
##                return 'K_RIGHT'

##    def keyin():
##        if getwch().lower == 'w':
##            print ('w got')
##            return 'K_UP'
##        if getwch().lower == 's':
##            return 'K_DOWN'
##            print ('s got')
##        if getwch().lower == 'a':
##            return 'K_LEFT'
##            print ('a got')
##        if getwch().lower == 'd':
##            return 'K_RIGHT'
##            print ('d got')

    def evpro(keyin):
        gosh_reli.evlist.append(keyin.lower())


    def inp_l():
        reli,gameover,score,dosp = \
        gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp
        while gameover == 0:
            try:
                if gosh_reli.evlist[-1] == 'w':
                    start_new_thread(gosh_reli.up_move,(reli,gameover,score,dosp))
                    print('up moved.')
                    del gosh_reli.evlist[-1]
                if gosh_reli.evlist[-1] == 's':
                    start_new_thread(gosh_reli.down_move,(reli,gameover,score,dosp))
                    print('down moved.')
                    del gosh_reli.evlist[-1]
                if gosh_reli.evlist[-1] == 'a':
                    start_new_thread(gosh_reli.left_move,(reli,gameover,score,dosp))
                    print('left moved.')
                    del gosh_reli.evlist[-1]
                if gosh_reli.evlist[-1] == 'd':
                    start_new_thread(gosh_reli.right_move,(reli,gameover,score,dosp))
                    print('right moved.')
                    del gosh_reli.evlist[-1]
            except IndexError:
                continue
            sleep(0)

    def up_move(reli,gameover,score,dosp):
        mylock.acquire()
        if gosh_reli.reli['ctt'] != 'o':
            gosh_reli.reli['ctt'] = gosh_reli.reli['ctt'][0] + str(((int(gosh_reli.reli['ctt'][-1])) % gosh_reli.reli['ckt']) + 1)
        gosh_reli.cttp(reli,gameover,score,dosp)
        mylock.release()

    def down_move(reli,gameover,score,dosp):
        mylock.acquire()
        gosh_reli.downmove(reli,gameover,score,dosp)
        mylock.release()

    def left_move(reli,gameover,score,dosp):
        acou = 0
        mylock.acquire()
        for aanum in range(0,200,10):
            if not aanum in gosh_reli.reli['clr']:
                acou += 1
        if acou == 20:
            kkkkkk = 0
            for eachNum in gosh_reli.reli['clr']:
                if (eachNum - 1) in gosh_reli.reli['bkg']:
                    kkkkkk = 1
            if kkkkkk == 0:
                gosh_reli.reli['ipp'] = gosh_reli.reli['ipp'] - 1
                gosh_reli.cttp(reli,gameover,score,dosp)
        mylock.release()

    def right_move(reli,gameover,score,dosp):
        dcou = 0
        mylock.acquire()
        for ddnum in range(9,209,10):
            if not ddnum in gosh_reli.reli['clr']:
                dcou += 1
        if dcou == 20:
            dddddd = 0
            for eachNum in gosh_reli.reli['clr']:
                if (eachNum + 1) in gosh_reli.reli['bkg']:
                    dddddd = 1
            if dddddd == 0:
                gosh_reli.reli['ipp'] = gosh_reli.reli['ipp'] + 1
                gosh_reli.cttp(reli,gameover,score,dosp)
        mylock.release()

    def retu(reli,gameover,score,dosp):
#        return gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp
        if gosh_reli.retu_count == 0:
            gosh_reli.retu_count += 1
            gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp = \
            reli,gameover,score,dosp
            sleep(0)
            gosh_reli.retu_count -= 1

            print ('retu ,',gosh_reli.retu_count,'aaa',gosh_reli.reli)
        return gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp
#
#action function:pd(),change_reli(),ccttc()
#All these need to add a retu(reli,gameover,score,dosp) in the end to make the
#(reli,gameover,score,dosp) is the same as the ones in gosh_reli.

#part video ?
def pyvideo(refresh):
    if refresh == 2:
        video.init()
    white = pygame2.Color (255, 255, 255)
    black = pygame2.Color (0, 0, 0)
    red = pygame2.Color (255, 0, 0)
    yellow = pygame2.Color (0, 255, 0)
    blue = pygame2.Color (0, 0, 255)

    redt = pygame2.Color (255, 0, 0, 75)
    yellowt = pygame2.Color (0, 255, 0, 75)
    bluet = pygame2.Color (0, 0, 255, 75)

#
    screen = video.set_mode (240, 480)
    screen.fill (black)
    imgdir = os.path.dirname (os.path.abspath (__file__))
    tetor = image.load(os.path.join(imgdir,"tet_or.png")).convert()
    if refresh == 2:
        screen.flip()

    if refresh == 0:

#        ku = draw.rect(screen,black,pygame2.Rect(24,24,240,480))
#        imgdir = os.path.dirname (os.path.abspath (__file__))

#        pt = gosh_reli.reli['clr'] + gosh_reli.reli['bkg']



#        tetor = image.load(os.path.join(imgdir,"tet_or.png")).convert()
        screen.flip ()
        aaa = 'wasd'
        okay = True
        while okay and gosh_reli.gameover == 0: #Actually A Key Input Catcher.
            for ev in event.get ():
                if ev.type == sdlconst.QUIT:
                    okay = False
                if ev.type == sdlconst.KEYDOWN:
                    if ev.key == sdlconst.K_ESCAPE:
                        okay = False
                    print (ev.unicode," got")
                    gosh_reli.evpro(ev.unicode)

#            for EachNum in pt:
#                 ku.blit(tetor,((EachNum % 10) * 24),(floor(EachNum / 10) * 24))
#                 screen.blit(tetor,((((EachNum % 10) * 24) + 24),((floor(EachNum / 10) * 24) + 24)))
#            screen.flip()

    if refresh == 1:
        pt = gosh_reli.reli['clr'] + gosh_reli.reli['bkg']
        for EachNum in pt:
#             ku.blit(tetor,((EachNum % 10) * 24),(floor(EachNum / 10) * 24))
             screen.blit(tetor,(((EachNum % 10) * 24),(floor(EachNum / 10) * 24)))
        screen.flip()

def main():
    pyvideo(2)
    gosh_reli.ooo()
    sleep(0)
    gosh_reli.ccttc(gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp)
    sleep(0)
    gosh_reli.cttp(gosh_reli.reli,gosh_reli.gameover,gosh_reli.score,gosh_reli.dosp)
    sleep(0)
#    start_new_thread(pyvideo,())
    start_new_thread(gosh_reli.gmi,())
    start_new_thread(gosh_reli.inp_l,())
    pyvideo(0)
    sleep(1)
    print('Game Over')
    print('Score:')
    print(gosh_reli.score)
    input('Press Enter Key to Quit the Game')
    sys.exit()

if __name__ == '__main__':
    main()
#需要tet_or.png
soiamso
帖子: 418
注册时间: 2008-09-06 2:00

Re: 我写了一个小程序,请问该如何优化?

#10

帖子 soiamso » 2009-07-02 23:37

什么弹框?

其实 在游戏中使用的 GUI有一些现成的库基于pygame的

这些 GUI库就有弹框了,而且游戏的更容易移植。
haddy
帖子: 40
注册时间: 2009-06-06 18:51

Re: 我写了一个小程序,请问该如何优化?

#11

帖子 haddy » 2009-07-03 17:25

谢了
对pygame不太了解……
回复