From d91142a2288bb7b688aa57c752fb5603fe9dabc6 Mon Sep 17 00:00:00 2001 From: "Z.x" Date: Fri, 13 Dec 2019 17:23:19 +0800 Subject: [PATCH 01/10] fer --- h.py | 18 ++++++++++++++++++ names.txt | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 h.py diff --git a/h.py b/h.py new file mode 100644 index 0000000..f700f82 --- /dev/null +++ b/h.py @@ -0,0 +1,18 @@ +import turtle as t +t.fillcolor("black") +for couter in range(4): + t.forward(100) + t.right(90) + +t.begin_fill() +for couter in range(2): + t.forward(50) + t.right(90) + t.end_fill() + +t.begin_fill() +t.right(180) +for couter in range(3): + t.forward(50) + t.right(90) + t.end_fill() \ No newline at end of file diff --git a/names.txt b/names.txt index 851fa89..bdc5c34 100644 --- a/names.txt +++ b/names.txt @@ -1 +1,2 @@ -# add your name as a separate line at the end of the file \ No newline at end of file +# add your name as a separate line at the end of the file +zen \ No newline at end of file -- Gitee From 0dabea5acf9e582ae43cefdacb82cdd6fb90668d Mon Sep 17 00:00:00 2001 From: tascharlie Date: Sat, 14 Dec 2019 19:34:16 +0800 Subject: [PATCH 02/10] rebuild exercise tree MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # This is a combination of 7 commits.tree 09282bcf2cac76e1f75ddbd65c8ae075a9d5b20d parent eab4475bfa6a31468575fa30204379f2b95586d6 author Coach W 1576248534 +0800 committer Coach W 1576814540 +0800 # This is a combination of 5 commits. # This is the 1st commit message: demo 13.1 for illustrating Fork+Pull workflow # This is the commit message #2: completed demo practice 13.1 # This is the commit message #3: 发布完整的第13周课后作业 # This is the commit message #4: Solutions to Ex13.1 & Ex13.3 by Ethan * update chess_floor.py. * 删除文件 chess floor.py * 删除文件 chess floor 8x8.py * 1st version * 1st version * chess floor # This is the commit message #5: removed task descriptions from this branch # This is the commit message #7: completed practice 13.2 a fix to the submission of charlie's homework demo 13.1 for illustrating Fork+Pull workflow completed demo practice 13.1 发布完整的第13周课后作业 removed task descriptions from this branch draw a mosaic draw a mosaic 添加13.5八皇后问题 unfinished project added story solitaire game added a file --- .idea/.gitignore | 3 ++ .../inspectionProfiles/profiles_settings.xml | 6 +++ .idea/misc.xml | 4 ++ .idea/modules.xml | 8 ++++ .idea/practice.iml | 11 +++++ .idea/vcs.xml | 6 +++ chess_floor_ethan.py | 27 ++++++++++++ ex13_1.txt | 20 --------- graph_charlie.py | 33 ++++++++++++++ names.txt | 1 - queens_charlie.py | 43 +++++++++++++++++++ square_charlie.py | 32 ++++++++++++++ story.txt | 2 + 13 files changed, 175 insertions(+), 21 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/practice.iml create mode 100644 .idea/vcs.xml create mode 100644 chess_floor_ethan.py delete mode 100644 ex13_1.txt create mode 100644 graph_charlie.py delete mode 100644 names.txt create mode 100644 queens_charlie.py create mode 100644 square_charlie.py create mode 100644 story.txt diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..0e40fe8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ + +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a2e120d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..695dd11 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/practice.iml b/.idea/practice.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/.idea/practice.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/chess_floor_ethan.py b/chess_floor_ethan.py new file mode 100644 index 0000000..1256f7f --- /dev/null +++ b/chess_floor_ethan.py @@ -0,0 +1,27 @@ +import turtle as t +t.setup(500, 500) +t.speed('fastest') +def block(size, filled): + if filled == True: + t.begin_fill() + for c in range(4): + t.forward(size) + t.right(90) + if filled == True: + t.end_fill() + +size = 10 +num = 8 +filled = True +for c in range(1, num*num+1): + block(size, filled) + if c%num == 0: + t.sety(t.ycor()-size) + t.setx(0) + else: + t.forward(size) + if filled == True: + filled = False + else: + filled = True +t.done() \ No newline at end of file diff --git a/ex13_1.txt b/ex13_1.txt deleted file mode 100644 index d37e06e..0000000 --- a/ex13_1.txt +++ /dev/null @@ -1,20 +0,0 @@ -知识点: 填充色、多重循环 - -Ex13.1 四方格 -============= - -同学们都能轻轻松松画出一个正方形,甚至给它填充颜色,所以这道习题我们增加一点难度。 - -** 任务描述 ** - -1. 用海龟作图绘制一个2*2的四方格 -2. 把左上角和右下角的两个格子涂成黑色 -3. 保留右上角和左下角两个格子的白色 - -** 提交方式 ** - -1. 将程序文件名保存为square_.py,其中是你的名字。例如square_cindy.py -2. 将程序提交(commit)到本地仓库 -3. 将这个提交推送(push)到你的码云仓库 -4. 创建一个Pull Request(PR)到 Moleqode/pratice 项目的exercise分支 - diff --git a/graph_charlie.py b/graph_charlie.py new file mode 100644 index 0000000..d6733a1 --- /dev/null +++ b/graph_charlie.py @@ -0,0 +1,33 @@ +# Coded by Charlie + +import turtle +from time import sleep as wait + +t = turtle.Pen() +stage = turtle.Screen() + + +def draw_polygon(sides, size, color): + t.begin_fill() + t.fillcolor(color) + for counter in range(sides): + t.forward(size) + t.left(360 / sides) + t.end_fill() + + +draw_polygon(70, 10, 'DODGER BLUE') +t.penup() +t.goto(0, 100) +t.write('is it a circle??????', font=('Times', 20)) +wait(2) +t.goto(0, -100) +t.write('NO, IT\'S NOT', font=('Arial', 30)) +wait(1) +t.sety(-150) +t.write('It is a polygon with 70 sides', font=('Times', 20)) +t.sety(-175) +t.write('with 10 step a side.', font=('Times', 17)) + + +stage.mainloop() diff --git a/names.txt b/names.txt deleted file mode 100644 index 851fa89..0000000 --- a/names.txt +++ /dev/null @@ -1 +0,0 @@ -# add your name as a separate line at the end of the file \ No newline at end of file diff --git a/queens_charlie.py b/queens_charlie.py new file mode 100644 index 0000000..b3e61a6 --- /dev/null +++ b/queens_charlie.py @@ -0,0 +1,43 @@ +import turtle + + +stage = turtle.Screen() +t = turtle.Turtle() +stage.setup(1000, 800) + + +def draw_square(color, size=75): + t.begin_fill() + t.fillcolor(color) + for i in range(4): + t.forward(size) + t.left(90) + t.end_fill() + + +def draw_mosaic(size): + draw_square('white') + t.left(180) + draw_square('white') + t.seth(90) + draw_square('black') + t.seth(270) + t.forward(size) + t.left(90) + draw_square('black') + t.hideturtle() + + def plate(sides): + lines = [1, 7, 0, 2, 5, 3, 6, 4] + q1 = turtle.Turtle() + q2 = turtle.Turtle() + q3 = turtle.Turtle() + q4 = turtle.Turtle() + q5 = turtle.Turtle() + q6 = turtle.Turtle() + q7 = turtle.Turtle() + q8 = turtle.Turtle() + + +draw_mosaic(75) +stage.mainloop() diff --git a/square_charlie.py b/square_charlie.py new file mode 100644 index 0000000..d017e64 --- /dev/null +++ b/square_charlie.py @@ -0,0 +1,32 @@ +import turtle + + +stage = turtle.Screen() +t = turtle.Turtle() +stage.setup(1000, 800) + + +def draw_square(color, size=100): + t.begin_fill() + t.fillcolor(color) + for i in range(4): + t.forward(size) + t.left(90) + t.end_fill() + + +def draw_mosaic(): + draw_square('white') + t.left(180) + draw_square('white') + t.seth(90) + draw_square('black') + t.seth(270) + t.forward(100) + t.left(90) + draw_square('black') + t.hideturtle() + + +draw_mosaic() +stage.mainloop() diff --git a/story.txt b/story.txt new file mode 100644 index 0000000..5e7e595 --- /dev/null +++ b/story.txt @@ -0,0 +1,2 @@ +[W] 我睁开眼, 发现自己站在一个巨大的鼻孔里. +[Judy] 突然,鼻孔的主人打了一个喷嚏。 -- Gitee From f317a02553574ec3f9e4f3d42b8d838c5b8ed710 Mon Sep 17 00:00:00 2001 From: coach-w <5450182+moleqode_tas@user.noreply.gitee.com> Date: Sat, 21 Dec 2019 18:00:56 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20.i?= =?UTF-8?q?dea?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 --- .idea/inspectionProfiles/profiles_settings.xml | 6 ------ .idea/misc.xml | 4 ---- .idea/modules.xml | 8 -------- .idea/practice.iml | 11 ----------- .idea/vcs.xml | 6 ------ 6 files changed, 38 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/practice.iml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 0e40fe8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -# Default ignored files -/workspace.xml \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index a2e120d..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 695dd11..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/practice.iml b/.idea/practice.iml deleted file mode 100644 index 6711606..0000000 --- a/.idea/practice.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file -- Gitee From 163ae10aab9ca60cab00b5fe224237b8137ffaeb Mon Sep 17 00:00:00 2001 From: coach-w <5450182+moleqode_tas@user.noreply.gitee.com> Date: Wed, 11 Dec 2019 23:52:24 +0800 Subject: [PATCH 04/10] add homework of anson, charlie and ethan --- chess_floor_ethan.py | 27 +++++++++++++++++++++++++++ ex13_1.txt | 20 -------------------- graph_anson.py | 38 ++++++++++++++++++++++++++++++++++++++ graph_charlie.py | 33 +++++++++++++++++++++++++++++++++ names.txt | 0 queens_charlie.py | 43 +++++++++++++++++++++++++++++++++++++++++++ square_anson.py | 24 ++++++++++++++++++++++++ square_charlie.py | 32 ++++++++++++++++++++++++++++++++ story.txt | 2 ++ 9 files changed, 199 insertions(+), 20 deletions(-) create mode 100644 chess_floor_ethan.py delete mode 100644 ex13_1.txt create mode 100644 graph_anson.py create mode 100644 graph_charlie.py delete mode 100644 names.txt create mode 100644 queens_charlie.py create mode 100644 square_anson.py create mode 100644 square_charlie.py create mode 100644 story.txt diff --git a/chess_floor_ethan.py b/chess_floor_ethan.py new file mode 100644 index 0000000..1256f7f --- /dev/null +++ b/chess_floor_ethan.py @@ -0,0 +1,27 @@ +import turtle as t +t.setup(500, 500) +t.speed('fastest') +def block(size, filled): + if filled == True: + t.begin_fill() + for c in range(4): + t.forward(size) + t.right(90) + if filled == True: + t.end_fill() + +size = 10 +num = 8 +filled = True +for c in range(1, num*num+1): + block(size, filled) + if c%num == 0: + t.sety(t.ycor()-size) + t.setx(0) + else: + t.forward(size) + if filled == True: + filled = False + else: + filled = True +t.done() \ No newline at end of file diff --git a/ex13_1.txt b/ex13_1.txt deleted file mode 100644 index d37e06e..0000000 --- a/ex13_1.txt +++ /dev/null @@ -1,20 +0,0 @@ -知识点: 填充色、多重循环 - -Ex13.1 四方格 -============= - -同学们都能轻轻松松画出一个正方形,甚至给它填充颜色,所以这道习题我们增加一点难度。 - -** 任务描述 ** - -1. 用海龟作图绘制一个2*2的四方格 -2. 把左上角和右下角的两个格子涂成黑色 -3. 保留右上角和左下角两个格子的白色 - -** 提交方式 ** - -1. 将程序文件名保存为square_.py,其中是你的名字。例如square_cindy.py -2. 将程序提交(commit)到本地仓库 -3. 将这个提交推送(push)到你的码云仓库 -4. 创建一个Pull Request(PR)到 Moleqode/pratice 项目的exercise分支 - diff --git a/graph_anson.py b/graph_anson.py new file mode 100644 index 0000000..157ed55 --- /dev/null +++ b/graph_anson.py @@ -0,0 +1,38 @@ +import turtle +a=turtle.Turtle() +a.speed('slowest') +a.hideturtle() +a.right(90) +for i in range(4): + a.forward(100) + a.left(90) +a.left(45) +a.penup() +a.forward(70) +a.pendown() +a.right(45) +for i in range(4): + a.forward(100) + a.left(90) +a.right(135) +a.forward(70) +a.right(135) +a.forward(100) +a.right(45) +a.forward(70) +a.right(45) +a.forward(100) +a.right(135) +a.forward(70) +a.left(45) +a.forward(100) +a.left(135) +a.forward(70) +a.penup() +a.left(135) +a.forward(300) +a.left(90) +a.forward(380) +a.write('This is a cube,if you look at it in a different way,you might found something special!',font=('Cambrian',17,'bold')) + +turtle.done() diff --git a/graph_charlie.py b/graph_charlie.py new file mode 100644 index 0000000..d6733a1 --- /dev/null +++ b/graph_charlie.py @@ -0,0 +1,33 @@ +# Coded by Charlie + +import turtle +from time import sleep as wait + +t = turtle.Pen() +stage = turtle.Screen() + + +def draw_polygon(sides, size, color): + t.begin_fill() + t.fillcolor(color) + for counter in range(sides): + t.forward(size) + t.left(360 / sides) + t.end_fill() + + +draw_polygon(70, 10, 'DODGER BLUE') +t.penup() +t.goto(0, 100) +t.write('is it a circle??????', font=('Times', 20)) +wait(2) +t.goto(0, -100) +t.write('NO, IT\'S NOT', font=('Arial', 30)) +wait(1) +t.sety(-150) +t.write('It is a polygon with 70 sides', font=('Times', 20)) +t.sety(-175) +t.write('with 10 step a side.', font=('Times', 17)) + + +stage.mainloop() diff --git a/names.txt b/names.txt deleted file mode 100644 index e69de29..0000000 diff --git a/queens_charlie.py b/queens_charlie.py new file mode 100644 index 0000000..b3e61a6 --- /dev/null +++ b/queens_charlie.py @@ -0,0 +1,43 @@ +import turtle + + +stage = turtle.Screen() +t = turtle.Turtle() +stage.setup(1000, 800) + + +def draw_square(color, size=75): + t.begin_fill() + t.fillcolor(color) + for i in range(4): + t.forward(size) + t.left(90) + t.end_fill() + + +def draw_mosaic(size): + draw_square('white') + t.left(180) + draw_square('white') + t.seth(90) + draw_square('black') + t.seth(270) + t.forward(size) + t.left(90) + draw_square('black') + t.hideturtle() + + def plate(sides): + lines = [1, 7, 0, 2, 5, 3, 6, 4] + q1 = turtle.Turtle() + q2 = turtle.Turtle() + q3 = turtle.Turtle() + q4 = turtle.Turtle() + q5 = turtle.Turtle() + q6 = turtle.Turtle() + q7 = turtle.Turtle() + q8 = turtle.Turtle() + + +draw_mosaic(75) +stage.mainloop() diff --git a/square_anson.py b/square_anson.py new file mode 100644 index 0000000..f287b82 --- /dev/null +++ b/square_anson.py @@ -0,0 +1,24 @@ +import turtle +a=turtle.Turtle('turtle') +a.fillcolor('black') +a.speed('fastest') +a.hideturtle() +for i in range(4): + a.forward(200) + a.right(90) +a.begin_fill() +for i in range(4): + a.forward(100) + a.right(90) +a.end_fill() +a.forward(100) +a.right(90) +a.forward(100) +a.begin_fill() +for i in range(4): + a.forward(100) + a.left(90) +a.end_fill() + + +turtle.done() diff --git a/square_charlie.py b/square_charlie.py new file mode 100644 index 0000000..d017e64 --- /dev/null +++ b/square_charlie.py @@ -0,0 +1,32 @@ +import turtle + + +stage = turtle.Screen() +t = turtle.Turtle() +stage.setup(1000, 800) + + +def draw_square(color, size=100): + t.begin_fill() + t.fillcolor(color) + for i in range(4): + t.forward(size) + t.left(90) + t.end_fill() + + +def draw_mosaic(): + draw_square('white') + t.left(180) + draw_square('white') + t.seth(90) + draw_square('black') + t.seth(270) + t.forward(100) + t.left(90) + draw_square('black') + t.hideturtle() + + +draw_mosaic() +stage.mainloop() diff --git a/story.txt b/story.txt new file mode 100644 index 0000000..5e7e595 --- /dev/null +++ b/story.txt @@ -0,0 +1,2 @@ +[W] 我睁开眼, 发现自己站在一个巨大的鼻孔里. +[Judy] 突然,鼻孔的主人打了一个喷嚏。 -- Gitee From ac3a48f12be56ed14ea107fae5d230da87cbf501 Mon Sep 17 00:00:00 2001 From: "Z.x" Date: Fri, 27 Dec 2019 16:31:43 +0800 Subject: [PATCH 05/10] iossssssssss --- names.txt | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 names.txt diff --git a/names.txt b/names.txt deleted file mode 100644 index bdc5c34..0000000 --- a/names.txt +++ /dev/null @@ -1,2 +0,0 @@ -# add your name as a separate line at the end of the file -zen \ No newline at end of file -- Gitee From 0b8554331c7aeadb460e5e10f6dd25ed4b566c70 Mon Sep 17 00:00:00 2001 From: "Z.x" Date: Fri, 27 Dec 2019 17:23:53 +0800 Subject: [PATCH 06/10] iossssssssss --- story.txt | 1 + week15/ex15_1 rainbow.py | 39 +++++++++++++++++++++++---------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/story.txt b/story.txt index 5e7e595..200328e 100644 --- a/story.txt +++ b/story.txt @@ -1,2 +1,3 @@ [W] 我睁开眼, 发现自己站在一个巨大的鼻孔里. [Judy] 突然,鼻孔的主人打了一个喷嚏。 +[z.X]i were fired out of a very yuck nose \ No newline at end of file diff --git a/week15/ex15_1 rainbow.py b/week15/ex15_1 rainbow.py index e3cce40..13195aa 100644 --- a/week15/ex15_1 rainbow.py +++ b/week15/ex15_1 rainbow.py @@ -1,17 +1,24 @@ -rainbow = [red, orange, yellow, green, blue, vilet] -for i in range(7): - print(rainbow[i]) - print('My favorite color is', rainbow[0]) +import turtle +import time -import turtle as t -import sleep from time -x = input('Input x coordinate: ') -y = input('Input y coordinate: ') -goto(x, y) -penup() -write("I'll give you some color see see. heiheihei~~~", 'center') -goto(-200,200) -write("Ready...Go!", font=50) -for i in range(7): - sleep(1) - bgcolor(rainbow[i]) \ No newline at end of file +try: + z = turtle.Turtle + screen = z.set_up(800, 500) + rainbow = ['red', 'orange', 'yellow', 'green', 'blue', 'violet'] +except Exception: + for i in range(5): + print(rainbow[i]) + print('My favorite color is', rainbow[0]) + x = input('Input x coordinate: ') + y = input('Input y coordinate: ') + z.goto(x, y) + z.pendown() + z.write("I'll give you some color see see. heiheihei~~~") + z.goto(-200, 200) + z.write("Ready...Go!", font=('Times')) + for i in range(7): + time.sleep(1) + z.bgcolor(rainbow[i]) + + +turtle.done() \ No newline at end of file -- Gitee From 0477cd5bffc94121d1158bbeeb00b0c3160e42c7 Mon Sep 17 00:00:00 2001 From: "Z.x" Date: Fri, 3 Jan 2020 16:09:42 +0800 Subject: [PATCH 07/10] iossssssssss --- week12/l.py | 268 ++++++++++++++++++++++++++++++++++++++++ week13/week13_demo.py | 281 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 530 insertions(+), 19 deletions(-) create mode 100644 week12/l.py diff --git a/week12/l.py b/week12/l.py new file mode 100644 index 0000000..88d4e16 --- /dev/null +++ b/week12/l.py @@ -0,0 +1,268 @@ +from turtle import Turtle +import turtle +from time import time, sleep +from random import randint +import glob + +GROUND_GIF_HEIGHT = 112 +BIRD_GIF_WIDTH = 36 +BIRD_GIF_HEIGHT = 24 +TUBE_GIF_WIDTH = 52 +TUBE_GIF_HEIGHT = 320 + +HORIZON_LINE = -200 + GROUND_GIF_HEIGHT/2 + BIRD_GIF_HEIGHT/2 +TUBE_DIST = 230 +BG_WIDTH = 286 +SPEED_X = 100 + +class Bird(Turtle): + BIRD_GIFS = ["bird0.gif", "bird1.gif", "bird2.gif"] + def __init__(self): + super().__init__('bird0.gif') + self.penup() + self.ready() + + def ready(self): + self.setpos(0, 0) + self.current_shape_id = 0 + self.hit_t, self.hit_y = 0, 0 + + def rect(self): + return [self.xcor()-BIRD_GIF_WIDTH/2, self.ycor()+BIRD_GIF_HEIGHT/2, + self.xcor()+BIRD_GIF_WIDTH/2, self.ycor()-BIRD_GIF_HEIGHT/2] + + def flap(self, t): + y = self.compute_y(t) + if y > HORIZON_LINE: + self.sety(y) + else: + self.sety(HORIZON_LINE) + self.current_shape_id = (self.current_shape_id + 1) % len(self.BIRD_GIFS) + self.shape(self.BIRD_GIFS[self.current_shape_id]) + + def hit(self, t): + self.hit_y = self.compute_y(t) + self.hit_t = t + + def compute_y(self, t): + return self.hit_y - 100 * (t - self.hit_t) * (t - self.hit_t - 1) + + +class Label(Turtle): + def __init__(self, x, y, number=0, text='', size=14, color="white"): + super().__init__('blank') + self.penup() + self.setpos(x, y) + self.color(color) + + self.message = text + self.font = ['Comic Sans MS', size, 'bold'] + self.number = number + + def __int__(self): + return self.number + + def set_number(self, other): + self.number = other + self.display() + + def count_down(self): + self.pencolor('yellow') + for i in range(3, 0, -1): + self.number = i + self.display() + sleep(1) + self.pencolor('white') + self.set_number(0) + + def display(self): + self.clear() + text = self.message + if '%' in text: + text = text % self.number + super().write(text, align='center', font=self.font) + + +class Terrain(Turtle): + def __init__(self): + super().__init__('ground.gif') + self.penup() + self.setpos(0, -200) + + +class TubePair(): + def __init__(self, x=0, y=10000): + self.x, self.y = x, y + self.tube_upper = turtle.Turtle('tube1.gif') + self.tube_lower = turtle.Turtle('tube2.gif') + + self.tube_upper.penup() + self.tube_lower.penup() + + self.goto(self.x, self.y) + + def goto(self, x, y): + self.x, self.y = x, y + self.tube_upper.goto(self.x, 250 + self.y) + self.tube_lower.goto(self.x, -150 + self.y) + + def setx(self, x): + self.goto(x, self.y) + + def sety(self, y): + self.goto(self.x, y) + + def bump(self, rect): + if self.y > 1000: + return False + # tube pictures are in size of 52 * 320 + if rect[2] >= self.x - TUBE_GIF_WIDTH/2 and \ + rect[0] <= self.x + TUBE_GIF_WIDTH/2: + # bird overlapped with the tube + return self.tube_lower.ycor() + TUBE_GIF_HEIGHT/2 >= rect[3] or \ + self.tube_upper.ycor() - TUBE_GIF_HEIGHT/2 <= rect[1] + + return False + + def ycor(self): + return self.x + + +# turtle.Screen is a single instance class that cannot be inherited +class Stage: + def __init__(self, screen): + self._stage = screen + self.curtain_call() + + def onupdate(self, timer=None): + self._stage.update() + self._stage.ontimer(timer, int(1000/SPEED_X)) + + def curtain_call(self): + self._stage.bgpic('bg2.gif') + + def reset(self): + self._stage.bgpic('bg1.gif') + + +class Game: + def __init__(self, screen): + # configure game settings + + self.state = "end" + self.score = Label(0, 130, text='%s', size=80) + self.best = Label(90, 180, text='BEST: %s') + self.prompt = Label(0, -215, text='Press Space to start...') + + self.stage = Stage(screen) + + self.bird = Bird() + self.tubes = [TubePair() for i in range(3)] + self.grounds = [Terrain() for i in range(3)] + + self.prompt.display() + self.stage.onupdate() + + def start(self): + self.state = 'alive' + self.best.clear() + + for i in range(3): + self.tubes[i].goto((i-1)*TUBE_DIST, 10000) + self.stage.onupdate() + + self.prompt.clear() + self.score.count_down() + self.start_time = time() + + self.bird.ready() + self.stage.reset() + + self.tube_base = 0 + self.tubes[2].sety(randint(-100,50)) + + self.refresh() + + def fly(self): + if self.state == 'end': + # start_game(game) + self.start() + return + + try: + self.bird.hit(self.tick()) + except: + pass + + def tick(self): + return time() - self.start_time + + def is_game_over(self): + if self.bird.ycor() <= HORIZON_LINE: + self.state = "dead" + return True + + # check if the bird bumps onto any tube + for tube in self.tubes: + if tube.bump(self.bird.rect()): + self.state = 'dead' + return True + return False + + def clean_up_screen(self): + # refresh best score + self.best.set_number(max(int(self.best), int(self.score))) + # change backdrop + self.stage.curtain_call() + self.prompt.display() + sleep(1) + self.state = 'end' + + def redraw(self): + t = self.tick() + x = int(t * SPEED_X) + + # flap the bing wings + self.bird.flap(t) + + # move the tubes + tube_base = -(x % TUBE_DIST) + # test whether a point gained + if self.tube_base < tube_base: + if self.tubes[2].ycor() < 1000: + self.score.set_number(int(self.score) + 1) + tube = self.tubes.pop(0) + tube.sety(randint(-100, 50)) + self.tubes.append(tube) + self.tube_base = tube_base + + for i in range(3): + self.tubes[i].setx(tube_base + (i - 1) * TUBE_DIST) + + # move the grounds + bg_base = - (x % BG_WIDTH) + for i in range(3): + self.grounds[i].setx(bg_base + BG_WIDTH * (i - 1)) + + # update the screen + self.stage.onupdate(self.refresh) + + def refresh(self): + if self.is_game_over(): + self.clean_up_screen() + else: + self.redraw() + + +stage = turtle.Screen() +stage.screensize(216, 500) +stage.setup(288, 512) +stage.tracer(False, 0) +for f in glob.glob("*.gif"): + stage.addshape(f) + +game = Game(stage) + +stage.onkey(game.fly, "space") +stage.listen() +stage.mainloop() \ No newline at end of file diff --git a/week13/week13_demo.py b/week13/week13_demo.py index 6e63488..88d4e16 100644 --- a/week13/week13_demo.py +++ b/week13/week13_demo.py @@ -1,25 +1,268 @@ -# 知识点:Fork+Pull工作流 -# -# Demo 13.1 -# ========== -# -# 这是个Demo任务,目的是演示Fork+Pull工作流。 -# -# ** 任务描述 ** -# -# 新建一个蓝底白字的窗口,在屏幕中心显示"DEMO"。 -# -# ** 提交 ** -# 1. 添加remote仓库Moleqode/practice,起名为upstream。 -# 2. 以Pull Request的方式提交到 upstream: exercise 分支。 - +from turtle import Turtle import turtle +from time import time, sleep +from random import randint +import glob + +GROUND_GIF_HEIGHT = 112 +BIRD_GIF_WIDTH = 36 +BIRD_GIF_HEIGHT = 24 +TUBE_GIF_WIDTH = 52 +TUBE_GIF_HEIGHT = 320 + +HORIZON_LINE = -200 + GROUND_GIF_HEIGHT/2 + BIRD_GIF_HEIGHT/2 +TUBE_DIST = 230 +BG_WIDTH = 286 +SPEED_X = 100 + +class Bird(Turtle): + BIRD_GIFS = ["bird0.gif", "bird1.gif", "bird2.gif"] + def __init__(self): + super().__init__('bird0.gif') + self.penup() + self.ready() + + def ready(self): + self.setpos(0, 0) + self.current_shape_id = 0 + self.hit_t, self.hit_y = 0, 0 + + def rect(self): + return [self.xcor()-BIRD_GIF_WIDTH/2, self.ycor()+BIRD_GIF_HEIGHT/2, + self.xcor()+BIRD_GIF_WIDTH/2, self.ycor()-BIRD_GIF_HEIGHT/2] + + def flap(self, t): + y = self.compute_y(t) + if y > HORIZON_LINE: + self.sety(y) + else: + self.sety(HORIZON_LINE) + self.current_shape_id = (self.current_shape_id + 1) % len(self.BIRD_GIFS) + self.shape(self.BIRD_GIFS[self.current_shape_id]) + + def hit(self, t): + self.hit_y = self.compute_y(t) + self.hit_t = t + + def compute_y(self, t): + return self.hit_y - 100 * (t - self.hit_t) * (t - self.hit_t - 1) + + +class Label(Turtle): + def __init__(self, x, y, number=0, text='', size=14, color="white"): + super().__init__('blank') + self.penup() + self.setpos(x, y) + self.color(color) + + self.message = text + self.font = ['Comic Sans MS', size, 'bold'] + self.number = number + + def __int__(self): + return self.number + + def set_number(self, other): + self.number = other + self.display() + + def count_down(self): + self.pencolor('yellow') + for i in range(3, 0, -1): + self.number = i + self.display() + sleep(1) + self.pencolor('white') + self.set_number(0) + + def display(self): + self.clear() + text = self.message + if '%' in text: + text = text % self.number + super().write(text, align='center', font=self.font) + + +class Terrain(Turtle): + def __init__(self): + super().__init__('ground.gif') + self.penup() + self.setpos(0, -200) + + +class TubePair(): + def __init__(self, x=0, y=10000): + self.x, self.y = x, y + self.tube_upper = turtle.Turtle('tube1.gif') + self.tube_lower = turtle.Turtle('tube2.gif') + + self.tube_upper.penup() + self.tube_lower.penup() + + self.goto(self.x, self.y) + + def goto(self, x, y): + self.x, self.y = x, y + self.tube_upper.goto(self.x, 250 + self.y) + self.tube_lower.goto(self.x, -150 + self.y) + + def setx(self, x): + self.goto(x, self.y) + + def sety(self, y): + self.goto(self.x, y) + + def bump(self, rect): + if self.y > 1000: + return False + # tube pictures are in size of 52 * 320 + if rect[2] >= self.x - TUBE_GIF_WIDTH/2 and \ + rect[0] <= self.x + TUBE_GIF_WIDTH/2: + # bird overlapped with the tube + return self.tube_lower.ycor() + TUBE_GIF_HEIGHT/2 >= rect[3] or \ + self.tube_upper.ycor() - TUBE_GIF_HEIGHT/2 <= rect[1] + + return False + + def ycor(self): + return self.x + + +# turtle.Screen is a single instance class that cannot be inherited +class Stage: + def __init__(self, screen): + self._stage = screen + self.curtain_call() + + def onupdate(self, timer=None): + self._stage.update() + self._stage.ontimer(timer, int(1000/SPEED_X)) + + def curtain_call(self): + self._stage.bgpic('bg2.gif') + + def reset(self): + self._stage.bgpic('bg1.gif') + + +class Game: + def __init__(self, screen): + # configure game settings + + self.state = "end" + self.score = Label(0, 130, text='%s', size=80) + self.best = Label(90, 180, text='BEST: %s') + self.prompt = Label(0, -215, text='Press Space to start...') + + self.stage = Stage(screen) + + self.bird = Bird() + self.tubes = [TubePair() for i in range(3)] + self.grounds = [Terrain() for i in range(3)] + + self.prompt.display() + self.stage.onupdate() + + def start(self): + self.state = 'alive' + self.best.clear() + + for i in range(3): + self.tubes[i].goto((i-1)*TUBE_DIST, 10000) + self.stage.onupdate() + + self.prompt.clear() + self.score.count_down() + self.start_time = time() + + self.bird.ready() + self.stage.reset() + + self.tube_base = 0 + self.tubes[2].sety(randint(-100,50)) + + self.refresh() + + def fly(self): + if self.state == 'end': + # start_game(game) + self.start() + return + + try: + self.bird.hit(self.tick()) + except: + pass + + def tick(self): + return time() - self.start_time + + def is_game_over(self): + if self.bird.ycor() <= HORIZON_LINE: + self.state = "dead" + return True + + # check if the bird bumps onto any tube + for tube in self.tubes: + if tube.bump(self.bird.rect()): + self.state = 'dead' + return True + return False + + def clean_up_screen(self): + # refresh best score + self.best.set_number(max(int(self.best), int(self.score))) + # change backdrop + self.stage.curtain_call() + self.prompt.display() + sleep(1) + self.state = 'end' + + def redraw(self): + t = self.tick() + x = int(t * SPEED_X) + + # flap the bing wings + self.bird.flap(t) + + # move the tubes + tube_base = -(x % TUBE_DIST) + # test whether a point gained + if self.tube_base < tube_base: + if self.tubes[2].ycor() < 1000: + self.score.set_number(int(self.score) + 1) + tube = self.tubes.pop(0) + tube.sety(randint(-100, 50)) + self.tubes.append(tube) + self.tube_base = tube_base + + for i in range(3): + self.tubes[i].setx(tube_base + (i - 1) * TUBE_DIST) + + # move the grounds + bg_base = - (x % BG_WIDTH) + for i in range(3): + self.grounds[i].setx(bg_base + BG_WIDTH * (i - 1)) + + # update the screen + self.stage.onupdate(self.refresh) + + def refresh(self): + if self.is_game_over(): + self.clean_up_screen() + else: + self.redraw() + -t = turtle.Turtle('blank') stage = turtle.Screen() +stage.screensize(216, 500) +stage.setup(288, 512) +stage.tracer(False, 0) +for f in glob.glob("*.gif"): + stage.addshape(f) -stage.bgcolor('navy') -t.pencolor('white') -t.write('DEMO', align='center', font=('Cambria', 100, 'bold')) +game = Game(stage) +stage.onkey(game.fly, "space") +stage.listen() stage.mainloop() \ No newline at end of file -- Gitee From 081b713dd480923c54702e455404c41f075679fe Mon Sep 17 00:00:00 2001 From: taszen Date: Fri, 3 Jan 2020 20:42:35 +0800 Subject: [PATCH 08/10] veld --- week12/The_noobs_brain | 1 + week12/eack.py | 29 ++++ week12/golden_spiral.py | 319 +++++++++++++++++++++++++++++++++++++++- week12/j.py | 27 ++++ 4 files changed, 374 insertions(+), 2 deletions(-) create mode 100644 week12/The_noobs_brain create mode 100644 week12/eack.py create mode 100644 week12/j.py diff --git a/week12/The_noobs_brain b/week12/The_noobs_brain new file mode 100644 index 0000000..20dd655 --- /dev/null +++ b/week12/The_noobs_brain @@ -0,0 +1 @@ +{'france': 'paris', 'china': "beijing", "uni.king.": 'london', 'usa': 'nyk'} \ No newline at end of file diff --git a/week12/eack.py b/week12/eack.py new file mode 100644 index 0000000..10c754f --- /dev/null +++ b/week12/eack.py @@ -0,0 +1,29 @@ +from tkinter import Tk, simpledialog, messagebox + + + +the_noobs_brain = {'france': 'paris', 'china': "beijing", "uni.king.": 'london', 'usa': 'nyk'} +def read_from_file(): + with open("The_noobs_brain") as file: + for line in file: + line = line.rstrip('/n') + coutry, city = line.split('/') + the_noobs_brain[coutry] = city + +def write_to_file(country_name, city_name): + read_from_file() + + +while True: + query_country = simpledialog.askstring('Country', 'type the name of the country:') + + + if query_country in the_noobs_brain: + result = the_noobs_brain[query_country] + + +print('welcome to ask the noob') +root = Tk +root.withdraw + +the_noobs_brain = {'france': 'paris', 'china': "beijing", "uni.king.": 'london', 'usa': 'nyk'} diff --git a/week12/golden_spiral.py b/week12/golden_spiral.py index f03c021..d474153 100644 --- a/week12/golden_spiral.py +++ b/week12/golden_spiral.py @@ -1,4 +1,5 @@ -import turtle +import turtle, time + # TODO: 创建 Fibonacci 数列 fib = [1, 1] @@ -31,4 +32,318 @@ for i in range(0, len(fib)): t.circle(radius, 90) t.end_fill() -stage.mainloop() \ No newline at end of file + +time.sleep(5) +t.clear() + +stage = turtle.Screen() +t = turtle.Turtle() +t.speed(10) +def draw_fish(r, color1, color2): + t.fillcolor(color1) + t.begin_fill() + + t.circle(r, extent=180) + t.circle(2*r, extent=180) + + # TODO: 倒着画一个半径为r的半圆 + # extent的值为正时,海龟逆时针画圆;而extent的值为负时,海龟顺时针画圆 + t.circle(r, extent=-180) + + t.end_fill() + + # TODO: 向上移动r*2/3的距离,然后面向右 + # 方法一:不使用坐标 - forward(), left() / right(), penup() / pendown() + t.penup() + t.right(90) + t.forward(r*2/3) + t.right(90) + t.pendown() + + # 方法二:引入坐标概念 - setpos(), setheading() + # 略 + + # TODO: 画一个半径为r/3的圆,填成白色 + t.fillcolor(color2) + t.begin_fill() + t.circle(r/3) + t.end_fill() + + # TODO: 向下移动r*2/3的距离,然后面向左 + t.penup() + t.right(90) + t.forward(r*2/3) + t.right(90) + t.pendown() + +draw_fish(100, 'black', 'white') +draw_fish(100, 'white', 'black') + +# TODO: 结束程序 +stage.mainloop() + +t.clear() +time.sleep(2) + +GROUND_GIF_HEIGHT = 112 +BIRD_GIF_WIDTH = 36 +BIRD_GIF_HEIGHT = 24 +TUBE_GIF_WIDTH = 52 +TUBE_GIF_HEIGHT = 320 + +HORIZON_LINE = -200 + GROUND_GIF_HEIGHT/2 + BIRD_GIF_HEIGHT/2 +TUBE_DIST = 230 +BG_WIDTH = 286 +SPEED_X = 100 + +class Bird(Turtle): + BIRD_GIFS = ["bird0.gif", "bird1.gif", "bird2.gif"] + def __init__(self): + super().__init__('bird0.gif') + self.penup() + self.ready() + + def ready(self): + self.setpos(0, 0) + self.current_shape_id = 0 + self.hit_t, self.hit_y = 0, 0 + + def rect(self): + return [self.xcor()-BIRD_GIF_WIDTH/2, self.ycor()+BIRD_GIF_HEIGHT/2, + self.xcor()+BIRD_GIF_WIDTH/2, self.ycor()-BIRD_GIF_HEIGHT/2] + + def flap(self, t): + y = self.compute_y(t) + if y > HORIZON_LINE: + self.sety(y) + else: + self.sety(HORIZON_LINE) + self.current_shape_id = (self.current_shape_id + 1) % len(self.BIRD_GIFS) + self.shape(self.BIRD_GIFS[self.current_shape_id]) + + def hit(self, t): + self.hit_y = self.compute_y(t) + self.hit_t = t + + def compute_y(self, t): + return self.hit_y - 100 * (t - self.hit_t) * (t - self.hit_t - 1) + + +class Label(Turtle): + def __init__(self, x, y, number=0, text='', size=14, color="white"): + super().__init__('blank') + self.penup() + self.setpos(x, y) + self.color(color) + + self.message = text + self.font = ['Comic Sans MS', size, 'bold'] + self.number = number + + def __int__(self): + return self.number + + def set_number(self, other): + self.number = other + self.display() + + def count_down(self): + self.pencolor('yellow') + for i in range(3, 0, -1): + self.number = i + self.display() + sleep(1) + self.pencolor('white') + self.set_number(0) + + def display(self): + self.clear() + text = self.message + if '%' in text: + text = text % self.number + super().write(text, align='center', font=self.font) + + +class Terrain(Turtle): + def __init__(self): + super().__init__('ground.gif') + self.penup() + self.setpos(0, -200) + + +class TubePair(): + def __init__(self, x=0, y=10000): + self.x, self.y = x, y + self.tube_upper = turtle.Turtle('tube1.gif') + self.tube_lower = turtle.Turtle('tube2.gif') + + self.tube_upper.penup() + self.tube_lower.penup() + + self.goto(self.x, self.y) + + def goto(self, x, y): + self.x, self.y = x, y + self.tube_upper.goto(self.x, 250 + self.y) + self.tube_lower.goto(self.x, -150 + self.y) + + def setx(self, x): + self.goto(x, self.y) + + def sety(self, y): + self.goto(self.x, y) + + def bump(self, rect): + if self.y > 1000: + return False + # tube pictures are in size of 52 * 320 + if rect[2] >= self.x - TUBE_GIF_WIDTH/2 and \ + rect[0] <= self.x + TUBE_GIF_WIDTH/2: + # bird overlapped with the tube + return self.tube_lower.ycor() + TUBE_GIF_HEIGHT/2 >= rect[3] or \ + self.tube_upper.ycor() - TUBE_GIF_HEIGHT/2 <= rect[1] + + return False + + def ycor(self): + return self.x + + +# turtle.Screen is a single instance class that cannot be inherited +class Stage: + def __init__(self, screen): + self._stage = screen + self.curtain_call() + + def onupdate(self, timer=None): + self._stage.update() + self._stage.ontimer(timer, int(1000/SPEED_X)) + + def curtain_call(self): + self._stage.bgpic('bg2.gif') + + def reset(self): + self._stage.bgpic('bg1.gif') + + +class Game: + def __init__(self, screen): + # configure game settings + + self.state = "end" + self.score = Label(0, 130, text='%s', size=80) + self.best = Label(90, 180, text='BEST: %s') + self.prompt = Label(0, -215, text='Press Space to start...') + + self.stage = Stage(screen) + + self.bird = Bird() + self.tubes = [TubePair() for i in range(3)] + self.grounds = [Terrain() for i in range(3)] + + self.prompt.display() + self.stage.onupdate() + + def start(self): + self.state = 'alive' + self.best.clear() + + for i in range(3): + self.tubes[i].goto((i-1)*TUBE_DIST, 10000) + self.stage.onupdate() + + self.prompt.clear() + self.score.count_down() + self.start_time = time() + + self.bird.ready() + self.stage.reset() + + self.tube_base = 0 + self.tubes[2].sety(randint(-100,50)) + + self.refresh() + + def fly(self): + if self.state == 'end': + # start_game(game) + self.start() + return + + try: + self.bird.hit(self.tick()) + except: + pass + + def tick(self): + return time() - self.start_time + + def is_game_over(self): + if self.bird.ycor() <= HORIZON_LINE: + self.state = "dead" + return True + + # check if the bird bumps onto any tube + for tube in self.tubes: + if tube.bump(self.bird.rect()): + self.state = 'dead' + return True + return False + + def clean_up_screen(self): + # refresh best score + self.best.set_number(max(int(self.best), int(self.score))) + # change backdrop + self.stage.curtain_call() + self.prompt.display() + sleep(1) + self.state = 'end' + + def redraw(self): + t = self.tick() + x = int(t * SPEED_X) + + # flap the bing wings + self.bird.flap(t) + + # move the tubes + tube_base = -(x % TUBE_DIST) + # test whether a point gained + if self.tube_base < tube_base: + if self.tubes[2].ycor() < 1000: + self.score.set_number(int(self.score) + 1) + tube = self.tubes.pop(0) + tube.sety(randint(-100, 50)) + self.tubes.append(tube) + self.tube_base = tube_base + + for i in range(3): + self.tubes[i].setx(tube_base + (i - 1) * TUBE_DIST) + + # move the grounds + bg_base = - (x % BG_WIDTH) + for i in range(3): + self.grounds[i].setx(bg_base + BG_WIDTH * (i - 1)) + + # update the screen + self.stage.onupdate(self.refresh) + + def refresh(self): + if self.is_game_over(): + self.clean_up_screen() + else: + self.redraw() + + +stage = turtle.Screen() +stage.screensize(216, 500) +stage.setup(288, 512) +stage.tracer(False, 0) +for f in glob.glob("*.gif"): + stage.addshape(f) + +game = Game(stage) + +stage.onkey(game.fly, "space") +stage.listen() +turtle.mainloop() diff --git a/week12/j.py b/week12/j.py new file mode 100644 index 0000000..62662df --- /dev/null +++ b/week12/j.py @@ -0,0 +1,27 @@ +import turtle as t +t.setup(500, 500) +t.speed(0) +def block(size, filled): + if filled == True: + t.begin_fill() + for c in range(4): + t.forward(size) + t.right(90) + if filled == True: + t.end_fill() + +size = 10 +num = 24 +filled = True +for c in range(1, num*num+1): + block(size, filled) + if c%num == 0: + t.sety(t.ycor()-size) + t.setx(0) + else: + t.forward(size) + if filled == True: + filled = False + else: + filled = True +t.done() \ No newline at end of file -- Gitee From b5994e795782d315d89e0fe8258b08baf54300dd Mon Sep 17 00:00:00 2001 From: taszen Date: Sat, 4 Jan 2020 09:53:47 +0800 Subject: [PATCH 09/10] more add stuhh --- week12/golden_spiral.py | 263 +--------------------------------------- week12/l.py | 125 ++++++++++++++++++- 2 files changed, 125 insertions(+), 263 deletions(-) diff --git a/week12/golden_spiral.py b/week12/golden_spiral.py index d474153..3e3c702 100644 --- a/week12/golden_spiral.py +++ b/week12/golden_spiral.py @@ -85,265 +85,4 @@ stage.mainloop() t.clear() time.sleep(2) -GROUND_GIF_HEIGHT = 112 -BIRD_GIF_WIDTH = 36 -BIRD_GIF_HEIGHT = 24 -TUBE_GIF_WIDTH = 52 -TUBE_GIF_HEIGHT = 320 - -HORIZON_LINE = -200 + GROUND_GIF_HEIGHT/2 + BIRD_GIF_HEIGHT/2 -TUBE_DIST = 230 -BG_WIDTH = 286 -SPEED_X = 100 - -class Bird(Turtle): - BIRD_GIFS = ["bird0.gif", "bird1.gif", "bird2.gif"] - def __init__(self): - super().__init__('bird0.gif') - self.penup() - self.ready() - - def ready(self): - self.setpos(0, 0) - self.current_shape_id = 0 - self.hit_t, self.hit_y = 0, 0 - - def rect(self): - return [self.xcor()-BIRD_GIF_WIDTH/2, self.ycor()+BIRD_GIF_HEIGHT/2, - self.xcor()+BIRD_GIF_WIDTH/2, self.ycor()-BIRD_GIF_HEIGHT/2] - - def flap(self, t): - y = self.compute_y(t) - if y > HORIZON_LINE: - self.sety(y) - else: - self.sety(HORIZON_LINE) - self.current_shape_id = (self.current_shape_id + 1) % len(self.BIRD_GIFS) - self.shape(self.BIRD_GIFS[self.current_shape_id]) - - def hit(self, t): - self.hit_y = self.compute_y(t) - self.hit_t = t - - def compute_y(self, t): - return self.hit_y - 100 * (t - self.hit_t) * (t - self.hit_t - 1) - - -class Label(Turtle): - def __init__(self, x, y, number=0, text='', size=14, color="white"): - super().__init__('blank') - self.penup() - self.setpos(x, y) - self.color(color) - - self.message = text - self.font = ['Comic Sans MS', size, 'bold'] - self.number = number - - def __int__(self): - return self.number - - def set_number(self, other): - self.number = other - self.display() - - def count_down(self): - self.pencolor('yellow') - for i in range(3, 0, -1): - self.number = i - self.display() - sleep(1) - self.pencolor('white') - self.set_number(0) - - def display(self): - self.clear() - text = self.message - if '%' in text: - text = text % self.number - super().write(text, align='center', font=self.font) - - -class Terrain(Turtle): - def __init__(self): - super().__init__('ground.gif') - self.penup() - self.setpos(0, -200) - - -class TubePair(): - def __init__(self, x=0, y=10000): - self.x, self.y = x, y - self.tube_upper = turtle.Turtle('tube1.gif') - self.tube_lower = turtle.Turtle('tube2.gif') - - self.tube_upper.penup() - self.tube_lower.penup() - - self.goto(self.x, self.y) - - def goto(self, x, y): - self.x, self.y = x, y - self.tube_upper.goto(self.x, 250 + self.y) - self.tube_lower.goto(self.x, -150 + self.y) - - def setx(self, x): - self.goto(x, self.y) - - def sety(self, y): - self.goto(self.x, y) - - def bump(self, rect): - if self.y > 1000: - return False - # tube pictures are in size of 52 * 320 - if rect[2] >= self.x - TUBE_GIF_WIDTH/2 and \ - rect[0] <= self.x + TUBE_GIF_WIDTH/2: - # bird overlapped with the tube - return self.tube_lower.ycor() + TUBE_GIF_HEIGHT/2 >= rect[3] or \ - self.tube_upper.ycor() - TUBE_GIF_HEIGHT/2 <= rect[1] - - return False - - def ycor(self): - return self.x - - -# turtle.Screen is a single instance class that cannot be inherited -class Stage: - def __init__(self, screen): - self._stage = screen - self.curtain_call() - - def onupdate(self, timer=None): - self._stage.update() - self._stage.ontimer(timer, int(1000/SPEED_X)) - - def curtain_call(self): - self._stage.bgpic('bg2.gif') - - def reset(self): - self._stage.bgpic('bg1.gif') - - -class Game: - def __init__(self, screen): - # configure game settings - - self.state = "end" - self.score = Label(0, 130, text='%s', size=80) - self.best = Label(90, 180, text='BEST: %s') - self.prompt = Label(0, -215, text='Press Space to start...') - - self.stage = Stage(screen) - - self.bird = Bird() - self.tubes = [TubePair() for i in range(3)] - self.grounds = [Terrain() for i in range(3)] - - self.prompt.display() - self.stage.onupdate() - - def start(self): - self.state = 'alive' - self.best.clear() - - for i in range(3): - self.tubes[i].goto((i-1)*TUBE_DIST, 10000) - self.stage.onupdate() - - self.prompt.clear() - self.score.count_down() - self.start_time = time() - - self.bird.ready() - self.stage.reset() - - self.tube_base = 0 - self.tubes[2].sety(randint(-100,50)) - - self.refresh() - - def fly(self): - if self.state == 'end': - # start_game(game) - self.start() - return - - try: - self.bird.hit(self.tick()) - except: - pass - - def tick(self): - return time() - self.start_time - - def is_game_over(self): - if self.bird.ycor() <= HORIZON_LINE: - self.state = "dead" - return True - - # check if the bird bumps onto any tube - for tube in self.tubes: - if tube.bump(self.bird.rect()): - self.state = 'dead' - return True - return False - - def clean_up_screen(self): - # refresh best score - self.best.set_number(max(int(self.best), int(self.score))) - # change backdrop - self.stage.curtain_call() - self.prompt.display() - sleep(1) - self.state = 'end' - - def redraw(self): - t = self.tick() - x = int(t * SPEED_X) - - # flap the bing wings - self.bird.flap(t) - - # move the tubes - tube_base = -(x % TUBE_DIST) - # test whether a point gained - if self.tube_base < tube_base: - if self.tubes[2].ycor() < 1000: - self.score.set_number(int(self.score) + 1) - tube = self.tubes.pop(0) - tube.sety(randint(-100, 50)) - self.tubes.append(tube) - self.tube_base = tube_base - - for i in range(3): - self.tubes[i].setx(tube_base + (i - 1) * TUBE_DIST) - - # move the grounds - bg_base = - (x % BG_WIDTH) - for i in range(3): - self.grounds[i].setx(bg_base + BG_WIDTH * (i - 1)) - - # update the screen - self.stage.onupdate(self.refresh) - - def refresh(self): - if self.is_game_over(): - self.clean_up_screen() - else: - self.redraw() - - -stage = turtle.Screen() -stage.screensize(216, 500) -stage.setup(288, 512) -stage.tracer(False, 0) -for f in glob.glob("*.gif"): - stage.addshape(f) - -game = Game(stage) - -stage.onkey(game.fly, "space") -stage.listen() -turtle.mainloop() +t.write('thanks for the show considers two stuff!') \ No newline at end of file diff --git a/week12/l.py b/week12/l.py index 88d4e16..aaaa426 100644 --- a/week12/l.py +++ b/week12/l.py @@ -265,4 +265,127 @@ game = Game(stage) stage.onkey(game.fly, "space") stage.listen() -stage.mainloop() \ No newline at end of file +stage.mainloop() + +class CurvesTurtle(Pen): + # example derived from + # Turtle Geometry: The Computer as a Medium for Exploring Mathematics + # by Harold Abelson and Andrea diSessa + # p. 96-98 + def hilbert(self, size, level, parity): + if level == 0: + return + # rotate and draw first subcurve with opposite parity to big curve + self.left(parity * 90) + self.hilbert(size, level - 1, -parity) + # interface to and draw second subcurve with same parity as big curve + self.forward(size) + self.right(parity * 90) + self.hilbert(size, level - 1, parity) + # third subcurve + self.forward(size) + self.hilbert(size, level - 1, parity) + # fourth subcurve + self.right(parity * 90) + self.forward(size) + self.hilbert(size, level - 1, -parity) + # a final turn is needed to make the turtle + # end up facing outward from the large square + self.left(parity * 90) + + # Visual Modeling with Logo: A Structural Approach to Seeing + # by James Clayson + # Koch curve, after Helge von Koch who introduced this geometric figure in 1904 + # p. 146 + def fractalgon(self, n, rad, lev, dir): + import math + + # if dir = 1 turn outward + # if dir = -1 turn inward + edge = 2 * rad * math.sin(math.pi / n) + self.pu() + self.fd(rad) + self.pd() + self.rt(180 - (90 * (n - 2) / n)) + for i in range(n): + self.fractal(edge, lev, dir) + self.rt(360 / n) + self.lt(180 - (90 * (n - 2) / n)) + self.pu() + self.bk(rad) + self.pd() + + # p. 146 + def fractal(self, dist, depth, dir): + if depth < 1: + self.fd(dist) + return + self.fractal(dist / 3, depth - 1, dir) + self.lt(60 * dir) + self.fractal(dist / 3, depth - 1, dir) + self.rt(120 * dir) + self.fractal(dist / 3, depth - 1, dir) + self.lt(60 * dir) + self.fractal(dist / 3, depth - 1, dir) + +def main(): + ft = CurvesTurtle() + + ft.reset() + ft.speed(0) + ft.ht() + ft.getscreen().tracer(1,0) + ft.pu() + + size = 6 + ft.setpos(-33*size, -32*size) + ft.pd() + + ta=clock() + ft.fillcolor("red") + ft.begin_fill() + ft.fd(size) + + ft.hilbert(size, 6, 1) + + # frame + ft.fd(size) + for i in range(3): + ft.lt(90) + ft.fd(size*(64+i%2)) + ft.pu() + for i in range(2): + ft.fd(size) + ft.rt(90) + ft.pd() + for i in range(4): + ft.fd(size*(66+i%2)) + ft.rt(90) + ft.end_fill() + tb=clock() + res = "Hilbert: %.2fsec. " % (tb-ta) + + sleep(3) + + ft.reset() + ft.speed(0) + ft.ht() + ft.getscreen().tracer(1,0) + + ta=clock() + ft.color("black", "blue") + ft.begin_fill() + ft.fractalgon(3, 250, 4, 1) + ft.end_fill() + ft.begin_fill() + ft.color("red") + ft.fractalgon(3, 200, 4, -1) + ft.end_fill() + tb=clock() + res += "Koch: %.2fsec." % (tb-ta) + return res + +if __name__ == '__main__': + msg = main() + print(msg) + mainloop() -- Gitee From d9a8ed657749334a08b4ae729e363eee42aeb2ef Mon Sep 17 00:00:00 2001 From: taszen Date: Mon, 6 Jan 2020 19:57:08 +0800 Subject: [PATCH 10/10] more add stuhh --- week12/The_noobs_brain | 6 +++- week12/golden_spiral.py | 2 +- week12/v.py | 70 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 week12/v.py diff --git a/week12/The_noobs_brain b/week12/The_noobs_brain index 20dd655..53fd860 100644 --- a/week12/The_noobs_brain +++ b/week12/The_noobs_brain @@ -1 +1,5 @@ -{'france': 'paris', 'china': "beijing", "uni.king.": 'london', 'usa': 'nyk'} \ No newline at end of file +'france': 'paris', +'china': "beijing", +"uni.king.": 'london', +'usa': 'nyk' +'egypt': 'cario' diff --git a/week12/golden_spiral.py b/week12/golden_spiral.py index 3e3c702..6c38c1f 100644 --- a/week12/golden_spiral.py +++ b/week12/golden_spiral.py @@ -1,6 +1,7 @@ import turtle, time +turtle.bgcolor('white') # TODO: 创建 Fibonacci 数列 fib = [1, 1] for i in range(2, 20): @@ -10,7 +11,6 @@ for i in range(2, 20): stage = turtle.Screen() stage.setup(1200, 800) stage.colormode(255) -stage.bgcolor('light gray') t = turtle.Turtle('triangle') t.speed(0) diff --git a/week12/v.py b/week12/v.py new file mode 100644 index 0000000..3a6f9ea --- /dev/null +++ b/week12/v.py @@ -0,0 +1,70 @@ +import turtle +turtle.Screen() +turtle.speed(0) +turtle.bgcolor('cyan') +turtle.pencolor("blue") +o = 78 +turtle.write('i am a yeti') +turtle.begin_fill() +turtle.fillcolor("blue") +for couter in range(30): + turtle.begin_fill() + turtle.forward(12) + turtle.right(40) + turtle.circle(o) + turtle.end_fill() + +turtle.clear() + + +# TODO: 初始化舞台和海龟 +import turtle +stage = turtle.Screen() +t = turtle.Turtle() +t.speed(10) +def draw_fish(r, color1, color2): + # TODO: 设置海龟的填充色 + t.fillcolor(color1) + t.begin_fill() + + # TODO: 画一个半径为r的半圆 + t.circle(r, extent=180) + + # TODO: 画一个半t.circle(r, extent=180)径为2*r的半圆 + t.circle(2*r, extent=180) + + # TODO: 倒着画一个半径为r的半圆 + # extent的值为正时,海龟逆时针画圆;而extent的值为负时,海龟顺时针画圆 + t.circle(r, extent=-180) + + t.end_fill() + + # TODO: 向上移动r*2/3的距离,然后面向右 + # 方法一:不使用坐标 - forward(), left() / right(), penup() / pendown() + t.penup() + t.right(90) + t.forward(r*2/3) + t.right(90) + t.pendown() + + # 方法二:引入坐标概念 - setpos(), setheading() + # 略 + + # TODO: 画一个半径为r/3的圆,填成白色 + t.fillcolor(color2) + t.begin_fill() + t.circle(r/3) + t.end_fill() + + # TODO: 向下移动r*2/3的距离,然后面向左 + t.penup() + t.right(90) + t.forward(r*2/3) + t.right(90) + t.pendown() + +draw_fish(100, 'black', 'white') +draw_fish(100, 'white', 'black') + +# TODO: 结束程序 +stage.mainloop() \ No newline at end of file -- Gitee