反弹吧,小球!

 1 ###########################################
 2 ###此代码源于《趣学Python编程》#反弹吧,小球!###
 3 ###########################################
 4 from tkinter import *
 5 import time
 6 import random
 7
 8 class Ball:
 9     def __init__(self,canvas,paddle,color):
10         self.canvas = canvas#创建画布
11         self.paddle=paddle#把球拍赋值给小球
12         self.id = canvas.create_oval(10,10,25,25,fill=color)#创建小球
13         self.canvas.move(self.id,245,100)#为小球创建初始位置
14         starts = [-3,-2,-1,1,2,3]#为小球x轴移动速度赋值
15         random.shuffle(starts)
16         self.x=starts[0]
17         self.y=-3
18         self.canvas_height = self.canvas.winfo_height()#获取画布高度
19         self.canvas_width = self.canvas.winfo_width()#获取画布宽度
20         self.hit_bottom = False#小球是否触底
21
22     def hit_paddle(self,pos):#pos为小球位置
23         paddle_pos = self.canvas.coords(self.paddle.id)#获取拍子位置
24         if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:#判定球在拍子中间,因为每次移动的像素比较多
25             if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:#如果只判定在不在拍子的边上,那样容易越过拍子
26                 return True
27         return False
28
29     def draw(self):
30         self.canvas.move(self.id,self.x,self.y)#小球移动步长
31         pos = self.canvas.coords(self.id)#获取小球的位置
32         #################判定小球是否越界
33         if pos[1]<0:#小球左碰壁
34             self.y=3
35         if pos[3]>=self.canvas_height:#小球碰到画布底就结束游戏
36             self.hit_bottom = True
37         if self.hit_paddle(pos) == True:#小球碰到拍子
38             self.y=-3
39         if pos[0]<=0:#小球碰顶
40             self.x = 3
41         if pos[2]>=self.canvas_width:#小球右碰壁
42             self.x=-3
43
44
45 class Paddle:
46     def __init__(self,canvas,color):
47         self.canvas = canvas
48         self.id = canvas.create_rectangle(0,0,100,10,fill=color)
49         self.canvas.move(self.id,200,300)
50         self.x=0
51         self.canvas_width = self.canvas.winfo_width()
52         self.canvas.bind_all(‘<KeyPress-Left>‘,self.turn_left)#响应左键
53         self.canvas.bind_all(‘<KeyPress-Right>‘,self.turn_right)#响应右键
54
55     def draw(self):
56         self.canvas.move(self.id,self.x,0)#移动拍子
57         pos = self.canvas.coords(self.id)#获取拍子位置
58         if pos[0]<=0:#拍子左碰壁就停
59             self.x = 0
60         elif pos[2]>=self.canvas_width:#拍子右碰壁就停
61             self.x=0
62
63     def turn_left(self,evt):#按响应键后的响应函数
64         self.x=-3.5
65
66     def turn_right(self,evt):
67         self.x=3.5
68
69 tk=Tk()#创建画布对象
70 tk.title(‘Game‘)#设置窗口标题
71 tk.resizable(0,0)#窗口不可调整大小
72 tk.wm_attributes("-topmost",1)#窗口总在最前
73 canvas=Canvas(tk,width=500,height=500,bd=0,highlightthickness=0)#后两项设置画布无边界,更美观
74 canvas.pack()#显示画布
75 tk.update()#刷新屏幕
76 paddle = Paddle(canvas,‘blue‘)#创建球拍
77 ball=Ball(canvas,paddle,‘green‘)#创建小球对象
79 while 1:
80     if ball.hit_bottom == False:#如果小球触底
81         ball.draw()#小球移动
82         paddle.draw()
83     tk.update_idletasks()#加速刷新画面
84     tk.update()#刷新画面
85     time.sleep(0.01)#延迟刷新
时间: 2024-10-11 19:29:18

反弹吧,小球!的相关文章

1009反弹的小球

小明开发了一款游戏叫做反弹的小球.让一个小球从高度为h米处自由落下,每次落地后反弹到原高度的2/3再落下,求它在第n次落地后,总共经过了多少米. 仅1行,两个正整数h和n. 输出第n次落地时经过的总路程(保留2位小数). 100 10 489.60 #include"stdio.h"int main(){ int h,n,i; float sum=0,l=0; scanf("%d%d",&h,&n); sum=l=h; if(n>1) for(

46.纯 CSS 创作一个在容器中反弹的小球

原文地址:https://segmentfault.com/a/1190000015221260 练习地址:https://scrimba.com/c/c3GEWmTb 感想: 原来animation 中可以有多个动画,用 ,  分开即可! HTML code: <div class="loader"></div> CSS code: html, body { margin: 0; padding: 0; } body{ height: 100vh; displ

js中小球碰壁反弹

一. 在指定容器内的碰壁反弹 <!DOCTYPE HTML> <html> <head> <title></title> <meta charset="UTF-8"/> <style type="text/css"> .ball{ height: 60px; width: 60px; background: blue; border-radius: 50%; position: ab

猫猫学IOS(十五)UI之曾经大热的打砖块小游戏

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44814523 原文地址:http://blog.csdn.net/u013357243?viewmode=contents !素材代码里面有我写的全部代码,注释齐全,方便学习 先看效果图 代码 //ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csd

猫学习IOS(十五)UI以前的热的打砖块游戏

猫分享.必须精品 材料代号地址:http://blog.csdn.net/u013357243/article/details/44814523 原文地址:viewmode=contents">http://blog.csdn.net/u013357243?viewmode=contents ! 素材代码里面有我写的所有代码,凝视齐全.方便学习 先看效果图 代码 //ps:新建iOS交流学习群:304570962 能够加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学

华为测试 求小球落地5次后所经历的路程和第5次反弹的高度

假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高? 输入起始高度,int型 分别输出第5次落地时,共经过多少米第5次反弹多高 [去掉小数末尾无效的0] 样例输入:1 样例输出:2.875 0.03125 #include<iostream> using namespace std; double high(double H,int N); double total(double H,int N); int main() {

(NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再来看一下小球与反弹棒碰撞发生的那点事 ;) 小球与反弹棒开始碰撞 同样我们在碰撞中也要调整小球的力矩,所以也要分开处理,首先是碰撞开始时的处理: -(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair ball:(CCNode *)

【华为OJ】【031-求小球落地5次后所经历的路程和第5次反弹的高度】

[华为OJ][算法总篇章] [华为OJ][031-求小球落地5次后所经历的路程和第5次反弹的高度] [工程下载] 题目描述 假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高? /** * 统计出第5次落地时,共经过多少米? * * @param high 球的起始高度 * @return 英文字母的个数 */ public static double getJourney(int high) { return 0; } /*

反弹小球和加速度传感器的使用

反弹小球和加速度传感器的使用(UIAccelerometer) 序言: 我们都见过人家做的小球运动,现在我们一起也做一个自己的小球运动. 今天的小球的效果是:程序运行后,将在画面中间,有一个小球,然后,你倾斜手机,小球将向着手机倾斜的方向飞移动,碰到四壁的时候将会反弹回来. 正文: 首先,我们要讲一下思路: 第一: 在UIViewController的子类里追加UIAccelerometerDelegate的协议,只有这样画面才能接收到速度的通知.接着我们创建小球的对象,和两个方向的加速度值: