一段时间前,我不得不用Python为学校做一个项目,创建一个游戏或一些有趣的东西。我决定做一个记忆游戏。代码并不是很好,变量名也不是很好。它不应该看起来很好,重要的是它的功能。我在甲鱼身上做了很多动作,所以再来一次,缩短动作并不是我真正的目标。密码太多了,我没什么好紧张的了。我所要求的只是你对它是如何完成和如何工作的总体看法。
from turtle import *
import time
from random import *
from tkinter import *
speed(0)
def mj(x, y):
return x, y
def crtanje2(x, y):
global pon
global m
global klik
global tocnih
pon += 1
klik += 1
for i in range(20):
if x >= unutar[i][0] and x <= unutar[i][0]+100 and y <= unutar[i][1]+100 and y >= unutar[i][1]:
pu()
goto(unutar[i][0]+50, unutar[i][1]+25)
pd()
rj = l.index(i)
rj2 = l.index(i)
if rj % 2 != 0:
rj -= 1
crtanje(rj, boja[rj//2])
m[1-pon%2] = rj2
break
if pon % 2 == 0 and pon != 0 and m[0] != -101 and m[1] != -100 and abs(m[0]-m[1]) != 1 or abs(m[0]-m[1]) == 1 and min(m[0], m[1]) % 2 != 0:
tracer(True)
time.sleep(1)
tracer(False)
pu()
goto(unutar[l[m[0]]][0]+1, unutar[l[m[0]]][1]+1)
pd()
pencolor('white')
fillcolor('white')
begin_fill()
for i in range(4):
fd(98)
lt(90)
end_fill()
pu()
goto(unutar[l[m[1]]][0]+1, unutar[l[m[1]]][1]+1)
pd()
pencolor('white')
fillcolor('white')
begin_fill()
for i in range(4):
fd(98)
lt(90)
end_fill()
if abs(m[0]-m[1]) == 1 and min(m[0], m[1]) % 2 == 0:
tocnih += 1
if pon % 2 == 0:
m = [-101, -100]
pencolor('black')
if tocnih == 10:
import sys; sys.exit('\n----------------------\nSolved in {} steps!\n----------------------'.format(pon//2))
return
def tablica():
hideturtle()
pu()
goto(-250, 100)
pd()
for i in range(20):
if i % 5 == 0 and i != 0:
bk(500)
rt(90)
fd(100)
lt(90)
kvadrat()
fd(100)
def kvadrat():
for i in range(4):
fd(100)
lt(90)
def pravokutnik():
pu()
bk(25)
lt(90)
fd(12.5)
rt(90)
pd()
begin_fill()
for i in range(4):
if i % 2 == 0:
fd(50)
else:
fd(25)
lt(90)
def zvijezda():
pu()
lt(90)
fd(37.5)
lt(90)
fd(25)
rt(180)
pd()
begin_fill()
for i in range(5):
fd(50)
rt(144)
def paralelogram():
pu()
lt(90)
fd(12.5)
rt(90)
pd()
for i in range(4):
if i % 2 == 0:
fd(25)
lt(140)
else:
fd(25)
lt(40)
def trapez():
pu()
lt(90)
fd(12.5)
rt(90)
bk(17.5)
pd()
begin_fill()
fd(50)
lt(140)
fd(25)
lt(40)
fd(25)
lt(40)
fd(25)
lt(140)
fd(25)
def polukrug():
pu()
fd(25)
lt(90)
fd(12.5)
pd()
begin_fill()
circle(25, extent = 180)
lt(90)
fd(50)
def crtanje(br, boja):
fillcolor(boja)
if br == 0:
begin_fill()
circle(25, steps = 4)
elif br == 2:
begin_fill()
circle(25)
elif br == 4:
begin_fill()
circle(25, steps = 3)
elif br == 6:
pravokutnik()
elif br == 8:
pu()
bk(20)
lt(90)
fd(12.5)
rt(90)
pd()
rt(45)
begin_fill()
circle(25, steps = 4)
lt(45)
elif br == 10:
pu()
bk(20)
lt(90)
fd(20)
rt(90)
pd()
begin_fill()
for i in range(5):
circle(5)
pu()
fd(10)
pd()
elif br == 12:
zvijezda()
elif br == 14:
begin_fill()
paralelogram()
elif br == 16:
trapez()
else:
polukrug()
end_fill()
tracer(False)
l = sample(range(0, 20), 20)
tablica()
colormode(255)
boja = []
for i in range(0, 20, 2):
boja.append((randint(0, 255), randint(0, 255), randint(0, 255)))
for j in range(i, i+2):
pu()
goto(-200+((l[j]%5)*100), 125-((l[j]//5)*100))
pd()
crtanje(i, boja[i//2])
tracer(True)
time.sleep(10)
reset()
tracer(False)
tablica()
unutar = [(-250, 100), (-150, 100), (-50, 100), (50, 100), (150, 100), (-250, 0), (-150, 0), (-50, 0), (50, 0), (150, 0), (-250, -100), (-150, -100), (-50, -100), (50, -100), (150, -100), (-250, -200), (-150, -200), (-50, -200), (50, -200), (150, -200)]
tocno = 0
tracer(True)
tracer(False)
pon = 0
tocnih = 0
m = [-101, -100]
klik = 0
poz = onscreenclick(crtanje2)
mainloop()发布于 2014-12-08 21:44:55
我所要求的只是你对它是如何完成和如何工作的总体看法。
不太好。您的代码几乎违反了所有关于好代码的规则。但不要难过,你是幸运的,因为你现在可以学习一些好的原则,并在未来编写更好的代码。
from turtle import *
import time
from random import *
from tkinter import *请不要使用import *,而是使用import long_long_name as short
crtanje2(x, y)和crtanje(br, boja)有50行长。将它们划分为较小的函数。
删除以下内容,因为它从未被使用过。
def mj(x, y):
return x, yglobal pon
global m
global klik
global tocnih不要使用全局变量,而是将需要的变量作为参数传递给函数。
这里用英语编写的代码是最受欢迎的,您的代码不是,请考虑将您的函数名翻译成英语。
pu()
lt(90)
fd(37.5)
lt(90)
fd(25)
rt(180)
pd()您的代码使用了大量的两个字母名称,通常首选较长的名称。
通常的做法是定义一个main函数,该函数实际上执行一些操作,然后执行:
if __name__ == "__main__":
main()这样您就可以import模块了。
unutar = [(-250, 100), (-150, 100), (-50, 100), (50, 100), (150, 100), (-250, 0), (-150, 0), (-50, 0), (50, 0), (150, 0), (-250, -100), (-150, -100), (-50, -100), (50, -100), (150, -100), (-250, -200), (-150, -200), (-50, -200), (50, -200), (150, -200)]这是一个很长的列表,也许可以用列表理解生成。
你是给程序的所有信息,以绘制自己的图像,这是相当耗时和很难改变。
为正确的工作使用正确的工具
Pygame支持sprite (图像的一个高级术语)加载,因此您可以拥有一个资源文件夹,其中包含您想要绘制的对象的所有图像,您可以随时更改它们。
当您修复了所有更严重的问题时,请修复PEP8告诉您修复的内容。
https://codereview.stackexchange.com/questions/70731
复制相似问题